Разметка дисков в Linux. Программы и рекомендации

14 сентябрь, 2004 - 23:00Александр Куприн
Размещение файловой системы на диске можно разделить на два этапа -- создание разделов (разметка) и формирование на них файловой системы (ФС), т. е. форматирование. Разметка в среде Linux не требует даже наличия драйверов конкретной ФС, поскольку на диск записывается лишь информация о геометрии раздела: начальные и конечные сектор/трек/сторона, длина в секторах, а также однобайтовая сигнатура, указывающая тип файловой системы. Однако следует принять к сведению, что сигнатура используется только программами разметки дисков, программы форматирования ее не учитывают, тип ФС необходимо указывать им непосредственно:

mkfs.ext3 /dev/hda3

Поэтому возможны довольно курьезные случаи, когда раздел, скажем, с сигнатурой FAT32 (0x0C) отформатирован под Ext2 (код 0x83) и используется именно в таком качестве. Естественно, это может поставить некоторые программные средства в затруднительное положение. Кстати, под кодом 0x83 (Linux Native) скрывается сразу несколько типов файловых систем: Ext2, Ext3, ReiserFS, XFS, JFS, -- всех их объединяет то, что они разработаны (или портированы) именно для работы в среде Linux. А сделано так оттого, что размер сигнатуры (один байт) не позволяет присвоить уникальные идентификаторы всем известным типам ФС.

Разметка дисков в Linux. Программы и рекомендации
ASPDiskManager -- достаточно мощная программа разметки, но доступна она только на этапе установки ОС
Разметка дисков в Linux. Программы и рекомендации
Наиболее интересные возможности diskdrakeдоступны в режиме эксперта
Разметка дисков в Linux. Программы и рекомендации
partitionmorpher пока ничего особенного собой не представляет, но ведь лиха беда -- начало
Разметка дисков в Linux. Программы и рекомендации
Главное достоинство Disk Druid -- корректная работа с RAID и LVM
Разметка дисков в Linux. Программы и рекомендации
YaST -- наиболее функциональная программа разметки, а на недочеты интерфейса можно просто закрыть глаза
В Linux, как и в любой другой Unix-подобной системе, доступ к устройствам осуществляется с помощью файлов. В приведенном выше примере утилита mkfs.ext3, обращаясь к /dev/hda3, в действительности будет работать с разделом, информация о котором хранится в третьей записи таблицы разделов. Данный подход позволяет применять такое интересное решение, как loopback-устройство -- файл, внутри которого размещается файловая система. Он имитирует обычный раздел и может монтироваться в режиме чтения/записи.

Теперь несколько слов о нумерации разделов в Linux. В этой ОС разделам, информация о которых содержится в MBR, присваиваются номера от 1 до 4. Номера начиная с 5 используются для тех, что находятся внутри расширенного раздела. При этом между 1 и 5 вполне могут быть пропуски.

Прежде чем приступать к экспериментам с реальным накопителем, очень полезно сделать резервную копию всех ценных данных. Наиболее опасна, конечно же, операция по изменению размера существующих разделов. Хотя многие программы специально созданы для того, чтобы выполнять ее без потери информации, никаких гарантий никто, естественно, не дает. Скажем, поддержка NTFS в Linux все еще оставляет желать лучшего. С FAT и "родными" ФС Linux проблем вроде бы быть не должно, но и здесь имеются свои нюансы -- к примеру, XFS-разделы уменьшать невозможно в силу особенностей этой файловой системы.


Типы ФС и построение дерева ФС

Выбор типа файловой системы обычно основывается на двух критериях -- надежности и скорости доступа. Здесь мы попробуем дать краткую характеристику трем ФС, наиболее часто используемым в Linux.

Ext3 является крепким середнячком. По скорости работы с мелкими файлами она уступает ReiserFS, с большими -- XFS. Зато ее конек -- надежность. В частности, у Ext3 имеется режим полного журналирования (т. е. и метаданных, и данных), чем не могут похвастаться ни XFS, ни ReiserFS (см. man mount, опция data=journal). По умолчанию, впрочем, журналируются только операции с метаданными, что повышает скорость работы, но, естественно, снижает надежность.

