Команда fdisk позволяет задействовать одноименную утилиту для модификации таблиц разделов жестких дисков формата MSDOS. Для модификации таблиц разделов жестких дисков формата GPT используется утилита gdisk.
Таблица разделов формата MSDOS находится в нулевом секторе жесткого диска и может содержать описание четырех разделов (называемых основными), причем один из этих разделов (расширенный) может содержать описания дополнительных разделов (логических). Четыре основных раздела имеют номера от 1 до 4, после чего идут номера логических разделов.
Данная утилита не рекомендуется к использованию начинающим пользователям, так как с помощью нее пользователь может уничтожить все хранящиеся на жестком диски данные и вообще нарушить работоспособность системы. Также стоит иметь в виду, что таблицы разделов формата MSDOS не могут эффективно использоваться на жестких дисках большого объема (более 2 Тб), поэтому в последнее время их заменяют таблицы разделов формата GPT.
Примечание: в составе ОС DOS и Windows также поставляется утилита fdisk, которая предназначена для выполнения аналогичных операций.
Базовый синтаксис команды выглядит следующим образом:
# fdisk [параметры] устройство
Утилита должна запускаться от лица пользователя root и в большинстве случаев принимает путь к файлу устройства жесткого диска в качестве последнего аргумента (в формате /dev/sdX, где X- буквенное обозначение диска, например, /dev/sdc). Заслуживающими внимания параметрами утилиты являются параметр -l, позволяющий ознакомиться с содержанием существующей таблицы разделов жесткого диска (или всех жестких дисков при отсутствии пути к файлу устройства), параметры -b, -C, -H и -S, позволяющие вручную указать такие параметры жесткого диска, как размер логического и физического сектора, количество цилиндров, количество головок и количество секторов соответственно (что совсем не обязательно, ведь современные версии ядра Linux предоставляют утилите всю необходимую информацию) и параметр -u, позволяющий активировать вывод количества цилиндров вместо количества секторов (-u=cylinders).
Утилита работает в интерактивном режиме, то есть, вам придется отвечать на задаваемые ею вопросы. Здесь нужно помнить о команде m, которая позволяет вывести список всех доступных вариантов ответа.
Для вывода списка разделов жесткого диска достаточно использовать параметр -l и путь к файлу устройства этого жесткого диска. Для того, чтобы выяснить путь к файлу устройства жесткого диска может использоваться утилита lsblk (часть вывода сокращена):
$ lsblk -o "NAME,FSTYPE,MOUNTPOINT,MODEL"
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
...
sdc MAXTOR STM316081
├─sdc1 swap [SWAP]
├─sdc2 ext4
└─sdc4 ext4
sdd vfat /media/alexu/sd card SD Storage
sde Transcend 1GB
└─sde1 vfat
sr0 DRW-24B3ST
sr1 Mass Storage
В качестве примера буду использовать флеш-накопитель с интерфейсом USB малого объема (Transcend 1GB), который в данном случае будет работать аналогично жесткому диску:
# fdisk -l /dev/sde
Диск /dev/sde: 1000 MiB, 1048576000 байт, 2048000 секторов
Единицы: секторов по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер I/O (минимальный/оптимальный): 512 байт / 512 байт
Тип метки диска: dos
Идентификатор диска: 0x00000000
Устр-во Загрузочный начало Конец Секторы Размер Идентификатор Тип
/dev/sde1 2048 2047999 2045952 999M 83 Linux
Утилита вывела корректные данные. В том случае, если нужно получить данные обо всех дисках, путь к файлу устройства диска может не использоваться:
# fdisk -l
Давайте удалим все разделы с нашего флеш-накопителя и создадим новый раздел. Для этого будем использовать интерактивную сессию, передав утилите путь к файлу жесткого диска без каких-либо параметров.
# fdisk /dev/sde
Добро пожаловать в fdisk (util-linux 2.31.1).
Изменения останутся только в памяти до тех пор, пока вы не решите записать их.
Будьте внимательны, используя команду write.
Для начала ознакомимся со справкой, воспользовавшись командой m:
Команда (m для справки): m
Справка:
DOS (MBR)
a переключение флага загрузки
b редактирование вложенной метки диска BSD
c переключение флага dos-совместимости
Общие
d удалить раздел
F показать свободное неразмеченное пространство
l список известных типов разделов
n добавление нового раздела
p вывести таблицу разделов
t изменение типа раздела
v проверка таблицы разделов
i вывести информацию о разделе
Разное
m вывод этого меню
u изменение единиц измерения экрана/содержимого
x дополнительная функциональность (только для экспертов)
Сценарий
I загрузить разметку из файла сценария sfdisk
O записать разметку в файл сценария sfdisk
Записать и выйти
w запись таблицы разделов на диск и выход
q выход без сохранения изменений
Создать новую метку
g создание новой пустой таблицы разделов GPT
G создание новой пустой таблицы разделов SGI (IRIX)
o создание новой пустой таблицы разделов DOS
s создание новой пустой таблицы разделов Sun
Нам нужно удалить раздел, поэтому воспользуемся командой d:
Команда (m для справки): d
Выбранный раздел 1
Раздел 1 был удален.
fdisk автоматически выберет единственный первый раздел и удалит его. Теперь следует воспользоваться командой p для вывода списка всех разделов и проверки корректности удаления раздела:
Команда (m для справки): p
Диск /dev/sde: 1000 MiB, 1048576000 байт, 2048000 секторов
Единицы: секторов по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер I/O (минимальный/оптимальный): 512 байт / 512 байт
Тип метки диска: dos
Идентификатор диска: 0x00000000
Теперь создадим новый раздел с помощью команды n:
Команда (m для справки): n
Тип раздела
p основной (0 первичный, 0 расширеный, 4 свободно)
e расширенный (контейнер для логических разделов)
Выберите (по умолчанию - p):
Используется ответ по умолчанию p
Номер раздела (1-4, по умолчанию 1):
Первый сектор (2048-2047999, по умолчанию 2048):
Последний сектор + число секторов или + размер{K,M,G,T,P} (2048-2047999, по умолча
Создан новый раздел 1 с типом 'Linux' и размером 999 MiB.
Утилита по умолчанию предлагает ответы, позволяющие создать основной раздел размером в весь диск. Разумеется, вы можете создавать разделы других типов и размеров, вводя соответствующие ответы на вопросы.
Осталось записать изменения на диск с помощью команды w:
Команда (m для справки): w
Таблица разделов была изменена.
Вызывается ioctl() для перечитывания таблицы разделов.
Синхронизируются диски.
После записи изменений на диск утилита автоматически завершит свою работу. Для того, чтобы проверить корректность работы утилиты, достаточно снова использовать утилиту lsblk:
$ lsblk -o "NAME,FSTYPE,MOUNTPOINT,MODEL"
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
...
sdc MAXTOR STM316081
├─sdc1 swap [SWAP]
├─sdc2 ext4
└─sdc4 ext4
sdd vfat /media/alexu/sd card SD Storage
sde Transcend 1GB
└─sde1 vfat
sr0 DRW-24B3ST
sr1 Mass Storage
Для того, чтобы на раздел можно было записать данные, нужно создать в нем файловую систему. Для этого используется одна из утилит mkfs.*. Я буду создавать файловую систему FAT, которая отлично подходит для флеш-накопителей:
# mkfs.vfat -n "Jet Flash" /dev/sde1
mkfs.fat 4.1 (2017-01-24)
mkfs.fat: warning - lowercase labels might not work properly with DOS or Windows
Современные версии Windows будут нормально отображать введенную после параметра -n метку раздела, поэтому не стоит обращать внимание на предупреждение. В результате раздел появится в файловом менеджере и вы сможете хранить данные на накопителе.