L'intrigue
J'ai un disque WD10JPVT 1To à l'intérieur d'un boîtier USB/eSata IcyBox IB-290StUS-B.
- Lorsque je connecte le disque via USB, j'obtiens une taille de secteur logique / physique de 512.
- Lorsque je connecte le disque via le port eSata natif de l'ordinateur, j'obtiens une taille de secteur logique / physique de 512 / 4k.
- Lorsque je connecte le disque via un port eSata d'une carte ExpressCard AKE Hidden USB 3.0 + eSATA II 54mm, j'obtiens une taille de secteur logique / physique de 4k / 4k.
Le problème
Le problème est que dans une table de partition MBR, le début et la fin des partitions sont exprimés en nombre de secteurs (logiques). Cela signifie que si je partitionne le disque lorsqu'il est branché via le port eSata de la carte ExpressCard, puis que je le branche sur un port USB ou le port eSata natif, les partitions auront un décalage et une taille incorrects, et vice-versa.
Sortie de fdisk
Les commandes fdisk
ci-dessous sont exécutées sous Ubuntu 11.04 (natty) et donnent les mêmes résultats avec XUbuntu 12.04 pour l'USB et l'eSata sur la carte ExpressCard, mais je ne peux pas tester l'eSata natif car c'est à partir de là que je démarre Ubuntu 12.04.
Connecté via USB:
> sudo fdisk -l /dev/sdb
Disk /dev/sdb: 1000.2 Go, 1000204886016 octets
255 têtes, 63 secteurs/piste, 121601 cylindres
Unités = cylindres de 16065 * 512 = 8225280 octets
Taille de secteur (logique/physique) : 512 octets / 512 octets
Taille d'E/S (minimale/optimale) : 512 octets / 512 octets
Identifiant de disque : 0x000c2664
Device Boot Start End Blocks Id System
/dev/sdb1 1 15201 122095104 7 HPFS/NTFS
Connecté via le port eSata natif de l'ordinateur :
> sudo fdisk -l /dev/sdb
Disk /dev/sdb: 1000.2 Go, 1000204886016 octets
255 têtes, 63 secteurs/piste, 121601 cylindres
Unités = cylindres de 16065 * 512 = 8225280 octets
Taille de secteur (logique/physique) : 512 octets / 4096 octets
Taille d'E/S (minimale/optimale) : 4096 octets / 4096 octets
Identifiant de disque : 0x000c2664
Device Boot Start End Blocks Id System
/dev/sdb1 1 15201 122095104 7 HPFS/NTFS
Connecté via le port eSata de la carte ExpressCard:
> sudo fdisk -l /dev/sdb
Disk /dev/sdb: 1000.2 Go, 1000204886016 octets
255 têtes, 63 secteurs/piste, 15200 cylindres
Unités = cylindres de 16065 * 4096 = 65802240 octets
Taille de secteur (logique/physique) : 4096 octets / 4096 octets
Taille d'E/S (minimale/optimale) : 4096 octets / 4096 octets
Identifiant de disque : 0x000c2664
Device Boot Start End Blocks Id System
/dev/sdb1 1 15201 976760832 7 HPFS/NTFS
Solutions ?
- Y a-t-il un moyen de stocker la taille de secteur "réelle" (4k) dans une table de partition MBR ?
- L'utilisation d'une table de partition GPT aurait pu fonctionner, mais l'en-tête GPT est stocké dans le secteur 1 du disque... et la taille de secteur varie, donc à moins qu'il n'y ait un moyen de stocker l'en-tête GPT à une position fixe mesurée en octets, cela ne sert à rien.
- Le formatage du disque brut sans aucune partition fonctionne, mais sous Ubuntu 11.04 je dois monter manuellement le disque (/dev/sdb), car Hal tente de monter les partitions inexistantes (/dev/sdb1, /dev/sdb2, ...) malgré le fait qu'il détecte correctement le label du système de fichiers.
- Je peux créer manuellement deux partitions qui se chevauchent, l'une qui fonctionne avec des secteurs de 4k et l'autre avec des secteurs de 512, et chaque fois que je branche le disque, une partition sera invalide et l'autre sera utilisée, mais cela semble laid et fragile.