IgorKa - Информационный ресурс. Утилиты разметки. fdisk

Алексей Федорчук

Начнёем с fdisk: именно им больше всего пугали в старые времена начинающих пользователей Linux, предлагая дружественные альтернативы типа Disk Druid. Однако при ближайшем рассмотрении выясняется, что ничего устрашающего в ней нет.

Происхождение fdisk теряется во мраке веков, уходя во времена первых UNIX для PC-архитектуры — насколько я понимаю, раньше необходимости в ней не было, а главными инструментами дисковой разметки были утилиты типа disklabel или bsdlabel . Мне не удалось также выяснить, когда эта утилита появилась в Linux. Могу только предполагать, что на самых ранних стадиях создания утилит обрамления для его ядра — т.н. linux-utils. Ныне fdisk входит в состав пакета linux-utils-ng .

Для начала следует запомнить, что запуск команды fdisk в любом качестве, даже просто для получения информации о диске, возможно только с правами суперпользователя, каковые и надо обеспечить себе любым образом, например, через su или sudo .

Если команду fdisk дать без опций и аргументов, она выведет краткую справку об её использовании:

# fdisk Usage: fdisk [-l] [-b SSZ] [-u] device E.g.: fdisk /dev/hda (for the first IDE disk) or: fdisk /dev/sdc (for the third SCSI disk) or: fdisk /dev/eda (for the first PS/2 ESDI drive) or: fdisk /dev/rd/c0d0 or: fdisk /dev/ida/c0d0 (for RAID devices)

В качестве аргумента команды фигурирует имя файла устройства — физического диска целиком. Поскольку в современных версиях ядра Linux все диски, вне зависимости от их интерфейсов (PATA, SATA, SCSI, SAS, USB) определяются единой подсистемой ATA-SCSI, на самом деле имена эти будут иметь вид /dev/sda , /dev/sdb и так далее.

Смысл опций команды fdisk следующий:

  • l не предписывает выполнения каких-либо действий, а лишь выводит информацию о диске и его разделах, если таковые имеются;
  • b задаёт размер блока — единицы измерения дискового пространства; по умолчанию, без указание этой опции, он равен физическому блоку (512 байт), прочие возможные значения кратны его размеру — 1024, 2048 или 4096 байт;
  • u запускает fdisk , являясь опцией по умолчанию.

Перво-наперво посмотрим на информационную функцию fdisk , для чего запустим её следующим образом:

# fdisk -l /dev/sd?

Ответом будет вывод примерно такого вида:

Диск /dev/sda: 160.0 ГБ, 160041885696 байт 255 heads, 63 sectors/track, 19457 cylinders Units = цилиндры of 16065 * 512 = 8225280 bytes Disk identifier: 0x0008e008 Устр-во Загр Начало Конец Блоки Id Система /dev/sda1 1 14 112423+ 83 Linux /dev/sda2 15 15680 125837145 5 Расширенный /dev/sda5 15 2626 20980858+ 83 Linux /dev/sda6 2627 4585 15735636 83 Linux

Если опустить аргумент команды, то аналогичные сведения будут выведены для всех физических дисков данной машины: сначала — общая информация о диске, включающая его размер, число головок, секторов и цилиндров, а затем для каждого существующего на диске раздела указываются его первый и последний цилиндры (символом + маркируются разделы, не занимающие последний цилиндр полностью), размер в блоках (физических или заданных опцией b), идентификатор типа файловой системы и его название.

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

# fdisk /dev/sdb

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

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

Так, команда p выведет текущий список дисковых разделов с указанием их типа и размера. Далее, разделы можно создавать (командой n ) или удалять (командой d ), однако до команды записи изменений (w ) никаких необратимых действий, могущих разрушить ранее существовавшую разметку (и, соответственно, файловые системы и данные, к ней привязанные), не последует: неудачно созданные разделы можно удалить и на их месте создать новые. И в любой момент командой q можно без всяких последствий выйти из программы.

При создании раздела средствами fdisk сначала определяется, будет он первичным (primary) или расширенным (extended). Рассмотрим сначала первый случай. При нем далее просто указывается номер раздела (от 1 до 4). В этих пределах номер может быть любым — можно сначала создать раздел 2, а потом 1, или даже весь диск отвести под раздел 4. Номер раздела останется на века: именно он будет идентифицировать файл устройства, соответствующий созданному разделу (например, /dev/sda2 , или /dev/sdb1).

Далее задается начальный цилиндр создаваемого раздела (по умолчанию — первый свободный, для пустого диска — просто первый). Однако никто не мешает указать любой другой цилиндр в качестве стартового (на неразбитом пространстве, разумеется). А потом — конечный цилиндр (по умолчанию — последний физический на неразбитом дисковом пространстве), или просто размер раздела в мегабайтах, например, +300M (и +, и M — обязательны, иначе объем диска окажется весьма странным). При задании размера в единицах, отличных от цилиндров, он всегда будет округляться (по обычным правилам округления) до ближайшего числа, кратного целому количеству последних. Так что не следует удивляться, если вместо искомого раздела в 20 Мбайт возникнет 16-мегабайтный, а вместо 22-мегабайтного — раздел в 24 Мбайт.

При создании расширенного раздела сначала все происходит точно также — задание номера (очевидно, что в том же диапазоне 1-4), указание начального цилиндра и конечного (или — объема в мегабайтах). Однако это еще полдела, нужно поделить расширенный раздел на разделы логические. И потому при следующей команде на создание раздела нам будет предложен уже выбор между первичным (если число последних еще не исчерпано) и логическим (ведь второй extended-раздел средствами fdisk создать нельзя):

Command (m for help): n Command action l logical (5 or over) p primary partition (1-4)

Для каждого вновь создаваемого средствами fdisk раздела (первичного или логического) по умолчанию устанавливается идентификатор типа файловой системы Linux native (83 в шестнадцатеричном исчислении). Расширенный же раздел также автоматически получает правильный идентификатор своего типа — 5. Однако типы эти не есть нечто неизменное. Более того, по крайней мере в одном случае, при создании раздела подкачки, изменение типа раздела — необходимость. Это потребуется также и для использования таких технологий, как Software RAID или LVM, о которых будет говориться позднее.

Делается это командой t , после чего запрашивается номер раздела, тип которого должен быть изменен, а затем — идентификатор желаемого типа. Полный список поддерживаемых типов файловых систем (и их идентификаторов) можно вывести командой l . Напомню, что идентификатор типа файловой системы раздела — отнюдь не файловая система, которая на нем размещается. И на разделе Linux native, как это подчеркивает название, можно создать любую файловую систему из числа тех, которые поддерживаются Linux в качестве родных (ext2/ext3, ext4, XFS, ReiserFS, JFS, btrfs, NILFS2).

Теоретически fdisk позволяет присвоить созданному разделу идентификатор типа почти любой из мыслимых файловых систем — от FAT12 до Free-, Open- и NetBSD. Однако сами по себе файловые системы средствами fdisk не создаются, и потому для разделов чуждого типа в дальнейшем потребуется их форматирование (в терминах DOS): либо в родной среде (например, DOS-командой FORMAT для FAT-раздела), либо специальными командами типа mkfs, о которых будет говориться в следующей главе.

