Block-Device

GNU/Linux:覆蓋塊設備/可堆疊塊設備

  • October 9, 2017

GNU/Linux 具有覆蓋目錄的聯合掛載。因此,您可以在只讀目錄之上安裝一個可寫目錄。當可寫目錄被解除安裝時,只讀目錄保持不變。

我正在為塊設備尋找相同的功能 - 最好將可寫部分儲存在文件中。所以我想執行類似的東西:

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

如果我寫入 /dev/newdevice 更改應儲存在覆蓋文件中。如果我讀取寫入的扇區,我應該從覆蓋文件中獲取數據。如果我讀取未寫入的扇區,我應該從 /dev/read-only-device 獲取數據。

這樣的工具存在嗎?

您可以使用設備映射器及其snapshot目標來做到這一點。

基本上,在創建可寫快照時,您的操作與 LVM 相同。

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"

然後您可以以/dev/mapper/newdevice.

如果您還需要同時訪問原始設備,您可以這樣做:

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

並訪問它/dev/mapper/originaldevice

您可以寫入該設備,然後除了寫入快照設備的塊之外,覆蓋文件將包含在寫入快照源時已被覆蓋的塊的副本。

覆蓋文件可以是稀疏文件。(例如,將其創建為truncate -s10G the-file),並且不必與原始設備一樣大。你可以告訴它有多滿dmsetup status "$newdevname"

注意:快照設備有大小和內容要求。

引用自:https://unix.stackexchange.com/questions/67678