Sous Linux, nous pouvons faire
dd if=/dev/sdb of=bckup.img
mais si le disque est de 32 Go avec seulement 4 Go utilisés, le fichier image de 32 Go est une perte d'espace-temps. Existe-t-il un moyen ou un outil pour créer des images avec uniquement des données valides?
La meilleure chose à faire est
Copiez tous les fichiers de toutes les partitions en préservant les métadonnées
mkdir -p myimage/partition1
mkdir myimage/partition2
Sudo cp -Rrf --preserve=all /media/mount_point_partition1/* myimage/partition1/
Sudo cp -Rrf --preserve=all /media/mount_point_partition2/* myimage/partition2/
Extraire le MBR
Sudo dd if=/dev/sdX of=myimage/mbr.img bs=446 count=1
remplacer /dev/sdX
avec l'appareil correspondant.
Partitionnez le disque de destination en partitions de taille supérieure aux données copiées et doit être du même format et des mêmes indicateurs à l'aide de gparted
. Google comment partitionner un disque.
Montez le disque fraîchement formaté et partitionné. Sur la plupart des ordinateurs, il vous suffit de connecter le disque et vous pouvez trouver les partitions montées dans /media
dossier.
Copiez les données précédemment copiées dans les partitions de destination à l'aide des commandes suivantes
Sudo cp -Rrf --preserve=all myimage/partition1/* /media/mount_point_partition1/
Sudo cp -Rrf --preserve=all myimage/partition2/* /media/mount_point_partition2/
Copiez le MBR
Sudo dd if=myimage/mbr.img of=/dev/sdX bs=446 count=1
Maintenant, profitez de votre nouveau disque!
Un moyen assez bon et simple de gérer cela est simplement de le diriger via gzip, quelque chose comme ceci:
# dd if=/dev/sdb | gzip > backup.img.gz
De cette façon, votre image sera compressée et l'espace inutilisé sera probablement réduit à presque rien.
Vous utiliseriez ceci pour restaurer une telle image:
# cat backup.img.gz | gunzip | dd of=/dev/sdb
Une remarque: si vous avez eu beaucoup de fichiers qui ont été récemment supprimés, la taille de l'image peut être encore grande (la suppression du fichier ne met pas nécessairement à zéro les secteurs sous-jacents). Vous pouvez effacer l'espace libre en créant et en supprimant immédiatement un gros fichier contenant des zéros:
# cd /media/flashdrive
# dd if=/dev/zero of=bigfile bs=1M # let it run and quit by disk full error
# rm bigfile
En utilisant les paramètres bs et count de dd
, vous pouvez limiter la taille de l'image, comme indiqué à l'étape 2 de réponse 1665017 .
Vous savez peut-être déjà quelle taille d'image vous souhaitez créer. Sinon, vous pouvez obtenir une bonne idée de df
:
df -H --total /
Remplacer /
avec une liste séparée par des espaces de tous les points de montage relatifs aux partitions de disque.
Un moyen plus précis pourrait être d'utiliser fdisk
ou votre éditeur de partition préféré et de vous occuper d'une calculatrice.
$ fdisk -l /dev/mmcblk0
Disk /dev/mmcblk0: 7.4 GiB, 7948206080 bytes, 15523840 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x00057540
Device Boot Start End Sectors Size Id Type
/dev/mmcblk0p1 2048 186367 184320 90M c W95 FAT32 (LBA)
/dev/mmcblk0p2 186368 3667967 3481600 1.7G 5 Extended
/dev/mmcblk0p5 188416 3667967 3479552 1.7G 83 Linux
Espace total utilisé en octets = secteur final de la dernière taille de secteur de la partition X (ici c'est 3667967 x 512).
Espace total utilisé en Go = espace total utilisé en octets/10243 (ici, c'est 1,749023 Go).
Si vous décidez, par exemple, que votre image doit faire exactement 2 Go, la commande suivante le fera:
dd if=/dev/mmcblk0 of=/path/to/pi_updated.img bs=1M count=2048
L'image résultante inclura également le bruit aléatoire au-delà de la plus grande étendue de la dernière partition.
N'oubliez pas de Sudo
les commandes ci-dessus si votre compte ne dispose pas déjà de privilèges suffisants.
Pour mes besoins, je n'ai pas besoin d'une image parfaitement ramenée au dernier bit de données, donc lorsque la taille réelle est de 1,75 Go, une image de 2 Go est assez proche pour moi. Cela supprime les 6 autres Go (ou 30 Go ou tout ce que l'appareil a de rechange) d'espace inutilisé qui serait autrement dans l'image.
J'ai vu à de nombreux endroits que dd
ne devrait pas être exécuté sur une partition montée et j'ai suivi cela parce que cela semble intuitivement correct; cela ressemble plutôt à essayer de vous esquisser en faisant une esquisse dans un miroir avec l'esquisse que vous rendez également visible dans l'esquisse. C'est un peu sommaire.
Si vous avez une grande carte SD de 16 Go, 32 Go, etc., mais que vous souhaitez économiser de l'espace avec la sauvegarde, vous pouvez utiliser:
Sudo apt-get install gnome-disk-utility
Ouvrez l'utilitaire de disque pour vérifier que la lettre de sorcière est bien celle de votre lecteur USB:
gnome-disks
Dans mon cas, une carte SD de 32 Go avec une image Raspbian sur elle reconnue comme:/dev/sde
Je cours donc avec /dev/sde
:
Sudo dd bs=4M status=progress if=/dev/sde | gzip > \
/you-selected-full-path-here/raspberry-images/`date +%Y%m%d`_rpi_image_backup.gz
status=progress gives you progress bar indication
| gzip > compresses the 32 GB total size and not writing the empty space from the 32 GB
`date +%Y%m%d` writes today date in the filename
Sortie: 20190529_rpi_image_backup.gz
Et la taille n'est que de 3,5 Go. Si vous souhaitez écrire cette image sur une nouvelle carte SD, utilisez:
Vous pouvez également écrire cette image faite de 32 Go sur un disque de 16 Go ou 8 Go, il ne se plaint plus que l'image soit trop grande.