Сказанного, надеюсь, достаточно, чтобы осознать великое достоинство fdisk — исключительную гибкость: можно определить раздел строго определённого размера и точно позиционировать его на диске. Или зарезервировать в любом месте накопителя неразбитое пространство, с двух сторон окружённое созданными разделами.

Writing /var/www/wiki.dieg/wikionline/darkfiredatawiki/cache/c/c897522fae1a58f8c112fddb1c80f754.xhtml failed

Команды fdisk

fdisk - общее название системных утилит (sfdisk) для управления разделами жёсткого диска. Широко распространены и имеются практически в любой операционной системе, но работают по-разному. Используют текстовый интерфейс пользователя. В системе Linux можно запускать fdisk в интерактивном или командном режиме. При запуске нужно обязательно указывать устройство диска, например: /dev/hdb, /dev/sda и т. п. В отдельных случаях (при изменении раздела в командном режиме), потребуется указать раздел диска (например /dev/hda1).

# fdisk -l Диск /dev/sda: 160.0 ГБ, 160041885696 байт 255 heads, 63 sectors/track, 19457 cylinders Units = цилиндры of 16065 * 512 = 8225280 bytes Disk identifier: 0xea89ea89 Устр-во Загр Начало Конец Блоки Id Система /dev/sda1 * 1 1216 9767488+ 83 Linux /dev/sda2 1217 19457 146520832+ 5 Расширенный /dev/sda5 1217 1459 1951866 82 Linux своп / Solaris /dev/sda6 1460 2675 9767488+ 83 Linux /dev/sda7 2676 3891 9767488+ 83 Linux /dev/sda8 3892 19457 125033863+ 83 Linux Диск /dev/sdb: 4026 МБ, 4026531840 байт 136 heads, 30 sectors/track, 1927 cylinders Units = цилиндры of 4080 * 512 = 2088960 bytes Disk identifier: 0x00081047 Устр-во Загр Начало Конец Блоки Id Система /dev/sdb1 * 1 1928 3932159+ b W95 FAT32

Использование fdisk

Обычно разбиение диска производится с помощью программы fdisk для Linux , которая запускается на одном из этапов установки. Кроме этого, в современных дистрибутивах, пользователь может столкнуться со специальными мастерами(wizard), являющимися надстройками fdisk, и позволяющими графически представлять разбиение диска на разделы. Программа fdisk имеет интерфейс командной строки.

После загрузки средств инсталляции выполните команду fdisk, напечатав

Fdisk

где имя устройства в Linux, которому вы хотите выделить раздел. Например, если вы хотите выполнить fdisk для первого IDE-диска, используйте команду fdisk /dev/hda. /dev/hda (первый IDE-диск) берется по умолчанию, если вы не описали другого.

Для современных HDD может понадобиться запуск с ключом -u, например fdisk -u /dev/sdb. Чтобы избежать ошибки "Partition 1 does not start on physical sector boundary."

Если вы создаете разделы для Linux более, чем на одном диске, выполните fdisk отдельно для каждого диска.

# fdisk /dev/hda Command (m for help):

В этот момент fdisk ждет команды; вы можете ввести m, чтобы получить перечень опций.

Команда (m для справки): m Действия a установить признак загрузочного раздела d удалить раздел l показать список известных типов раздела m вывести это меню n добавить раздел p вывести таблицу разделов q выйти без сохранения изменений t сменить системный идентификатор раздела v проверить таблицу разделов w записать таблицу разделов на диск и выйти x дополнительные возможности(для опытных пользователей) Команда (m для справки):

Для создания нового раздела используется команда n. О большинстве других опций вы можете не вспоминать. Выйти из программы fdisk, без сохранения произведенных изменений, можно командой q. Выйти из программы fdisk с записью изменений в таблице разделов можно командой w.

Первое, что вы должны сделать, это получить и записать текущее состояние таблицы разделов. Используйте команду p.

Command (m for help): p Disk /dev/hda: 16 heads, 38 sectors, 683 cylinders Units = cylinders of 608 * 512 bytes Device Boot Begin Start End Blocks Id System /dev/hda1 * 1 1 203 61693 6 DOS 16-bit >=32M Command (m for help):

Это пример, когда у нас один MS-DOS-раздел на /dev/hda1, который имеет 61693 блоков (около 60M - блок в Linux - 1024bytes). Этот раздел начинается на цилиндре 1 и заканчивается на цилиндре 203. Всего у нас на диске 683 цилиндров. Так что остается 480 цилиндров для создания раздела Linux.

Для создания нового раздела используйте команду n. В этом примере мы создадим два новых первичных раздела (/dev/hda2 and /dev/hda3) для Linux.

Command (m for help): n Command action e extended p primary partition (1-4) p

Здесь fdisk спрашивает тип создаваемого раздела: extended (расширенный) или primary (первичный). В нашем примере мы создаем только первичный раздел, так что выбираем p.

Partition number (1-4):

Затем fdisk спросит число создаваемых разделов; поскольку раздел 1 уже использован, наш первый раздел Linux получит номер 2.

Partition number (1-4): 2 First cylinder (204-683):

Теперь введите номер первого цилиндра раздела. Поскольку цилиндры с 204 по 683 не используются, мы используем первый свободный (номер 204). Нет смысла оставлять пустые места между разделами.

First cylinder (204-683): 204 Last cylinder or +size or +sizeM or +sizeK (204-683):

Программа fdisk запрашивает размер создаваемого раздела. Мы можем указать последний номер свободных цилиндров или размер в байтах, килобайтах или мегабайтах. Поскольку мы хотим, чтобы наш раздел был размером в 80M, мы укажем +80M. При указании размера раздела таким способом fdisk округлит действительный размер раздела до ближайшего числа цилиндров.

Last cylinder or +size or +sizeM or +sizeK (204-683): +80M Warning: Linux cannot currently use 33090 sectors of this partition

Если вы увидите предупреждение, вроде этого, его можно проигнорировать. Программа fdisk выдает сообщение, поскольку это старая программа, написанная еще до того, когда в Linux были разрешены разделы более, чем 64M. Теперь мы готовы создать второй раздел для Linux. С целью демонстрации мы создадим его размером в 10M.

Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 3 First cylinder (474-683): 474 Last cylinder or +size or +sizeM or +sizeK (474-683): +10M

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

Command (m for help): p Disk /dev/hda: 16 heads, 38 sectors, 683 cylinders Units = cylinders of 608 * 512 bytes Device Boot Begin Start End Blocks Id System /dev/hda1 * 1 1 203 61693 6 DOS 16-bit >=32M /dev/hda2 204 204 473 82080 81 Linux/MINIX /dev/hda3 474 474 507 10336 81 Linux/MINIX

Как вы видите, теперь есть /dev/hda2 - раздел размером в 82080 блоков (что соответствует приблизительно 80M), и /dev/hda3 - 10336 блоков (около 10M).

