La herramienta gdisk es la variante de fdisk para tablas de particiones GPT. Este artículo demuestra su sencillo funcionamiento para crear una nueva tabla de particiones GPT y particionar un disco desde línea de comandos en GNU/Linux.



GPT fidsk (gdsik) es una herramienta de línea de comandos para crear y manipular tablas de particiones. Convierte automáticamente tablas de particiones MBR (Master Boot Record) o BSD disklabel (sólo si está almacenada sin anidar dentro de una partición MBR) al nuevo formato GPT (GUID Partition Table). De lo contrario carga la tabla GPT existente en el dispositivo.

gdisk opera principalmente sobre tablas de particiones y cabeceras GPT. Sin embargo, puede generar una tabla MBR legacy (Protective MBR) si se necesita.

La interfaz de gdisk es similar a la de fdisk, sólo que modifica particiones GPT. Esto hace que sea muy fácil de utilizar, y una transición directa para quienes estén familiarizados con fdisk. Por otro lado tiene la capacidad de transformar tablas de particiones MBR o BSD disklabel en particiones GPT.

Al igual que fdisk, gdisk no modifica estructuras ni hace cambios en tablas hasta que explícitamente se escriban los cambios a disco, lo cual permite introducir errores al momento de particionar sin riesgo alguno. Si se comete un error al particionar, simplemente se puede salir del programa sin aplicar los cambios utilizando el subcomando q.

Veamos un ejemplo práctico. El siguiente sistema posee dos discos SCSI conectados. Es posible verificar esta información revisando los mensajes del kernel Linux con dmesg:

root@devuan:/home/emi# dmesg | grep disk
[    1.450479] sd 0:0:0:0: [sda] Attached SCSI disk
[    1.457317] sd 1:0:0:0: [sdb] Attached SCSI disk
[    1.663288] PM: Starting manual resume from disk

La opción -l permite listar la tabla de particiones de un dispositivo pasado como parámetro:

root@devuan:/home/emi# gdisk -l /dev/sda
GPT fdisk (gdisk) version 1.0.1

Partition table scan:
  MBR: MBR only
  BSD: not present
  APM: not present
  GPT: not present


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

Disk /dev/sda: 16777216 sectors, 8.0 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): 5DFC95BB-53D4-4F42-85B9-43EF49F7F2F7
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 16777182
Partitions will be aligned on 2048-sector boundaries
Total free space is 6077 sectors (3.0 MiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048        14680063   7.0 GiB     8300  Linux filesystem
   5        14682112        16775167   1022.0 MiB  8200  Linux swap

Se observa que el disco sda posee una tabla de particiones MBR. Notar el resultado "MBR only" dentro de la información de escaneo de tablas de partición al comienzo de la salida.

En cambio, el disco sdb no posee tabla de particiones alguna:

root@devuan:/home/emi# gdisk -l /dev/sdb
GPT fdisk (gdisk) version 1.0.1

Partition table scan:
  MBR: not present
  BSD: not present
  APM: not present
  GPT: not present

Creating new GPT entries.
Disk /dev/sdb: 16777216 sectors, 8.0 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): 64EFD9F8-E13C-4168-8277-92F553DD7D56
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 16777182
Partitions will be aligned on 2048-sector boundaries
Total free space is 16777149 sectors (8.0 GiB)

Number  Start (sector)    End (sector)  Size       Code  Name

Para crear una nueva tabla de particiones GPT, lanzar gdisk con la ruta al dispositivo como parámetro:

root@devuan:/home/emi# gdisk /dev/sdb
GPT fdisk (gdisk) version 1.0.1

Partition table scan:
  MBR: not present
  BSD: not present
  APM: not present
  GPT: not present

Creating new GPT entries.

Command (? for help):

El subcomando ? presenta la ayuda de gdisk:

Command (? for help): ?
b	back up GPT data to a file
c	change a partition's name
d	delete a partition
i	show detailed information on a partition
l	list known partition types
n	add a new partition
o	create a new empty GUID partition table (GPT)
p	print the partition table
q	quit without saving changes
r	recovery and transformation options (experts only)
s	sort partitions
t	change a partition's type code
v	verify disk
w	write table to disk and exit
x	extra functionality (experts only)
?	print this menu

Command (? for help):

Se observa que los comandos son casi idénticos a los de fdisk.

El subcomando p permite imprimir la tabla de particiones actual (la misma salida que se muestra con -l):

Command (? for help): p
Disk /dev/sdb: 16777216 sectors, 8.0 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): 4938D35E-A1B8-401A-9F0F-BF72A5613374
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 16777182
Partitions will be aligned on 2048-sector boundaries
Total free space is 16777149 sectors (8.0 GiB)

Number  Start (sector)    End (sector)  Size       Code  Name

Command (? for help):

Para crear una nueva partición, utilizar n (new):

Command (? for help): n
Partition number (1-128, default 1): 
First sector (34-16777182, default = 2048) or {+-}size{KMGTP}: 
Last sector (2048-16777182, default = 16777182) or {+-}size{KMGTP}: +6G
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): 
Changed type of partition to 'Linux filesystem'

Command (? for help):

Primero se solicita el número de partición. Luego el primer sector (por defecto el primero disponible), último sector (en el ejemplo se especifican 6 GB de tamaño de partición, por defecto es todo el tamaño disponible) y tipo (el tipo por defecto es "Linux", código 8300).

Resulta muy fácil especificar el tamaño de la partición dejando que gdisk calcule automáticamente el sector final empleando el operador +. El mismo permite utilizar diferentes unidades de tamaño como KB, MB, GB, etc.

