La tabla de dividir discos

Los dispositivos de almacenamiento, sean del tipo que sean, dividen su espacio físico en unidades lógicas denominadas particiones, áreas independientes de un tamaño determinado a las que pueden accederse de forma separada a través de ficheros de dispositivos 1 situados en el directorio /dev. Esa división se registra en una tabla de particiones, situada normalmente en el sector 0 del disco. Existen varios formatos de particionado: MBR, GPT, Sun, SGI o BSD.

disco duro

GNU/Linux dispone de una utilidad, fdisk, para la gestión y manipulación de tablas de partición en diversos formatos. fdisk permite la creación, edición y borrado de particiones desde una terminal. Si se ejecuta en modo interactivo (sin opciones) ejecuta tales operaciones a través de menús y preguntas, lo cual facilita un poco la labor. Es muy útil conocer el uso y la sintaxis de dicho comando cuando, por ejemplo, se quiere preparar un disco duro para instalar una distribución GNU/Linux y solo se tiene a mano una interfaz de línea de comandos. Esta utilidad viene incluida en el paquete util-linux, que suele venir preinstalado en casi cualquier distro, por lo que no es necesario instalarlo.

Antes de ejecutar fdisk será necesario conocer sobre qué dispositivo lo aplicaremos. Si queremos modificar la tabla de particiones de un disco duro interno será recomendable arrancar el ordenador desde un sistema situado en una unidad externa, como un lápiz de memoria USB, y ejecutar el comando lsblk desde un terminal para saber cual es el fichero de dispositivo correspondiente al disco interno.

$ lsblk -f
NAME         FSTYPE LABEL MOUNTPOINT
sda                       
└─sda1                    /media/aag/PENDRIVE_4G
zram0                     [SWAP]
mmcblk0rpmb               
mmcblk0boot0              
mmcblk0boot1              
mmcblk0                   
├─mmcblk0p1               /
├─mmcblk0p2               [SWAP]
└─mmcblk0p3               /home

En este caso, el fichero de dispositivo asignado a un lápiz USB de memoria es /dev/sda.

Cualquier operación que se ejecute sobre un dispositivo mediante fdisk borrará el contenido que se encuentre almacenado en dicho dispositivo. Por tanto, sería buena idea hacer una copia de seguridad de todos los ficheros que queramos conservar.

Una vez obtenido el nombre completo del fichero de bloque, ejecutaremos fdisk como usuario administrador y con la ruta del fichero como parámetro.

$ sudo fdisk /dev/sda

Orden (m para obtener ayuda): m
Orden Acción
a Conmuta el indicador de iniciable
b Modifica la etiqueta de disco bsd
c Conmuta el indicador de compatibilidad con DOS
d Suprime una partición
l Lista los tipos de particiones conocidos
m Imprime este menú
n Añade una nueva partición
o Crea una nueva tabla de particiones DOS vacía
p Imprime la tabla de particiones
q Sale sin guardar los cambios
s Crea una nueva etiqueta de disco Sun
t Cambia el identificador de sistema de una partición
u Cambia las unidades de visualización/entrada
v Verifica la tabla de particiones
w Escribe la tabla en el disco y sale
x Funciones adicionales (sólo para usuarios avanzados)

Orden (m para obtener ayuda):

Accedemos al menú principal pulsando la letra m (menu). Antes de hacer nada, sería lógico comprobar si ya existen particiones en el dispositivo y cuantas hay, para ello imprimiremos la tabla de particiones pulsando la letra p (partitions).

Orden (m para obtener ayuda): p

Disco /dev/sda: 3868 MB, 3868430336 bytes
64 cabezas, 22 sectores/pista, 5366 cilindros, 7555528 sectores en total
Unidades = sectores de 1 * 512 = 512 bytes
Tamaño de sector (lógico / físico): 512 bytes / 512 bytes
Tamaño E/S (mínimo/óptimo): 512 bytes / 512 bytes
Identificador del disco: 0x000960cb