Имейте в виду, что много дистрибутивов требуют использования команды t в программе fdisk для изменения области своппинга "Linux swap", которая обычно имеет номер 82. Вы можете воспользоваться командой l для печати кодов типов известных разделов, а затем использовать t, чтобы установить тип области своппинга, соответствующий "Linux swap".

При этом программы инсталляции смогут автоматически найти ваши разделы своппинга, основываясь на типе. Если ваши программы инсталляции не распознают области своппинга, вы можете снова запустить программу fdisk и использовать команду t в режиме вопросов.

В вышеприведенном примере оставшиеся цилиндры диска (номера с 508 по 683) не использованы. Вы можете позже создать дополнительные разделы.

Наконец, мы используем команду w, чтобы записать изменения и выйти из fdisk

Command (m for help): w #

Имейте в виду, что ни одно из сделанных изменений не даст эффекта то тех пор, пока вы не дадите команду w. Так что вы можете играть с различными конфигурациями и сохранить их, когда закончите. Кроме того, если вы захотите выйти из fdisk в любое время без сохранения изменений, используйте команду q.

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

Некоторые дистрибутивы Linux требуют перезагрузки системы после окончания работы fdisk. Это позволяет изменениям в таблице разделов оказать свое влияние на последующую инсталляцию. Новые версии fdisk автоматически изменяют соответствующую информацию в ядре, так что перезагрузка не требуется. Чтобы обезопасить себя, после выполнения fdisk вам следует снова загрузить средства инсталляции как и раньше - перед продолжением инсталляции.

Самый известный инструмент для работы с таблицей разбиения - программа fdisk . Программы с таким названием имеются во всех операционных системах. Но, несмотря на совпадение названий, по сути это совершенно разные программы, так что не стоит пользоваться описанием одной из них, применяя другую. К тому же в одном из руководств я нашел утверждение о том, что использование FDISK от Win95/Win98 в системах с несколькими разными файловыми системами (установленными в разные разделы) опасно. Известны случаи, когда эта программа удаляла логические разделы типа, отличного от FAT, хотя ей было задано удалить FAT-раздел, расположенный где-то дальше в цепочке логических разделов.

В Линукс имеются три версии этой программы: fdisk , sfdisk , cfdisk . Их основное назначение - создание разделов на "чистом" диске или изменение разбиения диска. Но основной метод переразбиения диска в этих программах сводится к удалению существующих разделов и созданию новых (соответственно, с потерей всей информации на диске). Правда, man-страница к утилите sfdisk сообщает, что утилита эта может производить переразбиение диска, но предупреждает, что операция эта очень опасна.

Все три упомянутых программы имеют только текстовый интерфейс, то есть запускаются в консоли или окне терминала. На страничке man к программе fdisk сообщается, что cfdisk создает высококачественные таблицы разбиения диска и поэтому, если есть возможность, то надо использовать именно эту программу. Одновременно отмечается, что fdisk обычно дает неплохой результат, но имеет некоторые недостатки и ее не рекомендуется применять, если есть другие возможности. Относительно sfdisk утверждается, что это программа для хакеров - она более корректна, чем fdisk и мощнее чем fdisk и cfdisk , но имеет ужасно неудобный интерфейс. И, действительно, интерфейс cfdisk кажется наиболее удобным, поскольку он уже имеет интуитивно понятное меню. Автор статьи утверждает, что именно по этой причине программа cfdisk используется в текстовых инсталляторах Debian GNU/Linux и Slackware Linux. А вот в системе, установленной из дистрибутива Red Hat Linux 9 этой утилиты почему-то не оказалось.

У fdisk и sfdisk есть одна важная особенность -- они умеют выводить список всех существующих разделов в неинтерактивном режиме. Для этого достаточно запустить эти команды с опцией -l. Причем, если не указывать устройство, то будет выведен список разделов всех имеющихся дисков. Результаты выполнения этих команд выглядят немного по-разному. На моем диске с испорченной таблицей разделов я получил следующие результаты:

Листинг 4.

# /sbin/sfdisk -l /dev/hda

Disk /dev/hda: 77545 cylinders, 16 heads, 63 sectors/track Warning: extended partition does not start at a cylinder boundary. DOS and Linux will interpret the contents differently. Units = cylinders of 516096 bytes, blocks of 1024 bytes, counting from 0 Device Boot Start End #cyls #blocks Id System /dev/hda1 0+ 764- 765- 385528 82 Linux swap end: (c,h,s) expected (764,15,62) found (47,254,62) /dev/hda2 * 765+ 4574- 3809 1919736 c W95 FAT32 (LBA) start: (c,h,s) expected (765,1,1) found (48,1,1) end: (c,h,s) expected (1023,15,63) found (286,254,63) /dev/hda3 4574+ 4765- 192- 96390 83 Linux start: (c,h,s) expected (1023,15,63) found (287,0,1) end: (c,h,s) expected (1023,15,63) found (298,254,63) /dev/hda4 4765+ 77535- 72771- 36676395 f W95 Ext"d (LBA) start: (c,h,s) expected (1023,15,63) found (1023,5,1) end: (c,h,s) expected (1023,15,63) found (1023,14,63) /dev/hda5 4765+ 6805- 2040- 1028128+ 83 Linux start: (c,h,s) expected (1023,15,63) found (299,1,1) end: (c,h,s) expected (1023,15,63) found (426,254,63) /dev/hda6 6805+ 10885- 4080- 2056288+ 83 Linux start: (c,h,s) expected (1023,15,63) found (427,1,1) end: (c,h,s) expected (1023,15,63) found (682,254,63) /dev/hda7 10885+ 27141- 16257- 8193118+ 83 Linux start: (c,h,s) expected (1023,15,63) found (683,1,1) end: (c,h,s) expected (1023,15,63) found (1023,254,63) /dev/hda8 27141+ 36895- 9754- 4915858+ 83 Linux start: (c,h,s) expected (1023,15,63) found (1023,254,63) end: (c,h,s) expected (1023,15,63) found (1023,254,63) /dev/hda9 36895+ 77535- 40641- 20482843+ b W95 FAT32 start: (c,h,s) expected (1023,15,63) found (1023,254,63) end: (c,h,s) expected (1023,15,63) found (1023,254,63)

Листинг 5.

Disk /dev/hda: 40.0 GB, 40020664320 bytes 16 heads, 63 sectors/track, 77545 cylinders Units = cylinders of 1008 * 512 = 516096 bytes Device Boot Start End Blocks Id System /dev/hda1 1 765 385528 82 Linux swap Partition 1 does not end on cylinder boundary. /dev/hda2 * 766 4575 1919736 c W95 FAT32 (LBA) Partition 2 does not end on cylinder boundary. /dev/hda3 4575 4766 96390 83 Linux Partition 3 does not end on cylinder boundary. /dev/hda4 4766 77536 36676395 f W95 Ext"d (LBA) Partition 4 does not end on cylinder boundary. /dev/hda5 4766 6806 1028128+ 83 Linux /dev/hda6 6806 10886 2056288+ 83 Linux /dev/hda7 10886 27142 8193118+ 83 Linux /dev/hda8 27142 36896 4915858+ 83 Linux /dev/hda9 36896 77536 20482843+ b W95 FAT32

