GNU / Linux: urządzenie blokujące nakładkę / urządzenie blokowe, które można ustawiać jeden na drugim


14

GNU / Linux ma podłączenie unii, które nakłada katalogi. Możesz więc zamontować zapisywalny katalog na katalogu tylko do odczytu. Kiedy katalog zapisywalny jest odmontowany, katalog tylko do odczytu pozostaje nietknięty.

Szukam tej samej funkcjonalności dla urządzeń blokowych - najlepiej z częścią do zapisania zapisaną w pliku. Chciałbym więc uruchomić coś takiego:

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

Jeśli piszę do / dev / newdevice, zmiany powinny być przechowywane w pliku nakładkowym. Jeśli czytam sektory, w których napisano, powinienem pobrać dane z pliku nakładki. Jeśli czytam sektory, w których nie zapisano, powinienem pobrać dane z urządzenia / dev / tylko do odczytu.

Czy takie narzędzie istnieje?


Odpowiedzi:


22

Możesz to zrobić za pomocą mapera urządzeń i jego snapshotcelu.

Zasadniczo zrobiłbyś to samo, co LVM, gdy tworzysz zapisywalną migawkę.

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"

Następnie możesz uzyskać dostęp do nakładanego urządzenia jako /dev/mapper/newdevice.

Jeśli potrzebujesz również dostępu do oryginalnego urządzenia w tym samym czasie, możesz:

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

I uzyskaj do niego dostęp /dev/mapper/originaldevice.

Możesz pisać na tym urządzeniu, a następnie oprócz fragmentów zapisanych na urządzeniu migawkowym, plik nakładki będzie zawierał fragmenty, które zostały nadpisane podczas zapisu na początku migawki.

Plik nakładki może być plikiem rzadkim. (na przykład utwórz go jako truncate -s10G the-file) i nie musi być tak duży jak oryginalne urządzenie. Możesz powiedzieć, jak pełny jest dmsetup status "$newdevname".

Uwaga: Na urządzeniu migawkowym istnieją wymagania dotyczące rozmiaru i zawartości .


1
Kolejnym interesującym pytaniem jest to, czy skumulowane zmiany można później połączyć w oryginalne urządzenie
imz - Ivan Zakharyaschev

1
Kolejna odpowiedź: tak. „Device-mapper pozwala… *) Aby połączyć migawkę urządzenia blokowego z powrotem z urządzeniem źródłowym migawki.” kernel.org/doc/Documentation/device-mapper/snapshot.txt
imz - Ivan Zakharyaschev

Co oznacza parametr chunksize dla celu migawki (w twoim przypadku 8)? Jak to wybrać?
imz - Ivan Zachharyaschev

1
@Tom Te liczby w tabelach DM zawsze odnoszą się do 512 bajtów, a nie rozmiaru sektora fizycznego podstawowych urządzeń blokowych. Dlatego używanie czegoś, co nie jest wielokrotnością liczby 8, migawki na urządzeniu z sektorami 4K byłoby złym pomysłem.
Stéphane Chazelas

1
@Tom, porcja określa ziarnistość migawki. nie chodzi o rozmiar bloku FS dla pliku nakładki, ale ganularność operacji we / wy wykonanych na tym, co siedzi na urządzeniu blokowym. Stąd wycofanie. Dzięki za getsz vs getize.
Stéphane Chazelas,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.