Dispositivo Inicio    Comienzo      Fin      Bloques  Id  Sistema
/dev/sda1             2048     7555527     3776740    c  W95 FAT32 (LBA)

Se puede ver que existe un única partición, representada por el fichero /dev/sda1, cuyo tamaño ocupa todo el espacio disponible en el dispositivo.

Supongamos que queremos sustituir dicha partición por otras dos particiones de distinto tamaño. Lo primero que habrá que hacer es borrar la partición actual, lo cual haremos mediante la orden d (delete).

Orden (m para obtener ayuda): d
Se ha seleccionado la partición 1

Orden (m para obtener ayuda): p

Disco /dev/sda: 3868 MB, 3868430336 bytes
64 cabezas, 22 sectores/pista, 5366 cilindros, 7555528 sectores en total
Unidades = sectores de 1 * 512 = 512 bytes
Tamaño de sector (lógico / físico): 512 bytes / 512 bytes
Tamaño E/S (mínimo/óptimo): 512 bytes / 512 bytes
Identificador del disco: 0x000960cb

Dispositivo Inicio    Comienzo      Fin      Bloques  Id  Sistema

Orden (m para obtener ayuda):

Nada más ejecutar la orden queda eliminada la única partición existente, lo cual puede comprobarse ejecutando de nuevo la orden p.

Ahora vamos a crear las dos particiones, ambas primarias, mediante la orden n (new).

Orden (m para obtener ayuda): n
Tipo de partición:
   p primaria (0 primaria, 0 extendida, 4 libre)
   e extendido
Seleccione (predeterminado p): p
Número de partición (1-4, valor predeterminado 1): 1
Primer sector (2048-7555527, valor predeterminado 2048): 
Se está utilizando el valor predeterminado 2048
Último sector, +sectores o +tamaño{K,M,G} (2048-7555527, valor predeterminado 7555527): +1G

Orden (m para obtener ayuda): n
Tipo de partición:
   p primaria (1 primaria, 0 extendida, 3 libre)
   e extendido
Seleccione (predeterminado p): p
Número de partición (1-4, valor predeterminado 2): 2
Primer sector (2099200-7555527, valor predeterminado 2099200): 
Se está utilizando el valor predeterminado 2099200
Último sector, +sectores o +tamaño{K,M,G} (2099200-7555527, valor predeterminado 7555527): 
Se está utilizando el valor predeterminado 7555527

Orden (m para obtener ayuda): p

Disco /dev/sda: 3868 MB, 3868430336 bytes
64 cabezas, 22 sectores/pista, 5366 cilindros, 7555528 sectores en total
Unidades = sectores de 1 * 512 = 512 bytes
Tamaño de sector (lógico / físico): 512 bytes / 512 bytes
Tamaño E/S (mínimo/óptimo): 512 bytes / 512 bytes
Identificador del disco: 0x000960cb

Dispositivo Inicio    Comienzo      Fin      Bloques  Id  Sistema
/dev/sda1            2048     2099199     1048576   83  Linux
/dev/sda2         2099200     7555526     2728163+  83  Linux

A través de una serie de cuestiones vamos indicando los parámetros que deseamos para cada partición:

  • Tipo de partición: puede ser primaria (p) o extendida (e)
  • Número de partición: es un número que identifica a cada partición, por defecto se va asignando en orden secuencial creciente empezando por 1. Suele asignarse el valor propuesto por defecto.
  • Primer sector: es el valor del sector donde comienza la partición, por comodidad y rapidez se selecciona el valor predeterminado que se nos propone (2048) 2.
  • Último sector: es el valor del sector donde finaliza la partición, determina el tamaño que tendrá. Si se selecciona el valor predeterminado la partición ocupará toda la unidad de almacenamiento, pero se puede elegir el tamaño que deseamos asignarle indicándolo mediante un valor expresado en Kilobytes (K), Megabytes (M) o Gigabytes (G). En este ejemplo le hemos especificado para la primera partición un tamaño de 1 Gb (+1G). Para la última partición es conveniente dejar el valor predeterminado, tal como se ha hecho en el segundo caso del ejemplo; de esta forma ocupará todo el espacio sobrante del dispositivo.

