GPT lub MBR: Skąd mam wiedzieć?

Odpowiedzi:

87

Możesz użyć parted -ldo określenia typu tablicy partycji. Na przykład:

$ 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)

To Partition Tablepole pokazuje, że korzystam z msdostabeli partycji MBR (wciąż powszechnie używanej w systemach Linux i Windows) na obu dyskach. Ze manstrony partedmożna utworzyć (i tym samym, mam nadzieję, zidentyfikować) następujące typy tablicy partycji (lub szerzej `etykieta dysku '):

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

Aktualizacja

Warto dodać polecenie do wyszczególnienia pojedynczej partycji, ponieważ nie jest to oczywiste bez pewnej wiedzy, parteda znalezienie potrzebnych danych może być uciążliwe, jeśli istnieje wiele dysków. Dla /dev/sdabyś zrobił:

parted /dev/sda print
Graeme
źródło
To wspaniałe polecenie, Graeme. Chociaż używam Linuksa od kilku lat, nigdy tak naprawdę tego nie zauważyłem. Dzięki!
Tim
3
parted /dev/sda pteż zrobi.
sjas
musiałem zrobić „sudo parted -l”
Santropedro,
33

W systemie Linux możesz to sprawdzić za pomocą gdisknarzędzia, które powinno być dostępne dla każdej dystrybucji.

gdisk -l /dev/sda

Tutaj /dev/sdajest węzeł urządzenia z dysku fizycznego , a nie partycja ( /dev/sda1, /dev/sda2, itd. Są ścianki działowe).

Jeśli zobaczysz coś, co obejmuje:

***************************************************************
Found invalid GPT and valid MBR; converting MBR to GPT format
in memory. 
***************************************************************

Masz dysk w stylu MBR. Nie martw się, to nie zaszkodziło.

Jeśli nie widzisz tego ostrzeżenia, masz dysk GPT lub hybrydowy dysk GPT / MBR . Te późniejsze są używane głównie na komputerach Apple przeznaczonych do podwójnego rozruchu wersji MS Windows, które nie obsługują GPT. gdiskwskaże to za pomocą:

Found valid GPT with hybrid MBR; using GPT

Mogą być również używane w innych sytuacjach, w których wymagana jest obsługa obu stylów.

Złotowłosa
źródło
Lub odwrotnie - próba użycia cfdiskna partycji GPT spowoduje również ostrzeżenie.
Orion
Jeśli nie jest zainstalowany i nie znajduje się w gdiskpakiecie, można go znaleźć w gptfdiskpakiecie ... przynajmniej w Gentoo.
2
@orion Nie polecam tego, ponieważ niektóre wersje narzędzi, takie jak fdisklub cfdiskmogą obsługiwać GPT, dlatego nie wyświetlają błędu.
goldilocks
Dla mnie gdiskwykrywa hybrydową tablicę partycji GPT + MBR i daje Found valid GPT with hybrid MBR; using GPT.. Wydaje się, że jest to jedyna metoda, która wykryje tabelę hybrydową.
Graeme
@Graeme: Dzięki. Nie zdawałem sobie z tego sprawy (oryginalne odniesienie hybrydowe zostało zredagowane przez Stephane Chazelas), ale przeczytałem trochę i dodałem kilka szczegółów.
goldilocks
17

Ponieważ system operacyjny nie został określony, oto sposób robienia rzeczy przez FreeBSD .

Wszystko odbywa się za pomocą gpartpolecenia (skrót od GEOM partioner - nie ma nic wspólnego z GNU).

Prosty gpart showpokazałby wszystkie dostępne partycje wszystkich dysków, ale możesz określić urządzenie, które ma bardziej precyzyjny wygląd na jednym:

  • starszy układ partycji z MBR (alias „msdos”) i schematami partycji BSD (dla systemów BSD zwykle wymagany był partycjonowanie 2-poziomowe, chyba że używa się pełnego dysku):

    $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)
    
  • nowoczesny układ partycji za pomocą 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)
    

Aby dowiedzieć się więcej, wszystko znajduje się w gpartinstrukcji .

Ouki
źródło
9

W udiskssystemie 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

Powyżej mam dysk z hybrydowym partycjonowaniem GPT + MS-DOS. W takim przypadku jądro Linuksa ignoruje partycjonowanie MS-DOS, dlatego udisksustawia UDISKS_PARTITION_TABLE_SCHEME na gpt.

To narzędzie udisks-part-id służy do zapełniania bazy danych udev. Więc jeśli masz udiskszainstalowany, powinieneś być w stanie zapytać o te informacje, nawet jako użytkownik nieuprzywilejowany za pomocą:

$ udevadm info -q property -n sda | grep UDISKS_PARTITION_TABLE_SCHEME
UDISKS_PARTITION_TABLE_SCHEME=gpt
Stéphane Chazelas
źródło
2
Pamiętaj, że otrzymasz podobne wyniki niezależnie od tego, czy istnieje hybrydowy GPT + MBR, czy nie. GPT wymaga fałszywego MBR z pojedynczą partycją pełnego typu 0xee. W wersji hybrydowej jest to normalny MBR z jedną 0xeepartycją (i może mieć poważne problemy, jeśli dane MBR nie zsynchronizują się z danymi GPT).
Graeme
6

Posługiwać się

$ 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

Zobacz typ Disklabel: dos . Jeśli pokazuje dos, oznacza to, że jest to schemat MBR lub inny schemat GPT

Rakib
źródło
3

W moich skryptach partycji Alpine Linux używam:

check_scheme() {
    fdisk -l $1 |grep "Disklabel type:" |awk '{ print $3 }'
}
Stuart Cardall
źródło
Na moim Ubuntu 18.04 systemowe fdisk -l /dev/sda | grep -i disklabelnic nie zwraca ( GNU Fdisk 1.3.0a ).
agc
1

Możesz użyć blkid.

Przykłady z wyjściem:

# 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

Lub w skrypcie, z -o valueopcją:

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
źródło