Добавление жесткого диска в Linux

Как я могу добавить еще один жесткий диск?», «Что я должен делать, если коллеги принесли новый жесткий диск и я должен скопировать на него мои файлы?», «Когда я пользовался Windows, она могла видеть новый диск немедленно, а Linux такой сложный!» Это — наиболее общие вопросы и трудности новичков в Linux, перед которыми встала проблема добавления нового жесткого диска. Некоторые из них настолько привыкли к Windows, что просто не могут думать иначе, потэтому они иногда заходят в тупик с такими утверждениями как «Мне нужны программы fdisk и format, но в Линуксе их нет!»
В действительности, процедура добавления нового жесткого диска в Linux не так уж трудна и иногда вы можете потратить меньше времени на те же вещи, чем в Windows. Чтобы проиллюстрировать это, я начну с самого начала объяснять процедуру в деталях.
Прежде всего, я должен обратить внимание на то, что перед тем, как пользователь пытается подключить новый жесткий диск, ему следует изучить основы разделения на разделы и и файловых систем и в чем разница между Primary, Extended, и логическими разделами. Вам следует знать как добавить новый диск в компьютер физически (это обычно объясняется в документации к диску). Я предполагаю, что вы знаете эти основы, потому что в статье будет описано, как научить Linux работать с вашим новым диском.
Немного теории перед работой
Я собираюсь начать с теории процесса. Нет смысла погружаться глубоко в терминологию и принципы добавления новых устройств в UNIX системах -- слишком много различных версий UNIX, чтобы объединить все это. Мы рассмотрим только то, что касается Linux.
Все жесткие диски в операционной системе Linux имеют специальные имена, которые состоят из трех частей, две из которых перечислены ниже:
  • Два символа «hd» или «sd» для IDE и SCSI дисков
  • Один символ в диапазоне от «a» до «h» для дисков IDE, или в диапазоне от «a» до «p» для дисков SCSI.
(Я должен отметить, что для разных дистрибутивов Linux этот диапазон может различаться. Например, Red Hat Linux 7.2 использует диапазон от «a» до «l» для дисков IDE и от «a» до «az» (двухсимвольная комбинация!) для дисков SCSI).
Второй символ обозначает номер устройства. SCSI диски определяются по номерам, которые зависят от идентификатора устроства.? IDE схема несколько отличается от этого. Давайте взглянем на схему:
  • a и b — Master и Slave диски на первичном интерфейсе первого контроллера IDE 
  • c и d — Master и Slave диски на вторичном интерфейсе первого контроллера IDE 
  • e и f — Master и Slave диски на первичном интерфейсе второго контроллера IDE?
  • g и h — Master и Slave диски на вторичном интерфейсе второго контроллера IDE 
…и так далее.
Когда вы подсоединяете новый диск IDE к материнской плате, вам следует быть готовым запомнить как он подсоединен: какой интерфейс какого контроллера используется и как он назначен: master или slave.
Если вы не имеете материнской платы с IDE контроллерами, или конфигурация вашего сервера не имеет дополнительных контроллеров IDE, вам не следует использовать названия устройств, начинающихся с «hde
Третья часть имени это:
  • Номер раздела (партиции) — Это номер в диапазоне от 1 до 16 для жестких дисков IDE и от 1 до 15 для SCSI дисков.
Все партиции нумеруются следующим образом: 1-4 — primary и extended, 5-16 (15) — логические. Таким образом в одной системе мы не можем иметь более пяти первичных разделов и не более чем 11 логических разделов на одном физическом диске.
Если этот номер отсутствует, это означает что имя предствляет весь диск.
Чтобы получить список всех имен дисков в системе мы должны ввести следующую комаду как суперпользователь 'root' для дисков IDE:
# ls /dev/hd*

или

# ls /dev/sd*