fdisk crea por defecto particiones con identificador de sistema compatible con GNU/Linux, que luego pueden ser formateadas con alguno de los sistemas de archivos extX (donde X=2, 3 o 4). Pero podemos modificarlo con el fin de asignarle un identificador compatible con otro sistema, por ejemplo FAT32; así podremos usar dicha partición para intercambiar ficheros entre ordenadores con sistemas distintos a GNU/Linux. La asignación se realiza con la orden t (type).

Orden (m para obtener ayuda): t       
Número de partición (1-4): 1
Código hexadecimal (escriba L para ver los códigos): c
Se ha cambiado el tipo de sistema de la partición 1 por c (W95 FAT32 (LBA))

Orden (m para obtener ayuda): p

Disco /dev/sda: 3868 MB, 3868430336 bytes
120 cabezas, 62 sectores/pista, 1015 cilindros, 7555528 sectores en total
Unidades = sectores de 1 * 512 = 512 bytes
Tamaño de sector (lógico / físico): 512 bytes / 512 bytes
Tamaño E/S (mínimo/óptimo): 512 bytes / 512 bytes
Identificador del disco: 0x000960cb

Dispositivo Inicio    Comienzo      Fin      Bloques  Id  Sistema
/dev/sda1            2048     2099199     1048576    c  W95 FAT32 (LBA)
/dev/sda2         2099200     7555526     2728163+  83  Linux

En primer lugar nos pide el número de la partición cuyo identificador de sistema deseamos cambiar, en este ejemplo es la primera (1); y después introducimos el código hexadecimal del identificador que elijamos entre una serie de códigos disponibles, los cuales podremos listar pulsando la tecla l (list).

