GNU/Linux:覆盖块设备/可堆叠块设备

GNU/Linux:覆盖块设备/可堆叠块设备

GNU/Linux 有覆盖目录的联合挂载。因此,您可以在只读目录之上安装可写目录。当可写目录被卸载时,只读目录不会受到影响。

我正在寻找块设备的相同功能 - 最好将可写部分存储在文件中。所以我想运行类似的东西:

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

如果我写入 /dev/newdevice ,更改应存储在覆盖文件中。如果我读取写入的扇区,我应该从覆盖文件中获取数据。如果我读取未写入的扇区,我应该从 /dev/read-only-device 获取数据。

存在这样的工具吗?

答案1

您可以使用设备映射器及其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"

注意:快照设备上的大小和内容要求

相关内容