Ole*_*nge 14 block-device loop-device snapshot
GNU/Linux 具有覆盖目录的联合挂载。因此,您可以在只读目录之上安装可写目录。当可写目录被卸载时,只读目录保持不变。
我正在为块设备寻找相同的功能 - 最好将可写部分存储在文件中。所以我想运行类似的东西:
device-setup /dev/newdevice /dev/read-only-device overlayfile
Run Code Online (Sandbox Code Playgroud)
如果我写入 /dev/newdevice 更改应该存储在覆盖文件中。如果我读取写入的扇区,我应该从覆盖文件中获取数据。如果我读取未写入的扇区,我应该从 /dev/read-only-device 获取数据。
有这样的工具吗?
Sté*_*las 22
您可以使用设备映射器及其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"
Run Code Online (Sandbox Code Playgroud)
然后您可以访问覆盖的设备/dev/mapper/newdevice。
如果您还需要同时访问原始设备,您可以执行以下操作:
printf '%s\n' "0 $size snapshot-origin $dev" |
dmsetup create originaldevice
Run Code Online (Sandbox Code Playgroud)
并访问它/dev/mapper/originaldevice。
您可以写入该设备,然后除了写入快照设备的块之外,覆盖文件将包含写入快照源时已被覆盖的块的副本。
覆盖文件可以是稀疏文件。(例如,将其创建为truncate -s10G the-file),并且不必与原始设备一样大。你可以告诉它有多满dmsetup status "$newdevname"。