Respostas:
Você pode usar parted -l
para 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 Table
campo mostra que estou usando uma msdos
tabela de partição MBR (a que ainda é comumente usada para Linux e Windows) em ambos os discos. A partir da man
página, é parted
possí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
Vale a pena adicionar o comando para listar uma única partição, pois isso não é óbvio sem conhecimento parted
e pode ser difícil encontrar os dados necessários se houver várias unidades. Para /dev/sda
você faria:
parted /dev/sda print
parted /dev/sda p
vai fazer também.
No linux, você pode verificar isso através da gdisk
ferramenta 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. gdisk
indicará 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.
cfdisk
em uma partição GPT também resultará em um aviso.
gdisk
pacote, ele pode ser encontrado no gptfdisk
pacote ... pelo menos no Gentoo.
fdisk
ou cfdisk
podem suportar GPT e, portanto, não mostram um erro.
gdisk
detecta 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.
Como o sistema operacional não foi especificado, aqui está a maneira do FreeBSD de fazer as coisas.
Tudo é feito através do gpart
comando (abreviação de particionador GEOM - nada a ver com GNU).
Um simples gpart show
mostraria 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 gpart
manual .
Com udisks
no 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 udisks
define UDISKS_PARTITION_TABLE_SCHEME como gpt.
Essa ferramenta udisks-part-id é usada para preencher o banco de dados udev. Portanto, se você tiver udisks
instalado, 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
0xee
. Em um híbrido, esse é um MBR normal com uma 0xee
partição (e é possível que haja grandes problemas se os dados do MBR ficarem fora de sincronia com os dados da GPT).
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
Nos meus scripts de partição Alpine Linux, eu uso:
check_scheme() {
fdisk -l $1 |grep "Disklabel type:" |awk '{ print $3 }'
}
fdisk -l /dev/sda | grep -i disklabel
não retorna nada, ( GNU Fdisk 1.3.0a ).
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 value
opçã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