GPT ou MBR: Como eu sei?

Respostas:

87

Você pode usar parted -lpara determinar o tipo de tabela de partição. Por exemplo:

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

O Partition Tablecampo mostra que estou usando uma msdostabela de partição MBR (a que ainda é comumente usada para Linux e Windows) em ambos os discos. A partir da manpágina, é partedpossível criar (e, assim, esperamos identificar) os seguintes tipos de tabela de partição (ou mais amplamente o `label do disco '):

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

Atualizar

Vale a pena adicionar o comando para listar uma única partição, pois isso não é óbvio sem conhecimento partede pode ser difícil encontrar os dados necessários se houver várias unidades. Para /dev/sdavocê faria:

parted /dev/sda print
Graeme
fonte
Esse é um grande comando, Graeme. Embora eu esteja usando o Linux há vários anos, eu nunca tinha percebido isso. Obrigado!
Tim
3
parted /dev/sda pvai fazer também.
S4 #
eu tive que fazer "sudo parted -l" #
Santropedro 30/10
33

No linux, você pode verificar isso através da gdiskferramenta que deve estar disponível para qualquer distribuição.

gdisk -l /dev/sda

Aqui, /dev/sdaé o nó do dispositivo da unidade física , não uma partição ( /dev/sda1, /dev/sda2, etc. são partições).

Se você vir algo que inclui:

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

Você tem um disco no estilo MBR. Não se preocupe, isso não causou nenhum dano.

Se você não vir esse aviso, possui um disco GPT ou um disco híbrido GPT / MBR . Os últimos são usados ​​principalmente em máquinas Apple destinadas a versões de inicialização dupla do MS Windows que não suportam GPT. gdiskindicará isso com:

Found valid GPT with hybrid MBR; using GPT

Eles também podem ser usados ​​em outras situações em que o suporte para ambos os estilos é necessário.

Cachinhos Dourados
fonte
Ou o contrário - tentar usar cfdiskem uma partição GPT também resultará em um aviso.
orion
Se não estiver instalado e não estiver em um gdiskpacote, ele pode ser encontrado no gptfdiskpacote ... pelo menos no Gentoo.
2
@orion Eu não recomendaria isso, pois algumas versões de ferramentas como fdiskou cfdiskpodem suportar GPT e, portanto, não mostram um erro.
precisa
Para mim gdiskdetecta uma tabela de partição híbrida GPT + MBR e dá Found valid GPT with hybrid MBR; using GPT.. Este parece ser o único método que irá detectar uma tabela híbrida.
Graeme
@ Graeme: Obrigado. Eu não sabia disso (a referência híbrida original foi editada por Stephane Chazelas), mas fiz algumas leituras e adicionei alguns detalhes.
Goldilocks
17

Como o sistema operacional não foi especificado, aqui está a maneira do FreeBSD de fazer as coisas.

Tudo é feito através do gpartcomando (abreviação de particionador GEOM - nada a ver com GNU).

Um simples gpart showmostraria todas as partições disponíveis de todos os discos, mas você pode especificar o dispositivo para ter uma aparência mais precisa em um:

  • layout de partição herdada com esquemas de partição MBR (também conhecido como "msdos") e BSD (geralmente é necessário um particionamento em dois níveis para sistemas BSD, a menos que esteja usando o disco completo):

    $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)
    
  • layout de partição moderno usando 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)
    

Para saber mais, tudo está no gpartmanual .

Ouki
fonte
9

Com udisksno 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

Acima, eu tenho uma unidade com particionamento híbrido GPT + MS-DOS. Nesse caso, o kernel do Linux ignora o particionamento do MS-DOS, e é por isso que udisksdefine UDISKS_PARTITION_TABLE_SCHEME como gpt.

Essa ferramenta udisks-part-id é usada para preencher o banco de dados udev. Portanto, se você tiver udisksinstalado, poderá consultar essas informações mesmo como um usuário não privilegiado com:

$ udevadm info -q property -n sda | grep UDISKS_PARTITION_TABLE_SCHEME
UDISKS_PARTITION_TABLE_SCHEME=gpt
Stéphane Chazelas
fonte
2
Observe que você obterá uma saída semelhante, independentemente de haver ou não um GPT + MBR híbrido. O GPT requer um MBR falso com uma única partição de disco completo do tipo 0xee. Em um híbrido, esse é um MBR normal com uma 0xeepartição (e é possível que haja grandes problemas se os dados do MBR ficarem fora de sincronia com os dados da GPT).
Graeme
6

Usar

$ 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

Consulte o tipo de rótulo de disco: dos . Se mostrar dos, significa que é o esquema MBR, caso contrário, o esquema GPT

Rakib
fonte
3

Nos meus scripts de partição Alpine Linux, eu uso:

check_scheme() {
    fdisk -l $1 |grep "Disklabel type:" |awk '{ print $3 }'
}
Stuart Cardall
fonte
No meu sistema Ubuntu 18.04fdisk -l /dev/sda | grep -i disklabel não retorna nada, ( GNU Fdisk 1.3.0a ).
AGC
1

Você pode usar blkid.

Exemplos com saída:

# 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

Ou em um script, com a -o valueopção:

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
fonte