1LVMTHIN(7)                                                          LVMTHIN(7)
2
3
4

NAME

6       lvmthin — LVM thin provisioning
7
8

DESCRIPTION

10       Blocks  in a standard lvm(8) Logical Volume (LV) are allocated when the
11       LV is created, but blocks in a thin provisioned  LV  are  allocated  as
12       they  are  written.   Because of this, a thin provisioned LV is given a
13       virtual size, and can then be much  larger  than  physically  available
14       storage.   The amount of physical storage provided for thin provisioned
15       LVs can be increased later as the need arises.
16
17       Blocks in a standard LV are allocated (during creation) from the Volume
18       Group  (VG),  but blocks in a thin LV are allocated (during use) from a
19       special "thin pool LV".  The thin pool LV contains blocks  of  physical
20       storage,  and blocks in thin LVs just reference blocks in the thin pool
21       LV.
22
23       A thin pool LV must be created before thin LVs can  be  created  within
24       it.   A  thin pool LV is created by combining two standard LVs: a large
25       data LV that will hold blocks for thin LVs, and a metadata LV that will
26       hold  metadata.   The  metadata tracks which data blocks belong to each
27       thin LV.
28
29       Snapshots of thin LVs are efficient because the data blocks common to a
30       thin LV and any of its snapshots are shared.  Snapshots may be taken of
31       thin LVs or of other thin snapshots.  Blocks common to recursive  snap‐
32       shots are also shared in the thin pool.  There is no limit to or degra‐
33       dation from sequences of snapshots.
34
35       As thin LVs or snapshot LVs are written to, they consume data blocks in
36       the  thin  pool.   As  free data blocks in the pool decrease, more free
37       blocks may need to be supplied.  This is done  by  extending  the  thin
38       pool data LV with additional physical space from the VG.  Removing thin
39       LVs or snapshots from the thin pool can also free blocks  in  the  thin
40       pool.   However, removing LVs is not always an effective way of freeing
41       space in a thin pool because the amount is limited  to  the  number  of
42       blocks not shared with other LVs in the pool.
43
44       Incremental  block  allocation  from  thin  pools can cause thin LVs to
45       become fragmented.  Standard LVs generally avoid this problem by  allo‐
46       cating all the blocks at once during creation.
47
48
49

Thin Terms

51       ThinDataLV
52              thin data LV
53              large LV created in a VG
54              used by thin pool to store ThinLV blocks
55
56
57       ThinMetaLV
58              thin metadata LV
59              small LV created in a VG
60              used by thin pool to track data block usage
61
62
63       ThinPoolLV
64              thin pool LV
65              combination of ThinDataLV and ThinMetaLV
66              contains ThinLVs and SnapLVs
67
68
69       ThinLV
70              thin LV
71              created from ThinPoolLV
72              appears blank after creation
73
74
75       SnapLV
76              snapshot LV
77              created from ThinPoolLV
78              appears as a snapshot of another LV after creation
79
80
81
82

Thin Usage

84       The primary method for using lvm thin provisioning:
85
86
87   1. create ThinDataLV
88       Create an LV that will hold thin pool data.
89
90       lvcreate -n ThinDataLV -L LargeSize VG
91
92       Example
93       # lvcreate -n pool0 -L 10G vg
94
95
96   2. create ThinMetaLV
97       Create an LV that will hold thin pool metadata.
98
99       lvcreate -n ThinMetaLV -L SmallSize VG
100
101       Example
102       # lvcreate -n pool0meta -L 1G vg
103
104       # lvs
105         LV        VG Attr       LSize
106         pool0     vg -wi-a----- 10.00g
107         pool0meta vg -wi-a----- 1.00g
108
109
110   3. create ThinPoolLV
111       Combine the data and metadata LVs into a thin pool LV.
112       ThinDataLV is renamed to hidden ThinPoolLV_tdata.
113       ThinMetaLV is renamed to hidden ThinPoolLV_tmeta.
114       The new ThinPoolLV takes the previous name of ThinDataLV.
115
116       lvconvert --type thin-pool --poolmetadata VG/ThinMetaLV VG/ThinDataLV
117
118       Example
119       # lvconvert --type thin-pool --poolmetadata vg/pool0meta vg/pool0
120
121       # lvs vg/pool0
122         LV    VG Attr       LSize  Pool Origin Data% Meta%
123         pool0 vg twi-a-tz-- 10.00g      0.00   0.00
124
125       # lvs -a
126         LV            VG Attr       LSize
127         pool0         vg twi-a-tz-- 10.00g
128         [pool0_tdata] vg Twi-ao---- 10.00g
129         [pool0_tmeta] vg ewi-ao---- 1.00g
130
131
132   4. create ThinLV
133       Create a new thin LV from the thin pool LV.
134       The thin LV is created with a virtual size.
135       Multiple new thin LVs may be created in the thin pool.
136       Thin LV names must be unique in the VG.
137       The '--type thin' option is inferred from the virtual size option.
138       The --thinpool argument specifies which thin pool will
139       contain the ThinLV.
140
141       lvcreate -n ThinLV -V VirtualSize --thinpool ThinPoolLV VG
142
143       Example
144       Create a thin LV in a thin pool:
145       # lvcreate -n thin1 -V 1T --thinpool pool0 vg
146
147       Create another thin LV in the same thin pool:
148       # lvcreate -n thin2 -V 1T --thinpool pool0 vg
149
150       # lvs vg/thin1 vg/thin2
151         LV    VG Attr       LSize Pool  Origin Data%
152         thin1 vg Vwi-a-tz-- 1.00t pool0        0.00
153         thin2 vg Vwi-a-tz-- 1.00t pool0        0.00
154
155
156   5. create SnapLV
157       Create snapshots of an existing ThinLV or SnapLV.
158       Do not specify -L, --size when creating a thin snapshot.
159       A size argument will cause an old COW snapshot to be created.
160
161       lvcreate -n SnapLV --snapshot VG/ThinLV
162       lvcreate -n SnapLV --snapshot VG/PrevSnapLV
163
164       Example
165       Create first snapshot of an existing ThinLV:
166       # lvcreate -n thin1s1 -s vg/thin1
167
168       Create second snapshot of the same ThinLV:
169       # lvcreate -n thin1s2 -s vg/thin1
170
171       Create a snapshot of the first snapshot:
172       # lvcreate -n thin1s1s1 -s vg/thin1s1
173
174       # lvs vg/thin1s1 vg/thin1s2 vg/thin1s1s1
175         LV        VG Attr       LSize Pool  Origin
176         thin1s1   vg Vwi---tz-k 1.00t pool0 thin1
177         thin1s2   vg Vwi---tz-k 1.00t pool0 thin1
178         thin1s1s1 vg Vwi---tz-k 1.00t pool0 thin1s1
179
180
181   6. activate SnapLV
182       Thin  snapshots are created with the persistent "activation skip" flag,
183       indicated by the "k" attribute.  Use -K with lvchange  or  vgchange  to
184       activate thin snapshots with the "k" attribute.
185
186       lvchange -ay -K VG/SnapLV
187
188       Example
189       # lvchange -ay -K vg/thin1s1
190
191       # lvs vg/thin1s1
192         LV      VG Attr       LSize Pool  Origin
193         thin1s1 vg Vwi-a-tz-k 1.00t pool0 thin1
194
195

