mardi 26 février 2008

Plusieurs partitions sur une clef USB: problème dans Windows

Comme je vous l'ai expliqué précédemment avec Debian Live je génére un système bootable à placer sur une clef USB.

Debian Live me crée un fichier binary.img que j'écris sur la clef USB en faisant:
dd if=binary.img of=/dev/sdX

Notez que j'écris bien sur /dev/sdX et pas sur /dev/sdX1. Cela signifie que je binary.img contient le MBR de la clef USB. En bref en faisant ce dd je crée sur ma clef USB:
  • un MBR
  • une table des partitions contenant l'unique partition /dev/sdX1 de type 0x83:Linux
  • une partition /dev/sdX1
Mais la partition /dev/sdX1 ne prend pas toute la clef USB, il reste de la place. Regardez ce que je vois dans cfdisk pour ma clef USB:

cfdisk (util-linux-ng 2.13.1)
Disk Drive: /dev/sdb
Size: 2013265920 bytes, 2013 MB
Heads: 255 Sectors per Track: 63 Cylinders: 244

Name Flags Part Type FS Type Size (MB)
--------------------------------------------------------------
sdb1 Boot Primary Linux 764,96
Pri/Log Free Space 1242,02

Je crée donc une partition primaire de type 0x0b:FAT32 dans l'espace libre. Cette partition fait environ 1200 MB c'est à dire 1,2 GB

J'ai donc la table de partitions suivante:

[root@cobra] /root>fdisk -l /dev/sdb
Disk /dev/sdb: 2013 MB, 2013265920 bytes
255 heads, 63 sectors/track, 244 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x000ecf8e
Device Boot Start End Blocks Id System
/dev/sdb1 * 1 93 746991 83 Linux
/dev/sdb2 94 244 1212907+ b W95 FAT32

Maintenant je crée un système de fichiers FAT32.
mkfs.vfat -F 32 -c -n DOCUMENTS /dev/sdb2
Ci-dessus:
  • -F 32 indique que je formate en FAT32 et pas FAT16 ni FAT12
  • -c indique que je veux tester le support lors du formatage (facultatif)
  • -n DOCUMENTS formate avec l'étiquette (label) DOCUMENTS
  • /dev/sdb2 est le périphérique qui correspond à la deuxième partition de ma clef USB
Maintenant, je vais prendre ma clef USB et la brancher à une machine sous Windows. J'ai une partition Debian Live de 760 MB et une partition DOCUMENTS de 1200 MB. Je réfléchis: laquelle de ces partitions Windows va-t-il monter ? En toute logique, il ne devrait pas monter la première partition, puisque c'est une partition Linux. Par contre il devrait monter la deuxième partition, qui est une partition FAT32.

(Pour accéder à diskmgmt.msc faites Start > Run > diskmgmt.msc. Vous pouvez aussi faire un clic droit sur l'ordinateur qui est en haut à gauche sur le bureau, choisir "Gérer" et sélectionner "Gestion des disques")

Je branche ma clef USB sur la machine Windows, et dans diskmgmt.msc, je vois ceci:

... eh bien ça alors !

Dans la table des partitions (donc dans le MBR), la première partition est indiquée comme 0x83 c'est à dire Linux et la deuxième est indiquée comme 0x0b c'est à dire FAT32. En toute logique, Windows devrait monter la deuxième partition, mais pas la première. En fait Windows fait exactement l'inverse: il monte la première partition (Linux) mais ne monte pas la deuxième partition (FAT32) !

Comment Windows peut-il monter la partition alors que c'est une partition Linux me direz-vous ? C'est ici qu'il y a une subtilité. En fait, dans la table des partitions (donc dans le MBR), la première partition est indiquée comme 0x83 c'est à dire Linux. Mais le système de fichier utilisé sur cette partition est FAT16 car Debian Live génère un système bootable pour clef USB basé sur SYSLINUX. Et SYSLINUX, c'est une technologie qui ne fonctionne que sur les partitions FAT.

Ce n'est qu'avec Windows que la deuxième partition DOCUMENTS n'est pas accessible.
Avec Debian GNU/Linux, dès que je branche ma clef USB, je peux accéder à la première partition (DEBIAN-LIVE) et à la deuxième partition (DOCUMENTS).

Avec Mac OS X, dès que je branche ma clef USB, je peux accéder à la deuxième partition (DOCUMENTS).

Résultat des courses: Windows monte la première partition et pas la deuxième... Alors qu'il devrait monter la deuxième partition et pas la première...

Aucun commentaire: