Obecnie co noc i co tydzień robię migawki mojego serwera NAS opartego na ZFS, co kilka razy uratowało mi tyłek. Jednak chociaż tworzenie migawki odbywa się automatycznie (z crona), usuwanie starych migawek jest nadal zadaniem ręcznym. Oczywiście istnieje ryzyko, że jeśli zostanę potrącony przez autobus lub zadanie ręczne nie zostanie wykonane, w NAS zabraknie miejsca na dysku.
Czy ktoś ma jakieś dobre sposoby / skrypty, których używają do zarządzania liczbą migawek przechowywanych w swoich systemach ZFS? Idealnie, chciałbym skrypt, który iteruje wszystkie migawki dla danego systemu plików ZFS i usuwa wszystkie oprócz ostatnich n migawek dla tego systemu plików.
Np. Mam dwa systemy plików, jeden o nazwie, tank
a drugi o nazwie sastank
. Migawki są nazywane wraz z datą ich utworzenia: sastank@AutoD-2011-12-13
więc proste sort
polecenie powinno wyświetlać je w kolejności. Chcę zachować codzienne migawki z ostatnich 2 tygodni tank
, ale tylko migawki z ostatnich dwóch dni sastank
.
sort -r
wcześniejszegosed
polecenia.sed
wydaje się wyświetlać dolną część listy poza pierwszymi 15 liniami, które w domyślnym sortowaniu są najnowsze. Przerzucenie listy oznacza, że otrzymuję najstarsze migawki na dole.Bardziej ogólny przypadek uzyskania najnowszej migawki na podstawie daty utworzenia, a nie nazwy.
zfs list -H -t snapshot -o name -S creation | head -1
Zakres do określonej nazwy systemu plików
TestOne
zfs list -H -t snapshot -o name -S creation -d1 TestOne | head -1
-H
: Brak nagłówka, więc pierwszy wiersz jest nazwą migawki-t snapshot
: Lista migawek (lista może zawierać listę innych rzeczy, takich jak pule i woluminy)-o name
: Wyświetla właściwość nazwy migawki.-S creation
: KapitałS
oznacza sortowanie malejące na podstawie czasu utworzenia. To umieszcza najnowszą migawkę jako pierwszą linię.-d1 TestOne
: Mówi, że obejmują dzieci, co wydaje się mylące, ale dlatego, że jeśli chodzi o to polecenie, migawki TestOne są dziećmi. To NIE wyświetli migawek woluminów w TestOne, takich jakTestOne/SubVol@someSnapshot
.| head -1
: Rura do głowy i zwraca tylko pierwszą linię.źródło
-d1
. To był klucz do pytania „Jak uzyskać wszystkie migawki dla danego zestawu danych?”To całkowicie nie odpowiada na samo pytanie, ale nie zapomnij, że możesz usunąć zakresy migawek.
Zniszczę wszystkie migawki z „20160918” na „20161107” włącznie. Każdy koniec można pozostawić pusty, co oznacza „najstarszy” lub „najnowszy”. Więc możesz ugotować coś, co wymyśli „n”, a następnie zniszcz „…% n”
Przepraszamy za wskrzeszenie starego pytania.
źródło
growse nie działało dla mnie na OpenIndiana. Nie zrozumiał -0 dla xargs.
Jeśli używasz sortowania, pamiętaj, że sortuje on alfabetycznie, co może nie być pożądane, ponieważ prawdopodobnie chcesz znaleźć najnowsze.
Oto kod, który usunie wszystkie oprócz ostatnich migawek.
Usuń „echo”, aby uruchomić.
Źródła: http://sed.sourceforge.net/sed1line.txt
źródło
Być może rozwiązałem to za pomocą bash-fu.
Łał. Czuje się tak źle.
źródło
Ścieżka do głowy jest potrzebna w systemie Solaris, ale powinna działać bez ścieżki w innych dystrybucjach.
źródło