Menggulirkan kembali subtrume btrf dengan subvolume anak

9

Apakah ada cara kanonik untuk memutar kembali ke snapshot subvolume yang memiliki subvolume anak. Jadi misalnya, ini adalah tata letak volume btrfs saya:

ID 257 gen 59802 top level 5 path __active
ID 258 gen 59784 top level 5 path __snapshot
ID 259 gen 59802 top level 257 path home
ID 260 gen 36538 top level 257 path opt
ID 261 gen 59802 top level 257 path var

Jadi, Anda dapat melihat bahwa home, opt, dan var adalah subvolume anak dari __active. Jika saya memotret __aktif sehingga ini adalah tata letak baru saya:

ID 257 gen 59802 top level 5 path __active
ID 258 gen 59784 top level 5 path __snapshot
ID 259 gen 59802 top level 257 path home
ID 260 gen 36538 top level 257 path opt
ID 261 gen 59802 top level 257 path var
ID 416 gen 59784 top level 258 path __snapshot/__active

Jika saya ingin kembali ke snapshot __active, apakah ada cara untuk memasang kembali home, opt, dan var ke __active baru?

Falmarri
sumber

Jawaban:

3

Jika Anda maksud dengan pemasangan kembali yang btrfs subvolume listakan ditampilkan:

ID 257 gen 59802 top level 5 path __active
ID 258 gen 59784 top level 5 path __snapshot
ID 259 gen 59802 top level 416 path home
ID 260 gen 36538 top level 416 path opt
ID 261 gen 59802 top level 416 path var
ID 416 gen 59784 top level 258 path __snapshot/__active

maka tidak ada sekarang cara untuk melakukan itu dengan btrfs-progs.

Sub-volume hanya dapat dihapus jika semua anak-subvolume (dibuat dengan btrfs subvolume create ...) kosong, namun ini tidak berlaku untuk snapshot (yang dibuat dengan btrfs subvolume snapshot .... Snapshots selalu dapat dihapus dan jadi jika Anda bisa memindahkannya, akan ada masalah dengan menghapus snapshot.

Meskipun kedua subvolume dan snapshot anak muncul dalam struktur pohon yang sama, dan bahkan berbagi btrfs subvolume delete ..perintah, mereka tidak bertindak sama.

Anthon
sumber
1

Pertama-tama, saat membuat __snapshot/__active, subvolume (home, opt, var) tidak di-snap. Sebaliknya direktori kosong dibuat. Dengan demikian __snapshot/__activebisa dengan mudah dihilangkan, sedangkan __activetidak bisa.

Tapi poin utamanya adalah memulihkan __activedengan __snapshot/__active. Sejauh yang saya tahu, ini tidak dapat dilakukan secara atom. Tetapi Anda dapat dengan senang hati mengambil mvsnapshot dan subvolume lainnya (selama itu dapat ditulis). Jadi melakukan mis

mv __active __snapshot/__active.old
mv __snapshot/__active __active

mengembalikan __activedari snapshot, tetapi memindahkan subvolume ke __snapshot/__active.old/{home,opt,var}. Untuk memasang kembali mereka sekarang dapat Anda gunakan

mv __snapshot/__active.old/{home,opt,var} __active/

dan kamu akan mendapatkan

ID 257 gen 59804 top level 258 path __snapshot/__active.old
ID 258 gen 59786 top level 5 path __snapshot
ID 259 gen 59802 top level 416 path home
ID 260 gen 36538 top level 416 path opt
ID 261 gen 59802 top level 416 path var
ID 416 gen 59784 top level 5 path __active

Jika snapshot Anda dibuat hanya-baca, Anda dapat melakukannya misalnya

mv __active __snapshot/__active.old
btrfs subvolume snapshot __snapshot/__active __active
mv __snapshot/__active.old/{home,opt,var} __active/
David
sumber