| 1 | =======
|
| 2 | dm-zero
|
| 3 | =======
|
| 4 |
|
| 5 | Device-Mapper's "zero" target provides a block-device that always returns
|
| 6 | zero'd data on reads and silently drops writes. This is similar behavior to
|
| 7 | /dev/zero, but as a block-device instead of a character-device.
|
| 8 |
|
| 9 | Dm-zero has no target-specific parameters.
|
| 10 |
|
| 11 | One very interesting use of dm-zero is for creating "sparse" devices in
|
| 12 | conjunction with dm-snapshot. A sparse device reports a device-size larger
|
| 13 | than the amount of actual storage space available for that device. A user can
|
| 14 | write data anywhere within the sparse device and read it back like a normal
|
| 15 | device. Reads to previously unwritten areas will return a zero'd buffer. When
|
| 16 | enough data has been written to fill up the actual storage space, the sparse
|
| 17 | device is deactivated. This can be very useful for testing device and
|
| 18 | filesystem limitations.
|
| 19 |
|
| 20 | To create a sparse device, start by creating a dm-zero device that's the
|
| 21 | desired size of the sparse device. For this example, we'll assume a 10TB
|
| 22 | sparse device::
|
| 23 |
|
| 24 | TEN_TERABYTES=`expr 10 \* 1024 \* 1024 \* 1024 \* 2` # 10 TB in sectors
|
| 25 | echo "0 $TEN_TERABYTES zero" | dmsetup create zero1
|
| 26 |
|
| 27 | Then create a snapshot of the zero device, using any available block-device as
|
| 28 | the COW device. The size of the COW device will determine the amount of real
|
| 29 | space available to the sparse device. For this example, we'll assume /dev/sdb1
|
| 30 | is an available 10GB partition::
|
| 31 |
|
| 32 | echo "0 $TEN_TERABYTES snapshot /dev/mapper/zero1 /dev/sdb1 p 128" | \
|
| 33 | dmsetup create sparse1
|
| 34 |
|
| 35 | This will create a 10TB sparse device called /dev/mapper/sparse1 that has
|
| 36 | 10GB of actual storage space available. If more than 10GB of data is written
|
| 37 | to this device, it will start returning I/O errors.
|