ReiserFS специально разрабатывалась для эффективного хранения большого количества файлов малого размера. В некоторых случаях производительность ReiserFS на порядок выше, чем у Ext3. Благодаря специальным технологиям также удалось снять ряд искусственных ограничений на размещение элементов файловой системы. Например, в отдельном каталоге могут находиться 100 тыс. (и это, кстати, не предел) подкаталогов. Дисковое пространство, занимаемое файлом, точно соответствует его размеру (в Ext3 для хранения файла размером в несколько байтов отводится целый блок файловой системы -- 1, 2 или 4 KB). Максимальный размер файла в ReiserFS составляет 16 TB.

XFS -- это 64-битная файловая система, изначально созданная компанией SGI для работы с файлами больших размеров. Она обладает многими полезными особенностями -- списками контроля доступа (ACL), которые для Ext3 и ResierFS обеспечиваются только с помощью заплаток, масштабируемостью и поддержкой расширенных атрибутов. Из недостатков XFS следует отметить невозможность уменьшения существующего раздела.

Даже исходя из такой неполной информации уже можно сформулировать некоторые общие рекомендации по выбору файловой системы.

Ext3 вполне годится для домашних ПК, не подключенных к ИБП. Как правило, скорость дисковой подсистемы в данном случае -- не самый критичный параметр, а надежность здесь будет на высоте. При необходимости работать с файлами размером более 2 GB можно создать отдельный раздел ReiserFS или XFS. Для увеличения надежности можете посчитать контрольные суммы таких файлов, к примеру, с помощью утилиты md5sum, и проверять их после сбоев. Существуют даже специальные утилиты, способные автоматизировать эти операции (в частности, osec или tripwire).

Наличие ИБП позволяет не переживать по поводу перебоев электропитания и использовать ReiserFS.

Зачастую удобно комбинировать типы файловых систем. Например, для хранения кэша proxy-сервера лучше отвести отдельный ReiserFS-раздел. То же самое рекомендуется делать и для /tmp, так как большинство временных файлов имеют небольшие размеры. Подобные решения более характерны для серверов, поскольку на домашнем и типичном офисном компьютерах вполне можно обойтись двумя разделами -- корневым и swap.

Особое внимание стоит обращать на каталог /var. Здесь, как правило, размещаются базы данных SQL-серверов, почтовых серверов и других служб. Поэтому структуру каталога /var нужно спланировать особенно тщательно. В частности, для активно используемых сетевых сервисов рекомендуется создавать собственные разделы, и еще один -- /var/log -- для хранения журналов. В самом общем случае стоит подумать об отдельных разделах для следующих каталогов: /, /boot, /home, /tmp, /usr, /var, /var/cache, /var/log,
/var/spool/mail, /var/cvs, /var/spool/news, /var/www, /var/ftp.

Если заранее нельзя спрогнозировать точные размеры разделов, то рекомендуется использовать Linux Volume Manager (LVM). Эта система управления дисковым пространством абстрагируется от физических устройств, обладает хорошей масштабируемостью и уменьшает общую сложность системы. У логических томов, созданных с помощью LVM, легко изменяется размер, а их названия могут нести большую смысловую нагрузку, чем традиционные /dev/hda, /dev/sda и т. д.


Текстовые утилиты

Утилиты, поддерживающие работу в текстовом режиме, в первую очередь интересны сисадминам -- их использование позволяет не устанавливать в системе набор графических программ и библиотек, а также дает возможность применять скрипты и выполнять удаленное администрирование по медленным каналам.


fdisk, cfdisk, sfdisk

Патриархи среди утилит разметки дисков. Имеют только текстовый интерфейс, наиболее удобным располагает cfdisk -- именно она используется в текстовых инсталляторах Debian GNU/Linux и Slackware Linux. Однако у fdisk и sfdisk есть одна важная особенность -- они умеют выводить список всех существующих разделов в неинтерактивном режиме:

fdisk -l

Поэтому наиболее универсальной является все же fdisk: cfdisk она превосходит по функциональности, sfdisk -- по легкости освоения. Хотя sfdisk хороша в том случае, когда необходимо создавать разделы в неинтерактивном режиме. Примерно так:

