Question

Je voudrais faire un programme instantané d'un système de fichiers en direct sous Linux, de préférence en utilisant LVM. Je voudrais ne pas démonter parce que j'ai beaucoup de fichiers ouverts (mon scénario le plus courant est que j'ai un bureau occupé avec beaucoup de programmes).

Je comprends qu'en raison de tampons du noyau et de l'activité du système de fichiers général, les données sur le disque pourraient être dans un état plus ou moins définie.

Est-il possible de « atomiquement » FS unmount, faire un instantané de LVM et le monter en arrière? Il sera ok si le système d'exploitation va bloquer toute activité pendant quelques secondes pour effectuer cette tâche. Ou peut-être une sorte de atomique « synchronisation + instantané »? appel du noyau?

Je ne sais pas s'il est même possible ...

Était-ce utile?

La solution

Vous ne devriez pas avoir à faire quoi que ce soit pour la plupart des systèmes de fichiers Linux. Il devrait fonctionner sans aucun effort de votre part. La commande de cliché lui-même traque systèmes de fichiers montés à l'aide du volume étant snapshotted et appelle un crochet spécial que les points de contrôle dans un état cohérent, pouvant être monté et fait l'instantané atomiquement.

Les anciennes versions de LVM est venu avec un ensemble de patchs de verrouillage VFS qui patcher différents systèmes de fichiers afin qu'ils puissent être un instantané pour un point de reprise. Mais avec de nouveaux noyaux qui devraient déjà être intégrées dans la plupart des systèmes de fichiers Linux.

intro instantanés réclame autant.

Et un peu plus de recherche révèle que pour les noyaux de la série 2.6 de la série de systèmes de fichiers de poste devrait soutenir tout cela. ReiserFS probablement aussi. Et si je sais que les gens btrfs, que l'on fait sans doute aussi bien.

Autres conseils

Je sais que ext3 et ext4 dans RedHat Enterprise, Fedora et CentOS point de contrôle automatiquement lorsqu'un instantané LVM est créé. Cela signifie qu'il n'y a jamais de problème de montage de l'instantané, car il est toujours propre.

croire XFS a le même support. Je ne suis pas sûr d'autres systèmes de fichiers.

Cela dépend du système de fichiers que vous utilisez. Avec XFS, vous pouvez utiliser xfs_freeze -f pour synchroniser et geler les FS, et xfs_freeze -u pour l'activer à nouveau, afin que vous puissiez créer votre instantané du volume congelé, qui devrait être un état de sauvegarde.

Je ne suis pas sûr que cela fera l'affaire pour vous, mais vous pouvez remonter un système de fichiers en lecture seule. mount -o remount,ro /lvm (ou quelque chose de similaire) fera l'affaire. Une fois que vous avez terminé votre cliché, vous pouvez lire-écrire remonter en utilisant mount -o remount,rw /lvm.

  

Est-il possible de « atomiquement » FS unmount, faire un instantané de LVM et le monter en arrière?

Il est possible d'instantané d'un système de fichiers monté, même lorsque le système de fichiers ne sont pas sur un volume LVM. Si le système de fichiers est sur LVM, ou il a des installations de capture instantanée intégrée (par exemple Btrfs ou ZFS), puis utiliser à la place.

Les instructions ci-dessous sont assez bas niveau, mais ils peuvent être utiles si vous voulez avoir la possibilité de prendre un instantané un système de fichiers qui ne sont pas sur un volume LVM, et ne peut pas le déplacer vers un nouveau volume de LVM. Pourtant, ils ne sont pas pour les timorés: si vous faites une erreur, vous pouvez corrompre votre système de fichiers. Assurez-vous de consulter la documentation officielle et page man dmsetup, triple vérifier les commandes que vous utilisez, et ont des sauvegardes

Le noyau Linux a une installation impressionnante appelée Device Mapper, qui peut faire de belles choses telles que créer des dispositifs de blocs qui sont « vues » d'autres dispositifs de bloc, et des instantanés de cours. Il est aussi ce qui utilise LVM sous le capot pour faire le levage de charges lourdes.

Dans les exemples ci-dessous je suppose que vous voulez instantané /home, qui est un système de fichiers ext4 situé sur /dev/sda2.

Tout d'abord, trouver le nom du dispositif de dispositif de mappeur que la partition est montée sur:

# mount | grep home
/dev/mapper/home on /home type ext4 (rw,relatime,data=ordered)

Ici, le nom du périphérique mappeur de périphériques est home. Si le chemin vers le périphérique bloc ne démarre pas avec /dev/mapper/, vous devrez créer un dispositif de mappeur de périphérique et le système de fichiers pour remonter utiliser ce périphérique au lieu de la partition du disque dur. Vous aurez seulement besoin de le faire une fois.

# dmsetup create home --table "0 $(blockdev --getsz /dev/sda2) linear /dev/sda2 0"
# umount /home
# mount -t ext4 /dev/mapper/home /home

Ensuite, obtenir le dispositif de dispositif de bloc mappeur table:

# dmsetup table home
home: 0 3864024960 linear 9:2 0

Vos numéros seront probablement différents. La cible de l'appareil doit être linear; si le vôtre est pas, vous devrez peut-être prendre des considérations particulières. Si le dernier numéro (début offset) est 0, vous devez créer un dispositif de bloc intermédiaire (avec la même table que le courant un) et l'utiliser comme base au lieu de /dev/sda2.

Dans l'exemple ci-dessus, home utilise une seule table d'entrée avec la cible de linear. Vous devrez remplacer ce tableau par une nouvelle, qui utilise la cible snapshot.

Device Mapper fournit trois cibles pour snapshotting:

  • La cible de snapshot, ce qui économise écrit dans le dispositif de GC spécifié. (Notez que même si on l'appelle un instantané, la terminologie est trompeuse, car l'instantané sera inscriptible, mais le périphérique sous-jacent reste inchangé.)

  • La cible snapshot-origin, qui envoie écrit au périphérique sous-jacent, mais envoie également les anciennes données que les écritures réenregistrés au dispositif de VACHE spécifié.

En règle générale, vous feriez home une cible de snapshot-origin, puis créez des cibles de snapshot au-dessus de celui-ci. C'est ce que LVM. Cependant, une méthode plus simple serait de créer simplement une cible de snapshot directement, ce qui est ce que je vais vous montrer ci-dessous.

Quelle que soit la méthode que vous choisissez, vous ne doit pas écrire sur le périphérique sous-jacent (/dev/sda2), ou les instantanés verront une vue corrompue du système de fichiers. Ainsi, à titre de précaution, vous devez marquer le dispositif de bloc sous-jacent en lecture seule:

# blockdev --setro /dev/sda2

Cela n'affectera pas les périphériques appareil Mapper soutenus par elle, donc si vous avez /home re-déjà monté sur /dev/mapper/home, il ne devrait pas avoir un effet notable.

Ensuite, vous devrez préparer le dispositif VACHE, qui permet de stocker des modifications depuis l'instantané a été fait. Ce doit être un dispositif de bloc, mais peut être sauvegardé par un fichier clairsemé. Si vous souhaitez utiliser un fichier clairsemée par exemple 32Go:

# dd if=/dev/zero bs=1M count=0 seek=32768 of=/home_cow
# losetup --find --show /home_cow
/dev/loop0

De toute évidence, le fichier clairsemé ne devrait pas être sur le système de fichiers vous d'instantanés:)

Maintenant, vous pouvez recharger la table de l'appareil et le transformer en un dispositif de cliché instantané:

# dmsetup suspend home && \
  dmsetup reload home --table \
    "0 $(blockdev --getsz /dev/sda2) snapshot /dev/sda2 /dev/loop0 PO 8" && \
  dmsetup resume home

Si cela réussit, les nouvelles écritures à /home doivent maintenant être enregistrés dans le fichier /home_cow, au lieu d'être écrit à /dev/sda2. Assurez-vous de surveiller la taille du fichier COW, ainsi que l'espace libre sur le système de fichiers il est sur, pour éviter de manquer d'espace VACHE.

Une fois que vous ne avez plus besoin de l'instantané, vous pouvez fusionner (pour commettre de façon permanente les modifications dans le fichier COW au dispositif sous-jacent), ou de le rejeter.

  • Pour fusionner:

    1. remplacer la table avec un objectif de snapshot-merge à la place d'une cible de snapshot:

      # dmsetup suspend home && \
        dmsetup reload home --table \
          "0 $(blockdev --getsz /dev/sda2) snapshot-merge /dev/sda2 /dev/loop0 P 8" && \
        dmsetup resume home
      
    2. Ensuite, surveiller l'état de la fusion jusqu'à ce que tous les blocs non métadonnées sont fusionnés:

      # watch dmsetup status home
      ...
      0 3864024960 snapshot-merge 281688/2097152 1104
      

      Remarque 3 chiffres à la fin (X / Y Z). La fusion est terminée lorsque X = Z.

    3. Ensuite, remplacer la table avec une cible linéaire à nouveau:

      # dmsetup suspend home && \
        dmsetup reload home --table \
          "0 $(blockdev --getsz /dev/sda2) linear /dev/sda2 0" && \
        dmsetup resume home
      
    4. Maintenant, vous pouvez démonter le dispositif de boucle:

      # losetup -d /dev/loop0
      
    5. Enfin, vous pouvez supprimer le fichier COW.

      # rm /home_cow
      
  • Pour supprimer l'instantané, /home unmount, suivez les étapes ci-dessus 3-5 et /home remonter. Bien que Device Mapper vous permettra de le faire sans démonter /home, il n'a pas de sens (puisque l'état des programmes en cours d'exécution en mémoire ne correspond pas à l'état du système de fichiers plus), et il sera votre système de fichiers probablement corrompu.

FS la corruption est « hautement improbable », aussi longtemps que vous ne travaillez dans tout type d'environnement professionnel. sinon vous allez rencontrer la réalité, et vous pourriez essayer de blâmer « peu pourriture » ou « matériel » ou autre chose, mais tout cela se résume à avoir été irresponsable. gel / dégel (comme mentionné à quelques reprises, et seulement si elle est appelée correctement) est suffisante à l'extérieur des environnements de base de données. des bases de données, vous aurez toujours pas une sauvegarde complète transaction et si vous pensez une sauvegarde qui annule une transaction est très bien lors de la restauration: voir phrase de départ. en fonction de l'activité que vous pourriez venez d'ajouter autre 5-10 minutes de temps d'arrêt si jamais vous avez besoin de cette sauvegarde. La plupart d'entre nous peuvent facilement se permettre, mais il ne peut pas être des conseils généraux. Soyez honnête au sujet des inconvénients, les gars.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top