Как проверить, является ли раздел основным/расширенным в Linux

Ниже приведена информация, которую я получаю с помощью команды (g)parted или fdisk.

Device     Boot     Start       End   Sectors  Size Id Type
/dev/sda1  *         2048 196265983 196263936 93.6G 83 Linux
/dev/sda2       196268030 229468159  33200130 15.9G  5 Extended
/dev/sda5       196268032 229468159  33200128 15.9G 82 Linux swap / Solaris

enter image description here

Доступна ли информация на основе системного вызова или файловой системы (/sys/block и т. д.), чтобы узнать, является ли раздел расширенным/первичным, а иерархия sda5 находится в sda2 и т. д.? Если да, есть ли способ узнать, какие логические разделы находятся под выбранным расширенным разделом?

Я хочу избежать синтаксического анализа вывода команд(ы). Я пытался прочитать код fdisk, но он слишком сложен для меня, чтобы понять его.

Редактировать 1: Прочитав комментарии и ответы, я понял, что не знал о MBR/GPT и т. д. Итак, я решил прочитать о внутренностях MBR и EBR https://thestarman.pcministry.com/asm/mbr/ PartTables2.htm#ebr и написал код для получения информации о разделах диска.

0
25.02.2019, 22:35
3 ответа

Этот вопрос четко не определен.

Если диск отформатирован с помощью GPT, то расширенных разделов нет, а значит, нет и иерархии.

Если диск отформатирован с использованием MBR таким образом, что ОС Microsoft может получить к нему доступ, то существует не более 1 расширенного раздела, а всего до 4 основных и дополнительных разделов. Они будут иметь имена вида /dev/sdf[0 -3]. Если есть какие-либо логические разделы, они будут иметь номера разделов больше 4. Чтобы иметь логические разделы, вы должны иметь расширенный раздел для их хранения.

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

Так, в частности, у вас может быть раздел 1, являющийся небольшим загрузочным разделом, раздел 2, покрывающий все, чего не было в разделе 1, раздел 3, покрывающий первую половину раздела 2 и имеющий тип «расширенный», а раздел 4 является вторая половина раздела 2. Внутри раздела 3 у вас могут быть разделы 5 и 6, каждый из которых занимает половину раздела 3. Все это будет работать нормально, если вы на самом деле не пытаетесь использовать раздел 2. Однако разделы 5 и 6 находятся в оба раздела 2 и 3, поэтому «иерархия» не является DAG (Направленный ациклический граф ), и поэтому «потребность клиента» не может быть удовлетворена.

Мой совет таким клиентам: удвойте комиссию.

«Тип» раздела для основного/расширенного записывается в MBR, поэтому вы можете использовать код, подобный dd bs=1 skip=446 count=64 if=/dev/sdf | hexdump -C, чтобы получить что-то вроде этого

00000000  00 20 21 00 83 df 13 0c  00 08 00 00 00 20 03 00  |. !............|
00000010  00 df 14 0c 05 19 0d cc  00 28 03 00 00 e0 2e 00  |.........(......|
00000020  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000030  00 19 0e cc 83 15 50 05  00 08 32 00 00 f8 0d 00  |......P...2.....|

и вы можете выбрать 5-й байт (83, 05, 00, 83 ), чтобы получить 4 значения. Обычный «тип» расширенного раздела — 05, но также используются 0f и 85. См.https://www.win.tue.nl/~aeb/partitions/partition_types-1.htmlдля получения дополнительной информации.

Таким образом, вы видите, есть ли расширенный раздел (, второй в данном случае ), и тогда вы знаете, что в нем есть разделы с номерами больше 4.

0
28.01.2020, 03:57

При использовании стиля разбиения MBR Linux резервирует первые 4 слота раздела (, например.sd*[1-4])для первичных разделов. Чтобы вообще иметь логические разделы, один из этих 4 необходимо использовать для расширенного раздела. И тогда логические разделы всегда будут появляться, начиная со слота 5 и далее.

Диск с разделами MBR -обычно должен иметь не более одного расширенного раздела :если есть два или более расширенных раздела со своими собственными цепочками логических отображать большое предупреждение и не продолжать дальше, так как разные ОС могут иметь разные представления о том, как его анализировать.

В месте, указанном вашим /sys/block/sda/sda2/start, вы должны найти Расширенную загрузочную запись раздела (EPBR ), которая по сути является урезанной -версией MBR. Его первая запись в таблице разделов должна идентифицировать начало и размер первого логического раздела. Если есть дополнительные логические разделы, запись о втором разделе в EPBR будет указывать на другой EPBR и так далее. Чтобы полностью проанализировать структуру диска, вам может потребоваться пройти по цепочке (и )EPBR.

0
28.01.2020, 03:57

Похоже, вы просто хотите parted -l. Вот что я получаю в одной из своих систем с таблицами MBR и расширенными разделами:

$ sudo parted -l
Model: ASMT ASM1156-PM (scsi)
Disk /dev/sda: 1500GB
Sector size (logical/physical): 512B/4096B
Partition Table: msdos
Disk Flags: 

Number  Start   End     Size    Type     File system  Flags
 1      32.3kB  10.5GB  10.5GB  primary  ntfs         boot
 3      10.5GB  1500GB  1490GB  primary  ext4


Model: ASMT ASM1156-PM (scsi)
Disk /dev/sdb: 2000GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 

Number  Start   End     Size    Type     File system  Flags
 1      1049kB  1963GB  1963GB  primary  ext4         boot
 2      1963GB  2000GB  37.7GB  primary  ext4


Model: SD USD (sd/mmc)
Disk /dev/mmcblk0: 16.0GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 

Number  Start   End     Size    Type      File system  Flags
 1      4194kB  1686MB  1682MB  primary   fat32        lba
 2      1686MB  16.0GB  14.3GB  extended
 5      1686MB  1720MB  33.6MB  logical   ext4
 6      1720MB  1792MB  72.4MB  logical   fat32        lba
 7      1795MB  16.0GB  14.2GB  logical   ext4

Это ясно показывает, является ли раздел первичным, расширенным или логическим (разделами, созданными внутри расширенного ). Другая полезная команда — lsblk, которая в той же системе выводит:

$ lsblk 
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda           8:0    0  1.4T  0 disk 
├─sda1        8:1    0  9.8G  0 part 
└─sda3        8:3    0  1.4T  0 part /media/pi/movies
sdb           8:16   0  1.8T  0 disk 
├─sdb1        8:17   0  1.8T  0 part /media/pi/bigboy
└─sdb2        8:18   0 35.2G  0 part 
mmcblk0     179:0    0 14.9G  0 disk 
├─mmcblk0p1 179:1    0  1.6G  0 part 
├─mmcblk0p2 179:2    0    1K  0 part 
├─mmcblk0p5 179:5    0   32M  0 part 
├─mmcblk0p6 179:6    0   69M  0 part /boot
└─mmcblk0p7 179:7    0 13.2G  0 part /

Здесь вы можете узнать, что раздел расширен, так как его размер пренебрежимо мал (mmcblk02, расширенный раздел отображается как 1 КБ ).

0
28.01.2020, 03:57

Теги

Похожие вопросы