sfdisk -d /dev/hda > hda.out
sfdisk /dev/hdb < hda.out


parted

Особняком среди текстовых утилит стоит parted. Фактически она представляет собой консоль -- мини-оболочку, распознающую всего 16 команд, с помощью которых, однако, можно не только создавать новые разделы, но и изменять геометрию существующих:

resize 1 0 500

Правда, эта функция доступна только для FAT. Зато parted позволяет также форматировать разделы под указанную ФС, в настоящий момент поддерживаются Ext2, FAT16/FAT32 и linux-swap (www.gnu.org/software/parted):

mkpartfs primary ext2 0 1000

Кроме того, имеются команды для копирования и перемещения разделов -- однако только в пределах одного жесткого диска. Поскольку данные операции выполняются посекторно, они доступны для любых файловых систем:

move 1 10000 15000

При этом даже необязательно указывать точный размер раздела, parted автоматически вычислит его.

Еще одна интересная команда -- rescue. Она поможет восстановить структуру накопителя, если таблица разделов по какой-то причине оказалась разрушена. Достаточно лишь указать дисковое пространство (лучше с запасом), на котором находился раздел, и утилита попытается отыскать его сигнатуру:

rescue 0 1200

Дополнительное удобство parted состоит в возможности просматривать историю введенных команд и в некоторых случаях не набирать их повторно вручную.


partitionmorpher

Эта графическая утилита базируется на GTK2 и использует библиотеку libparted из проекта parted (соответственно и предоставляет те же возможности). В настоящий момент partitionmorpher все еще находится в состоянии альфа-тестирования, поэтому использовать ее на ответственных задачах не рекомендуется.


qtparted

Эта утилита, в отличие от предыдущей, основана на QT. Текущая версия 0.4.4 является нестабильной. Тем не менее с помощью qtparted можно создавать разделы FAT16/FAT32, ReiserFS, JFS, Ext2/Ext3, XFS и NTFS. Для последней необходимо наличие пакета linux-ntfs, однако, как уже упоминалось, более или менее сложные манипуляции с разделами NFTS в среде Linux связаны с риском потери данных.

Также qtparted позволяет изменять размеры разделов с файловыми системами FAT16/FAT32, NTFS и ReiserFS, для которой требуется пакет progsreiserfs. Доступность данной операции просто определяется по наличию соответствующего пункта в контекстном меню.


Визитные карточки дистрибутивов

Некоторые программы разработаны сборщиками наиболее известных дистрибутивов Linux и обычно присутствуют только в их продуктах.


diskdrake

Утилита создана Man-drakeSoft S.A. и входит в пакет drakxtools (также присутствует в дистрибутивах ALT Linux). Интерфейс ее прост и понятен: вверху располагаются разделы, слева кнопки, обеспечивающие доступ к различным функциям. Если в системе присутствуют несколько дисков, то для каждого из них создается отдельная закладка. При работе с LVM необходимо самостоятельно создать LVM-том, после чего появится соответствующая закладка. Это же относится и к RAID.

Чтобы изменять размеры существующих разделов, необходимо переключиться в режим эксперта. Поддержка NTFS обеспечивается пакетом ntfs-progs, соответственно на этапе установки ОС она недоступна. По заявлению разработчиков, в настоящий момент ntfsresize является стабильной, как и большая часть кода в проекте. С остальными типами ФС проблем не наблюдается.


Disk Druid

Утилита входит в состав Anaconda -- инсталляционной программы, разработанной компанией Red Hat. Она используется в Fedora Core, а по заявлениям представителей Debian GNU/Linux Project, на базе Anaconda разрабатывается инсталлятор для новых версий их дистрибутива.

Кроме традиционных операций, Disk Druid может создавать программные RAID-массивы, а также работать с LVM-разделами. Однако возможность изменять размеры существующих разделов в программе отсутствует, для этого необходимо применять другие инструменты.


YaST