Все сказанное еще не позволяет сделать однозначного вывода о том, какая их этих программ предпочтительнее. Поэтому рассмотрим все три утилиты последовательно.

2.2. Программа fdisk

Работа с программой fdisk осуществляется через командный интерфейс. Если запустить ее без опций, мы увидим только приглашение к вводу одной из доступных однобуквенных клавиатурных команд (см. листинг 6).

Листинг 6.

# /sbin/fdisk /dev/hda The number of cylinders for this disk is set to 2498. There is nothing wrong with that, but this is larger than 1024, and could in certain setups cause problems with: 1) software that runs at boot time (e.g., old versions of LILO) 2) booting and partitioning software from other OSs (e.g., DOS FDISK, OS/2 FDISK) Command (m for help):

Список доступных команд мы получаем по команде (поскольку вызов этих команд осуществляется нажатием соответствующей клавиши, я буду обозначать команды буквой, заключенной в угловые скобки):

Листинг 7.

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):

Самая употребительная из этих команд, пожалуй, команда

, по которой выводится полный перечень имеющихся на диске разделов (включая логические). Результат выполнения этой команды аналогичен результату, получаемому после выполнения команды
# /sbin/fdisk -l /dev/hda
из командной строки, так что пример выполнения этой команды вы уже видели (листинг 5). Границы разделов в этом случае показаны в виде номеров цилиндров. Вообще говоря, в процессе знакомства с программами разбиения диска складывается впечатление, что границы разделов лучше всего размещать по границам цилиндров.

Если добавить в вызов утилиты fdisk опцию -u, то границы разделов будут задаваться порядковыми номерами секторов. Я предполагаю (хотя нигде в документации такого утверждения я не встречал), что это соответствует линейной нумерации секторов (LBA). Номера секторов вы увидите и тогда, когда выполните команду

после запуска самой утилиты в следующем формате:
# /sbin/fdisk -u /dev/hda
Впрочем, переключиться с одного способа указания границ разделов на другой можно в любой момент работы с программой, достаточно дать клавиатурную команду .

Назначение некоторых клавиатурных команд я поясню так же кратко, как они даются самой утилитой, но на русском языке:

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

По команде мы переходим “на второй уровень” программы fdisk . Как сказано выше, этот уровень - для экспертов! Перечень дополнительных возможностей, доступных на этом уровне, можно снова получить по команде (см. листинг 8):

Листинг 8.

Command (m for help): x Expert command (m for help): m Command action b move beginning of data in a partition c change number of cylinders d print the raw data in the partition table e list extended partitions f fix partition order g create an IRIX (SGI) partition table h change number of heads m print this menu p print the partition table q quit without saving changes r return to main menu s change number of sectors/track v verify the partition table w write table to disk and exit Expert command (m for help):

Некоторые из этих команд вам уже знакомы -

, , , . Они здесь действуют так же, как на основном уровне. Командой - исправить порядок расположения разделов, вам придется воспользоваться в том случае, когда вы удаляли разделы и создавали новые. Дело в том, что после таких операций порядок нумерации разделов не соответствует порядку их размещения на диске. Команда позволяет исправить это несоответствие. Команда служит для того, чтобы вывести на экран в шестнадцатиричном виде содержимое секторов, в которых хранится структура разделов диска. С помощью других команд второго уровня можно изменить число цилиндров (команда ), головок (команда ) и секторов (команда ), то есть фактически задать "фальшивую" геометрию диска. Но, если вы задумаете это сделать, вы должны четко понимать, к чему это ведет (смотри предыдущую часть этих заметок). Тем более надо представлять себе последствия таких команд, как - перемещение начала данных в разделе. Я ничего не берусь пояснить или добавить к сказанному, ибо не использовал этих команд применительно к реальным ситуациям. Поэтому я закончу рассказ о команде fdisk и перейду к утилите cfdisk .

2.3. Программа cfdisk

Запуск этой утилиты осуществляется в том же формате, что и других команд этой группы:
# /sbin/fdisk /dev/hda

Указание на устройство можно опустить, если вы хотите изменить разбиение на диске /dev/hda (этот диск выбирается по умолчанию). После запуска программа пытается прочесть таблицу разбиения указанного диска. Если ей это по каким-то причинам не удается, выдается сообщение об ошибке и выполнение программы прекращается. Одной из причин может быть некорректная информация о геометрии диска и в таком случае можно заставить программу работать, если указать ей геометрию диска в строке вызова. Другой путь - запустить программу с опцией -z. В этом случае существующая таблица разбиения диска будет игнорирована.

В отличие от fdisk интерфейс программы cfdisk построен на основе небольшого меню, расположенного в нижней части экрана (рис.1).

Рис.1. Окно программы cfdisk

Переход от одного пункта меню к другому осуществляется клавишей <Тab> или с помощью клавиш перемещения курсора "стрелка вправо/влево". Клавиши "стрелка вверх/вниз" используются для выбора раздела диска в списке, отображаемом в центральной части экрана. Для каждого раздела указаны его наименование, значение флагов, тип раздела (первичный или логический), тип файловой системы в разделе, метка раздела и его размер. В графе Flags (флаги) значение может отсутствовать или же может стоять Boot (что означает загрузочный раздел), или NC («Not Compatible with DOS or OS/2» - не совместим с DOS или OS/2). Последний флаг имеет следующее значение. Некоторые операционные системы (в том числе DOS и OS/2) создают разделы на диске таким образом, что первый раздел диска, а также все логические разделы начинаются со второй дорожки, оставляя первую дорожку цилиндра пустой. Установив флаг NC с помощью команды меню Maximize или горячей клавиши , вы сможете использовать это дисковое пространство. Но учтите, что в работающей системе экономить таким образом дисковое пространство не стоит. Я попробовал получить таким образом пару лишних дорожек, и моя система работала только до первой перезагрузки. А при следующей загрузке появилось сообщение о Kernel Panic. К счастью, после того, как я снял с помощью той же программы этот флажок (для чего, конечно, пришлось загрузиться с LiveCD Knopix), работоспособность системы восстановилась.

Размер раздела в cfdisk может быть показан в мегабайтах (по умолчанию), килобайтах, а также в количестве секторов или цилиндров. Переключение между этими режимами осуществляется командой Units или с помощью горячей клавиши (в последнем случае переключение осуществляется по циклу). Если после указания размера стоит звездочка, это означает, что либо границы раздела не совпадают с границами цилиндров, либо используется неверная геометрия диска. Линукс не использует геометрию в работе с дисками, так что бояться этого не стоит. Но можно и поменять геометрию диска, с которой будет работать cfdisk . Для этого служит горячая клавиша . Однако в руководстве к программе сказано, что делать это может только тот, кто знает, что он делает. А остальным в определении геометрии диска лучше довериться программе cfdisk .

С помощью команды Delete или горячей клавиши можно удалить раздел, выделенный в данный момент в списке разделов.

