Відповіді:
Ви можете використовувати parted -l
для визначення типу таблиці розділів. Наприклад:
$ sudo parted -l
Model: ATA TOSHIBA THNSNS25 (scsi)
Disk /dev/sda: 256GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number Start End Size Type File system Flags
1 4194kB 32.2GB 32.2GB primary ext4 boot
2 32.2GB 256GB 224GB primary ext4
Model: ATA Hitachi HDT72101 (scsi)
Disk /dev/sdb: 1000GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number Start End Size Type File system Flags
1 1049kB 32.2GB 32.2GB primary ext4 boot
2 32.2GB 996GB 964GB primary ext4
3 996GB 1000GB 4295MB primary linux-swap(v1)
Partition Table
Поле показує , що я використовую msdos
MBR таблиці розділів (той , по- , як і раніше широко використовується для Linux і Windows) на обох дисках. Зі man
сторінки parted
можна створити (і, таким чином, сподіваємось, ідентифікувати) наступні типи таблиць розділів (або, ширше, "мітка диска"):
bsd
dvh
gpt - this is a GPT partition table
loop - this is raw disk access without a partition table
mac
msdos - this is a standard MBR partition table
pc98
sun
Варто додати команду для перерахування одного розділу, оскільки це не очевидно без певних знань, parted
і це може бути больовим знаходженням потрібних даних, якщо є кілька дисків. Бо /dev/sda
ти би робив:
parted /dev/sda print
parted /dev/sda p
теж зробимо.
У Linux можна перевірити це за допомогою gdisk
інструменту, який повинен бути доступний для будь-якого дистрибутива.
gdisk -l /dev/sda
Тут /dev/sda
знаходиться вузол пристрою фізичного диска , а не розділ ( /dev/sda1
, /dev/sda2
і т. Д. - це розділи).
Якщо ви бачите щось, що включає:
***************************************************************
Found invalid GPT and valid MBR; converting MBR to GPT format
in memory.
***************************************************************
У вас диск у форматі MBR. Не хвилюйтесь, це не принесло ніякої шкоди.
Якщо ви не бачите цього попередження, у вас є диск GPT або гібридний GPT / MBR диск. Пізніші здебільшого використовуються на машинах Apple, призначених для подвійного завантаження версій MS Windows, які не підтримують GPT. gdisk
вкаже це на:
Found valid GPT with hybrid MBR; using GPT
Вони також можуть використовуватися в інших ситуаціях, коли потрібна підтримка обох стилів.
cfdisk
на розділі GPT також призведе до попередження.
gdisk
пакеті, його можна знайти в gptfdisk
пакеті ... принаймні на Gentoo.
fdisk
або cfdisk
можуть підтримувати GPT і тому не показують помилку.
gdisk
виявляє гібридну таблицю розділів GPT + MBR і дає Found valid GPT with hybrid MBR; using GPT.
. Це здається єдиним методом, який виявить гібридну таблицю.
Оскільки в ОС не було вказано, ось FreeBSD спосіб робити речі.
Все робиться за допомогою gpart
команди (коротко для GEOM partioner - нічого спільного з GNU).
Простий gpart show
показав би всі наявні розділи всіх дисків, але ви можете вказати на пристрій для більш точного вигляду на одному:
старий макет розділів з MBR (він же "msdos") та схемами розділів BSD (для систем BSD зазвичай потрібен дворівневий розділ, за винятком випадків, коли використовується повний диск):
$
gpart show
=> 63 67108801 ada0 MBR (32G)
63 67108545 1 freebsd [active] (32G)
67108608 256 - free - (128k)
=> 0 67108545 ada0s1 BSD (32G)
0 2097152 2 freebsd-swap (1.0G)
2097152 65011393 1 freebsd-ufs (31G)
сучасний макет розділів за допомогою GPT :
$
gpart show /dev/ada2
=> 34 976773101 ada2 GPT (465G)
34 6 - free - (3.0k)
40 128 1 freebsd-boot (64k)
168 67108864 2 freebsd-swap (32G)
67109032 901775360 3 freebsd-zfs (430G)
Щоб дізнатися більше, все знаходиться в gpart
посібнику .
З udisks
Linux:
$ sudo /lib/udev/udisks-part-id /dev/sda
using device_file=/dev/sda syspath=/sys/devices/pci0000:00/0000:00:0b.0/ata1/host0/target0:0:0/0:0:0:0/block/sda, offset=0 ao=0 and number=0 for /dev/sda
Entering MS-DOS parser (offset=0, size=500107862016)
MSDOS_MAGIC found
found partition type 0xee => protective MBR for GPT
Exiting MS-DOS parser
Entering EFI GPT parser
GPT magic found
partition_entry_lba=2
num_entries=128
size_of_entry=128
Leaving EFI GPT parser
EFI GPT partition table detected
UDISKS_PARTITION_TABLE=1
UDISKS_PARTITION_TABLE_SCHEME=gpt
UDISKS_PARTITION_TABLE_COUNT=4
Вище у мене накопичувач із гібридним GPT + MS-DOS-розділенням. У цьому випадку ядро Linux ігнорує розділ MS-DOS, через що udisks
встановлює UDISKS_PARTITION_TABLE_SCHEME на gpt.
Цей інструмент udisks-part-id використовується для заповнення бази даних udev. Отже, якщо ви udisks
встановлені, ви можете мати можливість запитувати цю інформацію навіть як непривілейований користувач із:
$ udevadm info -q property -n sda | grep UDISKS_PARTITION_TABLE_SCHEME
UDISKS_PARTITION_TABLE_SCHEME=gpt
0xee
. У гібриді це звичайний MBR з одним 0xee
розділом (і можливі великі проблеми, якщо дані MBR не синхронізуються з даними GPT).
Використовуйте
$ sudo fdisk -l
Disk /dev/sda: 119.2 GiB, 128035676160 bytes, 250069680 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: dos
Disk identifier: 0x987c1a05
Device Boot Start End Sectors Size Id Type
/dev/sda1 * 2048 999423 997376 487M 83 Linux
/dev/sda2 1001470 250068991 249067522 118.8G 5 Extended
/dev/sda5 1001472 250068991 249067520 118.8G 8e Linux LVM
Дивіться тип Disklabel: dos . Якщо він показує dos, це означає, що це схема MBR else GPT-схема
У своїх сценаріях Alpine Linux Partition я використовую:
check_scheme() {
fdisk -l $1 |grep "Disklabel type:" |awk '{ print $3 }'
}
fdisk -l /dev/sda | grep -i disklabel
нічого не повертається ( GNU Fdisk 1.3.0a ).
Можна використовувати blkid
.
Приклади з виходом:
# blkid /dev/sdc
/dev/sdc: PTUUID="92f03b9b-7402-4ad2-8316-08a991c237b3" PTTYPE="gpt"
# blkid -o export /dev/sdc
DEVNAME=/dev/sdc
PTUUID=92f03b9b-7402-4ad2-8316-08a991c237b3
PTTYPE=gpt
Або в сценарії, з -o value
опцією:
disk=$1
part_type=$(blkid -o value -s PTTYPE $disk)
case $part_type in
gpt) echo "GPT";;
dos) echo "MBR";;
*) echo "partition is $part_type";;
esac