ZFS: Menghapus file dari snapshot?


10

Katakanlah saya memiliki dataset dengan 100 foto dan ingin rm -rfsemua folder bernama "cache" di semua foto.

Saya ingin benar-benar membebaskan ruang, tidak hanya menyembunyikannya dalam lapisan snapshot, jadi membuat kloning dan menghapusnya lalu mengambil snapshot baru sepertinya tidak melakukan apa yang saya inginkan.

Adakah cara semi-otomatis yang melakukannya? Beberapa membungkus daftar zfs -t snapshot, zfs clone, zfs promosikan, zfs snapshot?

(posting silang dari /superuser/313197 karena saya melihat ini memiliki lebih banyak barang ZFS)


3
Tolong jangan lintas pos, tapi tunggu pertanyaan Anda dimigrasi.
Sven

Juga, saya tidak yakin ini mungkin: Snapshots hanya-baca, dan jika Anda menggunakan pasangan klon / promosikan, Anda akan membalikkan ketergantungan antara snapshot yang dikloning dan dataset "HEAD", yang kemungkinan besar tidak seperti yang Anda inginkan. ingin. Lihat dokumen di sini: download.oracle.com/docs/cd/E19253-01/819-5461/gbcxz/index.html
Sven

Saya akan menunggu migrasi, tetapi sepertinya cukup banyak pertanyaan ZFS pada SU juga jadi saya ragu apakah itu akan dipindahkan secara otomatis ... cocok di kedua tempat, jadi saya mengikuti panduan meta untuk bagaimana bersikap baik tentang cross -posting.
Tino Didriksen

@TinoDidriksen, bisakah Anda memberikan referensi ke posting meta itu? Saya ingin melihatnya. Terima kasih.
nhinkle

2
Pos yang Anda referensikan bukan kebijakan resmi. Ada FAQ tentang MSO yang menjelaskan cara menangani pertanyaan yang menurut pengguna ada pada topik untuk beberapa situs. Untuk meringkas, posting silang dilarang. Jika Anda memutuskan setelah memposting bahwa itu akan lebih baik di tempat lain dan Anda belum mendapatkan jawaban yang baik, Anda dapat menandai untuk dimigrasi atau Anda dapat menghapusnya dan bertanya kembali, tetapi Anda harus menyesuaikan posting dengan situs yang Anda tuju. bertanya. Anda mem-posting ulang pertanyaan yang sama persis kata-demi-kata tanpa menunggu, yang gagal pedoman di kedua posting meta tentang lintas posting.
nhinkle

Jawaban:


9

Snapshots hanya bisa dibaca. Jika Anda ingin folder-folder itu hilang, Anda harus menghapus seluruh snapshot.

Anda dapat membuat cadangan (dengan sesuatu seperti tar), tidak termasuk folder yang menyinggung, lalu hapus snapshot. Jelas cadangan sekarang dalam format tar, atau apa pun,; tetapi setidaknya Anda masih memiliki salinan cadangan.


2
Nyebelin yang sebenarnya dengan solusi ini adalah bahwa Anda sekarang harus menyimpan setiap bit data n kali nyata, sedangkan snapshot hanya akan menyimpan blok yang dimodifikasi. Dengan cara ini, Anda mungkin berakhir dengan lebih banyak ruang yang dibutuhkan daripada yang Anda simpan dengan menghapus cache dari file tar.
Sven

Dedupe akan membantu dengan itu, tetapi Anda benar. Saya cukup yakin tidak ada cara untuk memodifikasi snapshot seperti yang dia inginkan.
Chris S

Saya memiliki kompresi dan deduksi gzip-1, jadi menyalin di sekitar data yang identik hanya membutuhkan ruang pembukuan. Tapi tentu saja saya ingin beberapa cara untuk menghindari penyalinan sama sekali.
Tino Didriksen

Saya ragu jika ada banyak file tar dari dedup data yang hampir sama akan sangat membantu, karena menambah atau mengurangi hanya satu byte pada awal file akan berarti bahwa tidak ada blok yang akan identik dengan yang lain, membuat dedup tidak berguna.
Sven