Если в списке разделов подсветка перемещена на свободное пространство, вид меню изменится (смотри рис.2).


Рис.2. Создание нового раздела с помощью cfdisk

Новый раздел создается с помощью команды New или горячей клавиши . Если тип раздела не определяется однозначно, программа попросит вас его задать. Помните, что можно создать не более 4 первичных разделов и что расширенным может быть только один из них. Поэтому все логические разделы должны быть расположены на диске последовательно и не могут чередоваться с первичными. Затем программа запросит у вас размер создаваемого раздела, причем по умолчанию предложит вам создать его равным всему свободному пространству. Если вас это устраивает, можно просто нажать клавишу . В противном случае можно ввести желаемый размер, причем программа воспринимает размер, заданный в мегабайтах (M), килобайтах (K), цилиндрах (С) и секторах (S). Приведенные в скобках буквы вы должны указать сразу после цифры, задающей размер (M можно не указывать, это значение по умолчанию). Создаваемый раздел можно разместить либо в начале, либо в конце свободного дискового пространства, и cfdisk снова попросит вас принять решение на этот счет.

К чему приведут сделанные вам изменения, можно просмотреть с помощью команды Print (

). При этом возможны три варианта отображения этого результата:

    так называемый raw data формат, то есть шестнадцатеричный вид секторов, которые будут записаны в первые сектора каждого раздела;

    секторный формат (рис.3);

Рис.3. Таблица разделов в секторном формате


Чтобы сделанные изменения вступили в силу, необходимо записать таблицу разбиения на диск, что делается с помощью команды Write или горячей клавиши (причем, именно заглавной W). Программа запросит у вас подтверждения и запишет результат на диск.

Для выхода из программы служит команда Quit или горячая клавиша .

2.4. Программа sfdisk

Будучи запущенной без параметров, эта утилита выдает только двухстраничную справку о параметрах запуска. Но только из этой справки понять, как использовать эту утилиту, трудно. Необходимо заглянуть и на страничку интерактивной подсказки man sfdisk. Из этой справки узнаем, что утилита sfdisk имеет 4 основных варианта использования.

Вариант 1. Будучи запущенной с опцией -s partition она выдает размер раздела в блоках. Параметр partition может указывать на конкретный раздел, например, /dev/hda2, либо на весь диск. В таком случае будет выведен объем диска в блоках. А если оставить только опцию -s и не указывать диск или раздел, то будет выведен объем всех разделов на каждом диске и общий объем диска (см. листинг 9).

Листинг 9.

# /sbin/sfdisk -s /dev/hdb 1251936 # /sbin/sfdisk -s /dev/hda: 39082680 /dev/hda1: 530113 /dev/hda2: 2048287 /dev/hda3: 104422 /dev/hda4: 1 /dev/hda5: 1534176 /dev/hda6: 2048256 /dev/hda7: 12289693 /dev/hda8: 20523006 /dev/hda9: 4536 /dev/hdb: 1251936 /dev/hdb1: 128992 /dev/hdb2: 1121904

Вариант 2. Второй вариант использования утилиты sfdisk служит для получения информации о таблице разделов диска. Для этого следует запустить ее с опцией -l или же с опцей -d . Будучи запущенной с опцией -l

# /sbin/sfdisk -l [опции] /dev/hdb

утилита sfdisk выдает таблицу разделов указанного диска примерно в таком же формате, как и утилита fdisk (примеры приведены в ). Но если запустить программу с дополнительной опцией -x , мы увидим всю цепочку логических разделов, вложенных в расширенный раздел, то есть получим более детальную информацию о разделах (см. листинг 3) .

Опция -d (листинг 10) позволяет получить информацию в другом формате, ориентированном на применение утилиты sfdisk для изменения таблицы разделов (смотри ниже описание четвертого варианта использования sfdisk ).

Листинг 10.

# /sbin/sfdisk -d /dev/hda Warning: extended partition does not start at a cylinder boundary. DOS and Linux will interpret the contents differently. # partition table of /dev/hda unit: sectors /dev/hda1: start= 63, size= 1060227, Id=82 /dev/hda2: start= 1060290, size= 4096575, Id= b, bootable /dev/hda3: start= 5156865, size= 208845, Id=83 /dev/hda4: start= 5365710, size= 72799650, Id= f /dev/hda5: start= 5365773, size= 3068352, Id=83 /dev/hda6: start= 8434188, size= 4096512, Id=83 /dev/hda7: start= 12530763, size= 24579387, Id=83 /dev/hda8: start= 37110213, size= 41046012, Id= c

Вариант 3. Третий вариант запуска sfdisk определяется использованием опции -V , и служит для тестирования таблицы разделов на конкретном устройстве. Эту опцию, вероятно, лучше использовать вместе с опцией -l , тогда вы увидите и таблицу разделов и информацию о некорректностях в этой таблице.

Вариант 4. И, наконец, четвертый способ запуска этой программы предназначен изменения таблицы разделов диска. Man-страница предупреждает, что использовать этот вариант надо очень осторожно, поскольку любая ошибка приведет к потере ваших данных. Поэтому предварительно нужно составить четкий и хорошо продуманный план разбиения диска на разделы, так как программа потребует у вас явным образом задать параметры каждого из запланированных разделов, причем никаких подсказок в ходе этого процесса не выдает. Она просто-напросто выводит последовательно запрос на ввод параметров очередного раздела (листинг 11)

Листинг 11.

# /sbin/sfdisk /dev/hdb /dev/hdb1:
и ожидает от вас ввода параметров раздела в следующем формате <номер начального сетора> <размер(в секторах)> <тип(id)> Обратите внимание на то, что это фактически тот самый формат, который используется программой для вывода таблицы разделов в том случае, когда она была запущена с опцией -d (см. листинг 10). Поэтому, если вы хотите что-то исправить в существующей таблице разделов, имеет смысл вначале воспользоваться опцией -d , чтобы на основе полученных данных составить план переразбиения диска.

Каждая строка ввода приведенного выше вида определяет один раздел. Поля разделяются пробелами. Можно использовать в качестве разделителей запятую или точку с запятой. Числа могут быть десятичными, восьмеричными или шестнадцатиричными. Поля , задающие раздел в формате "цилиндр, головка, сектор", могут отсутствовать (man-страница даже рекомендует не задавать эти значения), поскольку утилита умеет вычислять их самостоятельно. Загрузочный раздел помечается звездочкой в соответствующем поле. Впрочем, если у вас не установлено других систем, кроме Линукс, загрузочный раздел можно не указывать, поскольку Линукс не использует эту метку.

Тип раздела (поле Id) задается шестнадциричным кодом без добавления префикса 0x , или просто одним из следующих символов: S - Linux_Swap (82), L - Linux_Native (83), E - Extended (5) или X - Linux_Extended (85).

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

В четвертом варианте запуска утилита sfdisk требует явного указания устройства, с которым ей предстоит работать. Если же указать ей в качестве цели смонтированное устройство (как чаще всего и случается на работающей системе), получим следующее сообщение:

Листинг 12.

