MBR

MBR – это пережиток первых дней MS-DOS, который на протяжении десятилетий был стандартной схемой разбиения на ПК. Таблица разделов хранится в первом секторе диска, называемом загрузочным сектором, вместе с загрузчиком, которым в ОС является загрузчик GRUB. Но MBR имеет ряд ограничений, которые препятствуют ее использованию: невозможность адресации дисков размером более 2 ТБ и возможность создать только 4 первичных раздела на диске.

Управление разделами MBR

Стандартной утилитой для управления разделами MBR в ОС является fdisk – это интерактивная утилита с меню. В качестве параметра нужно задать имя устройства, соответствующее диску, который требуется отредактировать. Например, команда:

fdisk /dev/sda

отредактирует таблицу разделов первого устройства, подключенного по SATA (sda) в ОС. Следует иметь в виду, что нужно указать устройство, соответствующее физическому диску, а не один из его разделов (например, /dev/sda1).

Все операции с дисками в данном контексте необходимо выполнять от имени пользователя root (системного администратора) или с привилегиями root, используя sudo.

При вызове fdisk покажет приветствие, затем предупреждение и будет ждать ваших команд.

fdisk /dev/sda
Welcome to fdisk (util-linux 2.33.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
​Command (m for help):

Следует обратить внимание, что можно создавать, редактировать или удалять разделы по своему усмотрению и ничего не будет записано на диск, пока не будет использована команда записи w(write). Таким образом, можно "практиковаться" без риска потери данных. Чтобы выйти из fdisk без сохранения изменений, используют команду q(quit).

При этом не следует практиковаться на важном диске, так как всегда есть риск. Вместо этого используют запасной внешний диск или флеш-накопитель USB.

Печать текущей таблицы разделов

Команда p(print)используется для печати текущей таблицы разделов. Вывод на экран выглядит примерно следующим образом:

Command (m for help): p
Disk /dev/sda: 111.8 GiB, 120034123776 bytes, 234441648 sectors
Disk model: CT120BX500SSD1
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x97f8fef5
Device Boot start End Sectors Size Id Type
/dev/sda1 4096 226048942 226044847 107.8G 83 Linux
/dev/sda2 226048944 234437550 8388607 4G 82 Linux swap / Solaris

Значения столбцов:

  • Device – устройство, назначенное разделу;
  • Boot – показывает, является ли раздел "загрузочным" или нет;
  • Start – сектор, с которого начинается раздел;
  • End – сектор, где заканчивается раздел;
  • Sectors – общее количество секторов в разделе. Умножают его на размер сектора, чтобы получить размер раздела в байтах;
  • Size – размер раздела в "удобочитаемом" формате. В приведенном выше примере значения указаны в гигабайтах;
  • Id – числовое значение, представляющее тип раздела;
  • Type – описание типа раздела.

Для получения аналогичной информации можно выполнить в консоли команду fdisk с опцией -l:

fdisk -l
Disk /dev/sda: 40 GiB, 42949672960 bytes, 83886080 sectors
Disk model: VMware Virtual S
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x00000000

Первичные и расширенные разделы

На MBR-диске может быть 2 основных типа разделов: основной первичный (primary) и расширенный (extended). Если требуется сделать диск "загрузочным", первый раздел должен быть основным. Следует учесть, что в таблице MBR может быть только 4 основных раздела на диске.

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

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

Создание раздела

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

Обычно для первого сектора используют значение по умолчанию, предложенное fdisk, если только не нужно, чтобы раздел начинался с определенного сектора. Вместо указания последнего сектора можно указать размер, за которым следуют буквы K, M, G, T или P (Kilo, Mega, Giga, Tera или Peta). Например, если нужно создать раздел размером 1 ГБ, то вместо последнего сектора указывают +1G. Ниже пример создания основного раздела:

Command (m for help): n
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-3903577, default 2048): 2048
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-3903577, default 3903577): +1G

Проверка нераспределенного пространства диска

Если неизвестно сколько свободного места осталось на диске, то можно использовать команду F(free), чтобы показать нераспределенное пространство, например:

Command (m for help): F
Unpartitioned space /dev/sdd: 881 MiB, 923841536 bytes, 1804378 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
start End Sectors Size
2099200 3903577 1804378 881M

Удаление разделов

Чтобы удалить раздел, используют команду d(delete). fdisk запросит номер раздела, который требуется удалить, если количество разделов больше одного. Если на диске всего один раздел, то он будет удален сразу.

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

Также следует иметь в виду, что при создании нового раздела с помощью fdisk максимальный размер будет ограничен максимальным объемом непрерывного свободного пространства на диске.

Например, на диске имеются следующие разделы:

Device Boot start End Sectors Size Id Type
/dev/sdd1 2048 1050623 1048576 512M 83 Linux
/dev/sdd2 1050624 2099199 1048576 512M 83 Linux
/dev/sdd3 2099200 3147775 1048576 512M 83 Linux

Затем удаляются раздел 2 (/dev/sdd2) и проверяется наличие свободного места:

Command (m for help): F
Unpartitioned space /dev/sdd: 881 MiB, 923841536 bytes, 1804378 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
start End Sectors Size
1050624 2099199 1048576 512M
3147776 3903577 755802 369M

Суммарно доступно 881 МБ нераспределенного пространства.

Но при создании раздела размером 700 МБ происходит следующее:

Command (m for help): n
Partition type
p primary (2 primary, 0 extended, 2 free)
e extended (container for logical partitions)
Select (default p): p
Partition number (2,4, default 2): 2
First sector (1050624-3903577, default 1050624):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (1050624-2099199, default 2099199): +700M
Value out of range.

Параметр "Value out of range" говорит о том, что допустимое значение размера раздела было превышено. Это происходит потому, что самым большим непрерывным нераспределенным пространством на диске является блок размером 512 МБ, который принадлежал разделу 2, а следующее нераспределенное пространство находится после раздела 3 (/dev/sdd3). Fdisk не может объединить нераспределенные участки. разделенные разделами.

Изменение типа раздела

Иногда может понадобиться изменить тип раздела, особенно при работе с дисками, которые будут использоваться в других ОС и платформах. Сделать это можно с помощью команды t(type), за которой следует номер раздела, подлежащий изменению.

Тип раздела должен быть указан соответствующим шестнадцатеричным кодом. Посмотреть список всех допустимых кодов можно используя команду l(list).

Не следует путать тип раздела с используемой на нем ФС. В изначальном замысле между ними существовала непосредственная зависимость, но в настоящее время это не совсем так. Например, раздел ОС может содержать любую собственную файловую систему ОС, такую как ext4 или ReiserFS.

Разделы ОС имеют тип 83(Linux). Разделы подкачки бывают типа 82(Linux Swap).