Al momento de especificar el tipo (valor numérico), es posible utilizar el subcomando l para obtener la lista de tipos de sistema de archivo por código. Veamos otro ejemplo para crear una partición de tipo "Linux swap" en los 2 GB de disco restantes:

Command (? for help): n
Partition number (2-128, default 2): 
First sector (34-16777182, default = 12584960) or {+-}size{KMGTP}: 
Last sector (12584960-16777182, default = 16777182) or {+-}size{KMGTP}: 
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): l
0700 Microsoft basic data  0c01 Microsoft reserved    2700 Windows RE          
3000 ONIE boot             3001 ONIE config           3900 Plan 9              
4100 PowerPC PReP boot     4200 Windows LDM data      4201 Windows LDM metadata
4202 Windows Storage Spac  7501 IBM GPFS              7f00 ChromeOS kernel     
7f01 ChromeOS root         7f02 ChromeOS reserved     8200 Linux swap          
8300 Linux filesystem      8301 Linux reserved        8302 Linux /home         
8303 Linux x86 root (/)    8304 Linux x86-64 root (/  8305 Linux ARM64 root (/)
8306 Linux /srv            8307 Linux ARM32 root (/)  8400 Intel Rapid Start   
8e00 Linux LVM             a500 FreeBSD disklabel     a501 FreeBSD boot        
a502 FreeBSD swap          a503 FreeBSD UFS           a504 FreeBSD ZFS         
a505 FreeBSD Vinum/RAID    a580 Midnight BSD data     a581 Midnight BSD boot   
a582 Midnight BSD swap     a583 Midnight BSD UFS      a584 Midnight BSD ZFS    
a585 Midnight BSD Vinum    a600 OpenBSD disklabel     a800 Apple UFS           
a901 NetBSD swap           a902 NetBSD FFS            a903 NetBSD LFS          
a904 NetBSD concatenated   a905 NetBSD encrypted      a906 NetBSD RAID         
ab00 Recovery HD           af00 Apple HFS/HFS+        af01 Apple RAID          
af02 Apple RAID offline    af03 Apple label           af04 AppleTV recovery    
af05 Apple Core Storage    bc00 Acronis Secure Zone   be00 Solaris boot        
bf00 Solaris root          bf01 Solaris /usr & Mac Z  bf02 Solaris swap        
bf03 Solaris backup        bf04 Solaris /var          bf05 Solaris /home       
bf06 Solaris alternate se  bf07 Solaris Reserved 1    bf08 Solaris Reserved 2  
Press the  key to see more codes: 
bf09 Solaris Reserved 3    bf0a Solaris Reserved 4    bf0b Solaris Reserved 5  
c001 HP-UX data            c002 HP-UX service         ea00 Freedesktop $BOOT   
eb00 Haiku BFS             ed00 Sony system partitio  ed01 Lenovo system partit
ef00 EFI System            ef01 MBR partition scheme  ef02 BIOS boot partition 
f800 Ceph OSD              f801 Ceph dm-crypt OSD     f802 Ceph journal        
f803 Ceph dm-crypt journa  f804 Ceph disk in creatio  f805 Ceph dm-crypt disk i
fb00 VMWare VMFS           fb01 VMWare reserved       fc00 VMWare kcore crash p
fd00 Linux RAID            
Hex code or GUID (L to show codes, Enter = 8300): 8200
Changed type of partition to 'Linux swap'

Command (? for help):

Se observa que se cambia el tipo por defecto por el código 8200.

Para verificar, imprimir la tabla resultante con p:

Command (? for help): p
Disk /dev/sdb: 16777216 sectors, 8.0 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): 64BEB8D5-84E0-457F-95DF-0F2D90A9185D
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 16777182
Partitions will be aligned on 2048-sector boundaries
Total free space is 2014 sectors (1007.0 KiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048        12584959   6.0 GiB     8300  Linux filesystem
   2        12584960        16777182   2.0 GiB     8200  Linux swap

Command (? for help):

Se están creando (aún no, pues no fueron aplicados los cambios a disco) dos particiones. Una de tipo "Linux" de 6 GB, y otra a continuación de tipo "Linux swap", de 2 GB de tamaño.

Finalmente llega el momento de la verdad: plasmar los cambios a disco. Tener en cuenta que se sobrescribe cualquier partición existente.

Utilizar el comando w para escribir los cambios a disco (igual que en fdisk):

Command (? for help): w

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/sdb.
The operation has completed successfully.
root@devuan:/home/emi#

Este comando escribe los cambios a disco y cierra el programa. Es posible comprobar el resultado con -l:

root@devuan:/home/emi# gdisk -l /dev/sdb
GPT fdisk (gdisk) version 1.0.1

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.
Disk /dev/sdb: 16777216 sectors, 8.0 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): 64BEB8D5-84E0-457F-95DF-0F2D90A9185D
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 16777182
Partitions will be aligned on 2048-sector boundaries
Total free space is 2014 sectors (1007.0 KiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048        12584959   6.0 GiB     8300  Linux filesystem
   2        12584960        16777182   2.0 GiB     8200  Linux swap

Se observa que aparecen dos nuevos dispositivos sdb1 y sdb2, los cuales corresponden con las nuevas particiones del dispositivo sdb:

root@devuan:/home/emi# ls -l /dev/sdb*
brw-rw---- 1 root disk 8, 16 nov 11 11:55 /dev/sdb
brw-rw---- 1 root disk 8, 17 nov 11 11:55 /dev/sdb1
brw-rw---- 1 root disk 8, 18 nov 11 11:55 /dev/sdb2

Referencias


Tal vez pueda interesarte


Compartí este artículo