# /sbin/sfdisk /dev/hda Checking that no-one is using this disk right now ... BLKRRPART: Device or resource busy This disk is currently in use - repartitioning is probably a bad idea. Umount all file systems, and swapoff all swap partitions on this disk. Use the --no-reread flag to suppress this check. Use the --force flag to overrule all checks.

Как видите, утилита sfdisk требует заранее продумать структуру создаваемых на диске разделов. В качестве меры предосторожности можно сохранить на диск существующую таблицу разделов командой

# /sbin/sfdisk /dev/hda -O hda-part.save

В этом случае перед записью измененной таблицы на диск, старое содержимое секторов, определяющих разбиение диска, будет сохранено в файле hda-part.save. Если в процессе внесения изменений вы сделаете какую-то ошибку, можно будет восстановить исходное состояние с помощью команды

# /sbin/sfdisk /dev/hda -I hda-part.save

Заметьте, что использование опций -O и -I не эквивалентно простому сохранению таблицы разделов. Информация, сохраняемая при использовании опции -O , представляет собой двоичную версию вывода, получаемого с помощью опции -d .

С помощью утилиты sfdisk можно изменить только один раздел на диске, используя опцию -N .

Прочитав приведенные выше описания трех основных утилит для разбиения диска, существующих в Линукс, вы сами можете выбрать наиболее подходящую для себя. Отмечу только еще раз, что все эти утилиты не позволяют производить переазбиение диска с сохранением информации на уже существующих разделах. Так что если речь идет о переразбиении диска, вам придется позаботиться о том, чтобы сохранить ваши данные на каком-то резервном носителе. В последнее время появились и утилиты, которые позволяют производить переразбиение диска без потери информации (по крайней мере, так утверждается). И я расскажу о таких утилитах, но чуть позже, после того, как приведу краткую характеристику утилит для создания разделов, входящих в состав нескольких дистрибутивов Linux.

В.А. Костромин - 2. Утилита fdisk и ее ближайшие родственники

Для нормальной работы винчестера необходимо, чтобы он имел таблицу разбиения (иногда её называют partition, хотя строго говоря, partition -это непосредственно разделы диска). При её отсутствии операционная система не имеет доступа к винчестеру("не видит" жесткий диск). Таблица разбиения содержит сведения о физических характеристиках диска: количестве сторон, количестве дорожек и секторов на дорожке, а также информацию о разделах и логических дисках.

Разделы диска

При работе в системе MS-DOS каждый жесткий диск может иметь следующие разделы:

  • Первичный раздел DOS: присутствует обязательно. В этом разделе формируется единственный системный логический диск (имеющий, как правило, имя С:)
  • Расширенный раздел DOS: присутствует только тогда, когда винчестер имеет два или более логических диска.
  • Раздел не DOS: формируется, если вы работаете с двумя и более операционными системами. Этот раздел отдаётся в пользование другим операционным системам и для MS-DOS невидим.

Команда FDISK

Для выполнения этой команды необходимо иметь загрузочную дискету, сделанную в Windows 98SE, желательно на русском языке. Хотя в комплекте с операционной системой поставляется внешняя команда FDISK , но на английском языке.

После загрузки компьютера с дискеты введите команду

На экране при этом отобразится главное меню:

FDISK Options
(
Опции FDISK)
Current fixed disk drive: 1
(Текущий привод жесткого диска: 1)
Choose one of the following:
(
Выберите одну из опций:)
1.Create DOS partition or Logical DOS Drive
(
1. Создать раздел DOS или логический диск DOS.)
2.Set active partition
(
2. Установить активный раздел.)
3.Delete partition or Logical DOS Drive
(
3. Удалить раздел или логический диск DOS.)
4.Display partition information
(
4. Просмотреть информацию о разделах.)
5.Change current fixed disk drive
(5. Сменить текущий привод жесткого диска.)
Enter choice:
(Введите ваш выбор:)
Press Esc to exit FDISK
(Для выхода нажмите Esс)

Примечание : Если в компьютере установлен только один винчестер, то опция 5 не выдается.

Разбиение жесткого диска

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

  • Сделать активным реконфигурируемый привод(если необходимо)
  • Удалить все существующие на жестком диске разделы.
  • Создать новые необходимые вам разделы.
  • При необходимости создать логические диски.
  • При необходимости назначить активный раздел (с него будет осуществляться загрузка)
  • Отформатировать получившиеся логические диски.

Удаление существующих разделов

Если ваш диск уже был конфигурирован, то вначале придется удалить предыдущее разбиение. Чтобы сделать это, выберите пункт 3 главного меню. На экране появится:

Delete DOS Partition or Logical DOS Drive
(Удаление разделов DOS или логических дисков)
Current fixed disk drive: 1
(Текущий привод: 1)
Choose one of the following:
(Выберите один из вариантов:)
1. Delete Primary DOS Partition
(1. Удалить первичный раздел DOS)
2. Delete Extended DOS Partition
(2. Удалить расширенный раздел DOS)
3. Delete Logical DOS Drive(s) in the Extended DOS
(3. Удалить логические диски из расширенного раздела DOS)
4. Delete Non-DOS Partition
(4. Удалить не-DOS раздел)

Порядок ваших действий:

  • Удалите не DOS раздел(если он существует)
  • Удалите логические диски из расширенного раздела DOS (если этот раздел существует), причем вам при удалении нужно будет несколько раз подтвердить свои намерения и ввести метку диска.
  • Удалите сам расширенный раздел DOS (если он у вас был), причем при удалении необходимо будет несколько раз подтвердить свои намерения.
  • Удалите первичный раздел DOS, причем вам при удалении необходимо будет несколько раз подтвердить свои намерения и ввести метку диска.

Теперь предыдущее разбиение удалено, и вы можете создать новое.

Создание нового разбиения

После удаления предыдущего разбиения нужно создать новое. Для этого надо выбрать опцию 1 из главного меню.

Create DOS partition or Logical DOS Drive
(Создание разделов DOS или логических дисков)
Current fixed disk drive: 1
(Текущий привод: 1)
Choose one of the following:
(Выберите один из вариантов:)
1. Create Primary DOS Partition
(1. Создать первичный раздел DOS)
2. Create Extended DOS Partition
(2. Создать расширенный раздел DOS)
3. Create Logical DOS Drive(s) in Extended DOS Partition
(3. Создать логические диски в расширенном разделе DOS)

Вначале нужно создать первичный раздел DOS. Выберите пункт 1. Вам будет задан вопрос:

