Respuestas:
Puede usar parted -l
para determinar el tipo de tabla de particiones. P.ej:
$ 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)
El Partition Table
campo muestra que estoy usando una msdos
tabla de partición MBR (la que todavía se usa comúnmente para Linux y Windows) en ambos discos. Desde la man
página parted
puede crear (y por lo tanto, con suerte, identificar) los siguientes tipos de tabla de partición (o, más ampliamente, "etiqueta de 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 agregar el comando para enumerar una sola partición, ya que esto no es obvio sin algún conocimiento parted
y puede ser difícil encontrar los datos que necesita si hay varias unidades. Porque /dev/sda
harías:
parted /dev/sda print
parted /dev/sda p
también lo hará.
En Linux, puede verificar esto a través de la gdisk
herramienta que debería estar disponible para cualquier distribución.
gdisk -l /dev/sda
Aquí, /dev/sda
es el nodo del dispositivo de la unidad física , no una partición ( /dev/sda1
, /dev/sda2
, etc. son particiones).
Si ve algo que incluye:
***************************************************************
Found invalid GPT and valid MBR; converting MBR to GPT format
in memory.
***************************************************************
Tienes un disco de estilo MBR. No te preocupes, esto no hizo ningún daño.
Si no ve esta advertencia, tiene un disco GPT o un disco GPT / MBR híbrido . Las últimas se utilizan principalmente en máquinas Apple destinadas a versiones de arranque dual de MS Windows que no admiten GPT. gdisk
indicará esto con:
Found valid GPT with hybrid MBR; using GPT
También se pueden usar en otras situaciones donde se requiere soporte para ambos estilos.
cfdisk
una partición GPT también generará una advertencia.
gdisk
paquete, se puede encontrar en el gptfdisk
paquete ... al menos en Gentoo.
fdisk
o cfdisk
no soporte GPT y, por lo tanto, no muestren un error.
gdisk
detecta una tabla de particiones GPT + MBR híbrida y da Found valid GPT with hybrid MBR; using GPT.
. Este parece ser el único método que detectará una tabla híbrida.
Como no se especificó el sistema operativo, aquí está la forma de hacer las cosas de FreeBSD .
Todo se hace a través del gpart
comando (abreviatura de partición de GEOM, nada que ver con GNU).
Un simple gpart show
le mostrará todas las particiones disponibles de todos los discos, pero puede especificar que el dispositivo tenga una apariencia más precisa en uno:
diseño de partición heredada con MBR (también conocido como "msdos") y esquemas de partición BSD (generalmente se requería una partición de 2 niveles para los sistemas BSD, a menos que se use el 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)
diseño de partición moderno con 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 más, todo está en el gpart
manual .
Con udisks
en 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
Arriba, tengo una unidad con particiones híbridas GPT + MS-DOS. En ese caso, el kernel de Linux ignora el particionamiento de MS-DOS, por lo que udisks
establece UDISKS_PARTITION_TABLE_SCHEME en gpt.
Esa herramienta udisks-part-id se usa para llenar la base de datos udev. Entonces, si tiene udisks
instalado, debería poder consultar esa información incluso como usuario no privilegiado con:
$ udevadm info -q property -n sda | grep UDISKS_PARTITION_TABLE_SCHEME
UDISKS_PARTITION_TABLE_SCHEME=gpt
0xee
. En un híbrido, este es un MBR normal con una 0xee
partición (y es posible que surjan problemas importantes si los datos de MBR no están sincronizados con los datos de GPT).
Utilizar
$ 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
Ver el tipo de etiqueta de disco: dos . Si muestra dos, eso significa que es un esquema MBR o un esquema GPT
En mis scripts de Alpine Linux Partition uso:
check_scheme() {
fdisk -l $1 |grep "Disklabel type:" |awk '{ print $3 }'
}
fdisk -l /dev/sda | grep -i disklabel
no devuelve nada ( GNU Fdisk 1.3.0a ).
Puedes usar blkid
.
Ejemplos con salida:
# 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 en un script, con la -o value
opción:
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