Как работать с таблицами разделов с помощью fdisk, cfdisk и sfdisk в Linux
Fdisk, cfdisk и sfdisk — это утилиты для создания разделов из командной строки, включенные по умолчанию во все дистрибутивы Linux. Они предоставляют разные интерфейсы для одного и того же набора функций: хотя все они могут использоваться в интерактивном режиме, только sfdisk ориентирован на скрипты. Они поддерживают таблицы разделов DOS, GPT, SGI и SUN.
В этом уроке мы узнаем, как работать с таблицами разделов с помощью fdisk, cfdisk и sfdisk, а также исследуем различия между этими инструментами.
В этом уроке вы узнаете:
- Как использовать fdisk, cfdisk и sfdisk для работы с таблицами разделов
- Как использовать sfdisk для дампа и восстановления таблицы разделов
- Как перечислить идентификаторы типов разделов MBR и GPT
Мы можем управлять разделами из "главного" интерфейса, используя соответствующие пункты в нижнем меню:
Чтобы изменить тип раздела, выбираем его и нажимаем клавишу t (или T), затем выбираем пункт в специальном меню:
Использование sfdisk
В отличие от сопутствующих утилит, sfdisk ориентирован на скрипты, поэтому обычно используется для выполнения операций без ожидания взаимодействия с пользователем. sfdisk считывает команды и инструкции из стандартного ввода. Когда стандартным входом является терминал, он работает в интерактивном режиме:
sudo sfdisk /dev/vda
Welcome to sfdisk (util-linux 2.38.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Checking that no-one is using this disk right now ... OK
Disk /dev/vda: 20 GiB, 21474836480 bytes, 41943040 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
sfdisk is going to create a new 'dos' disk label.
Use 'label: ' before you define a first partition
to override the default.
Type 'help' to get more information.
>>>
Как и при использовании fdisk и cfdisk, изменения записываются на диск только по явному запросу, а таблицы разделов "DOS" используются по умолчанию; Чтобы переключиться на GPT, нам необходимо выполнить:
>>> label: gptСинтаксис, используемый для создания раздела, довольно прост. Формат ввода должен включать следующие поля, разделенные запятой, пробелом или точкой с запятой:
<start> <size> <type> <bootable>Параметр "start" - это начальная точка раздела (выраженная в секторах или в одном из доступных форматов, которые мы видели ранее), "size" и "type" - соответственно, размер и тип раздела. Наконец, параметр "bootable" используется для обозначения раздела как загрузочного, используя символ "*".
Давайте рассмотрим пример. Предположим, мы работаем над таблицей разделов DOS и хотим создать загрузочный раздел размером 1 ГиБ. Вот что мы напишем:
>>> ,1GiB,83,*Давайте объясним. Прежде всего, мы опустили первое поле, поэтому для раздела используется начальная точка по умолчанию. Во втором поле мы написали "1GiB": это размер раздела. В третьем поле мы указали тип раздела: в данном случае мы использовали 83, который является идентификатором таблицы разделов DOS для типа "файловая система Linux" (идентификаторы GPT отличаются, как мы увидим). Наконец, в четвертом поле мы использовали "*", чтобы отметить раздел как загрузочный. Вот результат выполнения команды:
Created a new partition 1 of type 'Linux' and of size 1 GiB.
/dev/vda1 : 2048 2099199 (1G) Linux
/dev/vda2:
Теперь мы можем передать информацию о следующем разделе или записать таблицу разделов на диск, используя команду "write".
sfdisk в режиме "скрипт"
Как мы уже говорили, sfdisk считывает инструкцию со стандартного ввода, поэтому для запуска в неинтерактивном режиме мы можем передавать инструкции ему напрямую. Мы можем повторить то, что мы сделали в предыдущем примере, используя оболочечную трубу:
echo ",1GiB,83,*" | sudo sfdisk /dev/vdaМы даже можем использовать "строку здесь":
sudo sfdisk /dev/vda <<< ",1GiB,83,*"Обратите внимание, однако, что такие команды всегда "начинаются с нуля", поэтому они каждый раз создают новую метку диска (удаляя существующие разделы), и что в режиме "скрипт" sfdisk немедленно записывает изменения на диск. Что, если мы захотим добавить партицию в существующую таблицу? Для выполнения этой задачи мы используем опцию --append. Например, чтобы добавить раздел в существующую таблицу и назначить ему все оставшееся место на диске, мы выполним:
echo ",," | sudo sfdisk --append /dev/vdaКак создать сразу несколько разделов? Мы можем использовать ту же технику, разделяя каждую инструкцию с новой строки. В приведенном ниже примере мы создаем таблицу разделов GPT и две секции с помощью одной команды:
echo -e "label: gpt\n,1GiB\n," | sudo sfdisk /dev/vdaУдобнее было бы использовать конструкцию «здесь документ», которая более понятна нам, глупым людям:
sudo sfdisk /dev/vda << EOF
label: gpt
,1GiB
,
EOFВ отличие от fdisk и cfdisk, sfdisk по умолчанию не стирает первый сектор диска при создании новой таблицы разделов. Чтобы получить такое же поведение двух других утилит, он должен быть вызван с опцией --wipe always.
Изменение размера секции
До сих пор мы видели, как создавать разделы с нуля. Как насчет сжатия или расширения существующей перегородки? Что ж, это довольно простая операция, если подумать: все, что нам нужно сделать, это использовать те же параметры, которые мы использовали во время создания. Единственное, что нам нужно, это способ ссылки на конкретный раздел. Мы можем сделать это с помощью опции -N, передав номер секции в качестве аргумента. В предыдущем примере мы создали таблицу разделов GPT с двумя разделами. Первый имел размер 1ГиБ. Чтобы уменьшить его до 512 МиБ, мы выполним:
echo ",512MiB" | sudo sfdisk -N 1 /dev/vdaВывод команды сообщает о старой и текущей ситуации:
Old situation:
Device Start End Sectors Size Type
/dev/vda1 2048 2099199 2097152 1G Linux filesystem
/dev/vda2 2099200 41940991 39841792 19G Linux filesystem
/dev/vda1:
New situation:
Disklabel type: gpt
Disk identifier: B95D2ECA-1336-6949-89E8-BDC3B493F9A2
Device Start End Sectors Size Type
/dev/vda1 2048 1050623 1048576 512M Linux filesystem
/dev/vda2 2099200 41940991 39841792 19G Linux filesystem
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
Вот и все: вместо того, чтобы указывать количество места, которое нужно вычесть или добавить в раздел, мы напрямую указываем его новый размер. Излишне говорить, что если файловая система существует на разделе, нам нужно уменьшить ее перед уменьшением самого раздела.
Выгрузка и восстановление таблицы секций
Мы можем использовать sfdisk для дампа и восстановления таблицы разделов диска. Для выполнения такого действия мы вызываем утилиту с опцией -d (сокращение от --dump). По умолчанию конфигурация выгружается в стандартный вывод. Вместо этого мы можем захотеть перенаправить его в файл:
sudo sfdisk -d /dev/vda > vda_dump.txtЧтобы повторно применить выгруженную конфигурацию к диску, мы выполним:
sudo sfdisk /dev/vda < vda_dump.txtЧтобы реплицировать таблицу разделов на другой диск, мы можем передать вывод команды непосредственно другому экземпляру sfdisk:
sudo sfdisk -d /dev/vda | sudo sfdisk /dev/vdbЕсли мы просто хотим взглянуть на текущую таблицу разделов, мы можем вызвать sfdisk с опцией -l (--list):
sudo sfdisk -l /dev/vda
Disk /dev/vda: 20 GiB, 21474836480 bytes, 41943040 sectors
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: gpt
Disk identifier: B95D2ECA-1336-6949-89E8-BDC3B493F9A2
Device Start End Sectors Size Type
/dev/vda1 2048 2099199 2097152 1G Linux filesystem
/dev/vda2 2099200 41940991 39841792 19G Linux filesystemТипы разделов
Типы разделов указывают на назначение раздела или содержащуюся на нем файловую систему. Мы можем перечислить доступные типы разделов по-разному, в зависимости от используемой утилиты. При использовании fdisk, например, мы можем получить список доступных типов разделов с помощью l. Шестнадцатеричный идентификатор используется в таблицах разделов DOS, а GUID — в GPT. Выполнив команду l на диске с разделами GPT, мы получим следующий (усеченный) вывод:
1 EFI System C12A7328-F81F-11D2-BA4B-00A0C93EC93B
2 MBR partition scheme 024DEE41-33E7-11D3-9D69-0008C781F39F
3 Intel Fast Flash D3BFE2DE-3DAF-11DF-BA40-E3A556D89593
4 BIOS boot 21686148-6449-6E6F-744E-656564454649
5 Sony boot partition F4019732-066E-4E12-8273-346C5641494F
6 Lenovo boot partition BFBFAFE7-A34F-448A-9A5B-6213EB736C22
7 PowerPC PReP boot 9E1A2D38-C612-4316-AA26-8B49521E5A8B
8 ONIE boot 7412F7D5-A156-4B13-81DC-867174929325
9 ONIE config D4E6E2CD-4469-46F3-B5CB-1BFF57AFC149
10 Microsoft reserved E3C9E316-0B5C-4DB8-817D-F92DF00215AE
11 Microsoft basic data EBD0A0A2-B9E5-4433-87C0-68B6B72699C7
12 Microsoft LDM metadata 5808C8AA-7E8F-42E0-85D2-E1E90434CFB3
13 Microsoft LDM data AF9B60A0-1431-4F62-BC68-3311714A69AD
14 Windows recovery environment DE94BBA4-06D1-4D40-A16A-BFD50179D6AC
15 IBM General Parallel Fs 37AFFC90-EF7D-4E96-91C3-2D7AE055B174
16 Microsoft Storage Spaces E75CAF8F-F680-4CEE-AFA3-B001E56EFC2D
17 HP-UX data 75894C1E-3AEB-11D3-B7C1-7B03A0000000
18 HP-UX service E2A1E728-32E3-11D6-A682-7B03A0000000
19 Linux swap 0657FD6D-A4AB-43C4-84E5-0933C84B4F4F
20 Linux filesystem 0FC63DAF-8483-4772-8E79-3D69D8477DE4
[...]На диске, разделенном на разделы DOS, вывод будет следующим:
00 Empty 27 Hidden NTFS Win 82 Linux swap / So c1 DRDOS/sec (FAT-
01 FAT12 39 Plan 9 83 Linux c4 DRDOS/sec (FAT-
02 XENIX root 3c PartitionMagic 84 OS/2 hidden or c6 DRDOS/sec (FAT-
03 XENIX usr 40 Venix 80286 85 Linux extended c7 Syrinx
04 FAT16 <32M 41 PPC PReP Boot 86 NTFS volume set da Non-FS data
05 Extended 42 SFS 87 NTFS volume set db CP/M / CTOS / .
06 FAT16 4d QNX4.x 88 Linux plaintext de Dell Utility
07 HPFS/NTFS/exFAT 4e QNX4.x 2nd part 8e Linux LVM df BootIt
08 AIX 4f QNX4.x 3rd part 93 Amoeba e1 DOS access
09 AIX bootable 50 OnTrack DM 94 Amoeba BBT e3 DOS R/O
0a OS/2 Boot Manag 51 OnTrack DM6 Aux 9f BSD/OS e4 SpeedStor
0b W95 FAT32 52 CP/M a0 IBM Thinkpad hi ea Linux extended
0c W95 FAT32 (LBA) 53 OnTrack DM6 Aux a5 FreeBSD eb BeOS fs
0e W95 FAT16 (LBA) 54 OnTrackDM6 a6 OpenBSD ee GPT
0f W95 Ext'd (LBA) 55 EZ-Drive a7 NeXTSTEP ef EFI (FAT-12/16/
10 OPUS 56 Golden Bow a8 Darwin UFS f0 Linux/PA-RISC b
11 Hidden FAT12 5c Priam Edisk a9 NetBSD f1 SpeedStor
12 Compaq diagnost 61 SpeedStor ab Darwin boot f4 SpeedStor
14 Hidden FAT16 <3 63 GNU HURD or Sys af HFS / HFS+ f2 DOS secondary
16 Hidden FAT16 64 Novell Netware b7 BSDI fs f8 EBBR protective
17 Hidden HPFS/NTF 65 Novell Netware b8 BSDI swap fb VMware VMFS
18 AST SmartSleep 70 DiskSecure Mult bb Boot Wizard hid fc VMware VMKCORE
1b Hidden W95 FAT3 75 PC/IX bc Acronis FAT32 L fd Linux raid auto
1c Hidden W95 FAT3 80 Old Minix be Solaris boot fe LANstep
1e Hidden W95 FAT1 81 Minix / old Lin bf Solaris ff BBT
24 NEC DOSЧтобы узнать доступные типы при использовании sfdisk, вместо этого мы можем использовать опцию -T и передать тип метки раздела в качестве аргумента в --label. Например, чтобы получить список типов разделов для GPT и их GUID, мы выполним:
sfdisk -T --label gptДля удобства существует ряд псевдонимов для типов разделов. Они автоматически принимают соответствующее значение в зависимости от используемой таблицы разделов:
| ТИП ПЕРЕГОРОДКИ | ПСЕВДОНИМ | Идентификатор MBR | GPT GUID |
|---|---|---|---|
| линукс | L | 83 | 0FC63DAF-8483-4772-8E79-3D69D8477DE4 |
| обменивать | S | 82 | 0657FD6D-A4AB-43C4-84E5-0933C84B4F4F |
| растянутый | Бывший | 05 | &8211; |
| дом | H | – | 933AC7E1-2EB4-4F13-B844-0E14E2AEF915 |
| uefi | U | ЭФ | C12A7328-Ф81Ф-11Д2-БА4Б-00А0К93ЭК93Б |
| рейд | R | ФД | A19D880F-05FC-4D3B-A006-743F0F84911E |
| lvm | V | 8Э | E6D6D379-Ф507-44К2-А23К-238Ф2А3ДФ928 |
Выводы
В этом уроке мы узнали, как работать с таблицами разделов с помощью трех похожих утилит, которые предустановлены во всех дистрибутивах Linux: fdisk, cfdisk и sfdisk. Первые два предназначены для работы в интерактивном режиме; Третий, SFDid, ориентирован на скрипты.