для дисков SCSI. Если вы еще новичок во всем этом, помните, что эта команда не генерирует список подключенных дисков, а только выдает список возможных имен. С этим списком мы сможем определить когда и какой диск был подключен последним. Так что не? удивляйтесь, если получите очень большой список.
Пришло время небольшой практики. Все действия следует выполнять с привелегиями суперпользователя 'root'. Внимание: вам следует быть очень аккуратным, чтобы не повредить данные на вашеих дисках. Было бы неплохо произвести резервное копирование всего.
Давайте взглянем на некоторые типичные и обычные ситуации:
Добавление жесткого диска с данными
Например, ваши друзья дают вам жесткий диск, который форматирован в системе MS Windows или даже в Linux, и на нем есть некоторые важные файлы, которые вы хотите сохранить.
Прежде всего, конечно, мы должны физически подсоединить диск к вашему компьютеру, который, к примеру, будет мастером на втором интерфейсе. В этом случае имя диска в системе будет hdc. После запуска Linux, необходимо проверить, нашел ли Linux новое устройство. Для этого вы должны использовать следующую команду:
# ls /proc/ide
Результатом будет строка вида:
drivers  hda@ hdc@ ide0/ ide1/  piix    
Итак, мы нашли устройство hdc в нашем списке. Кажется все в порядке. Если вы не видите устройства в списке, вам следует проверить опять все шаги физического подключения вашего диска к компьютеру.
Теперь давайте взглянем какие разделы мы имеем доступными на этом диске:
# fdisk -l /dev/hdc



        Disk /dev/hdc: 64 heads, 63 sectors, 787 cylinders

        Units = cylinders of 4032 * 512 bytes



           Device Boot    Start       End Blocks   Id System

        /dev/hdc1   *         1 610 1229728+  83 Linux

        /dev/hdc2           611 787 356832    5 Extended

        /dev/hdc5           611 787 356800+   c Win95 FAT32  (LBA)
Легко понять, что в этом примере мы имеем три раздела на нашем жестком диске и два из них (первый и пятый) содержат некоторые данные. Также первый раздел—это первичный раздел Linux, а пятый—это логический диск Windows FAT32. Первый раздел является загрузочным (об этом говорит символ '*' в колоке Boot).
Теперь мы должны присоединить эти разделы к нашей файловой системе. Такая операция присоединения разделов (точнее говоря—присоединения файловых систем)в Linux называется монтированием (mounting) и выполняется с использованием команды 'mount'. Есть также обратная операция исвестная как отмонтирование (unmounting), которую мы можем выполнить командой 'umount'.
Когда вы монтируете раздел в Linux, вы должны связать его с директорией где-то в файловой системе. Это называется созданием точки монтирования. Обычно вы создаете точки монтирования для каждого раздела, например:
# mkdir /mnt/hdc1

        # mkdir /mnt/hdc5
Конечно, вы можете использовать уже существующие директории. Только помните пару правил:
  • В Linux обычно практикуется (но не обязательно) группировать все точки монтирования в одном месте, за исключениес монтирования системных разделов, (таких как /usr, /home, /var, и т.д.);
  • Директория, используемая под точку монтирования должна быть пустой, иначе ее содержание будет недоступно до тех пор, пока раздел не будет отмонтирован.
Теперь, давайте воспользуемся командой 'mount' и присоединим некотоые разделы:
# mount /dev/hdc1 /mnt/hdc1

        # mount /dev/hdc5 /mnt/hdc5
