Table of Contents

Setup LVMCache for monitor.zappa.cx with RAID-1 on SSD

Orig LV: monitor-disk F3_2TB -wi-ao---- 6.00g

SSD PV's has been added to F3_2TB VG and SSD tags has been added.

bigbang:~# pvs -o +tags
  PV                VG     Fmt  Attr PSize   PFree   PV Tags
  /dev/cciss/c0d0p2 F3_2TB lvm2 a--    1.79t 734.65g HDD    
  /dev/sdb1         F3_2TB lvm2 a--  400.00g 400.00g SSD    
  /dev/sdc1         F3_2TB lvm2 a--  400.00g 400.00g SSD    
bigbang:~# 

Create a 2-way RAID1 cache data LV (1GB)

bigbang:~# lvcreate --type raid1 -m 1 -n monitorCDLV -L 1G F3_2TB @SSD
  Logical volume "monitorCDLV" created.
bigbang:~# 

Create a 2-way RAID1 cache metadata LV (8MB minimum or 1000 times smaller than cache LV)

bigbang:~# lvcreate --type raid1 -m 1 -n monitorCMLV -L 8M F3_2TB @SSD
  Logical volume "monitorCMLV" created.
bigbang:~#

Create a cache pool LV combining cache data LV and cache metadata LV

bigbang:~# lvconvert --type cache-pool --poolmetadata F3_2TB/monitorCMLV F3_2TB/monitorCDLV
  WARNING: Converting logical volume F3_2TB/monitorCDLV and F3_2TB/monitorCMLV to cache pool's data and metadata volumes with metadata wiping.
  THIS WILL DESTROY CONTENT OF LOGICAL VOLUME (filesystem etc.)
Do you really want to convert F3_2TB/monitorCDLV and F3_2TB/monitorCMLV? [y/n]: y
  Converted F3_2TB/monitorCDLV to cache pool.
bigbang:~# 

Create a cached LV by combining the cache pool LV and origin LV

bigbang:~# lvconvert --type cache --cachepool F3_2TB/monitorCDLV F3_2TB/monitor-disk
Do you want wipe existing metadata of cache pool volume F3_2TB/monitorCDLV? [y/n]: y
  Logical volume F3_2TB/monitor-disk is now cached.
bigbang:~# 

Done

To change cache mode

bigbang:~# lvs -o +cachemode F3_2TB/monitor-disk 
  LV           VG     Attr       LSize Pool          Origin               Data%  Meta%  Move Log Cpy%Sync Convert CacheMode   
  monitor-disk F3_2TB Cwi-aoC--- 6.00g [monitorCDLV] [monitor-disk_corig] 13.33  1.90            0.00             writethrough
bigbang:~#
bigbang:~# lvchange --cachemode writeback F3_2TB/monitor-disk
  Logical volume F3_2TB/monitor-disk changed.
bigbang:~#
bigbang:~# lvs -o +cachemode F3_2TB/monitor-disk 
  LV           VG     Attr       LSize Pool          Origin               Data%  Meta%  Move Log Cpy%Sync Convert CacheMode
  monitor-disk F3_2TB Cwi-aoC--- 6.00g [monitorCDLV] [monitor-disk_corig] 13.37  2.83            5.02             writeback
bigbang:~#
bigbang:~# lvchange --cachemode writethrough F3_2TB/monitor-disk
  Flushing 107 blocks for cache F3_2TB/monitor-disk.
  Flushing 79 blocks for cache F3_2TB/monitor-disk.
  Logical volume F3_2TB/monitor-disk changed.
bigbang:~#
bigbang:~# lvs -o +cachemode F3_2TB/monitor-disk 
  LV           VG     Attr       LSize Pool          Origin               Data%  Meta%  Move Log Cpy%Sync Convert CacheMode   
  monitor-disk F3_2TB Cwi-aoC--- 6.00g [monitorCDLV] [monitor-disk_corig] 13.37  2.83            0.00             writethrough
bigbang:~# 

To remove cache

Make sure it is in writethrough - just to be safe. Also check that no blocks are dirty.

