mercredi 12 mars 2008

Plus loin dans Debian Live sur une clef USB


Mon affaire de système Debian Live est presque parfaite. Hélas, il me reste le problème suivant: quand je connecte ma clef USB à une machine Windows, comme expliqué précémment: Au lieu de monter la deuxième partition et pas la première, Windows monte la première partition et pas la deuxième .

En fait, "by design", lorsqu'on introduit une clef USB, Windows monte seulement la première partition, et aucune autre !

La solution est de mettre la partition DEBIAN_LIVE en second et la partition DOCUMENTS en premier.

Comment faire ?

En fait, lh_build génère à la fois le MBR (512 premiers octets de /dev/hda) et la partition Debian Live (/dev/hda1).

La première solution est de déplacer la partition /dev/hda1 à la fin de la clef USB où elle deviendra /dev/hda2 à l'aide d'un outil opensource approprié tel que GNU Parted ou GParted ou QtParted. Ou à la limite un outil commercial approprié: PartitionMagic

Mais, ce n'est finalement pas si facile que cela:
  • GNU Parted ou GParted ou QtParted me disent tous: Error: The file system is bigger than its volume!
  • PartitionMagic ne voit même pas les partitions sur la clef USB (!?)
  • modifier directement la table de partition avec un éditeur hexadécimal me semble périlleux
Finalement j'ai trouvé la solution:
  • avec fdisk, voir combien de cylindres occupe /dev/sdb1
  • créer un /dev/sdb2 type 0x83 comportant le même nombre de cylindres tout à la fin de la clef USB
  • sauvegarder la table de partitions et quitter fdisk
  • transférer "en raw" toutes les données de la première vers la deuxième partition: time dd if=/dev/sdb1 of=/dev/sdb2
  • jeter la première partition
  • avec cfdisk recréer comme première partition /dev/sdb1 de type 0x0b (FAT32) qui prend tout l'espace jusqu'au début de /dev/sdb2
  • toujours dans cfdisk mettre le flag "bootable" sur /dev/sdb2
  • sauver et quitter cfdisk
  • créer la partition FAT32 DOCUMENTS sur /dev/sdb1 en faisant: mkfs.vfat -F 32 -n DOCUMENTS /dev/sdb1
Résultat des courses:
Name      Flags    Part Type     FS Type       [Label]        Size (MB)
----------------------------------------------------------------------
sdb1 Primary W95 FAT32 [DOCUMENTS] 1044,62
sdb2 Boot Primary Linux [DEBIAN_LIVE] 962,36

Voici ce que Windows voit:


Et voilà, désormais, j'arrive à faire les deux:
  • Quand je boote sur ma clef USB, j'arrive dans Debian Live
  • Quand je connecte ma clef USB à une machine Windows, j'arrive à monter la partition DOCUMENTS

3 commentaires:

Stuart a dit…

Pour être plus exacte Windows monte la partition numéro 1 ce qui n'est forcement la première partition sur la clé USB.

J'ai fait

Device Boot Start End Blocks Id System
/dev/sdb1 402 1105 562496 b W95 FAT32
/dev/sdb2 * 1106 1231 100674 83 Linux
/dev/sdb3 1 401 320390+ b W95 FAT32

mkfs.msdos -n partition3 /dev/sdc3
mkfs.msdos -n partition1 /dev/sdc1

mount /dev/sdc1 /mnt
echo partition1 > /mnt/partition1.txt
umount /mnt
mount /dev/sdc3 /mnt
echo partition3 > /mnt/partition3.txt
umount /mnt

Et Windows a bien monté la partition avec le fichier partition 1. Il semble donc qu'il n'est pas nécessaire de déplacer la partition faite par DebianLive mais juste de changer son numéro. À vérifier.

Pierre Bauduin a dit…

Ca c'est intéressant.
En effet il est possible que la partition qui s'appelle /dev/sda1 ne soit pas nécessairement celle qui commence au secteur 1.

Je vais essayer ça dès que j'en aurai l'occasion.

Merci en tous cas !

Stuart a dit…

Il n'est pas difficile de changer le numéro de la partition créée par Debian Live:

sudo lh_build
usb=/dev/sdc
dd if=binary.img of=/dev/sdc
sfdisk -d $usb | sed -e '/sdc1/{s/1/2/;h;d;}' -e '/sdc2/{s//sdc1/;G;}' | sfdisk --force $usb

après il suffit de créer une autre partition avec fdisk

sudo fdisk $usb << Eof || true
n
p
1


t
1
b
w
Eof

puis de la formater

mkfs.msdos -n stuart ${usb}1

Quand on insère cette clé dans une machine Windows la partition (vide) stuart est monté. La partition DebianLive reste invisible. C'est ce que nous voulons.

On pourrait demander à debian d'ajouter une option à DebianLive permettant de modifier le numéro de la partition créée afin d'éviter cette manipulation avec sfdisk.