GPT или MBR: откуда я знаю?

Ответы:

87

Вы можете использовать, 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Поле показывает , что я использую msdosMBR таблицы разделов (тот , по- прежнему широко используется для 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
Graeme
источник
Это отличная команда, Грэм. Хотя я использую Linux уже несколько лет, я никогда этого не замечал. Спасибо!
Тим
3
parted /dev/sda pтоже сделаю.
Sjas
я должен был сделать "sudo
parted
33

В 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.
2
@orion Я бы не советовал так как некоторые версии инструментов любят fdiskили cfdiskмогут поддерживать GPT и поэтому не показывают ошибку.
Златовласка
Для меня gdiskобнаруживает гибридную таблицу разделов GPT + MBR и дает Found valid GPT with hybrid MBR; using GPT.. Кажется, это единственный метод, который обнаружит гибридную таблицу.
Грэм
@Graeme: Спасибо. Я не знал об этом (оригинальная гибридная ссылка была отредактирована Стефаном Шазеласом), но я немного прочитал и добавил некоторые детали.
Златовласка
17

Поскольку ОС не была указана, здесь есть способ работы 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руководстве .

Ouki
источник
9

С помощью udisksLinux:

$ 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
Стефан Шазелас
источник
2
Обратите внимание, что вы получите похожий вывод независимо от того, есть гибридный GPT + MBR или нет. GPT требует поддельной MBR с одним полным дисковым разделом типа 0xee. В гибридной системе это обычная MBR с одним 0xeeразделом (и потенциальная возможность возникновения серьезных проблем, если данные MBR не синхронизируются с данными GPT).
Грэм
6

использование

$ 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, иначе схема GPT

Ракиб
источник
3

В моих скриптах Alpine Linux Partition я использую:

check_scheme() {
    fdisk -l $1 |grep "Disklabel type:" |awk '{ print $3 }'
}
Стюарт Кардалл
источник
На моей системе Ubuntu 18.04fdisk -l /dev/sda | grep -i disklabel ничего не возвращается ( GNU Fdisk 1.3.0a ).
АРУ
1

Вы можете использовать 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
mivk
источник