bigbang:~# lvconvert --uncache F3_2TB/monitor-disk
  Logical volume "monitorCDLV" successfully removed
  Logical volume F3_2TB/monitor-disk is not cached.
bigbang:~#

Setup LVMCache and ThinPool for caching multiple LV's with RAID-1 on SSD

Setting up ThinPool (size 500GB on the HW RAID-1 HDD and metadata on LVM mirrored SSD's)

Create 500GB LV for ThinPool0 on the HW raided HDD's

bigbang:~# lvcreate -n ThinPool0 -L 500G F3_2TB @HDD
  Logical volume "ThinPool0" created.
bigbang:~#

Create 1GB LV for ThinPool0_meta using LVM RAID-1 on the SSD's

bigbang:~# lvcreate --type raid1 -m 1 -n ThinPool0_meta -L 1G F3_2TB @SSD
  Logical volume "ThinPool0_meta" created.
bigbang:~#

Create the ThinPool0 by combining data data and metadata LV's

bigbang:~# lvconvert --type thin-pool --poolmetadata F3_2TB/ThinPool0_meta F3_2TB/ThinPool0
  Thin pool volume with chunk size 64.00 KiB can address at most 15.81 TiB of data.
  WARNING: Converting F3_2TB/ThinPool0 and F3_2TB/ThinPool0_meta to thin pool's data and metadata volumes with metadata wiping.
  THIS WILL DESTROY CONTENT OF LOGICAL VOLUME (filesystem etc.)
Do you really want to convert F3_2TB/ThinPool0 and F3_2TB/ThinPool0_meta? [y/n]: y
  Converted F3_2TB/ThinPool0 and F3_2TB/ThinPool0_meta to thin pool.
bigbang:~# 

ThinPool0 has now been created, LV's using it can be created like so

# lvcreate -n ThinLV -V VirtualSize --thinpool ThinPool0 F3_2TB

Snapshots are created without specifying the size as it is automatically using the data from the ThinPool0 LV for storing the difference.

# lvcreate -n ThinLV_s1 -s F3_2TB/ThinLV

Adding caching for the ThinPool0

Create a 2-way RAID1 cache data LV (50GB)

bigbang:~# lvcreate --type raid1 -m 1 -n ThinPool0_CDLV -L 50G F3_2TB @SSD
  Logical volume "ThinPool0_CDLV" created.
bigbang:~#

Create a 2-way RAID1 cache metadata LV (8MB minimum or 1000 times smaller than cache LV)

bigbang:~# lvcreate --type raid1 -m 1 -n ThinPool0_CMLV -L 50M F3_2TB @SSD
  Rounding up size to full physical extent 52.00 MiB
  Logical volume "ThinPool0_CMLV" created.
bigbang:~#

Create a writeback cached LV by combining the cache pool LV cache metadata and origin LV

bigbang:~# lvconvert --type cache --cachemode writeback --cachepool ThinPool0_CDLV --poolmetadata ThinPool0_CMLV F3_2TB/ThinPool0
  WARNING: Converting F3_2TB/ThinPool0_CDLV and F3_2TB/ThinPool0_CMLV to cache pool's data and metadata volumes with metadata wiping.
  THIS WILL DESTROY CONTENT OF LOGICAL VOLUME (filesystem etc.)
Do you really want to convert F3_2TB/ThinPool0_CDLV and F3_2TB/ThinPool0_CMLV? [y/n]: y
  Converted F3_2TB/ThinPool0_CDLV and F3_2TB/ThinPool0_CMLV to cache pool.
  WARNING: Cached thin pool's data cannot be currently resized and require manual uncache before resize!
  Logical volume F3_2TB/ThinPool0_tdata is now cached.
bigbang:~#

Removing cache from ThinPool0

Change to writethrough before separating cache pool from cache LV

bigbang:~# lvchange --cachemode writethrough F3_2TB/ThinPool0_tdata
  Flushing 0 blocks for cache F3_2TB/ThinPool0_tdata.
  Logical volume F3_2TB/ThinPool0_tdata changed.

Separate and keep the cache pool from a cache LV.

bigbang:~# lvconvert --splitcache F3_2TB/ThinPool0
  Logical volume F3_2TB/ThinPool0_tdata is not cached and cache pool F3_2TB/ThinPool0_CDLV is unused.

Attach cache LV to previously separated cache pool

bigbang:~# lvconvert --type cache --cachemode writeback --cachepool F3_2TB/ThinPool0_CDLV F3_2TB/ThinPool0
Do you want wipe existing metadata of cache pool F3_2TB/ThinPool0_CDLV? [y/n]: y
  WARNING: Cached thin pool's data cannot be currently resized and require manual uncache before resize!
  Logical volume F3_2TB/ThinPool0_tdata is now cached.

Extending size of ThinPool0

Remove caching from the thinpool

As it does not seem to be possible to extend a cached thinpool, we first need to remove the cache. Follow first two steps above from section “Removing cache from ThinPool0” (do not re-attach the cache of course)

Some - before information

bigbang:~# lvdisplay -a F3_2TB/ThinPool0_tdata
  --- Logical volume ---
  Internal LV Name       ThinPool0_tdata
  VG Name                F3_2TB
  LV UUID                Fyc9Md-c1XD-xpib-dJDw-Obr4-SYL5-G88yqS
  LV Write Access        read/write
  LV Creation host, time bigbang, 2019-10-12 14:17:30 +0200
  LV Cache pool name     ThinPool0_CDLV
  LV Cache origin name   ThinPool0_tdata_corig
  LV Status              available
  # open                 1
  LV Size                500.00 GiB
  Cache used blocks      99.99%
  Cache metadata blocks  18.54%
  Cache dirty blocks     0.00%
  Cache read hits/misses 644218163 / 453243621
  Cache wrt hits/misses  1046297083 / 31441523
  Cache demotions        1455727
  Cache promotions       1455727
  Current LE             128000
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:36
bigbang:~# lvchange --cachemode writethrough F3_2TB/ThinPool0_tdata
  Flushing 55 blocks for cache F3_2TB/ThinPool0_tdata.
  Logical volume F3_2TB/ThinPool0_tdata changed.
bigbang:~# lvconvert --splitcache F3_2TB/ThinPool0
  Logical volume F3_2TB/ThinPool0_tdata is not cached and cache pool F3_2TB/ThinPool0_CDLV is unused.

Now extend the ThinPool0 LV

bigbang:~# lvextend -L 1t F3_2TB/ThinPool0
  Size of logical volume F3_2TB/ThinPool0_tdata changed from 500.00 GiB (128000 extents) to 1.00 TiB (262144 extents).
  Logical volume F3_2TB/ThinPool0_tdata successfully resized.

And now reattach the cache

Do the last step from section “Removing cache from ThinPool0” to reattach the cache to the thinpool

bigbang:~# lvconvert --type cache --cachemode writeback --cachepool F3_2TB/ThinPool0_CDLV F3_2TB/ThinPool0
Do you want wipe existing metadata of cache pool F3_2TB/ThinPool0_CDLV? [y/n]: y
  WARNING: Cached thin pool's data cannot be currently resized and require manual uncache before resize!
  Logical volume F3_2TB/ThinPool0_tdata is now cached.

And some “after” information

bigbang:~# lvdisplay -a F3_2TB/ThinPool0_tdata
  --- Logical volume ---
  Internal LV Name       ThinPool0_tdata
  VG Name                F3_2TB
  LV UUID                Fyc9Md-c1XD-xpib-dJDw-Obr4-SYL5-G88yqS
  LV Write Access        read/write
  LV Creation host, time bigbang, 2019-10-12 14:17:30 +0200
  LV Cache pool name     ThinPool0_CDLV
  LV Cache origin name   ThinPool0_tdata_corig
  LV Status              available
  # open                 1
  LV Size                1.00 TiB
  Cache used blocks      0.13%
  Cache metadata blocks  12.46%
  Cache dirty blocks     10.12%
  Cache read hits/misses 0 / 36
  Cache wrt hits/misses  3663 / 1530
  Cache demotions        0
  Cache promotions       1067
  Current LE             262144
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:36