6 votes

Table de partition indépendante de la taille du secteur

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.

3voto

harrymc Points 394411

Vous avez effectué une analyse très approfondie des formats de disque, à la fois MBR et GPT, et il semble que vous ayez rencontré un problème qui n'était pas prévu dans ces normes, celui d'un format indépendant de la taille logique des secteurs.

Le problème est que le disque USB a une taille de secteur interne de 4K mais prétend avoir différentes tailles de secteurs (à la fois logiques et physiques) en fonction du port auquel il est connecté. En pratique, il prétend également avoir différentes configurations cylindre/secteur, bien que ce mapping soit au moins cohérent.

Changer ce comportement nécessitera soit :

  1. Des changements dans le firmware du disque
  2. Changer le protocole utilisé sur le port, ce qui signifie des changements dans le pilote de disque utilisé pour le disque USB

Les deux options me semblent impossibles à réaliser par vous-même. Je n'ai pas trouvé sur le site de Western Digital de mises à jour du firmware pour votre disque, et je n'ai pas recherché de meilleurs pilotes de disque (en partie parce que je ne sais pas exactement quoi chercher, mais même si je savais, je ne serais pas trop optimiste).

La même question a été posée dans le post suivant, datant de juin 2012,
Comment forcer Debian à utiliser la taille de secteur physique sur un disque dur?

Voici la réponse acceptée peu encourageante (qui cite un article de juillet 2011) :

D'après une interview avec un représentant de Western Digital publiée sur http://www.techarp.com/showarticle.aspx?artno=734 il n'y a aucune option pour désactiver l'émulation 512e sur les disques Advanced Format actuels.

[...] Western Digital proposera-t-il des mises à jour de firmware qui convertiraient les disques Advanced Format actuels fonctionnant en mode émulation, vers le format natif?

Malheureusement, non. Les disques Advanced Format actuels ne peuvent pas être convertis pour fonctionner en format natif via une mise à jour du firmware

J'espère que quelqu'un d'autre proposera une meilleure réponse, mais ma propre réponse tend à être négative. Je ne conseillerais pas d'essayer de fabriquer un format GPT/MBR non standard, si vous souhaitez conserver vos données en sécurité.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X