créer une image d'une clé USB sans partition non allouée

13

J'ai une clé USB de 8 Go connectée à mon système qui ressemble à ceci:

[root@host]# fdisk -l /dev/sdb

Disk /dev/sdb: 8462 MB, 8462008320 bytes
255 heads, 63 sectors/track, 1028 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x5c0894d9

Device Boot      Start         End      Blocks   Id  System
/dev/sdb1   *           1           9       72261    e  W95 FAT16 (LBA)
/dev/sdb2              10         103      755055   83  Linux
[root@host]# 

Donc, fondamentalement, ma partition FAT est d'environ 70 Mo, la partition ext2 est d'environ 740 Mo et le reste de l'espace (~ 7 Go) n'est pas alloué. Maintenant, lorsque j'ai créé mon disque dur USB via:

dd if=/dev/sdb of=myimage.img bs=1M

le fichier de sortie (myimage.img) fait environ 8 Go, ce qui est le fonctionnement normal de dd.

Question: Ce que je recherche, c'est un moyen de cloner directement mon disque dur USB sans l'espace non alloué afin que mon fichier de résultat soit d'environ 1 Go non compressé au lieu de 8 Go. La raison pour laquelle je pose la question est que le fichier de sortie (myimage.img) est utilisé par un programme de simulation pour démarrer l'image. Le simulateur peut gérer des fichiers de 8 Go mais je ne veux pas gaspiller mon espace disque.

modeste
la source
1
C'est un problème quelque peu similaire avec une solution intéressante: serverfault.com/q/281628/141604
semaine

Réponses:

15

Si je comprends bien, vous souhaitez créer une image du début du disque à la fin de la dernière partition.

Le paramètre pour ddcela fait cela count=. Votre dernière partition se termine sur 103, et le compte devra être de 1 supplémentaire (104) et la taille de votre unité est de 8225280 octets (selon la fdisk -lsortie). Vous pouvez donc simplement modifier votre commande de cette façon:

dd if=/dev/sdb of=myimage.img bs=8225280 count=104

Je suggérerais cependant que vous couriez à la fdisk -u -l /dev/sdbplace. Les cylindres ne sont plus vraiment pertinents à cet âge, donc vous êtes mieux si vous voyez le nombre de secteurs pour éviter toute erreur d'arrondi. Ensuite, vous devrez exécuter:

dd if=/dev/sdb of=myimage.img count=...

où count sera défini sur le nombre obtenu fdisk -u -là la fin de la dernière partition plus un , au lieu de ce qui était auparavant 104. La taille de bloc par défaut ddest de 512 octets, qui est également l'unité qui fdisk -u -lsera utilisée dans la sortie.

La table de partition de sauvegarde d'une partition GPT est stockée à la fin du disque, mais puisque vous n'utilisez pas GPT, tout ira bien.

chutz
la source
2

Il vous suffit de dire à dd de ne lire que la partie du disque qui vous intéresse. Le paramètre que vous recherchez est count.

Prenez donc la taille de votre cylindre de 8 225 280 et multipliez le nombre de cylindres en utilisation par 103 et vous obtenez 847 203 840 octets. Étant donné que vous utilisez une taille de bloc d'un mégaoctet, convertissez ces octets en mégaoctets, soit 808.

Donc, votre commande est dd if=... of=... bs=1M count=808

long cou
la source