1LVMVDO(7)                                                            LVMVDO(7)
2
3
4

NAME

6       lvmvdo — EXPERIMENTAL LVM Virtual Data Optimizer support
7
8

DESCRIPTION

10       VDO  (which  includes  kvdo  and  vdo) is software that provides inline
11       block-level deduplication, compression, and thin provisioning capabili‐
12       ties for primary storage.
13
14       Deduplication  is  a  technique for reducing the consumption of storage
15       resources by eliminating multiple copies of duplicate blocks.  Compres‐
16       sion  takes  the  individual unique blocks and shrinks them with coding
17       algorithms; these reduced blocks are then efficiently  packed  together
18       into  physical  blocks. Thin provisioning manages the mapping from LBAs
19       presented by VDO to where the data has actually been stored,  and  also
20       eliminates any blocks of all zeroes.
21
22       With  deduplication,  instead  of  writing the same data more than once
23       each duplicate block is detected and recorded as  a  reference  to  the
24       original  block.  VDO  maintains a mapping from logical block addresses
25       (used by the storage layer above VDO) to physical block addresses (used
26       by  the storage layer under VDO). After deduplication, multiple logical
27       block addresses may be mapped to the same physical block address; these
28       are called shared blocks and are reference-counted by the software.
29
30       With  VDO's  compression,  multiple  blocks (or shared blocks) are com‐
31       pressed with the fast LZ4 algorithm, and binned together where possible
32       so  that  multiple  compressed  blocks  fit  within a 4 KB block on the
33       underlying storage. Mapping from LBA is to a physical block address and
34       index  within it for the desired compressed data. All compressed blocks
35       are individually reference counted for correctness.
36
37       Block sharing and block compression are invisible to applications using
38       the  storage, which read and write blocks as they would if VDO were not
39       present. When a shared block is overwritten, a new  physical  block  is
40       allocated  for  storing the new block data to ensure that other logical
41       block addresses that are mapped to the shared physical  block  are  not
42       modified.
43
44       For  usage of VDO with lvm(8) standard VDO userspace tools vdoformat(8)
45       and currently  non-standard  kernel  VDO  module  "kvdo"  needs  to  be
46       installed on the system.
47
48       The  "kvdo" module implements fine-grained storage virtualization, thin
49       provisioning, block sharing, and compression; the "uds" module provides
50       memory-efficient  duplicate identification. The userspace tools include
51       vdostats(8) for extracting statistics from those volumes.
52
53
54

VDO Terms

56       VDODataLV
57              VDO data LV
58              large hidden LV with suffix _vdata created in a VG.
59              used by VDO target to store all data and metadata blocks.
60
61
62       VDOPoolLV
63              VDO pool LV
64              maintains virtual for LV(s) stored in attached VDO data  LV  and
65              it has same size.
66              contains VDOLV(s) (currently supports only a single VDOLV).
67
68
69       VDOLV
70              VDO LV
71              created from VDOPoolLV
72              appears blank after creation
73
74

VDO Usage

