introduction
Pour un lecteur avec des partitions PC (ce que vous trouverez sur la plupart des clés USB), le chargeur de démarrage consiste en une toute petite partie au tout début du lecteur (le chargeur de démarrage de l'étape 1, dans le secteur de démarrage du lecteur) et un une plus grande part ailleurs (le bootloader stage 2, dans un fichier). Les données de l'étape 1 contiennent l'emplacement physique de l'étape 2. Si vous copiez l'ensemble de l'appareil (ce que vous avez essayé avec dd
), la partie de l'étape 1 est au même emplacement physique et le bâton fonctionne, mais le nouveau bâton doit être au moins aussi grand comme l'original. Si vous recréez les partitions et copiez les fichiers, l'étape 1 vous manque car ce n'est pas un fichier.
Je pense (mais je n'ai pas vérifié) que l'étape 2 est dans la première partition (FAT32). Si tel est le cas, vous pouvez copier cette partition en gros et copier également le secteur de démarrage, puis modifier la table de partition afin que la deuxième partition occupe exactement l'espace restant et copier les fichiers sur la deuxième partition. Vous pouvez aussi bien conserver une image brute du secteur d'amorçage et de la première partition dans un fichier sur un disque dur (mais vous pouvez également les cloner à partir d'une clé USB).
Faire un clone d'une taille différente
Ci-dessous, j'appellerai le périphérique contenant le stick d'origine /dev/sdb
et le périphérique contenant le clone /dev/sdc
; remplacer les noms au besoin. Créez des points de montage si nécessaire. Je suppose que la partition FAT32 (au début du disque) est numérotée 1 et la partition ext3 est numérotée 2; substituer des numéros différents si nécessaire.
Première partie, si clonage à partir d'un stick:
head -c 512 </dev/sdb >/dev/sdc
partprobe /dev/sdc
cat </dev/sdb1 >/dev/sdc1
Première partie, si clonage à partir de fichiers image:
cat boot_sector.img >/dev/sdc
partprobe /dev/sdc
cat first_partition.img >/dev/sdc1
L'appel à partprobe
est nécessaire pour que le noyau recharge la table de partition à partir du disque (il se trouve dans le secteur de démarrage et la première commande dans l'un ou l'autre des scénarios ci-dessus modifie le secteur de démarrage). Si vous l'omettez, vous obtiendrez des erreurs ou le noyau écrira silencieusement les ordures sur le bâton.
Pour créer les fichiers image:
head -c 512 </dev/sdb >boot_sector.img
cat /dev/sdb1 >first_partition.img
Maintenant, après avoir obtenu le secteur de démarrage et la première partition, vous devez à nouveau modifier la table de partition pour redimensionner la deuxième partition. Vous pouvez le faire automatiquement en alimentant la bonne entrée fdisk
. Attention, c'est extrêmement sujet aux erreurs, et je ne l'ai pas testé. Si vous ne vous sentez pas complètement à l'aise avec cette pièce, faites-le à la main.
sed -e 's/ *#.*//' <<EOF | tr -s ' ' '\n' | tr -d _ | fdisk /dev/sdc
d 2 # delete partition 2
n p 2 # new primary partition 2...
_ _ # ... using all available space
w q # write and quit
EOF
Enfin, rechargez à nouveau la table de partition, créez un système de fichiers ext3 et copiez-y les fichiers.
partprobe /dev/sdc
mke2fs -j /dev/sdc2
mount /dev/sdc2 /media/sdc2
cp -a /media/sdb2/ /media/sdc2/
umount /media/sdc2
Méthode simplifiée pour créer un clone plus grand
Si vous préférez, vous pouvez stocker une image de l'ensemble du bâton. Vous pourrez utiliser cette image directement sur n'importe quelle clé au moins aussi grande: copiez simplement cette image sur la nouvelle clé avec cat <whole.img >/dev/sdc
, puis exécutez partprobe /dev/sdc
(ou débranchez la clé et remettez-la en place) pour relire la table de partition.
Ensuite, si vous le souhaitez, vous pouvez agrandir le clone. Dans cet ordre:
- Agrandissez la partition. Malheureusement, je ne sais pas comment faire cela de manière simple.
parted
peut le faire avec la move
commande (not resize
, qui redimensionne le système de fichiers), mais vous devez trouver les bons arguments - passez à secteurs ( unit s
) pour éviter les erreurs d'arrondi.
- Agrandissez le système de fichiers. Cette partie est simple: il suffit d'exécuter
resize2fs /dev/sdc2
pour que le système de fichiers utilise toute la taille de la partition.
Si vous partez d'un bâton plus grand que nécessaire, vous pouvez le réduire en suivant les étapes ci-dessus dans l'ordre inverse (réduire d'abord le système de fichiers avec resize2fs
, puis réduire la partition avec parted
).
Alternativement, vous pouvez d'abord copier le stick dans un fichier image, puis travailler sur ce fichier image. Pour accéder aux partitions, utilisez un périphérique de boucle , associant spécifiquement une partie du fichier à un disque . Voici un aperçu des étapes si vous souhaitez réduire l'image (avertissement, non testé, procédez avec soin et revérifiez les calculs).
fdisk -lu whole.img # note starting sector of partition 2: $S
losetup -fs -o $(($S * 512)) whole.img
# Let $D be the desired size of partition 2, in kB
resize2fs /dev/loop0 $ # replace /dev/loop0 by whatever losetup prints
losetup -d /dev/loop0
parted whole.img
# Use parted to resize the second partition
dd if=/dev/null of=/file/to/truncate seek=1 bs=$(($S/2+$D+1))k