В настоящее время я делаю снимки своего ночного и еженедельного сетевого хранилища на базе ZFS, и этот процесс несколько раз спас мою задницу. Однако, хотя создание снимка происходит автоматически (из cron), удаление старых снимков остается ручным заданием. Очевидно, существует риск того, что, если меня ударит автобус, или ручное задание не будет выполнено, в NAS не хватит места на диске.
Есть ли у кого-нибудь хорошие способы / сценарии, которые они используют для управления количеством снимков, хранящихся в их системах ZFS? В идеале я хотел бы сценарий, который повторяет все снимки для данной файловой системы ZFS и удаляет все, кроме последних n снимков для этой файловой системы.
Например, у меня есть две файловые системы, одна называется, tank
а другая называется sastank
. Снимки именуются по дате их создания, sastank@AutoD-2011-12-13
поэтому простая sort
команда должна перечислить их по порядку. Я хочу сохранить ежедневные снимки за последние 2 недели tank
, но только снимки за последние два дня sastank
.
sort -r
передsed
командой.sed
кажется, выводит нижнюю часть списка за первые 15 строк, которые в сортировке по умолчанию являются самыми последними. Пролистывание списка означает, что я получаю самые старые снимки внизу.Более общий случай получения последнего снимка на основе даты создания, а не по имени.
zfs list -H -t snapshot -o name -S creation | head -1
Области до определенного имени файловой системы
TestOne
zfs list -H -t snapshot -o name -S creation -d1 TestOne | head -1
-H
: Заголовок отсутствует, поэтому первая строка является именем снимка-t snapshot
: Список снимков (список может перечислять другие вещи, такие как пулы и тома)-o name
: Показать свойство имени снимка.-S creation
: КапиталS
обозначает нисходящий вид, основанный на времени создания. Это помещает самый последний снимок в качестве первой строки.-d1 TestOne
Говорят, включают в себя дочерние элементы, что кажется странным, но это потому, что для этой команды снимки TestOne являются дочерними. Это НЕ будет перечислять снимки томов в TestOne, такие какTestOne/SubVol@someSnapshot
.| head -1
: Труба к голове и только возврат первой линии.источник
-d1
. Это был ключ к вопросу "Как получить все снимки для данного набора данных?"Это полностью не отвечает самому вопросу, но не забывайте, что вы можете удалять диапазоны снимков.
Уничтожит все снимки с «20160918» до «20161107» включительно. Любой конец может быть оставлен пустым, что означает «самый старый» или «самый новый». Таким образом, вы можете приготовить что-нибудь, что вычислит "n", а затем уничтожить "...% n" ..
Извините, что воскресил старый вопрос.
источник
Growse не работает на OpenIndiana для меня. Он не понял -0 для xargs.
При использовании сортировки помните, что она сортирует по алфавиту, что может быть нежелательно, так как вы, вероятно, хотите найти самые последние.
Вот код, который удалит все, кроме последних снимков.
Удалите «эхо», чтобы начать жить.
Источники: http://sed.sourceforge.net/sed1line.txt
источник
Возможно, я решил это с некоторой баш-фу.
Вау. Это так неправильно.
источник
Путь к голове необходим в Solaris, но должен работать без пути в других дистрибутивах.
источник