Этот набор утилит, разработанный SuSE Team, предназначен для общей настройки системы, однако одной из его возможностей является именно редактирование структуры диска. Более того, по нашему мнению, YaST удобнее и функциональнее большинства аналогичных программ. Он работает с LVM, позволяет создавать программные RAID-массивы и изменять размеры разделов (FAT16/FAT32, Ext2, Ext3, ReiserFS и NTFS). При этом YaST представлен в двух вариантах -- графическом и текстовом, причем последний отнюдь не уступает по удобству своему GUI-собрату. Кроме того, имеется возможность создавать зашифрованные разделы и криптофайлы, являющиеся, по сути, loopback-устройствами. Это позволяет сразу настроить некоторые разделы для хранения конфиденциальной информации.

Пожалуй, единственным заметным недостатком YaST является не слишком качественная локализация -- судя по всему, Novell торопилась выпустить релиз SuSE 9.1.


ASPDiskManager

Дистрибутив ASPLinux изначально позиционировался как стопроцентно Red Hat-совместимый, и тем удивительней, что в его составе используется не Anaconda, а оригинальный инсталлятор, включающий ASPDiskManager. Данная утилита умеет изменять размеры разделов FAT16/FAT32, Ext2/Ext3, ReiserFS, но не NTFS. Возможность создания LVM-разделов на этапе установки отсутствует, но поддерживаются программные RAID-массивы. Из интересных решений следует отметить наличие функций копирования и перемещения разделов. Однако нужно иметь в виду, что ASPDiskManager доступен только на этапе установки ОС.


И другие...

В дополнение к вышесказанному -- несколько слов о программах, которые не имеют непосредственного отношения к процессу разметки дисков, но решают вспомогательные задачи.


partimage/partimaged

Обе программы предназначены для создания точных образов разделов. Формально это можно сделать даже с помощью "штатных" средств ОС, например команды dd:

dd if=/dev/hda1 | bzip > hda1.bz2

Но у такого подхода есть несколько недостатков. Первый и главный -- при этом архивируются не только реальные данные, но и "мусор", содержащийся в незанятых секторах. Соответственно на выполнение данной операции потребуется больше времени, и результирующий файл также будет больше. Кроме того, при использовании Ext2/Ext3 необходимо самостоятельно позаботиться о разбиении образа на фрагменты допустимых размеров -- скажем, так:

dd if=/dev/hda1 | bzip | split
--bytes=671088640

Есть и другие неудобства, поэтому лучше использовать специализированные инструменты. Например, partimage "понимает" FAT16/FAT32, Ext2/Ext3, XFS, ReiserFS, JFS, HPFS (поддержка NTFS, UFS и HFS находится в состоянии бета-тестирования) и благодаря этому сохраняет и восстанавливает только блоки данных. Кроме того, программа может подключаться к удаленному серверу, где работает демон partimaged, для централизованного хранения и развертывания образов.


testdisk

Утилита позволяет в полуавтоматическом режиме восстановить случайно удаленные разделы. Она сканирует дисковое пространство в поисках первого сектора раздела (который в двух последних байтах содержит сигнатуру 0x55 0xAA), а учитывая, что при создании раздела он выравнивается именно на длину трека, эта задача упрощается и процесс ускоряется. Результатом работы testdisk будет таблица, описывающая структуры, которые могут оказаться искомым разделом. Выбор остается за самим пользователем, а чтобы упростить его, можно воспользоваться функцией просмотра списков файлов, доступной по клавише <P>.

После восстановления раздела всегда запускайте проверку целостности ФС с помощью соответствующей ее типу утилиты:

fsck.ext2 /dev/hdb1
reiserfsck /dev/hdb3
...


Заключение

Таким образом, никаких особых затруднений с разметкой дисков в Linux не наблюдается. К тому же в большинстве случаев все необходимые инструменты будут сразу присутствовать в системе -- останется лишь разобраться с их использованием. Единственная явная проблема -- недостаточно надежная работа c NTFS-разделами. Причем гарантированно решить ее в рамках некоммерческих проектов, вероятно, не удастся -- в силу закрытости спецификации NTFS. Правда, всегда можно надеяться на какой-то прорыв, как, скажем, произошло в проекте Captive, где непосредственная работа с NTFS реализуется благодаря использованию "родных" двоичных драйверов Windows (подобный метод применялся ранее в популярном продукте NTFSDOS).