GNU / Linux: kaplama blok cihazı / istiflenebilir blok cihazı


14

GNU / Linux, direkleri kaplayan sendika montajına sahiptir. Böylece, yazılabilir bir dizini salt okunur bir dizinin üzerine ekleyebilirsiniz. Yazılabilir dizinin bağlantısı kesildiğinde, salt okunur dizine dokunulmaz.

Blok aygıtlar için aynı işlevselliği arıyorum - tercihen bir dosyada depolanabilir yazılabilir parça ile. Yani şöyle bir şey çalıştırmak istiyorum:

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

/ Dev / newdevice dosyasına yazarsam değişiklikler yer paylaşımında saklanmalıdır. Eğer yazılan sektörleri okursam, yer paylaşımından veri almalıyım. Yazılmayan sektörleri okursam, verileri / dev / salt okunur aygıttan almalıyım.

Böyle bir araç var mı?


Yanıtlar:


22

Bunu cihaz eşleyici ve snapshothedefi ile yapabilirsiniz.

Temel olarak, yazılabilir bir anlık görüntü oluştururken LVM'nin yaptığı ile aynı şeyi yaparsınız.

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"

Ardından, yer paylaşımlı cihaza şu şekilde erişebilirsiniz /dev/mapper/newdevice.

Orijinal cihaza aynı anda erişmeniz gerekiyorsa şunları yapabilirsiniz:

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

Ve ona erişin /dev/mapper/originaldevice.

Bu aygıta yazabilirsiniz, ardından anlık görüntü aygıtına yazılan parçalara ek olarak, bindirme dosyası, anlık görüntü kaynağına yazarken üzerine yazılan parçaların bir kopyasını içerir.

Bindirme dosyası seyrek bir dosya olabilir. (örneğin, oluştur truncate -s10G the-file) ve orijinal cihaz kadar büyük olması gerekmez. Ne kadar dolu olduğunu söyleyebilirsin dmsetup status "$newdevname".

Not: Anlık görüntü aygıtında boyut ve içerik gereksinimleri vardır .


1
Bir sonraki ilginç soru, biriken değişikliklerin daha sonra orijinal cihaza birleştirilip birleştirilemeyeceğidir
imz - Ivan Zakharyaschev

1
Sonraki cevap: evet. "Cihaz eşleyici size izin verir… *) Bir blok cihazın anlık görüntüsünü tekrar anlık görüntünün başlangıç ​​cihazına birleştirmek için." kernel.org/doc/Documentation/device-mapper/snapshot.txt
imz - Ivan Zakharyaschev

Anlık görüntü hedefinin chunksize parametresi (sizin durumunuzda 8) ne anlama geliyor? Nasıl seçilir?
imz - Ivan Zakharyaschev

1
@Tom DM tablolarındaki bu sayılar, temeldeki blok cihazların fiziksel sektör boyutunu değil, her zaman 512 bayt birimi anlamına gelir. Bu nedenle, 4K sektörleri olan bir cihazın üstünde 8'in katı olmayan bir şey kullanmak kötü bir fikir olacaktır.
Stéphane Chazelas

1
@Tom, parça boyutu, enstantanenin ayrıntı düzeyini belirler. bindirme dosyası için FS'nin blok boyutu ile ilgili değildir, ancak blok cihazında oturan her şeyde yapılan G / Ç işlemlerinin genişliği. Dolayısıyla geri alma. Getsz vs getsize için teşekkürler.
Stéphane Chazelas
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.