GNU / Linux: perangkat blok overlay / perangkat blok stackable


14

GNU / Linux memiliki union mount yang melapisi dir. Jadi, Anda dapat memasang dir yang dapat ditulisi di atas direktori read-only. Ketika direktori yang dapat ditulisi dilepas, direktori read-only tidak tersentuh.

Saya mencari fungsionalitas yang sama untuk perangkat blok - lebih disukai dengan bagian yang dapat ditulis disimpan dalam file. Jadi saya ingin menjalankan sesuatu seperti:

device-setup /dev/newdevice /dev/read-only-device overlayfile

Jika saya menulis ke / dev / newdevice, perubahan harus disimpan dalam overlayfile. Jika saya membaca sektor yang ditulis, saya harus mendapatkan data dari overlayfile. Jika saya membaca sektor yang tidak ditulis, saya harus mendapatkan data dari / dev / read-only-device.

Apakah alat semacam itu ada?


Jawaban:


22

Anda dapat melakukannya dengan mapper perangkat dan snapshottargetnya.

Pada dasarnya, Anda akan melakukan hal yang sama seperti apa yang dilakukan LVM ketika Anda membuat snapshot yang dapat ditulis.

dev=/dev/read-only-device
ovl=/path/to/overlay.file
newdevname=newdevice
size=$(blockdev --getsz "$dev")

loop=$(losetup -f --show -- "$ovl")
printf '%s\n' "0 $size snapshot $dev $loop P 8" |
  dmsetup create "$newdevname"

Kemudian Anda dapat mengakses perangkat yang overlay sebagai /dev/mapper/newdevice.

Jika Anda juga membutuhkan akses ke perangkat asli secara bersamaan, Anda dapat melakukan:

printf '%s\n' "0 $size snapshot-origin $dev" |
  dmsetup create originaldevice

Dan akses ke sana /dev/mapper/originaldevice.

Anda dapat menulis ke perangkat itu, lalu selain potongan yang ditulis ke perangkat snapshot, file overlay akan berisi salinan potongan yang telah ditimpa saat menulis ke asal snapshot.

File overlay bisa berupa file yang jarang. (misalnya, buat sebagai truncate -s10G the-file), dan tidak harus sebesar perangkat asli. Anda bisa tahu seberapa penuhnya dmsetup status "$newdevname".

Catatan: Ada persyaratan ukuran dan isi pada perangkat snapshot .


1
Pertanyaan menarik berikutnya adalah apakah perubahan yang diakumulasikan tersebut nantinya dapat digabungkan ke dalam perangkat asli
imz - Ivan Zakharyaschev

1
Jawaban selanjutnya: ya. "Device-mapper memungkinkan Anda ... *) Untuk menggabungkan snapshot dari perangkat blok kembali ke perangkat asal snapshot." kernel.org/doc/Documentation/device-mapper/snapshot.txt
imz - Ivan Zakharyaschev

Apa arti parameter chunksize dengan target snapshot (8 dalam kasus Anda)? Bagaimana cara memilihnya?
imz - Ivan Zakharyaschev

1
@ Tom Angka-angka dalam tabel DM selalu merujuk ke unit 512 byte, bukan ukuran sektor fisik perangkat blok yang mendasarinya. Jadi menggunakan sesuatu yang bukan kelipatan dari 8 snapshot di atas perangkat dengan sektor 4K akan menjadi ide yang buruk.
Stéphane Chazelas

1
@ Tom, chunksize menentukan rincian dari snapshot. ini bukan tentang pemblokiran FS untuk file overlay, tetapi ganularitas operasi I / O dilakukan pada apa pun yang duduk di perangkat blok. Karena itu rollback. Terima kasih untuk getz vs getsize.
Stéphane Chazelas
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.