Деление дисков на участки


Стяжной болт 1 для опалубки opalubka-sklad.ru.

Вспомните, как в главе 8 говорилось, что операционная система FreeBSD делит диски двумя различными способами: на участки (slices) и на разделы (partitions).* Участки — это разделы базовой системы ввода-вывода (BIOS), единственный тип разделов, распознаваемый старыми версиями операционной системы Microsoft Windows. Разделы в операционной системе FreeBSD — это подразделы участка. FreeBSD позволяет конфигурировать участки и разделы независимо друг от друга. На одном диске (в архитектурах i386 и amd64) может присутствовать до четырех участков, а на каждом участке — до восьми разделов. Файловые системы FreeBSD располагаются на разделах внутри участков.

Перед первым участком находится главная загрузочная запись (Master Boot Record, MBR) — цилиндр 0, головка 0, сектор 1. В MBR хранится таблица участков, а также код начального запуска системы. Размер MBR ограничен 512 байтами — такого объема казалось вполне достаточно во времена, когда появилось это ограничение. Во время загрузки компьютер считывает MBR с загрузочного диска, чтобы идентифицировать участки диска, отыскивает участок с операционной системой и запускает код начального загрузчика на этом участке. Размещать операционную систему FreeBSD можно в любой части диска, расположенной после MBR.

Просмотр таблицы участков с помощью fdisk(8)

Прочитать и отредактировать таблицу участков в MBR позволяет утилита fdisk(8). Эта утилита всегда принимает один параметр — имя дискового устройства. Вот результат запуска fdisk(8) для моего тестового жесткого диска:

Этот диск SCSI заявляет, что имеет 1116 цилиндров, 255 головок и 63 сектора на дорожку (1). Вспомните, головка — это механическое устройство, которое располагается над пластиной диска. 255 головок едва ли уместятся в корпус жесткого диска! Лично я предпочитаю, чтобы системы, которые мне лгут, брали на себя труд сделать эту ложь более или менее правдоподобной, однако у нас нет иного выбора, кроме как принять заявление жесткого диска и считать его фактом. Неважно, сколько головок, цилиндров и секторов в действительности имеет данный жесткий диск, главное, что общее число секторов равно 17 928 540 (1 116 x 255 x 63 = 17 928 540).

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

Хотя все жесткие диски должны иметь размер сектора, равный 512 байтам (3), тем не менее, fdisk(8) все равно проверяет это.

Далее следует информация обо всех четырех возможных участках на диске. Первый раздел (4) помечен как раздел FreeBSD. Каждая операционная система присваивает участкам свой уникальный идентификационный номер. Число 165 сообщает, что это участок FreeBSD.

Здесь также видно, сколько миллионов секторов (5) входит в состав этого участка. Участок начинается с сектора 63 (не забывайте про главную загрузочную запись, которая занимает первый цилиндр под первой головкой, или секторы с 1 по 62). Первый участок занимает 17 928 477 секторов, откуда следует, что последний сектор в этом участке имеет порядковый номер 17 928 539 (17 928 477 + 62 = 17 928 539). Диск имеет 17 928 540 секторов, но не забывайте про MBR. Этот диск полон.

Одна из неприятностей, связанных с MBR, состоит в том, что загрузочная запись может адресовать не более 1024 цилиндров на диск. (Это создает ограничение на размер жесткого диска — 504 Мбайт.) Но у этого диска гораздо больше цилиндров! Это означает, что вы не можете использовать информацию о количестве цилиндров (6) в каждом из участков для вычисления объема диска. Единственное число, которое имеет смысл, — это количество секторов.

В самом конце перечислены неиспользуемые участки с номерами 2, 3 и 4 (7).

Резервное копирование таблицы участков

Прежде чем приступать к редактированию таблицы участков на диске, необходимо создать резервную копию старой таблицы. Это позволит восстановить диск в предыдущее состояние, если вы допустите ошибку. Чтобы создать резервную копию, можно запустить fdisk(8) с ключом -p:

# fdisk -p /dev/da0 > da0.slice.backup

Чтобы восстановить таблицу участков из резервной копии, необходимо передать утилите fdisk ключ -f и имя файла с резервной копией:

# fdisk -f da0.slice.backup /dev/da0

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

Изменение таблицы участков

Утилита fdisk(8) позволяет не только увидеть таблицу, но и отредактировать ее в интерактивном режиме или при запуске из сценария. Самый простой способ инициализировать новый диск FreeBSD состоит в том, чтобы потребовать от fdisk(8) создать на нем один большой участок, помеченный как участок FreeBSD. Такая ситуация настолько распространена, что для нее утилита fdisk(8) предусматривает специальный ключ -I. Ключ говорит о необходимости полностью пересоздать MBR, что всегда является лучшим выбором при первичной инициализации диска. Ниже выполняется инициализация диска SCSI /dev/da17, на котором создается единственный раздел FreeBSD:

# fdisk -BI /dev/da17

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

Вспомните, как в главе 8 мы использовали программу sysinstall для разбиения жесткого диска на участки с разделами и его форматирования. Используйте fdisk(8) только если программа sysinstall не работает по каким-либо причинам, или когда вам необходим более полный контроль над процессом деления диска.

Диски и арифметика

Прежде чем приступать к работе с утилитой fdisk(8) или disklabel(8), выполните все арифметические вычисления на бумаге. Если в процессе работы с этими утилитами требуются дополнительные вычисления, также делайте их на бумаге. При работе с дисками приходится оперировать большими числами, и вам придется включить свой драгоценный мозг на полную мощность, чтобы гарантировать их корректность на этапе ввода. Несмотря на то, что операции сложения, вычитания и деления кажутся совсем несложными, все-таки большинство ошибок связано с вычислениями, доступными третьекласснику. Заранее выписывайте вручную все числа — и вам не помешает отсутствие способности решать в уме примеры для третьего класса.

