NetBSD guarda su tabla de particiones en el sector 1: así es el formato del disklabel
Un recorrido byte a byte por el disklabel de NetBSD 11 en x86_64: dónde vive, qué metadatos guarda y cómo se verifica su checksum.
Un post técnico disecciona el formato del disklabel de NetBSD, la estructura donde el sistema guarda la geometría del disco y su tabla de particiones. El autor trabaja con NetBSD 11 sobre x86_64 en una máquina virtual y va campo por campo comparando el volcado hexadecimal con la definición de struct disklabel en /usr/include/sys/disklabel.h. La conclusión práctica: el disklabel no vive en el MBR, sino en el sector 1, en el offset 512, tal y como confirman las llamadas getlabelsector() y getlabeloffset() de la librería libutil.
Dónde está y qué contiene
Para comprobarlo basta un programa en C de cinco líneas que imprima esos dos valores; devuelven 1 y 0 respectivamente. La documentación está en la página de manual disklabel(5), a la que se llega desde disklabel(8), aunque el autor trabaja sobre todo con el header. La primera mitad de la estructura son metadatos: tipo de unidad (d_type, 0x0f para disco lógico), nombre del disco y nombre del pack, y una geometría CHS completa: 512 bytes por sector, 63 sectores por pista, 16 pistas por cilindro, 260 cilindros y 262.144 sectores en total, 128 MiB. A eso se suman parámetros de hardware como las 3.600 rpm o los tiempos de conmutación de cabeza, casi todos a cero.
El autor no se corta al señalar que buena parte de esos campos están obsoletos en x86_64 y solo se rellenan por compatibilidad. También hay dos números mágicos, un d_checksum y el contador d_npartitions, que indica cuántas entradas siguen.
La tabla de particiones y el checksum
Cada entrada de la tabla lleva tamaño, offset y tipo de sistema de ficheros, y con eso se describe todo lo demás. La partición d ocupa el disco entero en x86_64, algo que confirma un mensaje de Martin Husemann en la lista de NetBSD. El tipo 0x07 corresponde a ffs/4.2BSD. En el ejemplo, la partición c no aparece en la salida de disklabel porque sus tres campos están a cero y queda oculta, una explicación que el propio autor deja abierta a dudas.
El checksum es un XOR sobre la propia estructura, y el código que lo calcula vive en el árbol de NetBSD: dkcksum.c es la referencia para replicarlo. La parte entretenida del ejercicio es crear una partición aleatoria editando el sector a mano con un editor hexadecimal y ver si el kernel la acepta.
Todo esto importa a quien tenga que recuperar un disco cuyo disklabel se ha corrompido, montar una imagen ajena o entender por qué una entrada de partición no aparece pese a existir. El formato no ha cambiado gran cosa y sigue siendo la fuente de verdad por debajo de cualquier herramienta de particionado.

