0001 =======
0002 dm-zero
0003 =======
0004
0005 Device-Mapper's "zero" target provides a block-device that always returns
0006 zero'd data on reads and silently drops writes. This is similar behavior to
0007 /dev/zero, but as a block-device instead of a character-device.
0008
0009 Dm-zero has no target-specific parameters.
0010
0011 One very interesting use of dm-zero is for creating "sparse" devices in
0012 conjunction with dm-snapshot. A sparse device reports a device-size larger
0013 than the amount of actual storage space available for that device. A user can
0014 write data anywhere within the sparse device and read it back like a normal
0015 device. Reads to previously unwritten areas will return a zero'd buffer. When
0016 enough data has been written to fill up the actual storage space, the sparse
0017 device is deactivated. This can be very useful for testing device and
0018 filesystem limitations.
0019
0020 To create a sparse device, start by creating a dm-zero device that's the
0021 desired size of the sparse device. For this example, we'll assume a 10TB
0022 sparse device::
0023
0024 TEN_TERABYTES=`expr 10 \* 1024 \* 1024 \* 1024 \* 2` # 10 TB in sectors
0025 echo "0 $TEN_TERABYTES zero" | dmsetup create zero1
0026
0027 Then create a snapshot of the zero device, using any available block-device as
0028 the COW device. The size of the COW device will determine the amount of real
0029 space available to the sparse device. For this example, we'll assume /dev/sdb1
0030 is an available 10GB partition::
0031
0032 echo "0 $TEN_TERABYTES snapshot /dev/mapper/zero1 /dev/sdb1 p 128" | \
0033 dmsetup create sparse1
0034
0035 This will create a 10TB sparse device called /dev/mapper/sparse1 that has
0036 10GB of actual storage space available. If more than 10GB of data is written
0037 to this device, it will start returning I/O errors.