web-dev-qa-db-fra.com

Cloner uniquement l'espace utilisé du disque dur

Puis-je utiliser dd, rsync, clonezilla ou n’importe quel outil pour cloner uniquement l’espace utilisé sur mon disque dur sous Linux? Je dois effectuer une sauvegarde d'un disque dur 1 TB (avec seulement 2 Go d'espace disque utilisé) sur un disque dur de 500 Go.

10
kroka

Vous pouvez le faire, mais vous devez d'abord préparer votre disque. L'astuce consiste à utiliser un fichier fragmenté ou une compression. Cette méthode prend du temps, elle génère des E/S élevées. Dans votre cas (2 Go utilisés sur 1 TB HDD) une copie de fichier (comme suggéré dans le commentaire de la sciure de bois) sera probablement une solution de meilleure qualité. Si, par contre, vous aviez par exemple 850 Go utilisés sur 1 To, de nombreux petits fichiers, vous vouliez sauvegarder le MBR, la table de partition, les métadonnées, tout cela à la fois - ma méthode serait alors un moyen raisonnable de sauvegarder au moins 150 Go sur le fichier image (qui ne peut toujours pas rentrer dans un disque dur de 500 Go, à moins que les données ne soient suffisamment compressées).

J'écris ceci pour les utilisateurs qui utilisent beaucoup de disques. Notez également que le lecteur source doit être en bon état et permettre de remplacer l'espace vide. Je donne la solution principalement pour la sauvegarde, pas de récupération ni pour l'investigation Le temps et les frais d'E/S seront payés non seulement lors de la création de l'image, mais également lors de la réécriture de l'image sur le disque. Réfléchissez à deux fois si la méthode vous convient.

Disons que vous devez cloner /dev/sdb et qu'il existe plusieurs partitions: /dev/sdb1, /dev/sdb2

Préparation

Pour tirer le meilleur parti des fichiers fragmentés ou de la compression, vous devez écraser les espaces vides avec des zéros:

## Most commands need Sudo.
mount -o rw /dev/sdb1 /mnt
dd if=/dev/zero of=/mnt/zero_file bs=32M
## Long wait here. Expect "no space left on device".
sync
rm /mnt/zero_file
umount /dev/sdb1
## Repeat this with /dev/sdb2, /dev/sdb3 etc.

En cas de partition Windows, il peut y avoir des problèmes dus au hibernation de Windows. Lisez ceci .

S'il y a des lacunes importantes dans la disposition des partitions, vous devez également les remplir avec des zéros. Les partitions d'échange (le cas échéant) nécessitent un traitement spécial afin de réduire au maximum la qualité de l'image résultante. Les fichiers Windows tels que hiberfil.sys, pagefile.sys et swapfile.sys peuvent être supprimés avant la création de zero_file. Je ne couvrirai pas ces cas en détail ici.

Méthode de fichier fragmenté

Cette méthode peut être utilisée si le système de fichiers cible (où le fichier image sera enregistré) prend en charge les fichiers fragmentés. Pour générer un fichier image fragmenté, appelez:

## dd probably needs Sudo here.
dd if=/dev/sdb of=/foo/bar/my_image.dd bs=512 conv=sparse

(EDIT: à l’origine, il y avait bs=32M mais ce n’est pas un bon choix avec conv=sparse. Comparez cette question .)

Pour réécrire l'image:

## dd probably needs Sudo here.
dd if=/foo/bar/my_image.dd of=/dev/sdb bs=32M

Avantages:

  • L'image peut être montée (mount -o offset=… ou utiliser kpartx) pour accéder aux fichiers qu'elle contient.

Désavantages:

  • Le système de fichiers cible doit prendre en charge les fichiers fragmentés.
  • Souvenez-vous de le garder clairsemé lors de la copie (cp --sparse=always).

Méthode de fichier compressé

Pour générer l'image:

## dd probably needs Sudo here.
dd if=/dev/sdb bs=32M | gzip -c > /foo/bar/my_image.dd.gz

Pour réécrire l'image:

## dd probably needs Sudo here.
gzip -cd < /foo/bar/my_image.dd.gz | dd of=/dev/sdb bs=32M

Ces commandes peuvent être construites sans dd, avec gzip uniquement. J'ai utilisé dd pour assurer une mémoire tampon de 32 Mo.

Avantages:

  • Le fichier résultant est non clairsemé, il ne nécessite aucun traitement particulier.
  • La taille de l'image sera encore réduite si les fichiers de votre disque source sont sujets à la compression.

Désavantages:

  • Il est difficile d’accéder aux fichiers de l’image compressée sans décompression complète (certains Fuse peuvent être utiles, bien que je ne sois pas sûr, je n’ai jamais essayé; envisagez une approche de squashfs ).

Astuces

Pour surveiller la progression, appelez dd avec l'opérande status=progress. Si dd fonctionne déjà sans ce logiciel (par exemple, votre dd ne prend pas en charge status=progress ou si vous avez oublié de l'utiliser), envoyez le signal USR1 à l'outil:

kill -s USR1 $(pidof dd)

et répéter au besoin.

Vous pouvez également utiliser pv pour lire. Exemples:

pv -B 32m /dev/sdb | dd of=/foo/bar/my_image.dd bs=512 conv=sparse
pv -B 32m /dev/sdb | gzip -c > /foo/bar/my_image.dd.gz

Pour compresser rapidement, utilisez gzip --fast, pour compresser au mieux, utilisez gzip --best. Reportez-vous à man gzip pour plus d'options.

Utilisez pigz au lieu de gzip si vous le pouvez. Cela devrait accélérer les choses car pigz peut utiliser plus d'un cœur de processeur. Vous pouvez utiliser un autre compresseur si vous le souhaitez.

22
Kamil Maciorowski

Si le disque cible est déjà formaté, le deuxième disque est branché sur le même ordinateur que le premier, il est monté et, si vous utilisez Linux ou Mac:

rsync -avP --ignore=/media/disk2 / /media/disk2

Si le disque cible est déjà formaté, le deuxième disque est formaté et monté sur un autre PC, et si vous utilisez Linux ou Mac:

rsync -avP / user@ip_of_disk2_Host:/media/disk2

Cela suppose que vous souhaitiez simplement une sauvegarde des fichiers sans tenir compte du lecteur sous-jacent. Cela effectue une sauvegarde PAR FICHIER et s’exécutera assez rapidement sur seulement 2 Go de données.

0
UtahJarhead