Risposte:
È possibile utilizzare parted -l
per determinare il tipo di tabella delle partizioni. Per esempio:
$ 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)
Il Partition Table
campo mostra che sto usando una msdos
tabella delle partizioni MBR (quella ancora comunemente usata per Linux e Windows) su entrambi i dischi. Dalla man
pagina è parted
possibile creare (e quindi si spera identificare) i seguenti tipi di tabella delle partizioni (o più in generale "etichetta del 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 la pena aggiungere il comando per elencare una singola partizione poiché questo non è ovvio senza una certa conoscenza di parted
e può essere un problema trovare i dati necessari se ci sono più unità. Per /dev/sda
te faresti:
parted /dev/sda print
parted /dev/sda p
lo farà anche.
Su Linux, puoi verificarlo tramite lo gdisk
strumento che dovrebbe essere disponibile per qualsiasi distribuzione.
gdisk -l /dev/sda
Qui /dev/sda
è il nodo dispositivo dell'azionamento fisica , non una partizione ( /dev/sda1
, /dev/sda2
ecc sono partizioni).
Se vedi qualcosa che include:
***************************************************************
Found invalid GPT and valid MBR; converting MBR to GPT format
in memory.
***************************************************************
Hai un disco in stile MBR. Non preoccuparti, questo non ha fatto alcun male.
Se non vedi questo avviso, hai un disco GPT o un disco GPT / MBR ibrido . Le versioni successive sono utilizzate principalmente su macchine Apple destinate a versioni a doppio avvio di MS Windows che non supportano GPT. gdisk
indicherà questo con:
Found valid GPT with hybrid MBR; using GPT
Possono anche essere utilizzati in altre situazioni in cui è richiesto il supporto per entrambi gli stili.
cfdisk
una partizione GPT provocherà un avviso.
gdisk
pacchetto, lo si può trovare nel gptfdisk
pacchetto ... almeno su Gentoo.
fdisk
o cfdisk
possano supportare GPT e quindi non mostrino un errore.
gdisk
rileva una tabella di partizione ibrida GPT + MBR e dà Found valid GPT with hybrid MBR; using GPT.
. Questo sembra essere l'unico metodo che rileverà una tabella ibrida.
Dato che il sistema operativo non è stato specificato, ecco il modo di fare cose di FreeBSD .
Tutto viene eseguito tramite il gpart
comando (abbreviazione di partizionatore GEOM - niente a che fare con GNU).
Un semplice gpart show
ti mostrerebbe tutte le partizioni disponibili di tutti i dischi, ma puoi specificare il dispositivo per avere uno sguardo più preciso su uno:
layout di partizione legacy con MBR (aka "msdos") e schemi di partizione BSD (di solito era richiesto un partizionamento a 2 livelli per i sistemi BSD, a meno che non si utilizzasse l'intero disco):
$
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 di partizione 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)
Per saperne di più, tutto è nel gpart
manuale .
Con udisks
su 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
Sopra, ho un disco con partizionamento ibrido GPT + MS-DOS. In tal caso, il kernel Linux ignora il partizionamento MS-DOS, motivo per cui udisks
imposta UDISKS_PARTITION_TABLE_SCHEME su gpt.
Lo strumento udisks-part-id viene utilizzato per popolare il database udev. Quindi, se hai udisks
installato, dovresti essere in grado di interrogare tali informazioni anche come utente non privilegiato con:
$ udevadm info -q property -n sda | grep UDISKS_PARTITION_TABLE_SCHEME
UDISKS_PARTITION_TABLE_SCHEME=gpt
0xee
. In un ibrido si tratta di un MBR normale con una 0xee
partizione (e potenziale per gravi problemi se i dati MBR non sono sincronizzati con i dati GPT).
Uso
$ 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
Vedi il tipo Disklabel: dos . Se mostra dos significa che è lo schema MBR altrimenti lo schema GPT
Nei miei script di partizione Alpine Linux utilizzo:
check_scheme() {
fdisk -l $1 |grep "Disklabel type:" |awk '{ print $3 }'
}
fdisk -l /dev/sda | grep -i disklabel
non restituisce nulla, ( GNU Fdisk 1.3.0a ).
È possibile utilizzare blkid
.
Esempi con output:
# 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 in uno script, con l' -o value
opzione:
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