ZFS: Supprimer des fichiers des instantanés?

10

Disons que j'ai un ensemble de données avec 100 instantanés et que je veux rm -rftous les dossiers nommés "cache" dans tous les instantanés.

Je veux réellement libérer de l'espace, pas seulement le cacher dans des couches d'instantanés, donc faire un clone et le supprimer, puis prendre un nouvel instantané ne semble pas faire ce que je veux.

Une manière semi-automatique de faire ça? Un peu autour de la liste zfs - instantané, clone zfs, promotion zfs, instantané zfs?

(publication croisée de /superuser/313197 car je vois que cela a plus de choses ZFS)

Tino Didriksen
la source
3
Veuillez ne pas crosspost, mais attendez que votre question soit migrée.
Sven
De plus, je ne suis pas sûr que cela soit possible: les instantanés sont en lecture seule, et si vous utilisez la paire clone / promotion, vous inverserez la dépendance entre l'instantané cloné et le jeu de données "HEAD", ce qui n'est probablement pas ce que vous vouloir. Voir le doc ici: download.oracle.com/docs/cd/E19253-01/819-5461/gbcxz/index.html
Sven
J'attendrais la migration, mais il semblait y avoir une bonne quantité de questions sur ZFS sur SU, donc je doutais qu'il soit automatiquement déplacé ... il tient dans les deux endroits, j'ai donc suivi un méta-guide pour savoir comment être gentil avec la croix -affectation.
Tino Didriksen
@TinoDidriksen pourriez-vous fournir une référence à ce méta post s'il vous plaît? J'aimerais le voir. Merci.
nhinkle
2
Le message que vous avez référencé n'est pas une politique officielle. Il existe une FAQ sur MSO expliquant comment traiter les questions que l'utilisateur pense être sur le sujet pour plusieurs sites. Pour résumer, la comptabilisation croisée n'est pas autorisée. Si vous décidez après avoir posté que ce serait mieux ailleurs et que vous n'avez pas obtenu de bonnes réponses, vous pouvez le signaler comme migré ou vous pouvez le supprimer et le redemander, mais vous devez adapter le post au site que vous êtes demander. Vous avez republié la même question mot pour mot sans attendre, ce qui ne respecte pas les directives des deux méta-messages sur la publication croisée.
nhinkle

Réponses:

9

Les instantanés sont en lecture seule. Si vous avez besoin que ces dossiers disparaissent, vous devez supprimer l'intégralité de l'instantané.

Vous pouvez faire une sauvegarde (avec quelque chose comme tar), en excluant les dossiers incriminés, puis supprimer l'instantané. De toute évidence, la sauvegarde est maintenant au format tar ou autre; mais au moins vous avez toujours une copie de sauvegarde.

Chris S
la source
2
Le vrai problème avec cette solution est que vous devez maintenant stocker chaque bit de données n fois pour de vrai, alors qu'un instantané ne stockerait que des blocs modifiés. De cette façon, vous vous retrouverez probablement avec beaucoup plus d'espace que vous n'en avez économisé en supprimant les caches des fichiers tar.
Sven
Dedupe aiderait à cela, mais vous avez raison. Je suis à peu près sûr qu'il n'y a aucun moyen de modifier ces instantanés comme il le souhaite.
Chris S
J'ai la compression gzip-1 et la déduplication, donc la copie autour de données identiques ne prend que de l'espace de comptabilité. Mais j'aimerais bien sûr un moyen d'éviter la copie.
Tino Didriksen du
Je doute que dans le cas de plusieurs fichiers tar de presque la même déduplication de données, cela aiderait beaucoup, car l'ajout ou la soustraction d'un seul octet au début du fichier signifierait qu'aucun bloc ne serait identique à un autre, ce qui rendrait la déduplication inutile.
Sven
@SvenW Après avoir relu la question, je vois qu'il fait cela pour essayer d'économiser de l'espace; ce que ma réponse n'aide vraiment pas à moins qu'il ne déplace les fichiers tar de l'ordinateur, dont il pourrait tout de même exporter les instantanés. On dirait qu'il est coincé tout autour.
Chris S
14

Vous pouvez essayer ce qui suit:

  1. Clonez l'instantané le plus ancien dans un nouveau système de fichiers (appelez-le fsnew).
  2. Promouvez le clone ( fsnew) pour vous permettre de détruire l'instantané sur lequel le système de fichiers est basé.
  3. Supprimez les fichiers incriminés.
  4. Créez un instantané de fsnew.

Maintenant, passez à chaque instantané après, rsyncavec le --inplacedrapeau de l'instantané pour fsnew sauter les fichiers que vous ne voulez pas. L' --inplaceindicateur réduit le nombre d'écritures et permet des instantanés plus petits.

  1. Créez un instantané de fsnew.
  2. Détruisez l'instantané d'origine.

Lorsque cela est fait, vous devez avoir un instantané fsnewqui correspond aux instantanés du système de fichiers d'origine avec les fichiers incriminés supprimés.

Si vous avez de l'espace sur le lecteur, vous pouvez ignorer la commande "destroy" jusqu'à ce que votre script fonctionne correctement.

Michael Boers
la source
Vous devrez également passer l' --deleteoption à rsync, sinon vous perdrez les suppressions survenues entre les instantanés. Sinon, c'est une excellente idée.
Tobia
1
  1. Détruisez l'instantané d'origine.

Vous ne pouvez pas détruire l'instantané d'origine après une action de promotion. Seulement si c'est le cas, détruisez l'ensemble de données parent.

exemple (après promotion du clone).

zfs destroy media1/cheers/[email protected]

ne peut pas détruire 'media1/cheers/[email protected]': l'instantané a des clones dépendants

utilisez '-R' pour détruire les ensembles de données suivants:

media1/media/[email protected]

media1 / media / sauvegarde

zfs destroy media1/media/[email protected]

zfs destroy media1/cheers/[email protected]

ne peut pas détruire 'media1/cheers/[email protected]': l'instantané a des clones dépendants

utilisez '-R' pour détruire les ensembles de données suivants:

media1 / media / sauvegarde

Après cette opération "drôle", je dois faire les prochaines

zfs snapshot media1 / media / backup @ 1

zfs envoyer media1 / media / backup @ 1 | pv | zfs reçoit media1 / media / backupnew

zfs destroy media1 / media / backup @ 1

zfs destroy -R media1 / media / backup

zfs renommer media1 / media / backupnew media1 / media / backup

OU inverser en promouvoir un. zfs promeut media1 / media / backup et ensuite il supprime le clone anuway, car vous aurez un gros instantané à la place src))

Seul rsync / backup peut vous aider ici.

Дмитрий Мышков
la source
-3

Les instantanés ZFS d'un système de fichiers ZFS particulier se trouvent dans le .zfs/snapshotsrépertoire à la racine du système de fichiers. Vous devriez pouvoir écrire un script qui traverse ce dossier et rmcontient les fichiers dont vous avez besoin, qui devraient le supprimer des instantanés eux-mêmes.

grandir
la source
3
Les instantanés ZFS sont en lecture seule. Vous ne pouvez pas les supprimer.
Sven
Mon mauvais, je ne sais pas où j'avais eu l'impression que vous pourriez :(
growse