@VenW Setelah membaca ulang pertanyaan saya lihat dia melakukan ini untuk mencoba dan menghemat ruang; yang jawaban saya benar-benar tidak membantu kecuali dia memindahkan file tar dari komputer, yang dia hanya bisa mengekspor snapshot. Kedengarannya dia terjebak di sekitar.
Chris S

14

Anda dapat mencoba yang berikut ini:

  1. Klon snapshot tertua ke sistem file baru (sebut saja fsnew).
  2. Promosikan klon ( fsnew) untuk memungkinkan Anda menghancurkan snapshot yang menjadi dasar sistem file.
  3. Hapus file yang menyinggung.
  4. Buat snapshot dari fsnew.

Sekarang, sebelum snapshot, rsyncdengan --inplacebendera dari snapshot ke fsnew melompati file yang tidak Anda inginkan. The --inplacebendera mengurangi jumlah menulis dan memungkinkan untuk snapshot yang lebih kecil.

  1. Buat snapshot dari fsnew.
  2. Hancurkan foto aslinya.

Ketika ini selesai, Anda harus memiliki snapshot fsnewyang sesuai dengan snapshot dari sistem file asli dengan menghapus file yang menyinggung.

Jika Anda memiliki ruang pada drive, Anda mungkin ingin melewati perintah "hancurkan" sampai skrip Anda berfungsi dengan benar.


Anda juga harus meneruskan --deleteopsi rsync, jika tidak, Anda akan kehilangan penghapusan di antara foto. Kalau tidak, ini adalah ide bagus.
Tobia

1
  1. Hancurkan foto aslinya.

Anda tidak dapat menghancurkan orig snapshot setelah mempromosikan tindakan. Hanya jika demikian hancurkan dataset induk.

contoh (setelah mempromosikan klon).

zfs hancurkan media1/cheers/backup-auto-20190530.2105-2y-clone@auto-20190530.2105-2y

tidak dapat menghancurkan 'media1/cheers/backup-auto-20190530.2105-2y-clone@auto-20190530.2105-2y': snapshot memiliki klon bergantung

gunakan '-R' untuk menghancurkan dataset berikut:

media1/media/backup@auto-20190531.1622-2y

media1 / media / cadangan

zfs menghancurkan media1/media/backup@auto-20190531.1622-2y

zfs hancurkan media1/cheers/backup-auto-20190530.2105-2y-clone@auto-20190530.2105-2y

tidak dapat menghancurkan 'media1/cheers/backup-auto-20190530.2105-2y-clone@auto-20190530.2105-2y': snapshot memiliki klon bergantung

gunakan '-R' untuk menghancurkan dataset berikut:

media1 / media / cadangan

Setelah operasi "lucu" itu, saya harus membuat yang berikutnya

zfs snapshot media1 / media / backup @ 1

zfs mengirim media1 / media / backup @ 1 | pv | zfs menerima media1 / media / backupnew

zfs hancurkan media1 / media / backup @ 1

zfs menghancurkan -R media1 / media / backup

zfs mengganti nama media1 / media / backupnew media1 / media / backup

ATAU terbalik mempromosikannya. zfs mempromosikan media1 / media / backup dan setelah itu menghapus clone anuway, karena Anda akan memiliki snapshot besar di tempat src))

Hanya rsync / backup yang dapat membantu di sini.


-3

Snapshots ZFS untuk sistem file ZFS tertentu dapat ditemukan di bawah .zfs/snapshotsdirektori di root sistem file. Anda harus dapat menulis skrip yang melintasi folder ini dan rmfile-file yang Anda butuhkan, yang seharusnya menghapusnya dari snapshot itu sendiri.


3
Jepretan ZFS hanya baca. Anda tidak dapat menghapusnya.
Sven

Sayang saya, tidak yakin di mana saya mendapat kesan Anda bisa :(
growse
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.