Давайте с помощью fdisk(8) попробуем разделить наш жесткий диск на два участка примерно одинакового размера. Мы знаем, что весь диск содержит 17 928 477 секторов. Это означает, что каждый из участков будет содержать примерно 8 964 238 секторов.

# fdisk -u /dev/da17
******* Working on device /dev/da17 *******

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

Do you want to change our idea of what BIOS thinks ? [n] n
(Перевод: Вы хотите изменить наше мнение о том, что думает BIOS?)

После этого на экране появятся сведения о конфигурации первого участка и будет предложено изменить ее:

The data for partition 1 is:
sysid 165 (0xa5),(FreeBSD/NetBSD/386BSD)
    start 63, size 17928477 (8754 Meg), flag 80 (active)
        beg: cyl 0/ head 1/ sector 1;
        end: cyl 1023/ head 254/ sector 63
Do you want to change it? [n] у

В настоящее время участок вмещает в себя все секторы диска. Нам требуется уменьшить число секторов на участке 1, а освободившиеся секторы использовать для создания участка 2. Участок 1 начинается с сектора 63 и должен занимать примерно 8 964 238 секторов. Ниже мы просто передаем эти числа утилите fdisk(8). Чтобы принять значение по умолчанию, просто нажимайте клавишу Enter:

Здесь мы позволили системе FreeBSD самостоятельно выбрать начальный сектор для размещения участка, но изменили число секторов на участке (1). Утилита fdisk(8) произвела некоторые вычисления и заметила, что участок заканчивается не на границе цилиндра (2). Разница по сравнению с размером, который вычислили мы, очень невелика. Несовпадение окончания участка с границей цилиндра может вызвать неполадки, особенно когда на компьютере установлено несколько операционных систем. Всегда позволяйте fdisk(8) исправить этот недостаток. После этого fdisk(8) показывает новый размер нового участка в секторах (3) и выводит окончательную информацию о новом участке (4), прежде чем запросить подтверждение на внесение изменений и перейти к следующему участку:

The data for partition 2 is:
<UNUSED>
Do you want to change it? [n] у
Supply a decimal value for "sysid (165=FreeBSD)" [0] 165
Supply a decimal value for "start" [0] 8964270
Supply a decimal value for "size" [0]
8964207

Этот участок ранее никогда не использовался, поэтому для него отсутствует информация по умолчанию. Нам необходимо ввести тип участка и номер начального сектора. Для участка 1 было выделено 8 964 207 секторов, MBR занимает 63 сектора, то есть уже использовано 8 964 269 секторов (8 964 207 + 62 = 8 964 269). Мы можем определить начало нового участка в секторе 8 964 270. Всего на диске имеется 17 928 477 секторов, таким образом, незанятыми остались 8 964 207 секторов (17 928 — 8 964 269 = 8 964 207). Давайте посмотрим, что об этих числах думает fdisk(8):

fdisk: WARNING: partition does not start on a head boundary
fdisk: WARNING: partition does not end on a cylinder boundary
fdisk: WARNING: this may confuse the BIOS or some operating systems
Correct this automatically? [n] у
(Перевод: fdisk: ВНИМАНИЕ: раздел начинается не на границе головки
fdisk: ВНИМАНИЕ: конец раздела находится не на границе цилиндра
fdisk: ВНИМАНИЕ: это может ввести в заблуждение BIOS и некоторые ОС
Исправить размер раздела автоматически?)

Утилита fdisk(8) недолго думает над числами, но она знает, что делает. Позвольте ей внести свои коррективы.

fdisk: WARNING: adjusting start offset of partition to 8964333
Explicitly specify beg/end address ? [n]
sysid 165 (0xa5),(FreeBSD/NetBSD/386BSD)
    start 8964333, size 8964207 (4377 Meg), flag 0
        beg: cyl 558/ head 1/ sector 1;
        end: cyl 91/ head 254/ sector 63
Are we happy with this entry? [n] у

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

Далее будет предложено изменить оставшиеся два участка. У нас на диске не осталось свободного пространства, поэтому мы никак не сможем задействовать эти участки:

Partition 1 is narked active
Do you want to change the active partition? [n]
(Перевод: Раздел 1 помечен как активный
Хотите изменить активный раздел?)

Запомните, активный раздел — это участок с корневой файловой системой на нем. Начальный загрузчик передает управление загрузчику системы, который находится на участке, который вы укажете. Если это не загрузочный диск, выбор того или иного активного раздела не играет никакой роли.

We haven't changed the partition table yet. This is your last chance.
(Перевод: Таблица разделов еще не изменена. Это ваш последний шанс.)
...
Information from DOS bootblock is:
(Перевод: Информация из загрузочного блока DOS:)
1: sysid 165 (0ха5),(FreeBSD/NetBSD/386BSD)
    start 63, size 8964207 (4377 Meg), flag 80 (active)
        beg: cyl 0/ head 1/ sector 1;
        end: cyl 557/ head 254/ sector 63
2: sysid 165 (0xa5),(FreeBSD/NetBSD/386BSD)
    start 8964333, size 8964207 (4377 Meg), flag 0
        beg: cyl 558/ head 1/ sector 1;
        end: cyl 91/ head 254/ sector 63
3: <UNUSED>
4: <UNUSED>
Should we write new partition table? [n] у
(Перевод: Следует ли записать новую таблицу разделов?)

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

Это все, что нужно сделать, чтобы получить новую таблицу участков на диске. Теперь создадим несколько разделов на этих участках.

Комментарии запрещены.