Back to home page

OSCL-LXR

 
 

    


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.