Saya saat ini snapshotting NAS berbasis ZFS saya setiap malam dan mingguan, sebuah proses yang telah menyelamatkan pantat saya beberapa kali. Namun, sementara pembuatan snapshot bersifat otomatis (dari cron), penghapusan snapshot lama masih merupakan tugas manual. Jelas ada risiko bahwa jika saya tertabrak bus, atau tugas manual tidak dilakukan, NAS akan kehabisan ruang disk.
Adakah yang punya cara / skrip yang baik yang mereka gunakan untuk mengelola jumlah foto yang disimpan di sistem ZFS mereka? Idealnya, saya ingin script yang iterates melalui semua snapshot untuk ZFS diberikan filesystem dan menghapus semua tapi terakhir n snapshot untuk filesystem itu.
Misalnya saya punya dua filesystem, satu dipanggil tank
dan satunya lagi dipanggil sastank
. Snapshots dinamai dengan tanggal pembuatannya: sastank@AutoD-2011-12-13
jadi sort
perintah sederhana harus membuat daftar sesuai urutan. Saya mencari untuk menjaga snapshot harian bernilai 2 minggu terakhir tetap aktif tank
, tetapi hanya snapshot senilai dua hari terakhir sastank
.
sort -r
sebelumsed
perintah.sed
tampaknya menampilkan bagian bawah daftar di luar 15 baris pertama, yang dalam jenis default adalah yang terbaru. Membalik daftar berarti saya mendapatkan snapshot tertua di bagian bawah.Kasus yang lebih umum tentang mendapatkan snapshot terbaru berdasarkan tanggal pembuatan, bukan dengan nama.
zfs list -H -t snapshot -o name -S creation | head -1
Mencakup ke nama sistem file tertentu
TestOne
zfs list -H -t snapshot -o name -S creation -d1 TestOne | head -1
-H
: Tidak ada tajuk sehingga baris pertama adalah nama snapshot-t snapshot
: Daftar snapshot (daftar dapat mendaftar hal-hal lain seperti kumpulan dan volume)-o name
: Menampilkan properti nama snapshot.-S creation
: ModalS
menunjukkan jenis menurun , berdasarkan waktu pembuatan. Ini menempatkan snapshot terbaru sebagai baris pertama.-d1 TestOne
: Mengatakan termasuk anak-anak, yang tampaknya membingungkan tetapi karena sejauh menyangkut perintah ini, snapshot dari TestOne adalah anak-anak. Ini TIDAK akan mencantumkan snapshot volume dalam TestOne sepertiTestOne/SubVol@someSnapshot
.| head -1
: Pipa ke kepala dan hanya mengembalikan baris pertama.sumber
-d1
. Itulah kunci pertanyaan "Bagaimana saya mendapatkan semua foto untuk dataset yang diberikan?"Ini sama sekali tidak menjawab pertanyaan itu sendiri, tetapi jangan lupa Anda dapat menghapus rentang foto.
Akan menghancurkan semua foto dari inklusif "20160918" hingga "20161107". Kedua ujungnya dapat dibiarkan kosong, berarti "tertua" atau "terbaru". Jadi Anda bisa memasak sesuatu yang angka "n" lalu hancurkan "...% n" ..
Maaf menghidupkan kembali pertanyaan lama.
sumber
growse tidak bekerja pada OpenIndiana untukku. Itu tidak mengerti -0 untuk xargs.
Jika menggunakan sortir, ketahuilah bahwa sortir itu abjad yang mungkin tidak diinginkan karena Anda mungkin ingin mencari yang terbaru.
Berikut adalah kode yang akan menghapus semua kecuali snapshot terakhir.
Hapus 'gema' untuk ditayangkan.
Sumber: http://sed.sourceforge.net/sed1line.txt
sumber
Saya mungkin telah memecahkan ini dengan beberapa bash-fu.
Wow. Rasanya sangat salah.
sumber
Jalur untuk kepala diperlukan di Solaris, tetapi harus bekerja tanpa jalur di distro lain.
sumber