J'ai un lecteur de 3 To que j'ai partitionné en utilisant 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
Cependant, lorsque je le connecte via un adaptateur USB, il signale une taille de secteur logique de 4096 et le noyau ne reconnaît plus la table de partition (car il recherche le GPT au secteur 1, qui est maintenant à l'offset 4096 au lieu 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
Existe-t-il un moyen de forcer Linux à reconnaître le GPT au décalage 512? Sinon, existe-t-il un moyen de créer deux en-têtes GPT, un à 512 et un à 4096, ou vont-ils se chevaucher?
EDIT: J'ai trouvé quelques solutions de contournement, dont aucune n'est très bonne:
Je peux utiliser un périphérique de bouclage pour partitionner le disque:
$ losetup /dev/loop0 /dev/sdg
Les appareils en boucle ont toujours une taille de secteur de 512, ce qui me permet de partitionner l'appareil comme je le souhaite. Cependant, le noyau ne reconnaît pas les tables de partition sur les périphériques de bouclage, je dois donc créer un autre périphérique de bouclage et spécifier manuellement la taille et le décalage de la partition:
$ losetup /dev/loop1 /dev/sdg -o $((10240*512)) --sizelimit $(((5860532216-10240)*512))
Je peux écrire un script pour automatiser cela, mais ce serait bien de pouvoir le faire automatiquement.
Je peux exécuter nbd-server et nbd-client; Les périphériques NBD ont des secteurs de 512 octets par défaut et les périphériques NBD sont partitionnables. Cependant, la documentation NBD met en garde contre l'exécution du serveur et du client nbd sur le même système; Lors des tests, le client nbd dans le noyau s'est bloqué et j'ai dû tuer le serveur.
Je peux exécuter istgt (cible iSCSI de l'espace utilisateur), en utilisant la même configuration. Cela présente un autre périphérique SCSI au système avec des secteurs de 512 octets. Cependant, lors du test, cela a échoué et a provoqué une déréférence du pointeur NULL du noyau dans le code ext4.
Je n'ai pas encore enquêté sur devmapper, mais cela pourrait fonctionner.