Здесь /dev/hdc1 и /dev/hdc5 названия устройств, а /mnt/hdc1 и /mnt/hdc5 точки монтирования. (Разумеется, что названия директорий для точек монтирования не должны быть точно похожи на названия разделов.
Теперь, когда мы перейдем в директорию /mnt/hdc1 или /mnt/hdc5, мы сможем увидеть содержимое разделов.
Если вы монтируете раздел, использующий иную файловую систему чем та, в которой вы работаете, необходимо помнить, что тип файловой системы указывается ключом -t в команде mount. Если вы уже присоединили раздел, не забудьте размонтировать его командой 'umount' перед использованием ключа -t для указания файловой системы «иностранной» партиции:
# umount /mnt/hdc5

        # mount -t vfat /dev/hdc5 /mnt/hdc5
Наиболее общие значения ключа -t :
  • msdos — FAT12 and FAT16
  • vfat — FAT16 с поддежкой длинных имен файлов, FAT32
  • ext2 — первичная файловая ситема Linux;
  • ext3 — совместимая с ext2 файловая система с поддержкой журналирования
  • reiserfs — новая файловая система Linux с поддержкой журналирования
Полный список поддерживаемых файловых систем (более 30) можно найти в man mount.
Некоторые читатели, после следования всем вышеперечисленным инструкциям, могут заметить, что вместо понятных символов в именах файловв разделах FAT будут только вопросительные знаки. Простой пример этого—русские символы в именах файлов в файловой системе FAT.
Это не значит, что Linux не поддерживает русский язык в именах файлов. В действительности, Linux поддерживает множество национальных кодовых страниц—мы должны только установить, какую из них мы должны использовать. Это делается с помощью ключа -o.
После отмонтирования раздела, используйте эти команды. Для раздела FAT созданного в Windows 98 и/или Windows NT:
# mount -t vfat -o iocharset=koi8-r,codepage=866 /dev/hdc5 /mnt/hdc5
Для разделамFAT, созданного в Windows ME и/или Windows 2000/XP:
# mount -t vfat -o iocharset=koi8-r,codepage=866,uni_xlate=1 /dev/hdc5 /mnt/hdc5
Разница здесь в дополнительном аргументе uni_xlate. Мы должны использовать этот аргумент, потому что Windows ME/2000/XP использут Unicode в именах файлов.
Итак, теперь мы сделали все чтобы установить русские имена файлов. Вы можете использовать переменную iocharset variable для своего собственного языка с этой командой.
Для разделов FAT также неплохо использовать аргументы uid и quiet. Это очень важно, потому что FAT не имеет никаких служб для ограничения доступа к файлам .
Аргумент uid=user определяет владельца файловой системы, кто имеет все права на запись и создание новых файлов на диске. Аргумент quiet прячет все сообщения об ошибках, которые появляются из-за невозможности изменить владельца файла и доступа к файлу при копировании его на раздел FAT.
Добавление нового (пустого) жесткого диска
Давайте попробуем добавить абсолютно новый жесткий диск в следующем примере.
Есть только одно различие от предыдущей методики, в том, что мы должны перед монтированием нового диска разделить его на разделы и отформатировать в той файловой системе, в которой мы хотим его использовать.
Для простоты предположим, что новый диск подключен в качестве мастера на вторичный интерфейс (hdc), также как и в первом примере.
Разделение на разделы производится с помощью утилиты 'fdisk':
# fdisk /dev/hdc



        Command  (m for help): _ 
Для короткой справки введем команду 'm':
        Command  (m for help): m



        Command action



           a toggle a bootable flag



           b edit bsd disklabel



           c toggle the dos compatibility flag



           d delete a partition



           l list known partition types



           m print this menu



           n add a new partition



           o create a new empty DOS partition table



           p print the partition table



           q quit without saving changes



           s create a new empty Sun disklabel



           t change a partition's system id



           u change display/entry units



           v verify the partition table



           w write table to disk and exit



           x extra functionality  (experts only)





        Command  (m for help):
Нам нужно знать лишь несколько необходимых команд: d,p,n,q,w. Не бойтесь использовать их—все ваши изменения будут сделаны только в памяти, а записаны будут после введения команды 'w'. Если мы сделаем ошибку, нам нужно только отменить все изменения командой 'q'.
Прежде всего давайте убедимся, что диск пустой:
        Command  (m for help): p





        Disk /dev/hdc: 64 heads, 63 sectors, 787 cylinders



        Units = cylinders of 4032 * 512 bytes





           Device Boot    Start       End Blocks   Id System





        Command  (m for help):
Часто продавцы компьютеров и комплектующих производять предварительное разбиение дисков на разделы. В этом случае мы можем использовать команду'd' (описанную ниже) для удаления всего, что нам не нужно.
Итак, давайте создадим новый раздел (командой 'n'), отвеча на все вопросы следующим образом:
        Command  (m for help): n



        Command action



           e extended



           p primary partition  (1-4)

Выбираем тип раздела --первичный (primary) или расширенный (extended)—введем P для первичного раздела.
Выбирая номер раздела в этом примере, мы назначим все дисковое пространство одному разделу. Так как это будет первый и единственный раздел, мы назначим ему номер 1:
        Partition number  (1-4): 1 
Когда выбирается значение первого цилиндра раздела, мы можем использовать значение по умолчанию, оно запишется? если просто нажать Enter:
        First cylinder  (1-787, default 1):



        Using default value 1 
Установка последнего цилиндра в этом разделе проста, так как мы заполняем разделом весь диск. Вновь, просто нажмем Enter для ввода значения по умолчанию (вместо номера цилиндра мы можем установить размер партиции в байтах, килобайтах или мегабайтах):
        Last cylinder or +size or +sizeM or +sizeK  (1-787, default 787):



        Using default value 787





        Command  (m for help):
Теперь раздел создан. Взглянем на таблицу разделов командой 'p':
        Command  (m for help): p





        Disk /dev/hdc: 64 heads, 63 sectors, 787 cylinders



        Units = cylinders of 4032 * 512 bytes





           Device Boot    Start       End Blocks   Id System



        /dev/hdc1             1 787 1586560+  83 Linux





        Command  (m for help):
Если нам по какой-либо причине не понравилось расположение или число разделов, мы можем удалить их командой 'd':
        Command  (m for help): d



        Partition number  (1-4): 1



        Command  (m for help):
Если вы хотите разделить диск на несколько партиций, вам необходимо повторить все эти операции несколько раз. Важно помнить одну вещь: при количестве разделов более четырех вы должны делать не первичные, а расширенные разделы на всем диске. Внутри этой партиции вы можете создавать столько логических частей, сколько вам нужно.
Запомните, пожалуйста, что логические разделы всегда нумеруются с 5 номера; не важно, сколько первичных разделов вы создали до этого (один, три или не одного).
Форматирование диска
Тип нового, только что созданного раздела на новом жестком диске всегда будет установлен 83 (Linux type). Хотя, утилита 'fdisk' поддерживает управление и создание большого числа типов. Мы можем получить их список при помощи команды 'l'. Мы также можем изменить тип раздела, использую команду 't'. Я абсолютно не рекомендую начинающим использовать эту возможность в системе Linux; лучше всего использовать только два типа—83 (Linux) и 82 (Linux swap).
После всех манипуляций с 'fdisk,' нам необходимо установить соответствующую конфигурацию. Нам следует выйти из 'fdisk' и сохранить все результаты коммандой 'w'.
Нам не нужно перезагружать наш компьютер. Иногда, говоря по правде,? 'fdisk' не может обновить таблицу разделов в памяти (например, в последних версиях Red Hat Linux), но вам будет сказано об этой проблеме. Если это произойдет, тогда вам придется перезагрузить компьютер.
Конечно, перед использованием раздела, вы должны отформатировать его. Помните, что до тех пор, пока мы работаем с разделами на жестком диске, мы имеем дело с устройством?/dev/hdc, но форматировать мы будем раздел /dev/hdc1.
Мы можем провести это форматирование при помощи утилиты 'mkfs'. Обычно, для разделов Linux мы используем одну из трех файловых систем: ext2, ext3, или reiserfs. Мы также имеем возможность использовать несколько других, типа ext, XFS, JFS. Но ext слишком старая, и больше не используется, а установка XFS и JFS требует глубокого знания настроек и конфигурирования операционной системы Linux.
Мы можем выполнить следующую команду для форматирования раздела в файловую систему ext2:
# mkfs -t ext2 /dev/hdc1
(ключ '-t' указывает на тип файловой системы). Для форматирования в ext3:
# mkfs -t ext2 -j /dev/hdc1
Это не опечатка, между прочим. Мы устанавливаем тип ext2. Но так как ext3 -- это «потомок» ext2, он имеет прямую и обратную совместимость со своим «родителем».
Для форматирования раздела в ReiserFS:
# mkfs -t reiserfs /dev/hdc1
Как только 'mkfs' закончит свою работу, наш раздел готов к монтированию.
Все методы, описанные выше имеют один недостаток: после каждого запуска системы, вы должны вручную монтировать разделы как суперпользователь root. Идеально было бы автоматизировать эту процедуру на вашем компьютере во время загрузки.
Это легко сделать. В директории конфигурации системы /etc есть файл под названием 'fstab'. Внутри него есть список подсоединенных разделов, который выглядить примерно так:
# cat /etc/fstab



 /dev/hda1 / reiserfs notail,usrquota,grpquota  1 1

 none /dev/pts  devpts mode=0620   0 0

 none /dev/shm  tmpfs defaults   0 0

 /dev/hdb /mnt/cdrom auto  user,iocharset=koi8-r,umask=0,exec,codepage=866,ro,noauto 0 0

 /dev/fd0 /mnt/floppy auto  user,iocharset=koi8-r,umask=0,sync,exec,codepage=866,noauto 0 0

 none /proc proc defaults   0 0

 /dev/hda5 swap swap defaults   0 0 
Каждая строка этого файла содержит описание каждого раздела для монтирования в шести колонках (полях):
  • Наименование устройства
  • Точка монтирования
  • Тип файловой системы
  • Дополнительные аргументы монтирования. Некоторые из них общие для всех, некоторые спцифичны для своей файловой системы
  • ID номер в запросе на проверку целостности файловой системы при загрузке. Такой запрос производится периодически. Если его значение 0, то проверка не проводится
  • Значение резервного копирования (0 или 1). Этот аргумент используется некоторыми утилитами резервного копирования.
Давайте вернемся немного назад в нашем примере. Раздел hdc1 был отформатирован ?в? ext3 и должен быть смонтирован в точку? /mnt/hdc1 во время загрузки. Для выполнения этого мы добавим следующую строку в конец файла /etc/fstab:
/dev/hdc1  /mnt/hdc1  ext3  default 2 1 
Это очень важно: не забудьте добавить «перевод строки» в конец файла /etc/fstab file. В противном случае последняя строка будет пригнорирована! (В действительности, это не так уж важно в последних версиях Linux. Но сделайте это своей привычкой, чтобы избежать проблем с компьютером с другим программным обеспечением Unix или старыми версиями Linux).
Теперь мы должны убедиться: все ли мы правильно сделали в fstab?
# mount /mnt/hdc1
Если мы не получили никаких сообщений об ошибке, это значит, что этот раздел будет автоматически монтироваться при каждой загрузке компьютера.
Запомните, между прочим, этот короткий вид команды 'mount'. Когда мы используем только один аргумент вся остальная необходимая информация будет взята из файла /etc/fstab.
В этой статье мы проверили несколько вариантов и правил для подключения нового жесткого диска в Linux. Заметьте, что мы не рассмотрели множество специализированных тонких настроек, которые могли бы сделать в более продвинутых операциях, такие как настройка системы на поддержку журналирования, определение прав доступа к смонтированным разделам и тому подобное. Надеюсь, что эта статья дасть вам более ясное понимание принципов передо добавлением дополнительного жесткого диска в систему Linux.