Recientemente decidí adquirir para casa varios discos duros y una controladora raid por hardware con objetivo de poder almacenar de forma segura y duradera las copias de mis sistemas. Era la primera vez que montaba un entorno donde una sola partición ocupara un tamaño mayor de 2 TeraBytes (1 TB = 1024 GB) sin emplear LVM o MDADM. Cual fue mi sorpresa al comprobar que me era imposible crear una partición más grande de 2TB; me recordaba a los tiempos donde no se podían crear particiones de más de 4GB. Qué lejos queda, ¿verdad?
Buscando un poco de información, en especial en NixCraft y el aporte de mi compañero Raúl Rodriguez, descubrí que el origen de todos los problemas era el tipo de tabla de partición que empleaba (MS-DOS o MBR tradicional), ya que ésta no soporta más de 2 TB limitada por los 512 byte del tamaño del bloque. Para soportar particiones mayores se requiere emplear GUID Partition Table (GPT en adelante) que emplea adicionalmente el final el sector del disco para soportar particiones de mayor tamaño. Pero tengan cuidado, para complicar más las cosas GPT sólo funciona con BIOS que soporten EFI (Extensible Firmware Interface) como los Apple, y no en BIOS clásicas, por lo que si emplean discos de más de 2 TB únicamente podrán emplearlos como almacenamiento y no como arranque.
Veamos a continuación un ejemplo de cómo se migra de la tabla de partición MS-DOS a una tabla GPT en entornos Linux. Para ellos usaremos mi máquina nombrada con anterioridad, la cual dispone de un dispositivo físico (/dev/sdb) de 4.4 TB, resultado de un Raid5 por hardware de 4 discos duros de 1.5 TB:
# parted /dev/sdb GNU Parted 1.9.0 Usando /dev/sdb Welcome to GNU Parted! Type 'help' to view a list of commands. (parted) print all Model: Adaptec RAID (scsi) Disk /dev/sdb: 4494GB Sector size (logical/physical): 512B/512B Partition Table: msdos
Podemos observar que se nos informa que la “Partition Table” es de tipo msdos, y por tanto no soportará discos de más de 2 TB. Veamos qué ocurre cuando intentamos crear una partición de más de 2 TB en una tabla de particiones tipo MS-DOS:
(parted) mkpart primary 0 4494GB Error: partition length of 8776550412 sectors exceeds the msdos-partition-table-imposed maximum of 4294967295
Como vemos, no nos deja crear particiones de más de 2 TB. Para poder usarlo debemos cambiar el tipo de tabla de partición a GPT:
(parted) mklabel gpt Aviso: The existing disk label on /dev/sdb will be destroyed and all data on this disk will be lost. Do you want to continue? Sí/Yes/No? YES (parted) mkpart primary 0 4494GB (parted) print /dev/sdb Model: Adaptec RAID (scsi) Disk /dev/sdb: 4494GB Sector size (logical/physical): 512B/512B Partition Table: gpt Numero Inicio Fin Tamaño Sistema de ficheros Nombre Banderas 1 17,4kB 4494GB 4494GB primary
Al cambiar a tipo GPT ya nos permite crear particiones de más de 2TB y en nuestro caso una partición de 4494 GB. El siguiente paso será formatear la partición, donde nos encontraremos de nuevo con varias limitaciones. En entornos de 32 bits el sistema de fichero ext3 solo tiene soporte hasta 4 TB, en cambio para entornos de 64 bits como son X86_64 o entornos de 32 bits con el LFS habilitado en el núcleo el límite es de 32TB. Reiserfs tiene un máximo en ambos casos de 16 TB.
Para el ejemplo usaremos ext3, tarda un “poquitín”:
# mkfs.ext3 /dev/sdb1 mke2fs 1.41.9 (22-Aug-2009) ext2fs_check_if_mount: Can't check if filesystem is mounted due to missing mtab file mientras se determinaba si /dev/sdb1 está montado. Etiqueta del sistema de ficheros= Tipo de SO: Linux Tamaño del bloque=4096 (bitácora=2) Tamaño del fragmento=4096 (bitácora=2) 274268160 nodos-i, 1097070071 bloques 54853503 bloques (5.00%) reservados para el superusuario Primer bloque de datos=0 Número máximo de bloques del sistema de ficheros=4294967296 33480 bloque de grupos 32768 bloques por grupo, 32768 fragmentos por grupo 8192 nodos-i por grupo Respaldo del superbloque guardado en los bloques: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 102400000, 214990848, 512000000, 550731776, 644972544 Escribiendo las tablas de nodos-i: 557/33480
Con esto tendríamos listo nuestro disco de 4 TB. Para finalizar la entrada, indicarles que el tamaño máximo soportado por GUID Partition Table es de 256 TB, lo que probablemente les parezca mucho. Claro que rambién lo eran en su día 4GB o 2 TB…