web-dev-qa-db-fra.com

Pourquoi n'a-t-il pas `DD Conv = Sparse` économiser de l'espace comme prévu?

J'allais faire une image de mon ancien lecteur USB. J'ai eu de bonnes raisons d'attendre qu'il y ait des blocs remplis de zéros sur l'appareil, afin de sauver un espace que j'ai utilisé conv=sparse Option:

dd if=/dev/sdb of=myusb.img conv=sparse bs=32M

Cependant, cela ne m'a rien sauvé:

$ ls -hls myusb.img
250M -rw-r--r-- 1 root root 250M Oct 18 21:31 myusb.img

Je suis sûr qu'il y a des blocs zéro remplis sur l'appareil. Pourquoi pas dd conv=sparse Sauvegarder l'espace?


NOTE Je connais déjà la réponse (je pense). Je le pose ci-dessous. La question concerne la référence future.

11
Kamil Maciorowski

Si vous êtes absolument sûr, il y avait des blocs remplis de zéro, la raison pour laquelle vous avez sauvegardé n'était un grand tampon que vous avez utilisé. De man dd:

sparse Essayez de rechercher plutôt que d'écrire la sortie pour les blocs d'entrée NUL

Vous avez utilisé bs=32M, vous avez donc besoin d'un bloc de zéros entièrement de 32 mib à un décalage droit pour le conv=sparse Option de faire son travail si seulement une seule fois.

L'option bs définit ibs (taille du bloc d'entrée) et obs (taille du bloc de sortie). Bien que le manuel mentionne blocs d'entrée, il est en fait le obs qui compte.

Voici les résultats de certains tests. (Comme je suis l'op, j'ai fait les tests avec le même appareil.) Chaque fichier est nommé selon <obs_used>.img modèle. Faites attention à la première colonne:

$ ls -hlst *.img
250M -rw-r--r-- 1 root root 250M Oct 18 22:02 4M.img
250M -rw-r--r-- 1 root root 250M Oct 18 22:02 2M.img
249M -rw-r--r-- 1 root root 250M Oct 18 22:02 1M.img
248M -rw-r--r-- 1 root root 250M Oct 18 22:01 512K.img
248M -rw-r--r-- 1 root root 250M Oct 18 22:01 256K.img
247M -rw-r--r-- 1 root root 250M Oct 18 22:00 128K.img
247M -rw-r--r-- 1 root root 250M Oct 18 21:57 64K.img
247M -rw-r--r-- 1 root root 250M Oct 18 21:56 32K.img
246M -rw-r--r-- 1 root root 250M Oct 18 21:55 16K.img
246M -rw-r--r-- 1 root root 250M Oct 18 21:54 8K.img
246M -rw-r--r-- 1 root root 250M Oct 18 21:53 4K.img
246M -rw-r--r-- 1 root root 250M Oct 18 21:52 2K.img
246M -rw-r--r-- 1 root root 250M Oct 18 21:51 1K.img
246M -rw-r--r-- 1 root root 250M Oct 18 21:44 512.img

La conclusion est la suivante: vous ne devriez pas utiliser grand obs avec conv=sparse option. La taille du secteur commun est de 512 octets, alors bs=512 semble juste juste. Votre commande aurait dû être:

dd if=/dev/sdb of=myusb.img conv=sparse bs=512
18
Kamil Maciorowski