Orden (m para obtener ayuda): l

 0  Vacía           24  DOS de NEC      81  Minix / Linux a bf  Solaris        
 1  FAT12           27  WinRE NTFS ocul 82  Linux swap / So c1  DRDOS/sec (FAT-
 2  XENIX root      39  Plan 9          83  Linux           c4  DRDOS/sec (FAT-
 3  XENIX usr       3c  PartitionMagic  84  OS/2 hidden or  c6  DRDOS/sec (FAT-
 4  FAT16 <32M      40  Venix 80286     85  Linux extendida c7  Syrinx         
 5  Extendida       41  PPC PReP Boot   86  Conjunto de vol da  Datos sin SF   
 6  FAT16           42  SFS             87  Conjunto de vol db  CP/M / CTOS / .
 7  HPFS/NTFS/exFAT 4d  QNX4.x          88  Linux plaintext de  Utilidad Dell  
 8  AIX             4e  QNX4.x segunda  8e  Linux LVM       df  BootIt         
 9  AIX arrancable  4f  QNX4.x tercera  93  Amoeba          e1  DOS access     
 a  Gestor de arran 50  OnTrack DM      94  Amoeba BBT      e3  DOS R/O        
 b  W95 FAT32       51  OnTrack DM6 Aux 9f  BSD/OS          e4  SpeedStor      
 c  W95 FAT32 (LBA) 52  CP/M            a0  Hibernación de  ea  Rufus alignment
 e  W95 FAT16 (LBA) 53  OnTrack DM6 Aux a5  FreeBSD         eb  BeOS fs        
 f  W95 Ext'd (LBA) 54  OnTrackDM6      a6  OpenBSD         ee  GPT            
10  OPUS            55  EZ-Drive        a7  NeXTSTEP        ef  EFI (FAT-12/16/
11  FAT12 oculta    56  Golden Bow      a8  UFS de Darwin   f0  inicio Linux/PA
12  Compaq diagnost 5c  Priam Edisk     a9  NetBSD          f1  SpeedStor      
14  FAT16 oculta    61  SpeedStor       ab  arranque de Dar f4  SpeedStor      
16  FAT16 oculta    63  GNU HURD o SysV af  HFS / HFS+      f2  DOS secondary  
17  HPFS/NTFS ocult 64  Novell Netware  b7  BSDI fs         fb  VMFS de VMware 
18  SmartSleep de A 65  Novell Netware  b8  BSDI swap       fc  VMKCORE de VMwa
1b  FAT32 de W95 oc 70  DiskSecure Mult bb  Boot Wizard hid fd  Linux raid auto
1c  FAT32 de W95 (L 75  PC/IX           bc  Acronis FAT32 L fe  LANstep        
1e  FAT16 de W95 (L 80  Minix antiguo   be  arranque de Sol ff  BBT            

Si queremos instalar una distro en una partición de una unidad extraíble –para poder arrancar el ordenador desde dicha unidad– será necesario activar el indicador de iniciable en tal partición, que lo habilitará para poder iniciar la secuencia de arranque del sistema GNU/Linux que contenga. Dicha activación se lleva a cabo mediante la orden a (activate).

Activando el indicador de iniciable
Orden (m para obtener ayuda): a
Número de partición (1-4): 1

Orden (m para obtener ayuda): p

Disco /dev/sda: 3868 MB, 3868430336 bytes
10 cabezas, 2 sectores/pista, 377776 cilindros, 7555528 sectores en total
Unidades = sectores de 1 * 512 = 512 bytes
Tamaño de sector (lógico / físico): 512 bytes / 512 bytes
Tamaño E/S (mínimo/óptimo): 512 bytes / 512 bytes
Identificador del disco: 0x000960cb

Dispositivo Inicio    Comienzo      Fin      Bloques  Id  Sistema
/dev/sda1   *        2048     2099199     1048576   1c  W95 FAT32 (LBA)
/dev/sda2         2099200     7555526     2728163+  83  Linux

Y, por último, para comprobar que la tabla de particiones se ha creado correctamente tenemos la orden v (verify), que devuelve el número de sectores que quedan sin asignar a ninguna partición.

Orden (m para obtener ayuda): v
Restan 2047 sectores de 512-byte sin asignar

En el ejemplo tenemos 2047 sectores sin asignar, lo cual no es del todo correcto pues la primera (y única) partición comienza en el sector 2048 y, como quiera que los sectores se numeran a partir de 0, habría en realidad 2048 sectores libres, los que van desde el 0 al 2047.

Conclusión

Hemos repasado las órdenes de uso más común en fdisk cuando se ejecuta en modo interactivo. Existen otras órdenes menos habituales, bien porque su utilidad ha quedado obsoleta o porque proporciona funcionalidades avanzadas para usuarios más experimentados.

Existe otro comando en Linux para la gestión de particiones: parted, al cual dedicaré un artículo en otra ocasión.


  1. También llamados ficheros de bloques 
  2. En las unidades de almacenamiento actuales es necesario reservar los primeros 2048 sectores lógicos (desde el sector 0 hasta el 2047) para almacenar el registro de arranque principal (MBR) y la tabla de particiones principal (MPT). Cómo cada sector lógico ocupa 512 bytes, el tamaño de ese espacio reservado será de 1048576 bytes, o sea, 1 Mbyte. Esto es así porque tales unidades se estructuran en sectores físicos de 4 Kb, el mismo tamaño que poseen los bloques de datos que los sistemas de ficheros de cada partición utilizan para leer/escribir datos en los discos; y para que cada bloque encaje en un sector físico del disco (de forma que cada operación de E/S se ejecute en un único ciclo) es necesario alinear la primera partición a dicho límite de 1 Mb. 
Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s