Est-il sûr de prendre l'image du lecteur en cours de fonctionnement?

12

Je dois sauvegarder mon disque dur. Je veux utiliser ddet mettre l'image sur un disque dur externe.

  • Puis-je le faire en utilisant dd le système d'exploitation qui réside sur le disque dur lui-même ou dois-je démarrer à partir d'un autre appareil, par exemple un LiveCD?
  • Est-il sûr, en général, de prendre l'image d'un appareil, si l'appareil est monté et fonctionne?
  • Que faire si le périphérique est monté, mais je suis sûr qu'il n'y a pas d'autre opération d'E / S pendant qu'il ddfonctionne?

Je suis sûr que rsyncc'est le meilleur outil à utiliser pour les sauvegardes, en particulier les incrémentales.

Mais cela m'intéresse dd, car je veux également sauvegarder d'autres périphériques de stockage, et il copie également les données stockées sur un espace non partitionné. Par exemple, mon lecteur de livre électronique utilise un espace non partitionné pour stocker le démarrage, le noyau et d'autres données.

Marco Sulla
la source
Il est important de savoir quel système de fichiers vous utilisez, lequel vous intéresse? Certains ont des fonctionnalités spécifiques pour cette tâche.
Vality

Réponses:

11

En général, ce n'est pas sûr. Le FS suppose que les opérations sont écrites dans un certain ordre afin qu'il puisse écrire de nouvelles données de fichier et ensuite faire un pointeur vers lui à partir d'autres données, les détails exacts dépendent du système de fichiers. Imaginez si ce qui suit se produit:

  1. dd lit à partir de l'emplacement X qui contient des ordures ou des données
  2. Le système de fichiers écrit à l'emplacement X
  3. Le système de fichiers écrit à l'emplacement X + 1 pointeur vers l'emplacement X
  4. dd lit de l'emplacement X + 1 lien vers l'emplacement X

Du point de vue de la sauvegarde, vous obtenez des données inutiles. Cependant, il existe plusieurs façons de le contourner:

  • Geler le système de fichiers par commande spécifique au système de fichiers (je crois xfs_freeze est un et je n'en connais pas d'autre - mais une telle option existe au moins en théorie)
  • Créez un instantané lvm et copiez-le. La copie sera comme si vous redémarriez l'ordinateur (moins la réorganisation du disque dur) donc ce sera un système de fichiers sale mais la copie sera atomique. Notez que certains systèmes de fichiers comme XFS doivent d'abord être gelés.
  • Utilisez rsync comme suggéré par d'autres. Maintenant, la copie est sûre et vous n'avez pas besoin de LVM mais la copie n'est pas atomique. Donc, même si cela évite le problème ci-dessus au niveau du système de fichiers, il peut toujours rencontrer des problèmes avec les fichiers (plutôt improbable mais on peut imaginer des fichiers manquants pendant que mv est exécuté en arrière-plan par exemple)
  • Utilisez un système de fichiers avec des instantanés tels que btrfs , tux3 , zfs , nilfs ... Ensuite, vous évitez les deux problèmes - vous pouvez simplement créer un instantané et copier à partir de celui-ci en rsync ayant une atomicité complète. Notez cependant que ces systèmes de fichiers ont souvent tendance à être expérimentaux.

Enfin, ddce n'est peut-être pas le meilleur moyen de sauvegarde. Il copie un disque complet, ce qui est souvent inutile car vous copiez également les «déchets». Si vous avez besoin d'images disque, quelque chose comme partimage pourrait être mieux. Si vous n'avez pas de meilleure option, utilisez soit rsync, tar en mode différentiel / incrémentiel, etc., soit un système de sauvegarde complet tel que bacula , tarsnap ou l'un des nombreux autres. La déduplication des données peut faire des merveilles pour les tailles des sauvegardes.