Do you wish to use the maximum available size for a Primary DOS Partition and make the partition active
(Y/N...............?
(Вы хотите использовать для первичного раздела DOS все дисковое пространство и сделать этот раздел активным?)
Если вы ответите положительно, то на всем вашем винчестере будет создан один логический диск, с которого будет проводиться загрузка операционной системы.
В этом случае разбиение жесткого диска закончено. Если же вы хотите разбить свой винчестер на несколько логических, то надо ответить отрицательно. На экран будет выведен запрос:

Enter partition size in Mbytes or percent of disk space (%) to create a Primary DOS Partition.............:
(Введите размер первичного раздела DOS в Мбайтах или в процентах от дискового пространства.)
После того как вы создадите первичный раздел нужно будет создать расширенный раздел DOS.(Create Extended DOS Partition )

На экране появиться сообщение:

Enter partition size in Mbytes or percent of disk space (%) to create an Extended DOS Partition..........:
(Введите размер расширенного раздела DOS в Мбайтах или в процентах от дискового пространства.)
Если вам не нужно оставлять место для работы с другой операционной системой(не MS-DOS), то вы должны указать все пространство на диске, оставшееся свободным, что и предлагается по умолчанию.
После того как вы создали расширенный раздел DOS нужно разбить его на логические диски.( Create Logical DOS Drive(s) in Extended DOS Partition )
Enter Logical drive size in Mbytes or percent of disk space (%)....
(Введите размер логического диска в Мбайтах или процентах от дискового пространства.)
Если вы хотите создать два логических (один-первичный раздел DOS, другой-полный размер расширенного раздела DOS),то нужно согласиться с предлагаемым по умолчанию максимальным размером. В противном случае введите ваш размер и повторите эту операцию для следующего логического диска.

После разбиения винчестера на разделы и логические диски нужно установить активный раздел (именно с него будет загружаться компьютер).

Установка активного раздела

Для загрузки с винчестера необходимо, чтобы первичный раздел DOS был активным. Выберите опцию 2 из главного меню и введите номер раздела с которого будет осуществляться загрузка:

Enter the number of the partition you want to make active......:
(Введите номер раздела, который вы хотите сделать активным)

При выводе на экран информации о разбиении активный раздел помечается буквой А.

После выполнения этих действий разбиение жесткого диска закончено. Осталось только отформатировать получившиеся логические диски.

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

Форматирование винчестера

Форматирование винчестера имеет некоторые особенности. Во-первых, диск С: должен быть сделан системным.

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

На экран будет выведено предупреждение, что вы форматируете винчестер:

Warning: all data on non-removable disk
Drive D: will be lost!

Будет задан вопрос на продолжение:

При вашем положительном ответе винчестер будет отформатирован и на него будет перенесена операционная система.

После этого вы сможете загрузиться с винчестера, перенести на него необходимые вам файлы(операционную систему), и при необходимости, отформатировать остальные логические диски(параметр S задавать, естественно, уже не нужно). Процесс реконфигурирования винчестера полностью закончен.

fdisk [-BIaipstu] [ -b загрузчик ] [-1234] [ диск ] fdisk -f файл_конфигурации [-itv] [ диск ]

ПРОЛОГ Чтобы BIOS смог загрузить ядро, необходимо придерживаться определённых соглашений. Нулевой сектор диска должен содержать загрузочный код, таблицу слайсов и магическое число. Используя слайсы BIOS , диск может быть разбит на несколько частей. BIOS считывает нулевой сектор и проверяет магическое число. Затем загрузочный код из нулевого сектора проверяет таблицу слайсов, чтобы найти слайс, помеченный как "активный"". Затем он считывает программу начальной загрузки из активного слайса, и если слайс помечен как загрузочный, запускает её. В DOS может быть несколько слайсов, один из которых будет активным. Утилита fdisk для DOS позволяет разделить дисковое пространство на слайсы и пометить один из них как активный. ОПИСАНИЕ Утилита fdisk для служит тем же целям, что и аналогичная ей утилита для DOS. Первая форма вызова используется для вывода информации о параметрах слайсов или для её редактирования в интерактивном режиме. Вторая - для записи таблицы слайсов c использованием файла конфигурации файл_конфигурации ; она предназначена для использования другими сценариями или программами. fdisk поддерживает следующие опции: -a Только изменить активный слайс. Игнорируется в сочетании с опцией -f . -b загрузчик Использовать код загрузки из файла загрузчика. По умолчанию используется /boot/mbr . -B Изменить код загрузки в нулевом секторе диска. Игнорируется в сочетании с опцией -f . -f файл_конфигурации Установить параметры слайсов из файла файл_конфигурации . С помощью файла конфигурации меняются параметры только явно указанных слайсов, но если также указана опция -i, то перед чтением файла конфигурации все существующие слайсы удаляются (помечаются как неиспользуемые, "unused "). При указании "- " (знак минус) в качестве файла конфигурации будет использоваться стандартный ввод. Описание формата файла конфигурации смотрите ниже в секции ФАЙЛ КОНФИГУРАЦИИ .

ПРЕДУПРЕЖДЕНИЕ: в отличие от интерактивного режима, при использовании опции -f изменения вносятся без запроса на подтверждение. Соблюдайте осторожность!
-i Инициализировать нулевой сектор диска. Перед редактированием, существующие слайсы будут помечены как неиспользуемые ("unused "). (Сравните с опцией -u ). -I Инициализировать таблицу слайсов в секторе 0 одним слайсом FreeBSD на весь диск. -p Вывести таблицу слайсов в формате конфигурационного файла fdisk и выйти; см. ФАЙЛ КОНФИГУРАЦИИ ниже. -s Вывести краткую информацию и выйти. -t Режим тестирования: изменения на диск записываться не будут. Как правило, используется совместно с опцией -f чтобы узнать, что было бы записано в таблицу слайсов. Включает опцию -v . -u Редактировать таблицу слайсов диска в секторе 0. Игнорируется в сочетании с опцией -f . -v Выводить подробные сообщения. В сочетании с -f , fdisk печатает записываемую таблицу слайсов. -1234 Оперировать только с одним слайсом. Игнорируется в сочетании с опцией -f . В качестве аргумента диск допустимо указание как просто имени диска (например, da0 ), так и полного пути к нему. Если аргумент не указан, fdisk пытается определить имя диска по умолчанию по имени устройства, на котором находится корневая файловая система. При вызове без аргументов печатается таблица слайсов из сектора 0 . Выглядит примерно следующим образом: ******* Working on device /dev/ad0 ******* parameters extracted from in-core disklabel are: cylinders=769 heads=15 sectors/track=33 (495 blks/cyl) parameters to be used for BIOS calculations are: cylinders=769 heads=15 sectors/track=33 (495 blks/cyl) Warning: BIOS sector numbering starts with sector 1 Information from DOS bootblock is: The data for partition 1 is: sysid 165,(FreeBSD/NetBSD/386BSD) start 495, size 380160 (185 Meg), flag 0 beg: cyl 1/ sector 1/ head 0; end: cyl 768/ sector 33/ head 14 The data for partition 2 is: sysid 164,(unknown) start 378180, size 2475 (1 Meg), flag 0 beg: cyl 764/ sector 1/ head 0; end: cyl 768/ sector 33/ head 14 The data for partition 3 is: The data for partition 4 is: sysid 99,(ISC UNIX, other System V/386, GNU HURD or Mach) start 380656, size 224234 (109 Meg), flag 80 beg: cyl 769/ sector 2/ head 0; end: cyl 197/ sector 33/ head 14 Диск поделён на три слайса, которые полностью его охватывают. Второй слайс частично перекрывается с концом первого. (Используется в целях отладки). sysid используется для маркировки слайсов. FreeBSD резервирует для себя магическое число 165 в десятичной системе счисления (A5 в шестнадцатеричной). start и size поля, содержащие начальный адрес и размер слайса в секторах. flag 80 указывает на то, что это активный слайс. cyl, sector и head поля используются для указания начального и конечного адресов слайса (цилиндр, сектор и головка соответственно). Замечание: эти числа вычисляются исходя из геометрии диска, предполагаемой BIOS, и хранятся в загрузочном секторе. Флаги -i и -u указывают программе на то, что таблица слайсов должна быть изменена. Если флаг -f не был указан, работа с утилитой будет происходить в диалоговом режиме. В этом случае никакие изменения на диск записываться не будут, пока вы явно не потребуете этого. Fdisk покажет каждый слайс и спросит, хотите ли вы его отредактировать. В случае утвердительного ответа, fdisk будет последовательно переходить от поля к полю, отображая старое значение и запрашивая новое. Когда вы закончите редактировать слайс, fdisk выведет информацию о нём и спросит, согласны ли вы с введёнными значениями, и если ответ будет утвердительным, перейдёт к следующему слайсу. Правильно вычислить значения cyl , sector , и head бывает сложно, поэтому по умолчанию они вычисляются автоматически. Тем не менее, при необходимости вы можете задать их самостоятельно. После того, как все слайсы были обработаны, вам будет предложено изменить "активный" слайс. Наконец, когда все новые данные будут собраны, программа запросит подтверждение на запись в нулевой сектор. Разница между флагами -u и -i заключается в том, что -u редактирует (обновляет) параметры существующих слайсов, тогда как -i используется для их "инициализации" (старые значения игнорируются). Если редактируется первый слайс, то -i настроит его так, чтобы он охватывал весь диск, и сделает его активным. ЗАМЕЧАНИЯ При автоматическом вычислении начального цилиндра, головки и т.д. используется набор значений, отражающих геометрию диска на основе данных BIOS . По умолчанию эти значения берутся из метки диска в ядре (in-core disk label ), но fdisk предоставляет возможность изменить их. Это позволяет создать загрузочный блок, который может работать с дисками, использующими трансляцию адресов через BIOS . Размечая диск вручную убедитесь, что слайсы FreeBSD начинаются на границе цилиндра. Изменение параметров существующего слайса с большой вероятностью может привести к потере данных, хранящихся на этом слайсе. Имеет смысл несколько раз запустить fdisk в интерактивном режиме, чтобы просмотреть все изменения, которые она произведёт. Это безопасно при условии, что вы ответите отрицательно на последний вопрос, "Should we write new partition table? ". Имеется ряд тонкостей конфигурации, которые утилита fdisk обнаруживает, но которые не описываются подробно в этой странице справочника. ФАЙЛ КОНФИГУРАЦИИ При использовании опции -f таблица слайсов диска может быть записана с помощью значений, указанных в файле файл_конфигурации . Формат этого файла достаточно прост, каждая строка является либо комментарием, либо спецификацией, как показано ниже: # комментарий строки, начинающиеся с # являются комментариями и игнорируются. g spec1 spec2 spec3 Задать геометрию BIOS, использующуюся для вычисления параметров слайсов. Должно быть указано три значения, с буквой перед каждым числом:
  • cnum - Установить число цилиндров равным num .
  • hnum - Установить число головок равным num .
  • snum - Установить число секторов на дорожку равным num .
Значения могут быть указаны в любом порядке, т.к. первая буква однозначно определяет какое значение имеется ввиду. Однако в любом случае, должны быть указаны все три значения. Эта строка должна предшествовать строкам, задающим параметры слайсов. Значения могут быть в таких диапазонах: 1 <= число цилиндров 1 <= число головок <= 256 1 <= число секторов на дорожке < 64 Число цилиндров должно быть меньше либо равным 1024 . Это не строго обязательно, но если вы укажете число, большее 1024 , будет выдано предупреждение. Следует учитывать, что загрузочные слайсы FreeBSD, содержащие корневую ("/") файловую систему, должны располагаться в первых 1024 цилиндрах, иначе могут возникнуть проблемы c загрузкой. Это ограничение не распространяется на незагрузочные слайсы. Пример геометрии диска (все варианты идентичны) с 1019 цилиндрами, 39 головками и 63 секторами на дорожке: g c1019 h39 s63 g h39 c1019 s63 g s63 h39 c1019 p slice type start length Задать слайсу с номером slice (1-4 ) тип type , начальный сектор start и размер length секторов. Изменениям подвергнутся только те слайсы, параметры которых заданы такими строками, остальные слайсы сохранят свои прежние параметры. Однако, если существующая таблица слайсов будет некорректна или же будет указана опция -i , все существующие слайсы будут удалены (помечены как неиспользуемые), и для разметки необходимо будет задать соответствующие p строки . При задании параметров для нескольких слайсов следует задать несколько строк p , по одной на каждый слайс. Эти строки должны следовать за строкой, задающей геометрию, если такая строка присутствует в файле. Для FreeBSD слайсов значение type равно 165 . Указание нулевого типа аналогично удалению слайса (пометкой его "unused"), однако полям start и length в этом случае также должны быть присвоены произвольные значения, например, 0 . Замечание: при необходимости, начальное смещение будет округлено вверх до границы головки, а конечное смещение - вниз до границы цилиндра. Пример: чтобы удалить 4-й слайс и сделать его неиспользуемым ("unused"): p 4 0 0 0 Пример: чтобы установить 1-й слайс как слайс для FreeBSD, начинающийся с 1 -го сектора размером в 2503871 секторов (эти значения будут округлены вверх и вниз таким образом, чтобы слайс попадал на границы головки и цилиндра соответственно): p 1 165 1 2503871 a slice Сделать слайс slice активным. Эта строка может располагаться в файле где угодно, но может быть только одна такая строка на весь файл. Пример: чтобы сделать активным 1 -й слайс: a 1 ФАЙЛЫ /boot/mbr Код загрузчика по умолчанию. СМОТРИ ТАКЖЕ boot0cfg(8) , bsdlabel(8) , newfs(8) ПРОБЛЕМЫ Код загрузчика по умолчанию не всегда правильно распознает все типы слайсов, в частности те, которые были введены начиная с MS-DOS 6.x. Данная утилита могла бы быть более дружественной пользователю. Большинство новичков FreeBSD не понимают разницы между "слайсом" и "разделом", что приводит к проблемам. С помощью этой утилиты невозможно отдать весь диск целиком под использование FreeBSD. Для этого нужно использовать утилиту bsdlabel(8) .

Так что лучше всего запускать sfdisk в системе вроде Knoppix, или применять ее ко второму жесткому диску, предварительно размонтировав его (отмечу, что fdisk в аналогичной ситуации запускается без возражений). Впрочем, если вы уверены в правильности своих решений, можно заставить утилиту работать, указав опцию -f ("Делай, что говорят, и без рассуждений!"), или просто отменить проверку того, что диск в данный момент используется, указав опцию --no-reread .

Понравилась статья? Поделиться с друзьями: