dm-zero¶
Device-Mapper 的“zero”目标提供了一个块设备,该设备在读取时始终返回零填充数据,并在写入时静默丢弃数据。这与 /dev/zero 的行为类似,但它是一个块设备而非字符设备。
Dm-zero 没有目标特定参数。
dm-zero 的一个非常有趣的用途是结合 dm-snapshot 创建“稀疏”设备。稀疏设备报告的设备大小大于该设备可用的实际存储空间量。用户可以在稀疏设备内的任何位置写入数据,并像普通设备一样读取。对先前未写入区域的读取将返回零填充缓冲区。当写入足够的数据以填满实际存储空间时,稀疏设备将被停用。这对于测试设备和文件系统限制非常有用。
要创建稀疏设备,首先创建一个 dm-zero 设备,其大小为稀疏设备的所需大小。在此示例中,我们假设一个 10TB 的稀疏设备。
TEN_TERABYTES=`expr 10 \* 1024 \* 1024 \* 1024 \* 2` # 10 TB in sectors
echo "0 $TEN_TERABYTES zero" | dmsetup create zero1
然后,使用任何可用的块设备作为 COW 设备,创建该零设备的快照。COW 设备的大小将决定稀疏设备可用的实际空间量。在此示例中,我们假设 /dev/sdb1 是一个可用的 10GB 分区。
echo "0 $TEN_TERABYTES snapshot /dev/mapper/zero1 /dev/sdb1 p 128" | \
dmsetup create sparse1
这将创建一个名为 /dev/mapper/sparse1 的 10TB 稀疏设备,其拥有 10GB 的实际存储空间。如果写入此设备的数据超过 10GB,它将开始返回 I/O 错误。