Clonage d'une clé USB amorçable sur une clé de taille différente

11

MATÉRIEL: 2 lecteurs flash USB de 8 Go
DISTRO: Mint 9 Xfce Live Cd persistant

Un lecteur flash USB a deux partitions:
1) FAT32 700 Mo Mint 9 partition
2) ext3 7.3 Go casper-rwpartition

OBJECTIF:
Je veux faire une copie de ce lecteur flash USB parce que je ne veux pas passer par le temps de l'installation et de la configuration à partir de zéro.

EXPÉRIENCE:
1) J'ai trouvé que ddcela ne fonctionne pas pour ce travail car si l'un de mes lecteurs flash a même une taille différente de 1 Mo, ce qui est parfois le cas, la copie est corrompue.

2) J'ai constaté que l'utilisation gpartedet le pré-formatage du deuxième lecteur comme le premier, puis rsyncchaque partition individuellement ne fonctionne pas, car pour une raison quelconque, certains fichiers ne sont pas copiés et le lecteur ne démarre pas.

Je veux garder ma clé de travail et en faire des copies et configurer les clés pour mes amis. De cette façon, si je lâche un autre bâton, mon bâton de base restera toujours assis à attendre.

Joshua Robison
la source
quel chargeur de démarrage utilisez-vous (syslinux?). Veuillez envisager de supprimer cette diatribe de votre message, cela n'ajoute aucune valeur à votre question.
Mat
J'ai utilisé l'installateur usb live mint, donc tout était automatique. J'espère que le processus de clonage évitera de travailler avec des chargeurs de démarrage et copiera ma configuration de chargeur de démarrage actuelle
Joshua Robison

Réponses:

5

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/sdbet 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 à partprobeest 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:

  1. Agrandissez la partition. Malheureusement, je ne sais pas comment faire cela de manière simple. partedpeut le faire avec la movecommande (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.
  2. Agrandissez le système de fichiers. Cette partie est simple: il suffit d'exécuter resize2fs /dev/sdc2pour 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
Gilles 'SO- arrête d'être méchant'
la source
hmm. Ne puis-je pas simplement utiliser head pour copier simplement les premiers 300 Mo de la deuxième partition dans un fichier img? Cela ne coupera-t-il pas tous les espaces / blocs vides à la fin du fichier?
Joshua Robison
1
@Joshua: Non, car il n'y a aucune raison pour que toutes les données du fichier se trouvent dans les premiers 300 Mo, et même si c'était le cas, vous ne pouvez pas simplement faire partie d'un système de fichiers comme celui-ci. Vous devez créer un système de fichiers valide de la bonne taille. Vous devez également avoir une partition de la bonne taille; la taille de la partition est stockée dans le secteur de démarrage. Si vous préférez partir d'une image de taille minimale et l'agrandir si vous le souhaitez, j'ai ajouté un moyen de le faire dans ma réponse.
Gilles 'SO- arrête d'être méchant'
hmm. J'ai essayé de copier les fichiers auparavant, mais pour une raison quelconque, tout n'a pas été copié. J'ai aussi essayé rsync avec sudo. et je pense que j'ai essayé su root et je l'ai fait aussi .... Ça ne marche tout simplement pas pour moi. Je suis sûr que les disques n'étaient pas montés ... de toute façon. J'ai décidé de réduire le disque en gparted, puis de créer des fichiers img à partir de cela, puis de les restaurer sur un disque plus petit. Pré-rétrécir dans gparted était la seule solution simple que j'ai pu trouver. Merci quand même pour vôtre aide.
Joshua Robison
Votre réponse est probablement correcte et fera très probablement ce que je demande. C'est trop compliqué pour moi. J'ai donc opté pour la méthode de pré-rétrécissement gparted.
Joshua Robison
y a-t-il une faute de frappe dans cette ligne head -c 512 </dev/sdb >/bev/sdc?
antonio
3

~ $: sudo apt-get install gddrescue ddrescue

~ $: ddrescue / dev / sda / dev / sdb -v

;

Syntaxe: utilitaire / source / lecteur / destination / lecteur --verbose

Commentaire: affiche la progression et la vérification des erreurs afin que vous sachiez si elle est acceptable ou si vous raccrochez quelque part. Vous pouvez également ajouter b = quels blocs de taille que vous souhaitez. "gddrescue" est une version gui de "ddrescue" mais j'utilise uniquement le ddrescue comme écrit ci-dessus car il fonctionne sans problème.

SierraJuliet
la source
2
Notez que le format approprié est ddrescue -v /dev/sda /dev/sdb(les options viennent en premier avant les noms des périphériques / fichiers). Merci d'avoir signalé cet outil! Beaucoup plus facile que d'utiliser dd!
xmnboy
0

J'avais récemment cloné ma persistance cryptée en direct Kali d'un 16 Go à un 64 Go USB 3.0, mon système d'exploitation hôte est Windows 10 Pro. Je n'avais pas tenté de cloner en utilisant une distribution Linux, je suis sûr que les réponses ci-dessus sont ce dont vous avez besoin, mais pour tous les utilisateurs de Windows; J'avais utilisé l'assistant de partition de disque AOMEI. Super simple à utiliser, je l'ai utilisé pour partitionner mon SSD pour l'adapter à Ubuntu, mais je m'égare.

Je devais m'assurer que l'USB sur lequel je clonais était déjà formaté pour un démarrage en direct. Branché sur les deux USB et simplement fait un clic droit sur le lecteur de 8 Go; cliqué sur copypuis sélectionné le lecteur de 64 Go, il vous demandera un tas de choses comme "êtes-vous sûr que c'est le bon lecteur, tout sera effacé" tout ce jazz. Lisez-le et assurez-vous que tout est en ordre, vous n'avez vraiment pas à faire grand-chose.

Attendez juste que le processus soit terminé et vous êtes prêt. Testé dit USB et tout a fonctionné!

J'ai trouvé que c'était le moyen le plus simple, du moins pour moi, de cloner des distributions en direct d'USB vers USB.

Je suis nouveau ici
la source