62 votes

dd sur l'ensemble du disque, mais pas sur la partie vide

Je dispose d'un disque, disons /dev/sda.

Voici fdisk -l :

 Disk /dev/sda: 64.0 GB, 64023257088 bytes
255 heads, 63 sectors/track, 7783 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: 0x0000e4b5

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          27      209920   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              27         525     4000768    5  Extended
Partition 2 does not end on cylinder boundary.
/dev/sda5              27         353     2621440   83  Linux
/dev/sda6             353         405      416768   83  Linux
/dev/sda7             405         490      675840   83  Linux
/dev/sda8             490         525      282624   83  Linux

Je dois créer une image à stocker sur notre serveur de fichiers pour l'utiliser dans d'autres appareils clignotants que nous fabriquons, et je ne veux donc que l'espace utilisé (environ 4 Go). Je veux garder la mbr etc... car cet appareil doit être prêt à démarrer dès que la copie est terminée.

Des idées ? J'utilisais auparavant dd if=/dev/sda of=[//fileserver/file] mais à l'époque, ma copie principale se trouvait sur une carte flash de 4 Go.

53voto

Alex Points 17262

À l'époque, j'ai rencontré un problème similaire avec les distributions Linux intégrées : il fallait se débarrasser de toutes les saletés avant de compresser l'image.

dd if=/dev/zero of=asdf.txt . Attendez qu'il meure. Supprimez asdf.txt.

Vous venez d'écrire des zéros dans tout l'espace libre de l'appareil.

Prenez maintenant une image disque et passez-la dans gzip. Voila, une image éparse.

Cela n'est probablement pas très bien adapté et pourrait causer des problèmes si vous avez besoin d'écrire sur le disque, mais bon.

Vous pouvez prendre un instantané rsync du disque sur un autre volume, le mettre à zéro, puis prendre cette image disque.

Note : Peut être dangereux pour le SSD, l'utilisateur doit prendre en compte cette option.

28voto

Tom Looby Points 309

Utiliser dd, avec l'option count.

Dans votre cas, vous avez utilisé fdisk, je vais donc adopter cette approche. Votre "sudo fdisk -l "a produit :

    Disk /dev/sda: 64.0 GB, 64023257088 bytes
    255 heads, 63 sectors/track, 7783 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: 0x0000e4b5

    Device Boot      Start         End      Blocks   Id  System
    /dev/sda1   *           1          27      209920   83  Linux
    Partition 1 does not end on cylinder boundary.
    /dev/sda2              27         525     4000768    5  Extended
    Partition 2 does not end on cylinder boundary.
    /dev/sda5              27         353     2621440   83  Linux
    /dev/sda6             353         405      416768   83  Linux
    /dev/sda7             405         490      675840   83  Linux
    /dev/sda8             490         525      282624   83  Linux

Les deux éléments dont vous devez tenir compte sont 1) la taille de l'unité et 2) la colonne "End". Dans votre cas, les cylindres sont égaux à 8225280 octets. Dans la colonne "Fin", sda8 se termine à 525 (ce qui représente 525[unités]*16065*512 = ~4,3GB).

dd peut faire beaucoup de choses, comme démarrer après un décalage, ou s'arrêter après un nombre spécifique de blocs. Nous ferons cette dernière chose en utilisant l'option count de dd. La commande se présente comme suit :

    sudo dd if=/dev/sda of=/your_directory/image_name.iso bs=8225280 count=526

Où -bs est la taille du bloc (il est plus facile d'utiliser l'unité utilisée par fdisk, mais n'importe quelle unité fera l'affaire tant que l'option count est déclarée dans ces unités), et count est le nombre d'unités que nous voulons copier (notez que nous incrémentons le count de 1 pour capturer le dernier bloc).

19voto

PolarFox OOF Points 11

Tandis que /dev/zero de l'espace disque libre et d'utiliser dd conv=sparse / gz -c est possible, sur d'énormes disques avec un espace vide de plusieurs centaines de Go, /dev/zero est terriblement lent - sans compter que, comme d'autres réponses l'ont indiqué, il n'y a pas d'autre solution, /dev/zero en cours d'exécution d'un SDD jusqu'à l'EOF.

Voici ce que j'ai fait lorsque j'ai été confronté à cette situation :

  • Sur un CD live lubuntu, j'ai utilisé gparted réduire le disque à la taille minimale possible, en laissant le reste de l'espace non alloué

  • Utilisé
    dd bs=1M count=<size_in_MBs> if=/dev/sdX | gzip -c --fast| dd of=/path/to/image.gz pour créer l'image rapidement compressée (inutile de préciser que vous pouvez ignorer la compression si vous disposez de suffisamment d'espace pour stocker les données brutes (ou si vous souhaitez réduire la charge du processeur)).

  • Utilisé
    dd if=/path/to/image.gz | gunzip -c | dd bs=1M of=/dev/sdY pour recopier les données sur un autre disque

  • Utilisé gparted à nouveau pour "étendre" la partition

Je n'ai pas essayé pour des partitions multiples mais je pense que le processus ci-dessus peut être adapté pour copier des "partitions" si la table de partition sur le disque de destination est d'abord créée et que seules les données contenues dans la partition sont copiées par l'intermédiaire de dd - lecture/écriture des décalages ( skip / seek option de dd respectivement) seront nécessaires le cas échéant.

8voto

c2h5oh Points 1489

Vous ne pouvez pas. dd est un outil de très bas niveau et il n'a aucun moyen de faire la distinction entre les fichiers et l'espace vide.

D'un autre côté, l'espace vide sera très, très bien compressé, donc si vous n'êtes préoccupé que par l'espace de stockage, et non par le temps d'écriture par exemple, passez-le par gzip.

6voto

jammus Points 1796

En supposant que le reste du disque soit vide (tous les zéros), vous pourriez faire passer votre DD par gzip, ce qui devrait compresser l'espace vide de manière assez satisfaisante. Vous pouvez utiliser un outil comme zerofree pour s'assurer que l'espace vide est effectivement vide, afin que le fichier soit bien compressé.

Si vous utilisez un outil comme image partielle , clonezilla ou d'autres outils de clonage linux, ils se chargeront automatiquement de la plupart de ces tâches.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X