Назад | Перейти на главную страницу

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

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

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

Любой полуавтоматический способ сделать это? Некоторые обертки вокруг zfs list -t snapshot, zfs clone, zfs promotion, zfs snapshot?

(кросс-постинг от https://superuser.com/questions/313197 поскольку я вижу, что здесь больше материала ZFS)

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

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

Теперь для каждого снимка после, rsync с --inplace Установите флажок из снимка, чтобы fsnew пропускал ненужные файлы. В --inplace flag уменьшает количество операций записи и позволяет делать снимки меньшего размера.

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

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

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

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

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

  1. Уничтожьте исходный снимок.

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

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

zfs уничтожает носители1/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 / media / backup

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

zfs уничтожает носители1/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

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

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

zfs send media1 / media / backup @ 1 | pv | zfs получает media1 / media / backupnew

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

zfs destroy -R media1 / media / backup

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

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

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

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