Tengo una unidad de 3 TB que he particionado usando GPT:
$ sudo sgdisk -p /dev/sdg
Disk /dev/sdg: 5860533168 sectors, 2.7 TiB
Logical sector size: 512 bytes
Disk identifier (GUID): 2BC92531-AFE3-407F-AC81-ACB0CDF41295
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 5860533134
Partitions will be aligned on 2048-sector boundaries
Total free space is 2932 sectors (1.4 MiB)
Number Start (sector) End (sector) Size Code Name
1 2048 10239 4.0 MiB 8300
2 10240 5860532216 2.7 TiB 8300
Sin embargo, cuando lo conecto a través de un adaptador USB, informa un tamaño de sector lógico de 4096 y el núcleo ya no reconoce la tabla de particiones (ya que está buscando el GPT en el sector 1, que ahora está en el desplazamiento 4096 en lugar de 512):
$ sudo sgdisk -p /dev/sdg
Creating new GPT entries.
Disk /dev/sdg: 732566646 sectors, 2.7 TiB
Logical sector size: 4096 bytes
Disk identifier (GUID): 2DE535B3-96B0-4BE0-879C-F0E353341DF7
Partition table holds up to 128 entries
First usable sector is 6, last usable sector is 732566640
Partitions will be aligned on 256-sector boundaries
Total free space is 732566635 sectors (2.7 TiB)
Number Start (sector) End (sector) Size Code Name
¿Hay alguna forma de obligar a Linux a reconocer el GPT en el desplazamiento 512? Alternativamente, ¿hay alguna manera de crear dos encabezados GPT, uno en 512 y otro en 4096, o se superpondrán?
EDITAR: He encontrado algunas soluciones, ninguna de las cuales es muy buena:
Puedo usar un dispositivo loopback para particionar el disco:
$ losetup /dev/loop0 /dev/sdg
Los dispositivos de bucle invertido siempre tienen un tamaño de sector de 512, por lo que esto me permite particionar el dispositivo como quiero. Sin embargo, el kernel no reconoce las tablas de partición en los dispositivos de bucle invertido, por lo que tengo que crear otro dispositivo de bucle invertido y especificar manualmente el tamaño y el desplazamiento de la partición:
$ losetup /dev/loop1 /dev/sdg -o $((10240*512)) --sizelimit $(((5860532216-10240)*512))
Puedo escribir un script para automatizar esto, pero sería bueno poder hacerlo automáticamente.
Puedo ejecutar nbd-server y nbd-client; Los dispositivos NBD tienen sectores de 512 bytes por defecto, y los dispositivos NBD son particionables. Sin embargo, la documentación de NBD advierte contra la ejecución del servidor y el cliente nbd en el mismo sistema; Al realizar la prueba, el cliente nbd en el núcleo se bloqueó y tuve que matar el servidor.
Puedo ejecutar istgt (objetivo iSCSI de espacio de usuario), usando la misma configuración. Esto presenta otro dispositivo SCSI al sistema con sectores de 512 bytes. Sin embargo, durante las pruebas, esto falló y causó una desreferencia del puntero NULL del núcleo en el código ext4.
Todavía no he investigado devmapper, pero podría funcionar.