Thin Topics

197       Automatic pool metadata LV
198       Specify devices for data and metadata LVs
199       Tolerate device failures using raid
200       Spare metadata LV
201       Metadata check and repair
202       Activation of thin snapshots
203       Removing thin pool LVs, thin LVs and snapshots
204       Manually manage free data space of thin pool LV
205       Manually manage free metadata space of a thin pool LV
206       Using fstrim to increase free space in a thin pool LV
207       Automatically extend thin pool LV
208       Data space exhaustion
209       Metadata space exhaustion
210       Automatic extend settings
211       Zeroing
212       Discard
213       Chunk size
214       Size of pool metadata LV
215       Create a thin snapshot of an external, read only LV
216       Convert a standard LV to a thin LV with an external origin
217       Single step thin pool LV creation
218       Single step thin pool LV and thin LV creation
219       Merge thin snapshots
220       XFS on snapshots
221
222
223
224
225   Automatic pool metadata LV
226
227
228       A  thin data LV can be converted to a thin pool LV without specifying a
229       thin pool metadata LV.  LVM automatically creates a  metadata  LV  from
230       the same VG.
231
232       lvcreate -n ThinDataLV -L LargeSize VG
233       lvconvert --type thin-pool VG/ThinDataLV
234
235       Example
236       # lvcreate -n pool0 -L 10G vg
237       # lvconvert --type thin-pool vg/pool0
238
239       # lvs -a
240         pool0           vg          twi-a-tz--  10.00g
241         [pool0_tdata]   vg          Twi-ao----  10.00g
242         [pool0_tmeta]   vg          ewi-ao----  16.00m
243
244
245
246   Specify devices for data and metadata LVs
247
248
249       The  data  and metadata LVs in a thin pool are best created on separate
250       physical devices.  To do that, specify the device name(s) at the end of
251       the  lvcreate  line.   It can be especially helpful to use fast devices
252       for the metadata LV.
253
254       lvcreate -n ThinDataLV -L LargeSize VG LargePV
255       lvcreate -n ThinMetaLV -L SmallSize VG SmallPV
256       lvconvert --type thin-pool --poolmetadata VG/ThinMetaLV VG/ThinDataLV
257
258       Example
259       # lvcreate -n pool0 -L 10G vg /dev/sdA
260       # lvcreate -n pool0meta -L 1G vg /dev/sdB
261       # lvconvert --type thin-pool --poolmetadata vg/pool0meta vg/pool0
262
263       lvm.conf(5) thin_pool_metadata_require_separate_pvs
264       controls the default PV usage for thin pool creation.
265
266
267
268
269   Tolerate device failures using raid
270
271
272       To tolerate device failures, use raid for the pool  data  LV  and  pool
273       metadata LV.  This is especially recommended for pool metadata LVs.
274
275       lvcreate --type raid1 -m 1 -n ThinMetaLV -L SmallSize VG PVA PVB
276       lvcreate --type raid1 -m 1 -n ThinDataLV -L LargeSize VG PVC PVD
277       lvconvert --type thin-pool --poolmetadata VG/ThinMetaLV VG/ThinDataLV
278
279       Example
280       # lvcreate --type raid1 -m 1 -n pool0 -L 10G vg /dev/sdA /dev/sdB
281       # lvcreate --type raid1 -m 1 -n pool0meta -L 1G vg /dev/sdC /dev/sdD
282       # lvconvert --type thin-pool --poolmetadata vg/pool0meta vg/pool0
283
284
285
286   Spare metadata LV
287
288
289       The first time a thin pool LV is created, lvm will create a spare meta‐
290       data LV in the VG.  This behavior can be  controlled  with  the  option
291       --poolmetadataspare y|n.  (Future thin pool creations will also attempt
292       to create the pmspare LV if none exists.)
293
294       To create the pmspare ("pool metadata spare") LV, lvm first creates  an
295       LV with a default name, e.g. lvol0, and then converts this LV to a hid‐
296       den LV with the _pmspare suffix, e.g. lvol0_pmspare.
297
298       One pmspare LV is kept in a VG to be used for any thin pool.
299
300       The pmspare LV cannot be created explicitly, but may be removed explic‐
301       itly.
302
303       Example
304       # lvcreate -n pool0 -L 10G vg
305       # lvcreate -n pool0meta -L 1G vg
306       # lvconvert --type thin-pool --poolmetadata vg/pool0meta vg/pool0
307
308       # lvs -a
309         [lvol0_pmspare] vg          ewi-------
310         pool0           vg          twi---tz--
311         [pool0_tdata]   vg          Twi-------
312         [pool0_tmeta]   vg          ewi-------
313
314       The  "Metadata  check and repair" section describes the use of the pms‐
315       pare LV.
316
317
318
319   Metadata check and repair
320
321
322       If thin pool metadata is damaged, it may be repairable.   Checking  and
323       repairing  thin  pool metadata is analagous to running fsck/repair on a
324       file system.
325
326       When a thin pool LV is activated, lvm runs the  thin_check  command  to
327       check the correctness of the metadata on the pool metadata LV.
328
329       lvm.conf(5) thin_check_executable
330       can  be  set  to  an  empty string ("") to disable the thin_check step.
331       This is not recommended.
332
333       lvm.conf(5) thin_check_options
334       controls the command options used for the thin_check command.
335
336       If the thin_check command finds a problem with the metadata,  the  thin
337       pool  LV  is  not  activated,  and  the  thin pool metadata needs to be
338       repaired.
339
340       Simple repair commands are not always successful.  Advanced repair  may
341       require editing thin pool metadata and lvm metadata.  Newer versions of
342       the kernel and lvm tools may be more successful at repair.  Report  the
343       details of damaged thin metadata to get the best advice on recovery.
344
345       Command to repair a thin pool:
346       lvconvert --repair VG/ThinPoolLV
347
348       Repair performs the following steps:
349
350       1. Creates a new, repaired copy of the metadata.
351       lvconvert  runs  the  thin_repair command to read damaged metadata from
352       the existing pool metadata LV, and writes a new repaired  copy  to  the
353       VG's pmspare LV.
354
355       2. Replaces the thin pool metadata LV.
356       If step 1 is successful, the thin pool metadata LV is replaced with the
357       pmspare LV containing the corrected metadata.  The previous  thin  pool
358       metadata  LV, containing the damaged metadata, becomes visible with the
359       new name ThinPoolLV_tmetaN (where N is 0,1,...).
360
361       If the repair works, the thin pool LV and its thin  LVs  can  be  acti‐
362       vated,  and  the  LV  containing  the damaged thin pool metadata can be
363       removed.  It may be useful to move the new metadata LV (previously pms‐
364       pare) to a better PV.
365
366       If  the  repair  does  not  work, the thin pool LV and its thin LVs are
367       lost.
368
369       If metadata is manually restored with thin_repair  directly,  the  pool
370       metadata  LV  can  be  manually  swapped with another LV containing new
371       metadata:
372
373       lvconvert --thinpool VG/ThinPoolLV --poolmetadata VG/NewThinMetaLV
374
375
376
377   Activation of thin snapshots
378
379
380       When a thin snapshot LV is created, it is by default given the "activa‐
381       tion skip" flag.  This flag is indicated by the "k" attribute displayed
382       by lvs:
383
384       # lvs vg/thin1s1
385         LV         VG  Attr       LSize Pool  Origin
386         thin1s1    vg  Vwi---tz-k 1.00t pool0 thin1
387
388       This flag causes the snapshot LV to be skipped, i.e. not activated,  by
389       normal  activation  commands.   The skipping behavior does not apply to
390       deactivation commands.
391
392       A snapshot LV with the "k" attribute can be activated using the -K  (or
393       --ignoreactivationskip)  option  in  addition  to  the standard -ay (or
394       --activate y) option.
395
396       Command to activate a thin snapshot LV:
397       lvchange -ay -K VG/SnapLV
398
399       The persistent "activation skip" flag can be turned off  during  lvcre‐
400       ate,  or  later  with lvchange using the -kn (or --setactivationskip n)
401       option.  It can be turned on again with -ky (or --setactivationskip y).
402
403       When the "activation skip" flag is removed, normal activation  commands
404       will activate the LV, and the -K activation option is not needed.
405
406       Command to create snapshot LV without the activation skip flag:
407       lvcreate -kn -n SnapLV -s VG/ThinLV
408
409       Command to remove the activation skip flag from a snapshot LV:
410       lvchange -kn VG/SnapLV
411
412       lvm.conf(5) auto_set_activation_skip
413       controls the default activation skip setting used by lvcreate.
414
415
416
417   Removing thin pool LVs, thin LVs and snapshots
418
419
420       Removing a thin LV and its related snapshots returns the blocks it used
421       to the thin pool LV.  These blocks will be reused for  other  thin  LVs
422       and snapshots.
423
424       Removing  a  thin  pool LV removes both the data LV and metadata LV and
425       returns the space to the VG.
426
427       lvremove of thin pool LVs, thin LVs and snapshots  cannot  be  reversed
428       with vgcfgrestore.
429
430       vgcfgbackup does not back up thin pool metadata.
431
432
433
434   Manually manage free data space of thin pool LV
435
436
437       The  available  free  space in a thin pool LV can be displayed with the
438       lvs command.  Free space can be added by extending the thin pool LV.
439
440       Command to extend thin pool data space:
441       lvextend -L Size VG/ThinPoolLV
442
443       Example
444       1. A thin pool LV is using 26.96% of its data blocks.
445       # lvs
446         LV    VG           Attr       LSize   Pool  Origin Data%
447         pool0 vg           twi-a-tz--  10.00g               26.96
448
449       2. Double the amount of physical space in the thin pool LV.
450       # lvextend -L+10G vg/pool0
451
452       3. The percentage of used data blocks is half the previous value.
453       # lvs
454         LV    VG           Attr       LSize   Pool  Origin Data%
455         pool0 vg           twi-a-tz--  20.00g               13.48
456
457       Other methods of increasing free data space in a thin pool  LV  include
458       removing  a  thin LV and its related snapsots, or running fstrim on the
459       file system using a thin LV.
460
461
462
463   Manually manage free metadata space of a thin pool LV
464
465
466       The available metadata space in a thin pool LV can  be  displayed  with
467       the lvs -o+metadata_percent command.
468
469       Command to extend thin pool metadata space:
470       lvextend --poolmetadatasize Size VG/ThinPoolLV
471
472       Example
473       1. A thin pool LV is using 12.40% of its metadata blocks.
474       # lvs -oname,size,data_percent,metadata_percent vg/pool0
475         LV    LSize   Data%  Meta%
476         pool0  20.00g  13.48  12.40
477
478       2.  Display  a  thin  pool  LV with its component thin data LV and thin
479       metadata LV.
480       # lvs -a -oname,attr,size vg
481         LV              Attr       LSize
482         pool0           twi-a-tz--  20.00g
483         [pool0_tdata]   Twi-ao----  20.00g
484         [pool0_tmeta]   ewi-ao----  12.00m
485
486       3. Double the amount of physical space in the thin metadata LV.
487       # lvextend --poolmetadatasize +12M vg/pool0
488
489       4. The percentage of used metadata blocks is half the previous value.
490       # lvs -a -oname,size,data_percent,metadata_percent vg
491         LV              LSize   Data%  Meta%
492         pool0            20.00g  13.48   6.20
493         [pool0_tdata]    20.00g
494         [pool0_tmeta]    24.00m
495
496
497
498   Using fstrim to increase free space in a thin pool LV
499
500
501       Removing files in a file system on top of a thin LV does not  generally
502       add free space back to the thin pool.  Manually running the fstrim com‐
503       mand can return space back to the thin  pool  that  had  been  used  by
504       removed files.  fstrim uses discards and will not work if the thin pool
505       LV has discards mode set to ignore.
506
507       Example
508       A thin pool has 10G of physical data space, and a thin LV has a virtual
509       size  of  100G.   Writing a 1G file to the file system reduces the free
510       space in the thin pool by 10% and increases the virtual  usage  of  the
511       file system by 1%.  Removing the 1G file restores the virtual 1% to the
512       file system, but does not restore the physical 10% to  the  thin  pool.
513       The fstrim command restores the physical space to the thin pool.
514
515       # lvs -a -oname,attr,size,pool_lv,origin,data_percent,metadata_percent vg
516       LV              Attr       LSize   Pool  Origin Data%  Meta%
517       pool0           twi-a-tz--  10.00g               47.01  21.03
518       thin1           Vwi-aotz-- 100.00g pool0          2.70
519
520       # df -h /mnt/X
521       Filesystem            Size  Used Avail Use% Mounted on
522       /dev/mapper/vg-thin1   99G  1.1G   93G   2% /mnt/X
523
524       # dd if=/dev/zero of=/mnt/X/1Gfile bs=4096 count=262144; sync
525
526       # lvs
527       pool0           vg   twi-a-tz--  10.00g               57.01  25.26
528       thin1           vg   Vwi-aotz-- 100.00g pool0          3.70
529
530       # df -h /mnt/X
531       /dev/mapper/vg-thin1   99G  2.1G   92G   3% /mnt/X
532
533       # rm /mnt/X/1Gfile
534
535       # lvs
536       pool0           vg   twi-a-tz--  10.00g               57.01  25.26
537       thin1           vg   Vwi-aotz-- 100.00g pool0          3.70
538
539       # df -h /mnt/X
540       /dev/mapper/vg-thin1   99G  1.1G   93G   2% /mnt/X
541
542       # fstrim -v /mnt/X
543
544       # lvs
545       pool0           vg   twi-a-tz--  10.00g               47.01  21.03
546       thin1           vg   Vwi-aotz-- 100.00g pool0          2.70
547
548       The  "Discard"  section covers an option for automatically freeing data
549       space in a thin pool.
550
551
552
553   Automatically extend thin pool LV
554
555
556       The lvm daemon dmeventd (lvm2-monitor) monitors the data usage of  thin
557       pool  LVs and extends them when the usage reaches a certain level.  The
558       necessary free space must exist in the VG  to  extend  thin  pool  LVs.
559       Monitoring and extension of thin pool LVs are controlled independently.
560
561       monitoring
562
563       When  a thin pool LV is activated, dmeventd will begin monitoring it by
564       default.
565
566       Command to start or stop dmeventd monitoring a thin pool LV:
567       lvchange --monitor {y|n} VG/ThinPoolLV
568
569       The current dmeventd monitoring status of a thin pool LV  can  be  dis‐
570       played with the command lvs -o+seg_monitor.
571
572       autoextend
573
574       dmeventd  should  be configured to extend thin pool LVs before all data
575       space is used.  Warnings are emitted through syslog when the use  of  a
576       thin  pool reaches 80%, 85%, 90% and 95%.  (See the section "Data space
577       exhaustion" for the effects of not extending  a  thin  pool  LV.)   The
578       point  at which dmeventd extends thin pool LVs, and the amount are con‐
579       trolled with two configuration settings:
580
581       lvm.conf(5) thin_pool_autoextend_threshold
582       is a percentage full value that defines when the thin pool LV should be
583       extended.  Setting this to 100 disables automatic extention.  The mini‐
584       mum value is 50.
585
586       lvm.conf(5) thin_pool_autoextend_percent
587       defines how much extra data space should be added to the thin  pool  LV
588       from the VG, in percent of its current size.
589
590       disabling
591
592       There  are  multiple  ways  that  extension of thin pools could be pre‐
593       vented:
594
595
596       · If the dmeventd daemon is not running,  no  monitoring  or  automatic
597         extension will occur.
598
599
600       · Even  when  dmeventd  is running, all monitoring can be disabled with
601         the lvm.conf monitoring setting.
602
603
604       · To activate or  create  a  thin  pool  LV  without  interacting  with
605         dmeventd,  the  --ignoremonitoring  option  can  be  used.  With this
606         option, the command will not ask dmeventd to monitor  the  thin  pool
607         LV.
608
609
610       · Setting  thin_pool_autoextend_threshould  to  100  disables automatic
611         extension of thin pool LVs, even  if  they  are  being  monitored  by
612         dmeventd.
613
614
615       Example
616       If  thin_pool_autoextend_threshold  is 70 and thin_pool_autoextend_per‐
617       cent is 20, whenever a pool exceeds 70% usage, it will be  extended  by
618       another  20%.  For a 1G pool, using 700M will trigger a resize to 1.2G.
619       When the usage exceeds 840M, the pool will be extended to 1.44G, and so
620       on.
621
622
623
624   Data space exhaustion
625
626
627       When  properly  managed, thin pool data space should be extended before
628       it is all used (see the section "Automatically extend thin  pool  LV").
629       If  thin pool data space is already exhausted, it can still be extended
630       (see the section "Manually manage free data space of thin pool LV".)
631
632       The behavior of a full thin pool is configurable with the  --errorwhen‐
633       full  y|n  option  to  lvcreate or lvchange.  The errorwhenfull setting
634       applies only to writes; reading thin LVs can continue  even  when  data
635       space is exhausted.
636
637       Command to change the handling of a full thin pool:
638       lvchange --errorwhenfull {y|n} VG/ThinPoolLV
639
640       lvm.conf(5) error_when_full
641       controls the default error when full behavior.
642
643       The  current  setting  of a thin pool LV can be displayed with the com‐
644       mand: lvs -o+lv_when_full.
645
646       The errorwhenfull setting does not effect the monitoring and autoextend
647       settings,  and  the  monitoring/autoextend  settings  do not effect the
648       errorwhenfull setting.  It is only when monitoring/autoextend  are  not
649       effective that the thin pool becomes full and the errorwhenfull setting
650       is applied.
651
652       errorwhenfull n
653
654       This is the default.  Writes to thin LVs are accepted and queued,  with
655       the  expectation that pool data space will be extended soon.  Once data
656       space is extended, the queued writes will be processed,  and  the  thin
657       pool will return to normal operation.
658
659       While waiting to be extended, the thin pool will queue writes for up to
660       60 seconds (the default).  If data space has not  been  extended  after
661       this  time,  the queued writes will return an error to the caller, e.g.
662       the file system.  This can result in file system  corruption  for  non-
663       journaled  file  systems  that  may  require  repair.  When a thin pool
664       returns errors for writes to a thin LV, any file system is  subject  to
665       losing unsynced user data.
666
667       The  60 second timeout can be changed or disabled with the dm-thin-pool
668       kernel module option no_space_timeout.  This option sets the number  of
669       seconds  that  thin  pools will queue writes.  If set to 0, writes will
670       not time out.  Disabling timeouts can result in the system running  out
671       of resources, memory exhaustion, hung tasks, and deadlocks.  (The time‐
672       out applies to all thin pools on the system.)
673
674       errorwhenfull y
675
676       Writes to thin LVs immediately return  an  error,  and  no  writes  are
677       queued.   In  the  case of a file system, this can result in corruption
678       that may require fs repair (the specific  consequences  depend  on  the
679       thin LV user.)
680
681       data percent
682
683       When  data space is exhausted, the lvs command displays 100 under Data%
684       for the thin pool LV:
685
686       # lvs vg/pool0
687         LV     VG           Attr       LSize   Pool  Origin Data%
688         pool0  vg           twi-a-tz-- 512.00m              100.00
689
690       causes
691
692       A thin pool may run out of data space for any of the following reasons:
693
694
695       · Automatic extension of the thin pool is disabled, and the  thin  pool
696         is not manually extended.  (Disabling automatic extension is not rec‐
697         ommended.)
698
699
700       · The dmeventd daemon is not running and the thin pool is not  manually
701         extended.  (Disabling dmeventd is not recommended.)
702
703
704       · Automatic  extension  of  the thin pool is too slow given the rate of
705         writes to thin LVs in the pool.  (This can be addressed by tuning the
706         thin_pool_autoextend_threshold and thin_pool_autoextend_percent.  See
707         "Automatic extend settings".)
708
709
710       · The VG does not have enough free blocks to extend the thin pool.
711
712
713   Metadata space exhaustion
714
715
716       If thin pool metadata space is exhausted (or a thin pool metadata oper‐
717       ation fails), errors will be returned for IO operations on thin LVs.
718
719       When  metadata  space  is exhausted, the lvs command displays 100 under
720       Meta% for the thin pool LV:
721
722       # lvs -o lv_name,size,data_percent,metadata_percent vg/pool0
723         LV    LSize Data%  Meta%
724         pool0              100.00
725
726       The same reasons for thin pool data space exhaustion apply to thin pool
727       metadata space.
728
729       Metadata  space  exhaustion can lead to inconsistent thin pool metadata
730       and inconsistent file systems, so the response requires offline  check‐
731       ing and repair.
732
733       1.  Deactivate  the  thin  pool LV, or reboot the system if this is not
734       possible.
735
736       2. Repair thin pool with lvconvert --repair.
737          See "Metadata check and repair".
738
739       3. Extend pool metadata space with lvextend --poolmetadatasize.
740          See "Manually manage free metadata space of a thin pool LV".
741
742       4. Check and repair file system.
743
744
745
746   Automatic extend settings
747
748
749       Thin pool LVs can be extended according to preset values.  The  presets
750       determine  if the LV should be extended based on how full it is, and if
751       so by how much.  When dmeventd monitors thin pool LVs, it uses lvextend
752       with these presets.  (See "Automatically extend thin pool LV".)
753
754       Command to extend a thin pool data LV using presets:
755       lvextend --use-policies VG/ThinPoolLV
756
757       The command uses these settings:
758
759       lvm.conf(5) thin_pool_autoextend_threshold
760       autoextend the LV when its usage exceeds this percent.
761
762       lvm.conf(5) thin_pool_autoextend_percent
763       autoextend the LV by this much additional space.
764
765       To see the default values of these settings, run:
766
767       lvmconfig --type default --withcomment
768              activation/thin_pool_autoextend_threshold
769
770       lvmconfig --type default --withcomment
771              activation/thin_pool_autoextend_percent
772
773       To change these values globally, edit lvm.conf(5).
774
775       To  change these values on a per-VG or per-LV basis, attach a "profile"
776       to the VG or LV.  A profile is a collection of config  settings,  saved
777       in  a  local text file (using the lvm.conf format).  lvm looks for pro‐
778       files in  the  profile_dir  directory,  e.g.  /etc/lvm/profile/.   Once
779       attached  to  a  VG or LV, lvm will process the VG or LV using the set‐
780       tings from the attached profile.  A profile is named and referenced  by
781       its file name.
782
783       To use a profile to customize the lvextend settings for an LV:
784
785
786       · Create  a  file  containing  settings, saved in profile_dir.  For the
787         profile_dir location, run:
788         lvmconfig config/profile_dir
789
790
791       · Attach the profile to an LV, using the command:
792         lvchange --metadataprofile ProfileName VG/ThinPoolLV
793
794
795       · Extend the LV using the profile settings:
796         lvextend --use-policies VG/ThinPoolLV
797
798
799       Example
800       # lvmconfig config/profile_dir
801       profile_dir="/etc/lvm/profile"
802
803       # cat /etc/lvm/profile/pool0extend.profile
804       activation {
805               thin_pool_autoextend_threshold=50
806               thin_pool_autoextend_percent=10
807       }
808
809       # lvchange --metadataprofile pool0extend vg/pool0
810
811       # lvextend --use-policies vg/pool0
812
813       Notes
814
815       · A profile is attached to a VG or LV by name, where  the  name  refer‐
816         ences  a  local  file  in profile_dir.  If the VG is moved to another
817         machine, the file with the profile also needs to be moved.
818
819
820       · Only certain settings can be used in a VG or LV profile, see:
821         lvmconfig --type profilable-metadata.
822
823
824       · An LV without a profile of its own will inherit the VG profile.
825
826
827       · Remove a profile from an LV using the command:
828         lvchange --detachprofile VG/ThinPoolLV.
829
830
831       · Commands can also have profiles applied to them.  The  settings  that
832         can  be applied to a command are different than the settings that can
833         be applied to a VG or LV.  See lvmconfig  --type  profilable-command.
834         To apply a profile to a command, write a profile, save it in the pro‐
835         file directory, and run the command using the  option:  --commandpro‐
836         file ProfileName.
837
838
839
840   Zeroing
841
842
843       When  a  thin  pool  provisions a new data block for a thin LV, the new
844       block is first overwritten with zeros.  The zeroing mode  is  indicated
845       by  the  "z" attribute displayed by lvs.  The option -Z (or --zero) can
846       be added to commands to specify the zeroing mode.
847
848       Command to set the zeroing mode when creating a thin pool LV:
849       lvconvert --type thin-pool -Z{y|n}
850              --poolmetadata VG/ThinMetaLV VG/ThinDataLV
851
852       Command to change the zeroing mode of an existing thin pool LV:
853       lvchange -Z{y|n} VG/ThinPoolLV
854
855       If zeroing mode is changed from  "n"  to  "y",  previously  provisioned
856       blocks are not zeroed.
857
858       Provisioning of large zeroed chunks impacts performance.
859
860       lvm.conf(5) thin_pool_zero
861       controls the default zeroing mode used when creating a thin pool.
862
863
864
865   Discard
866
867
868       The  discard behavior of a thin pool LV determines how discard requests
869       are handled.  Enabling discard under a file system may adversely affect
870       the  file system performance (see the section on fstrim for an alterna‐
871       tive.)  Possible discard behaviors:
872
873       ignore: Ignore any discards that are received.
874
875       nopassdown: Process any discards in the thin pool itself and allow  the
876       no longer needed extents to be overwritten by new data.
877
878       passdown:  Process  discards in the thin pool (as with nopassdown), and
879       pass the discards down the the underlying device.  This is the  default
880       mode.
881
882       Command to display the current discard mode of a thin pool LV:
883       lvs -o+discards VG/ThinPoolLV
884
885       Command to set the discard mode when creating a thin pool LV:
886       lvconvert --discards {ignore|nopassdown|passdown}
887              --type thin-pool --poolmetadata VG/ThinMetaLV VG/ThinDataLV
888
889       Command to change the discard mode of an existing thin pool LV:
890       lvchange --discards {ignore|nopassdown|passdown} VG/ThinPoolLV
891
892       Example
893       # lvs -o name,discards vg/pool0
894       pool0 passdown
895
896       # lvchange --discards ignore vg/pool0
897
898       lvm.conf(5) thin_pool_discards
899       controls the default discards mode used when creating a thin pool.
900
901
902
903   Chunk size
904
905
906       The  size  of  data blocks managed by a thin pool can be specified with
907       the --chunksize option when the thin pool LV is created.   The  default
908       unit  is  KiB.  The value must be a multiple of 64KiB between 64KiB and
909       1GiB.
910
911       When a thin pool is used primarily for the thin provisioning feature, a
912       larger  value  is  optimal.   To optimize for many snapshots, a smaller
913       value reduces copying time and consumes less space.
914
915       Command to display the thin pool LV chunk size:
916       lvs -o+chunksize VG/ThinPoolLV
917
918       Example
919       # lvs -o name,chunksize
920         pool0 64.00k
921
922       lvm.conf(5) thin_pool_chunk_size
923       controls the default chunk size used when creating a thin pool.
924
925       The default value is shown by:
926       lvmconfig --type default allocation/thin_pool_chunk_size
927
928
929
930   Size of pool metadata LV
931
932
933       The amount of thin metadata depends  on  how  many  blocks  are  shared
934       between thin LVs (i.e. through snapshots).  A thin pool with many snap‐
935       shots may need a larger metadata LV.  Thin pool metadata LV  sizes  can
936       be from 2MiB to 16GiB.
937
938       When  using lvcreate to create what will become a thin metadata LV, the
939       size is specified with the -L--size option.
940
941       When an LVM command automatically creates a thin metadata LV, the  size
942       is  specified  with the --poolmetadatasize option.  When this option is
943       not given, LVM automatically chooses a size based on the data size  and
944       chunk size.
945
946       It  can  be  hard  to predict the amount of metadata space that will be
947       needed, so it is recommended to start with a size of 1GiB which  should
948       be  enough  for  all  practical  purposes.  A thin pool metadata LV can
949       later be manually or automatically extended if needed.
950
951
952
953   Create a thin snapshot of an external, read only LV
954
955
956       Thin snapshots are typically taken of other  thin  LVs  or  other  thin
957       snapshot  LVs  within  the same thin pool.  It is also possible to take
958       thin snapshots of external, read only LVs.  Writes to the snapshot  are
959       stored  in the thin pool, and the external LV is used to read unwritten
960       parts of the thin snapshot.
961
962       lvcreate -n SnapLV -s VG/ExternalOriginLV --thinpool VG/ThinPoolLV
963
964       Example
965       # lvchange -an vg/lve
966       # lvchange --permission r vg/lve
967       # lvcreate -n snaplve -s vg/lve --thinpool vg/pool0
968
969       # lvs vg/lve vg/snaplve
970         LV      VG  Attr       LSize  Pool  Origin Data%
971         lve     vg  ori------- 10.00g
972         snaplve vg  Vwi-a-tz-- 10.00g pool0 lve      0.00
973
974
975
976   Convert a standard LV to a thin LV with an external origin
977
978
979       A new thin LV can be created and given the name of an existing standard
980       LV.   At  the  same  time,  the existing LV is converted to a read only
981       external LV with a new name.  Unwritten portions of  the  thin  LV  are
982       read  from  the external LV.  The new name given to the existing LV can
983       be specified with --originname, otherwise the existing LV will be given
984       a default name, e.g. lvol#.
985
986       Convert ExampleLV into a read only external LV with the new name NewEx‐
987       ternalOriginLV, and create a new thin LV that  is  given  the  previous
988       name of ExampleLV.
989
990       lvconvert --type thin --thinpool VG/ThinPoolLV
991              --originname NewExternalOriginLV VG/ExampleLV
992
993       Example
994       # lvcreate -n lv_example -L 10G vg
995
996       # lvs
997         lv_example      vg          -wi-a-----  10.00g
998
999       # lvconvert --type thin --thinpool vg/pool0
1000                 --originname lv_external --thin vg/lv_example
1001
1002       # lvs
1003         LV              VG          Attr       LSize   Pool  Origin
1004         lv_example      vg          Vwi-a-tz--  10.00g pool0 lv_external
1005         lv_external     vg          ori-------  10.00g
1006
1007
1008
1009   Single step thin pool LV creation
1010
1011
1012       A  thin  pool  LV can be created with a single lvcreate command, rather
1013       than using lvconvert on existing LVs.  This one command creates a  thin
1014       data LV, a thin metadata LV, and combines the two into a thin pool LV.
1015
1016       lvcreate --type thin-pool -L LargeSize -n ThinPoolLV VG
1017
1018       Example
1019       # lvcreate --type thin-pool -L8M -n pool0 vg
1020
1021       # lvs vg/pool0
1022         LV    VG  Attr       LSize Pool Origin Data%
1023         pool0 vg  twi-a-tz-- 8.00m               0.00
1024
1025       # lvs -a
1026         pool0           vg          twi-a-tz--   8.00m
1027         [pool0_tdata]   vg          Twi-ao----   8.00m
1028         [pool0_tmeta]   vg          ewi-ao----   8.00m
1029
1030
1031
1032   Single step thin pool LV and thin LV creation
1033
1034
1035       A thin pool LV and a thin LV can be created with a single lvcreate com‐
1036       mand.  This one command creates a thin data LV,  a  thin  metadata  LV,
1037       combines  the two into a thin pool LV, and creates a thin LV in the new
1038       pool.
1039       -L LargeSize specifies the physical size of the thin pool LV.
1040       -V VirtualSize specifies the virtual size of the thin LV.
1041
1042       lvcreate --type thin -V VirtualSize -L LargeSize
1043              -n ThinLV --thinpool VG/ThinPoolLV
1044
1045       Equivalent to:
1046       lvcreate --type thin-pool -L LargeSize VG/ThinPoolLV
1047       lvcreate -n ThinLV -V VirtualSize --thinpool VG/ThinPoolLV
1048
1049       Example
1050       # lvcreate -L8M -V2G -n thin1 --thinpool vg/pool0
1051
1052       # lvs -a
1053         pool0           vg          twi-a-tz--   8.00m
1054         [pool0_tdata]   vg          Twi-ao----   8.00m
1055         [pool0_tmeta]   vg          ewi-ao----   8.00m
1056         thin1           vg          Vwi-a-tz--   2.00g pool0
1057
1058
1059
1060   Merge thin snapshots
1061
1062
1063       A thin snapshot can be merged into its origin thin LV using the  lvcon‐
1064       vert  --merge command.  The result of a snapshot merge is that the ori‐
1065       gin thin LV takes the content of the snapshot LV, and the  snapshot  LV
1066       is  removed.  Any content that was unique to the origin thin LV is lost
1067       after the merge.
1068
1069       Because a merge changes the content of an LV, it cannot be  done  while
1070       the  LVs are open, e.g. mounted.  If a merge is initiated while the LVs
1071       are open, the effect of the merge is delayed until the origin  thin  LV
1072       is next activated.
1073
1074       lvconvert --merge VG/SnapLV
1075
1076       Example
1077       # lvs vg
1078         LV      VG Attr       LSize   Pool  Origin
1079         pool0   vg twi-a-tz--  10.00g
1080         thin1   vg Vwi-a-tz-- 100.00g pool0
1081         thin1s1 vg Vwi-a-tz-k 100.00g pool0 thin1
1082
1083       # lvconvert --merge vg/thin1s1
1084
1085       # lvs vg
1086         LV      VG Attr       LSize   Pool  Origin
1087         pool0   vg twi-a-tz--  10.00g
1088         thin1   vg Vwi-a-tz-- 100.00g pool0
1089
1090       Example
1091       Delayed merging of open LVs.
1092
1093       # lvs vg
1094         LV      VG Attr       LSize   Pool  Origin
1095         pool0   vg twi-a-tz--  10.00g
1096         thin1   vg Vwi-aotz-- 100.00g pool0
1097         thin1s1 vg Vwi-aotz-k 100.00g pool0 thin1
1098
1099       # df
1100       /dev/mapper/vg-thin1            100G   33M  100G   1% /mnt/X
1101       /dev/mapper/vg-thin1s1          100G   33M  100G   1% /mnt/Xs
1102
1103       # ls /mnt/X
1104       file1 file2 file3
1105       # ls /mnt/Xs
1106       file3 file4 file5
1107
1108       # lvconvert --merge vg/thin1s1
1109       Logical volume vg/thin1s1 contains a filesystem in use.
1110       Delaying merge since snapshot is open.
1111       Merging of thin snapshot thin1s1 will occur on next activation.
1112
1113       # umount /mnt/X
1114       # umount /mnt/Xs
1115
1116       # lvs -a vg
1117         LV              VG   Attr       LSize   Pool  Origin
1118         pool0           vg   twi-a-tz--  10.00g
1119         [pool0_tdata]   vg   Twi-ao----  10.00g
1120         [pool0_tmeta]   vg   ewi-ao----   1.00g
1121         thin1           vg   Owi-a-tz-- 100.00g pool0
1122         [thin1s1]       vg   Swi-a-tz-k 100.00g pool0 thin1
1123
1124       # lvchange -an vg/thin1
1125       # lvchange -ay vg/thin1
1126
1127       # mount /dev/vg/thin1 /mnt/X
1128
1129       # ls /mnt/X
1130       file3 file4 file5
1131
1132
1133
1134   XFS on snapshots
1135
1136
1137       Mounting  an XFS file system on a new snapshot LV requires attention to
1138       the file system's log state and uuid.  On the snapshot LV, the xfs  log
1139       will  contain a dummy transaction, and the xfs uuid will match the uuid
1140       from the file system on the origin LV.
1141
1142       If the snapshot LV is writable, mounting will recover the log to  clear
1143       the dummy transaction, but will require skipping the uuid check:
1144
1145       mount /dev/VG/SnapLV /mnt -o nouuid
1146
1147       After  the  first  mount  with  the above approach, the UUID can subse‐
1148       quently be changed using:
1149
1150       xfs_admin -U generate /dev/VG/SnapLV
1151       mount /dev/VG/SnapLV /mnt
1152
1153       Once the UUID has been  changed,  the  mount  command  will  no  longer
1154       require the nouuid option.
1155
1156       If the snapshot LV is readonly, the log recovery and uuid check need to
1157       be skipped while mounting readonly:
1158
1159       mount /dev/VG/SnapLV /mnt -o ro,nouuid,norecovery
1160
1161

SEE ALSO

1163       lvm(8),   lvm.conf(5),   lvmconfig(8),    lvcreate(8),    lvconvert(8),
1164       lvchange(8),    lvextend(8),    lvremove(8),    lvs(8),   thin_dump(8),
1165       thin_repair(8) thin_restore(8)
1166
1167
1168
1169
1170Red Hat, Inc           LVM TOOLS 2.03.09(2) (2020-03-26)            LVMTHIN(7)
Impressum