ZFS: удаление файлов из снимков?

10

Скажем, у меня есть набор данных со 100 снимками и я хочу, чтобы rm -rfвсе папки с именем «cache» во всех снимках.

Я хочу на самом деле освободить пространство, а не просто спрятать его в слоях снимков, поэтому создание клона и удаление из него, а затем создание нового снимка, кажется, не то, что я хочу.

Любой полуавтоматический способ сделать это? Некоторая обтекание списка zfs -t снимок, клон zfs, продвижение zfs, снимок zfs?

(перекрестная публикация с /superuser/313197, так как я вижу, что это имеет больше материала ZFS)

Тино Дидриксен
источник
3
Пожалуйста, не кросспостите, но подождите, пока ваш вопрос не будет перенесен.
Свен
Кроме того, я не уверен, что это вообще возможно: снимки доступны только для чтения, и если вы используете пару клон / продвижение, вы измените зависимость между клонированным снимком и набором данных «HEAD», что, скорее всего, не то, что вы хотеть. Смотрите документ здесь: download.oracle.com/docs/cd/E19253-01/819-5461/gbcxz/index.html
Свен
Я бы подождал миграции, но мне показалось, что вопросов по ZFS было довольно много, поэтому я сомневался, что он будет автоматически перемещен ... он подходит в обоих местах, поэтому я следовал мета-руководству о том, как хорошо разбираться в кроссингах. -posting.
Тино Дидриксен
@TinoDidriksen Не могли бы вы дать ссылку на этот пост, пожалуйста? Я хотел бы увидеть это. Спасибо.
nhinkle
2
Пост, на который вы ссылаетесь, не является официальной политикой. На MSO есть часто задаваемые вопросы, объясняющие, как обрабатывать вопросы, которые пользователь думает по теме для нескольких сайтов. Подводя итог, перекрестная публикация запрещена. Если после публикации вы решите, что в другом месте будет лучше, и вы не получили хороших ответов, вы можете пометить его для переноса или удалить и повторить запрос, но вы должны адаптировать пост к сайту, на котором вы работаете. спрашивать Вы разместили один и тот же вопрос дословно, не дожидаясь, что не соответствует указаниям в обеих мета-публикациях о перекрестной публикации.
nhinkle

Ответы:

9

Снимки доступны только для чтения. Если вам нужно, чтобы эти папки были удалены, вы должны удалить весь снимок.

Вы можете сделать резервную копию (с чем-то вроде tar), исключая поврежденные папки, а затем удалить снимок. Очевидно, что резервная копия теперь находится в tar или любом другом формате; но по крайней мере у вас все еще есть резервная копия.

Крис С
источник
2
Настоящим обломом этого решения является то, что теперь вы должны хранить каждый бит данных n раз по-настоящему, в то время как снимок будет хранить только измененные блоки. Таким образом, вы, вероятно, получите гораздо больше места, чем сэкономили, удалив кеши из файлов tar.
Свен
Дедупе поможет с этим, но вы правы. Я вполне уверен, что нет никакого способа изменить эти снимки так, как он хочет.
Крис С
У меня есть сжатие и дедупликация gzip-1, поэтому копирование вокруг идентичных данных занимает только место в бухгалтерии. Но я, конечно, хотел бы как-нибудь избежать копирования.
Тино Дидриксен
Я сомневаюсь, что в случае нескольких tar-файлов с примерно одной и той же дедупликацией данных это очень помогло бы, поскольку добавление или вычитание только одного байта в начале файла означало бы, что ни один блок не будет идентичен другому, что делает дедупликацию бесполезной.
Свен
@SvenW Перечитав вопрос, я вижу, что он делает это, чтобы попытаться сэкономить место; что мой ответ на самом деле не помогает, если он не удалит файлы tar с компьютера, который он мог бы просто экспортировать снимки в любом случае. Похоже, он застрял вокруг.
Крис С
14

Вы можете попробовать следующее:

  1. Клонируйте самый старый снимок в новую файловую систему (назовите это fsnew).
  2. Продвиньте clone ( fsnew), чтобы позволить вам уничтожить снимок, на котором основана файловая система.
  3. Удалите оскорбительные файлы.
  4. Создать снимок fsnew.

Теперь foreach snapshot after, rsyncс --inplaceфлагом от snapshot до fsnew, пропускающим файлы, которые вам не нужны. --inplaceФлаг уменьшает количество операций записи и позволяет для небольших снимков.

  1. Создать снимок fsnew.
  2. Уничтожить оригинальный снимок.

Когда это будет сделано, у вас должен получиться снимок fsnew, соответствующий снимкам из исходной файловой системы с удаленными поврежденными файлами.

Если у вас есть место на диске, вы можете пропустить команду «уничтожить», пока ваш скрипт не заработает правильно.

Майкл Бурс
источник
Вам также нужно будет передать эту --deleteопцию rsync, иначе вы потеряете удаления, сделанные между снимками. В противном случае это отличная идея.
Тобия
1
  1. Уничтожить оригинальный снимок.

Вы не можете уничтожить исходный снимок после промоакции. Только если это так, уничтожьте родительский набор данных.

пример (после продвижения клона).

zfs уничтожить media1/cheers/backup-auto-20190530.2105-2y-clone@auto-20190530.2105-2y

не может уничтожить 'media1/cheers/backup-auto-20190530.2105-2y-clone@auto-20190530.2105-2y': снимок имеет зависимых клонов

используйте '-R', чтобы уничтожить следующие наборы данных:

media1/media/backup@auto-20190531.1622-2y

media1 / СМИ / резервное копирование

zfs уничтожить media1/media/backup@auto-20190531.1622-2y

zfs уничтожить media1/cheers/backup-auto-20190530.2105-2y-clone@auto-20190530.2105-2y

не может уничтожить 'media1/cheers/backup-auto-20190530.2105-2y-clone@auto-20190530.2105-2y': снимок имеет зависимых клонов

используйте '-R', чтобы уничтожить следующие наборы данных:

media1 / СМИ / резервное копирование

После этой «забавной» операции я должен сделать следующие

снимок zfs media1 / media / backup @ 1

zfs отправляет media1 / media / backup @ 1 | PV | zfs получает media1 / media / backupnew

zfs уничтожить media1 / media / backup @ 1

zfs destroy -R media1 / media / backup

zfs переименовывает media1 / media / backupnew media1 / media / backup

ИЛИ инвертировать продвигать один. zfs продвигает media1 / media / backup и после него удаляет клон, потому что у вас будет большой снимок в src месте))

Только rsync / backup может помочь здесь.

Дмитрий Мышков
источник
-3

Снимки ZFS для конкретной файловой системы ZFS можно найти в .zfs/snapshotsкаталоге в корне файловой системы. Вы должны быть в состоянии написать сценарий, который пересекает эту папку и rmфайлы, которые вам нужны, которые должны удалить его из самих снимков.

growse
источник
3
Снимки ZFS доступны только для чтения. Вы не можете удалить из них.
Свен
Мой плохой, не уверен, откуда у меня сложилось впечатление, что ты мог :(
вырасти