Maciej Piechotka
la source
1
+1 C'est la seule réponse qui tente réellement de répondre à cette question, très bien faite pour lire réellement ce que l'op demande et ne pas se plaindre de la façon dont dd est mauvais.
Vality
+1 pour une bonne réponse. Mais je ne suis pas d'accord avec les diatribes. Dd n'est pas mauvais. C'est tout simplement inapproprié pour cela et expliquer pourquoi c'est le cas est une bonne chose.
Hennes
Le point 4 a les mêmes limites que le n ° 2, non? Une application pourrait être en train d'émettre des écritures, et l'instantané ne sait rien de la transaction au niveau de l'application.
Ben Voigt
Merci, cela répond à la question. La réponse de goldilocks est également bonne, mais je suis intéressé à sauvegarder non seulement mon disque dur mais également d'autres périphériques de stockage, et j'ai peut-être dû l'écrire avant.
Marco Sulla
@BenVoigt - dans une certaine mesure - il élimine une couche (système de fichiers) et AFAIK c'est la plus «fragile». Dans certains cas, vous pouvez toujours trouver des fichiers à moitié écrits, mais si l'application ne les traite pas, les fichiers peuvent également être corrompus dans de nombreuses autres circonstances (MOO, crash, etc.), donc une application correctement écrite devrait s'en occuper.
Maciej Piechotka
7

Cela dépend à quoi sert exactement la partition et à quoi sert la copie. Cependant, je dirai qu'en général, ddc'est un outil inapproprié pour sauvegarder des systèmes de fichiers . Ce n'est pas non plus ce à quoi il était destiné.

  • Cela vous fera perdre beaucoup de temps à copier des sections vides de la partition.

  • Cela peut entraîner des incohérences si le système de fichiers est actuellement monté, en partie parce que c'est une entité de niveau OS et peut être désynchronisé avec le périphérique de bloc sous-jacent. Appeler au syncdépart n'aidera pas beaucoup à cela, car le processus n'est pas instantané.

Utilisez cp -aou à la rsyncplace. Vous devez ensuite créer la partition de destination, bien sûr, donc ce n'est pas aussi simple que de tomber, mais c'est beaucoup plus sûr et plus flexible. Si vous devez créer une image de système de fichiers , voir ci-dessous.

Si vous avez l'intention de copier le système de fichiers racine, ne l'utilisez absolument pas dd. Vous devez utiliser quelque chose comme rsync -ax(ou cp -axsur des répertoires individuels de haut niveau), car il y a un tas de choses qui ne doivent PAS être dans la copie . Sous Linux, cela comprend:

/dev
/lost+found
/mnt
/proc
/run
/sys
/tmp

Certains d'entre eux sont en fait des interfaces du noyau et non de vrais répertoires sur le disque. Si vous les copiez, vous copiez un tas d'informations qui ne s'appliqueront pas dans la copie; si vous essayez de faire fonctionner un système avec lui, cela équivaudra à un espace gaspillé puisque la véritable interface sera montée sur le dessus. D'autres contiennent des informations temporaires utilisées par les processus en cours d'exécution et celles-ci sont plus problématiques, car le système ne pourra pas trier les ordures si vous les copiez.

Si vous souhaitez créer un fichier image du système de fichiers racine (ou tout système de fichiers), créez un fichier image vide - c'est une utilisation appropriée pour dd:

dd if=/dev/zero of=whatever.img bs=1024 count=1000000

C'est une image de 1024 Mo (1000000 * 1024). Ajustez countsi vous le souhaitez une autre taille. Créez, par exemple, un extsystème de fichiers dans le fichier :

mke2fs whatever.img

Il vous avertira que ce n'est pas un véritable périphérique de bloc. Procéder. Montez maintenant le fichier image:

mount whatever.img /mnt/img

/mnt/imgdoit exister mais pourrait tout. Vous pouvez maintenant rsync(ou cp -a) entrer /mnt/img. Le contenu restera à l'intérieur whatever.imglorsque vous le démonterez.

Pourtant...

Pour être clair, utilisez uniquement la méthode d'image du système de fichiers décrite ci-dessus si vous avez absolument besoin d'un fichier image pour une raison quelconque. Si votre objectif est de copier la partition sur un autre disque dur, vous n'avez pas besoin d'une image : créez une nouvelle partition avec un système de fichiers vide sur ce lecteur, montez-le et copiez-y. Vous pouvez à la place simplement placer le contenu du système de fichiers dans un répertoire vide et l'archiver:

tar -czf myarchive.tar.gz [the directory path]

Vous pouvez ensuite le déployer dans une partition existante (vide ou non) en la plaçant dans le niveau supérieur et en utilisant:

tar -xzf myarchive.tar.gz

Attention, cela écrasera les fichiers existants si leurs chemins correspondent à quelque chose dans l'archive. Sinon, la hiérarchie de répertoires existante restera inchangée.

boucle d'or
la source
+1 écrire dans un fichier image vide est très simple, mais quels avantages cela a-t-il par rapport à l'enregistrement dans une archive .tar ou .tgz?
Creek
@Creek Il n'a aucun avantage, sauf que l'image est montable. J'ai ajouté que dans le cas où l'objectif du PO ici est de produire une image qui pourrait être utilisée brute. Sinon, il est préférable d'utiliser une archive car une archive n'est pas de taille fixe. J'ajouterai une mise en garde plus claire à ce sujet.
goldilocks
Gotcha, je ne pense pas. Encore une méthode sympa pour stocker des fichiers.
Creek
2
@mpy Les deux coreutils GNU cpet rsync ont la possibilité -xd'éviter la récursivité dans d'autres systèmes de fichiers. La réponse de Maciej explique le mieux pourquoi ddest absolument inapproprié ici (il est presque garanti de produire une copie inutilisable à moins que vous ne preniez les précautions énumérées par Mark , en raison des écritures qui se produiraient autrement pendant la copie).
Gilles 'SO- arrête d'être méchant'
2
ddne copiera pas les choses qui ne sont pas de vrais répertoires sur le disque, donc je ne sais pas d'où vient votre premier point. Par exemple, les périphériques montés dans /mnt, les nœuds dans /proc, etc. ne feraient pas partie des données ddrécupérées car elles ne sont pas sur le disque. Pour les systèmes de fichiers non montés ddest parfaitement valide; vous vous retrouvez avec un double exact. La seule raison pour laquelle cela n'est pas approprié pour les systèmes de fichiers montés est que les données du système peuvent changer / être partiellement écrites pendant la longue période de temps nécessaire ddpour fonctionner.
Jason C
1

rsync est l'outil de choix pour sauvegarder un système de fichiers, et il peut faire une sauvegarde de démarrage du système d'exploitation en cours d'exécution.

Quelques mises en garde:

  • vous devez ajouter les options de soupe alphabet appropriées
  • les chemins sont plutôt critiques
  • une liste d'exclusion est requise et sera différente pour chaque système d'exploitation et éventuellement chaque configuration

