dm-zero

设备映射器的“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 错误。