76       The primary methods for using VDO with lvm2:
77
78
79   1. Create VDOPoolLV with VDOLV
80       Create  an  VDOPoolLV  that  will holds VDO data togehther with virtual
81       size VDOLV, that user can use. When the virtual size is not  specified,
82       then  such  LV  is created with maximum size that always fits into data
83       volume even if there cannot happen any  deduplication  and  compression
84       (i.e.  it  can  hold uncompressible content of /dev/urandom).  When the
85       name of VDOPoolLV is not specified, it  tales  name  from  sequence  of
86       vpool0, vpool1 ...
87
88       Note:  As  the  performance of TRIM/Discard operation is slow for large
89       volumes of VDO type, please  try  to  avoid  sending  discard  requests
90       unless  necessary  as it may take considerable amount of time to finish
91       discard operation.
92
93       lvcreate --type vdo -n VDOLV -L DataSize -V LargeVirtualSize VG/VDOPoolLV
94       lvcreate --vdo -L DataSize VG
95
96       Example
97       # lvcreate --type vdo -n vdo0 -L 10G -V 100G vg/vdopool0
98       # mkfs.ext4 -E nodiscard /dev/vg/vdo0
99
100
101   2. Create VDOPoolLV and convert existing LV into VDODataLV
102       Convert an already created/existing LV into a volume that can hold  VDO
103       data  and  metadata  (a  volume  reference by VDOPoolLV).  User will be
104       prompted to confirm such conversion as it  is  IRREVERSIBLY  DESTROYING
105       content  of such volume, as it's being immediatelly formated by vdofor‐
106       mat(8) as VDO pool data volume. User can specify virtual size of  asso‐
107       ciated  VDOLV with this VDOPoolLV.  When the virtual size is not speci‐
108       fied, it will set to the maximum size that can keep 100% uncompressible
109       data there.
110
111       lvconvert --type vdo-pool -n VDOLV -V VirtualSize VG/VDOPoolLV
112       lvconvert --vdopool VG/VDOPoolLV
113
114       Example
115       # lvconvert --type vdo-pool -n vdo0 -V10G vg/existinglv
116
117
118   3. Change default setting used for creating VDOPoolLV
119       VDO allows to set large variety of option. Lots of these setting can be
120       specified by lvm.conf or profile settings. User can prepare  number  of
121       different profiles and just specify profile file name.  Check output of
122       lvmconfig --type full for detailed description of  all  individual  vdo
123       settings.
124
125       Example
126       # cat <<EOF > vdo.profile
127       allocation {
128            vdo_use_compression=1
129            vdo_use_deduplication=1
130            vdo_use_metadata_hints=1
131            vdo_minimum_io_size=4096
132            vdo_block_map_cache_size_mb=128
133            vdo_block_map_period=16380
134            vdo_check_point_frequency=0
135            vdo_use_sparse_index=0
136            vdo_index_memory_size_mb=256
137            vdo_slab_size_mb=2048
138            vdo_ack_threads=1
139            vdo_bio_threads=1
140            vdo_bio_rotation=64
141            vdo_cpu_threads=2
142            vdo_hash_zone_threads=1
143            vdo_logical_threads=1
144            vdo_physical_threads=1
145            vdo_write_policy="auto"
146            vdo_max_discard=1
147       }
148       EOF
149
150       # lvcreate --vdo -L10G --metadataprofile vdo.profile vg/vdopool0
151       # lvcreate --vdo -L10G --config 'allocation/vdo_cpu_threads=4' vg/vdopool1
152
153
154   4. Change compression and deduplication of VDOPoolLV
155       Disable  or  enable  compression and deduplication for VDO pool LV (the
156       volume that maintains all VDO LV(s) associated with it).
157
158       lvchange --compression [y|n] --deduplication [y|n] VG/VDOPoolLV
159
160       Example
161       # lvchange --compression n  vg/vdpool0
162       # lvchange --deduplication y vg/vdpool1
163
164
165   4. Checking usage of VDOPoolLV
166       To quickly check how much data of VDOPoolLV are  already  consumed  use
167       lvs(8).  Field Data% will report how much data occupies content of vir‐
168       tual data for VDOLV and how much space is already consumed with all the
169       data  and metadata blocks in VDOPoolLV.  For a detailed description use
170       vdostats(8) command.
171
172       Note: vdostats(8) currently understands only /dev/mapper device names.
173
174       Example
175       # lvcreate --type vdo -L10G -V20G -n vdo0 vg/vdopool0
176       # mkfs.ext4 -E nodiscard /dev/vg/vdo0
177       # lvs -a vg
178
179         LV               VG Attr       LSize  Pool     Origin Data%
180         vdo0             vg vwi-a-v--- 20.00g vdopool0        0.01
181         vdopool0         vg dwi-ao---- 10.00g                 30.16
182         [vdopool0_vdata] vg Dwi-ao---- 10.00g
183
184       # vdostats --all /dev/mapper/vg-vdopool0
185       /dev/mapper/vg-vdopool0 :
186         version                             : 30
187         release version                     : 133524
188         data blocks used                    : 79
189         ...
190
191

VDO Topics

193
194
195

SEE ALSO

197       lvm(8),   lvm.conf(5),   lvmconfig(8),    lvcreate(8),    lvconvert(8),
198       lvchange(8),   lvextend(8),   lvreduce(8),   lvresize(8),  lvremove(8),
199       lvs(8), vdo(8), vdoformat(8), vdostats(8), mkfs(8)
200
201
202
203Red Hat, Inc        LVM TOOLS 2.03.02(2)-RHEL8 (2019-01-04)          LVMVDO(7)
Impressum