zfs. удаляем снимки (snapshot) оптом.
Иногда возникает необходимость (обычно — в силу своего же недосмотра) в удалении большого количества снапшотов на хранилке (в моём случае — OpenIndiana Development oi_151.1.8 X86) с файловой системой zfs. В случае с 3..7 снимками всё, конечно, проще сделать вручную, а вот при количестве, большем 10 — однозначно выигрывает малая автоматизация.
К своему стыду, вынужден признать, что по недогляду у меня на хранилке скопилось порядка 4000 снапшотов. 95% из 10ТБ было занято. Хранилка, естественно, потеряла производительность. Вычищать всё это вручную — труд неблагодарный, тем более, когда можно написать небольшой скриптик. Итак. Скрипт:
root@storage:/scripts# cat destroy.sh #!/bin/bash f="snap.txt" while i= read -r line do echo "Destroing $line" zfs destroy $line done <"$f"
теперь выполняем команду
root@storage:/scripts# zfs list -t snapshot > snap.txt
на выходе получаем файл с содержимым:
root@storage:/scripts# cat snap.txt NAME USED AVAIL REFER MOUNTPOINT main/storage01@2015-02-28 0 - 291G - main/storage01@2015-03-01-08-00 0 - 291G - main/storage01@2015-03-01-11-00 0 - 291G - main/storage01@2015-03-01-17-00 0 - 291G - main/storage01@2015-03-01-19-00 0 - 291G - main/storage01@2015-03-02-12-00 1.75G - 291G - main/storage01@2015-03-02-18-00 1.38G - 291G - main/storage01@2015-03-02-20-00 1.03G - 291G - main/storage01@2015-03-03 5.02G - 291G - main/storage02@2015-02-28 0 - 299G - main/storage02@2015-03-01-08-00 0 - 299G - main/storage02@2015-03-01-11-00 0 - 299G - main/storage02@2015-03-01-17-00 0 - 299G - main/storage02@2015-03-01-19-00 0 - 299G - main/storage02@2015-03-01 0 - 299G - main/storage02@2015-03-02-09-00 530M - 299G - main/storage02@2015-03-02-12-00 583M - 299G - main/storage02@2015-03-02-18-00 463M - 299G - main/storage02@2015-03-02-20-00 378M - 299G - main/storage02@2015-03-03 577M - 299G -
в своём любимом редакторе удаляем всё, кроме имён снимков. добавляем в конец файла пустую строку:
root@storage:/scripts# cat snap.txt main/storage01@2015-02-28 main/storage01@2015-03-01-08-00 main/storage01@2015-03-01-11-00 main/storage01@2015-03-01-17-00 main/storage01@2015-03-01-19-00 main/storage01@2015-03-02-12-00 main/storage01@2015-03-02-18-00 main/storage01@2015-03-02-20-00 main/storage01@2015-03-03 main/storage02@2015-02-28 main/storage02@2015-03-01-08-00 main/storage02@2015-03-01-11-00 main/storage02@2015-03-01-17-00 main/storage02@2015-03-01-19-00 main/storage02@2015-03-01 main/storage02@2015-03-02-09-00 main/storage02@2015-03-02-12-00 main/storage02@2015-03-02-18-00 main/storage02@2015-03-02-20-00 main/storage02@2015-03-03 _
и выполняем наш скрипт. никакой магии и всё чисто :))
Можно сократить до одной строки: zfs list -t snapshot | xargs -n 1 zfs destroy -r