Block-Device
GNU/Linux:覆蓋塊設備/可堆疊塊設備
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"
。注意:快照設備有大小和內容要求。