ZFS: Usunięcie plików z migawek?

10

Powiedzmy, że mam zestaw danych ze 100 migawkami i chcę rm -rfwszystkich folderów o nazwie „cache” we wszystkich migawkach.

Chcę faktycznie zwolnić miejsce, a nie tylko ukryć je w warstwach migawek, więc tworzenie klonu i usuwanie z niego, a następnie zrobienie nowej migawki nie wydaje się robić tego, co chcę.

Jakiś półautomatyczny sposób to robi? Niektóre owijanie wokół listy ZFS -t migawka, klon ZFS, promocja ZFS, migawka ZFS?

(krzyżowanie z /superuser/313197, ponieważ widzę, że ma więcej rzeczy ZFS)

Tino Didriksen
źródło
3
Nie krzyżuj, ale poczekaj na migrację pytania.
Sven
Ponadto nie jestem pewien, czy jest to w ogóle możliwe: migawki są tylko do odczytu, a jeśli użyjesz pary klon / awans, odwrócisz zależność między sklonowaną migawką a zestawem danych „HEAD”, co prawdopodobnie nie jest tym, co chcieć. Zobacz dokument tutaj: download.oracle.com/docs/cd/E19253-01/819-5461/gbcxz/index.html
Sven
Czekałem na migrację, ale wydawało mi się, że jest też sporo pytań ZFS na SU, więc wątpiłem, że zostanie automatycznie przeniesiony ... pasuje do obu miejsc, więc skorzystałem z meta poradnika, jak być miłym w krzyżowaniu -mianowanie.
Tino Didriksen
@TinoDidriksen, czy możesz podać odniesienie do tego meta postu? Chciałbym to zobaczyć Dzięki.
nhinkle
2
Post, do którego się odwołujesz, nie jest oficjalną polityką. Jest najczęściej zadawane pytania na MSO wyjaśniając, jak radzić sobie pytania użytkownik uważa, że są na temacie dla wielu miejscach. Podsumowując, krzyżowanie postów jest niedozwolone. Jeśli po opublikowaniu zdecydujesz, że byłoby lepiej w innym miejscu i nie uzyskałeś dobrych odpowiedzi, możesz oflagować go do migracji lub możesz usunąć i ponownie zapytać, ale musisz dostosować post do witryny, w której jesteś pytać. Przekazałeś dokładnie to samo pytanie słowo po słowie, nie czekając, co nie spełnia wytycznych w obu postach dotyczących przesyłania postów.
nhinkle

Odpowiedzi:

9

Migawki są tylko do odczytu. Jeśli potrzebujesz tych folderów, musisz usunąć całą migawkę.

Możesz wykonać kopię zapasową (z czymś takim jak tar), z wyłączeniem folderów naruszających, a następnie usunąć migawkę. Oczywiście kopia zapasowa ma teraz format tar lub inny format; ale przynajmniej nadal masz kopię zapasową.

Chris S.
źródło
2
Prawdziwym szumem w tym rozwiązaniu jest to, że teraz musisz przechowywać każdy kawałek danych n razy, podczas gdy migawka przechowywałaby tylko zmodyfikowane bloki. W ten sposób prawdopodobnie będziesz potrzebować dużo więcej miejsca niż zaoszczędziłeś dzięki usuwaniu pamięci podręcznych z plików tar.
Sven
Dedupe pomógłby w tym, ale masz rację. Jestem całkiem pewien, że nie ma sposobu modyfikowania tych migawek tak, jak chce.
Chris S
Mam zarówno kompresję gzip-1, jak i deduplikację, więc kopiowanie wokół identycznych danych zajmuje tylko przestrzeń księgową. Ale oczywiście chciałbym w jakiś sposób uniknąć kopiowania.
Tino Didriksen
Wątpię, aby w przypadku wielu plików tar o prawie tym samym deduplikacji danych tak bardzo pomogło, ponieważ dodanie lub odjęcie tylko jednego bajtu na początku pliku oznaczałoby, że żaden blok nie byłby identyczny z innym, czyniąc deduplikację bezużyteczną.
Sven
@ SvvenW Po ponownym przeczytaniu pytania widzę, że robi to, aby zaoszczędzić miejsce; na co moja odpowiedź tak naprawdę nie pomaga, chyba że przeniesie pliki tar z komputera, który i tak mógłby po prostu wyeksportować migawki. Wygląda na to, że utknął dookoła.
Chris S
14

Możesz spróbować:

  1. Sklonuj najstarszą migawkę do nowego systemu plików (nazwij ją fsnew).
  2. Promuj clone ( fsnew), abyś mógł zniszczyć migawkę, na której opiera się system plików.
  3. Usuń niepoprawne pliki.
  4. Utwórz migawkę fsnew.

Teraz przewiduj migawkę po, rsyncz --inplaceflagą z migawki do nowego pomijania plików, których nie chcesz. --inplaceFlag zmniejsza liczbę zapisów i pozwala na mniejsze migawek.

  1. Utwórz migawkę fsnew.
  2. Zniszcz oryginalną migawkę.

Po wykonaniu tej czynności powinieneś mieć migawkę fsnewodpowiadającą migawkom z oryginalnego systemu plików z usuniętymi szkodliwymi plikami.

Jeśli masz miejsce na dysku, możesz pominąć polecenie „zniszczyć”, dopóki skrypt nie będzie działał poprawnie.

Michael Boers
źródło
Musisz także przekazać tę --deleteopcję rsync, w przeciwnym razie stracisz usuwanie występujące między migawkami. W przeciwnym razie jest to świetny pomysł.
Tobia,
1
  1. Zniszcz oryginalną migawkę.

Nie można zniszczyć migawki orig po akcji promowania. Tylko jeśli tak, zniszcz macierzysty zestaw danych.

przykład (po promowaniu klonowania).

zfs destroy media1/cheers/[email protected]

nie można zniszczyć „media1/cheers/[email protected]”: migawka ma zależne klony

użyj „-R”, aby zniszczyć następujące zestawy danych:

media1/media/[email protected]

media1 / media / backup

zfs destroy media1/media/[email protected]

zfs destroy media1/cheers/[email protected]

nie można zniszczyć „media1/cheers/[email protected]”: migawka ma zależne klony

użyj „-R”, aby zniszczyć następujące zestawy danych:

media1 / media / backup

Po tej „zabawnej” operacji muszę wykonać kolejne

ZFS snapshot media1 / media / backup @ 1

zfs send media1 / media / backup @ 1 | pv | zfs odbiera media1 / media / backupnew

ZFS zniszczyć media1 / media / backup @ 1

ZFS zniszczyć -R media1 / media / backup

zfs zmienia nazwę media1 / media / backupnew media1 / media / backup

LUB odwróć promuj jeden. zfs promuj media1 / media / backup, a po nim usuń klon klonuj, bo będziesz mieć dużą migawkę w miejscu src))

Tutaj może pomóc tylko rsync / backup.

Дмитрий Мышков
źródło
-3

Migawki ZFS dla konkretnego systemu plików ZFS można znaleźć w .zfs/snapshotskatalogu w katalogu głównym systemu plików. Powinieneś być w stanie napisać skrypt, który przemierza ten folder i rmjest potrzebnymi plikami, które powinny usunąć go z samych migawek.

rosnąć
źródło
3
Migawki ZFS są tylko do odczytu. Nie możesz ich usunąć.
Sven
Mój zły, nie jestem pewien, gdzie miałbym wrażenie, że można :(
growse