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