Quelques avantages de rsync par rapport à d'autres méthodes comme tar:

  • vous pouvez arrêter et démarrer la sauvegarde à tout moment
  • de nombreuses options pour gérer les fichiers obsolètes comme supprimer à la demande, supprimer avant, déplacer .....
  • les sauvegardes reprises (ou répétées) sont beaucoup plus rapides que les autres méthodes, car les fichiers précédemment copiés sont ignorés. (L'augmentation de la vitesse 20x est courante)
  • l'option --link-dest peut créer des sauvegardes versionnées tout en copiant uniquement les nouveaux fichiers

Les sauvegardes d'images ont leur place, mais elles copient le lecteur exactement tel quel, y compris tout problème que vous pourriez avoir. Une sauvegarde de fichiers crée un nouveau répertoire et a pour effet secondaire de linéariser (défragmenter) votre lecteur dans le processus. Si vous souhaitez faire 10 copies identiques de votre système d'exploitation actuel, j'utiliserais rsync pour le maître de copie, puis dd (ou similaire) pour le reste.

Paul
la source
1

Cela dépend de ce que vous entendez par «système de travail actuel». Si vous voulez simplement éviter d'utiliser un disque de démarrage et ne vous souciez pas de la perturbation des services exécutés sur l'ordinateur, il est possible:

  1. Fermez tous les programmes non essentiels (en gros, tout sauf le shell racine dans lequel vous travaillez - n'essayez pas cela depuis un terminal X, utilisez un vrai shell de console). Le mode mono-utilisateur peut aider pour cela.
  2. Si vous avez des disques montés autres que la racine du système, démontez-les. Ne démontez pas les systèmes de fichiers virtuels tels que / proc, / sys ou / dev.
  3. Vider les données mises en cache sur le disque restant: sync
  4. Remonter le système de fichiers racine en lecture seule: mount -o ro /.
  5. Montez votre disque dur externe (vous recevrez probablement un avertissement vous empêchant d'écrire /etc/mtab; ignorez-le).
  6. Faites votre sauvegarde.
  7. Démontez votre disque dur externe.
  8. Redémarrez. Vous avez plutôt gâché votre système pour arriver ici, et le redémarrage est le moyen le plus rapide de le ramener à la normale.

J'utilise cette méthode pour créer une archive d'un ordinateur que je viens de mettre à niveau et je ne m'attends pas à en utiliser beaucoup plus. Ce n'est pas une très bonne méthode pour un système en utilisation active: c'est lent (prenant des heures ou des jours), les sauvegardes sont énormes (donc vous ne pouvez pas en garder plus que quelques-unes), et c'est incroyablement perturbateur pour l'utilisation du système sauvegardé vers le haut. Pour les sauvegardes quotidiennes, je recommande quelque chose qui fonctionne au niveau du système de fichiers, comme rsnapshot.

marque
la source
Notez que l'étape 4 peut être dangereuse sur certains systèmes de fichiers car ils écrivent même en mode lecture seule. Également sur des systèmes plus modernes (Linux 3. quelque chose que je crois), vous pouvez simplement créer un lien /etc/mtabvers /proc/self/mount- qui fonctionnera même lorsque vous avez des choses comme des chroots ou des espaces de noms fs.
Maciej Piechotka
1
@MaciejPiechotka Je ne suis au courant d'aucun système de fichiers qui écrit en étant monté en mode lecture seule et je trouverais cela très étrange. Certains systèmes de fichiers écrivent lors du montage en mode lecture seule si le système de fichiers n'a pas été préalablement démonté proprement, donc l'étape mount -o remount,ro /peut écrire. Mais une fois cette commande revenue, dans quelle situation les écritures suivantes se produiraient-elles?
Gilles 'SO- arrête d'être méchant'
Les «programmes non essentiels» à fermer devront inclure de manière critique le sous-système de journalisation, que je ne considérerais pas comme non essentiel.
Gilles 'SO- arrête d'être méchant'
@Gilles, aux fins de créer une image disque du disque de démarrage, tout programme non directement impliqué dans la création de l'image n'est pas essentiel.
Mark
Il pourrait être utile de mentionner le mode mono-utilisateur pourrait aider ici.
Vality
1

Utilisez Clonezilla , sérieusement. C'est le meilleur utilitaire open-source, basé sur Linux, semblable à Norton Ghost. Il effectuera à la fois la partition et le clonage complet du disque, soit de disque à disque ou de disque à système de fichiers (enregistré en tant que fichier). Il prend en charge la plupart des systèmes de fichiers Linux, NTFS, FAT32 et plus. Il peut enregistrer sur un disque interne, un lecteur externe ou même sur le réseau sur des partages SMB ou NFS.

Il est très facile à utiliser et vous fera gagner beaucoup de temps.

Modifier: pour répondre à la question, non, vous ne pouvez pas ddutiliser la plupart des systèmes de fichiers lorsqu'ils sont montés, car vous risquez de vous retrouver avec une copie incohérente de votre système de fichiers car la lecture à partir d'un périphérique de bloc n'est pas atomique. Par exemple, si vous copiez 100 blocs, le système peut avoir mis à jour le premier bloc et le dernier bloc alors que vous n'étiez qu'à mi-chemin, ce qui signifie que votre copie inclura le dernier bloc modifié mais pas le premier.

sleblanc
la source
+1: cela ne répond pas à la question mais cela semble être une bonne suggestion pour la sauvegarde du disque dur.
Marco Sulla