LVM: thin snapshot with external origin

LVM kan ’thin’ beschikbaar gesteld (’thin provisioning’) worden. Daarbij ligt slechts een beperkte hoeveelheid fysieke ruimte ten grondslag aan logische ruimte van willekeurige grootte. Pas als er daadwerkelijk data weggeschreven wordt, wordt de benodigde hoeveelheid fysieke ruimte toegewezen.

Thin provisioning kun je combineren met een read-only snapshot. Het logische volume heeft alle inhoud van het snapshot; wijzigingen daarop en nieuwe data worden in de gegevensruimte van het logische volume weggeschreven.

Een thin-LV waarbij op die manier een snapshot ingezet wordt, heet ‘thin LV with an external origin’.

Ik wil alle data-LV’s op de trage SMR-schijf read-only maken, en schrijven naar de snellere reguliere CMR-schijf. Ik moet trouwens zeggen: het systeem draait ondertussen al weken op de SMR-schijf met SSD-caching, zonder dat ik er veel van merk. Dan speelt vast mee dat alle partities tegen 100% bezet zijn, en ik zodoende bijna niets schrijf naar de schijf.

Als eerste test de partitie met video’s.

# lvs data/video
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
video data -wi-ao---- <1.09t

In de eerste instantie dacht ik dat een placeholder voor een thin pool aangemaakt zou worden bij het converteren, dat is niet het geval:

# lvconvert -tv --type thin --thinpool data/datalvpool --originname videoRO data/video
TEST MODE: Metadata will NOT be updated and volumes will not be (de)activated.
Thin pool videopool not found.

Aanmaken van de pool gaat goed in de test-modus:

# lvcreate -tv --type thin-pool -L 1T -n datalvpool data
TEST MODE: Metadata will NOT be updated and volumes will not be (de)activated.
Executing: /sbin/modprobe dm-thin-pool
Setting chunk size to 512.00 KiB.
Thin pool volume with chunk size 512.00 KiB can address at most 126.50 TiB of data.
Enabling pool zeroing on default.
WARNING: Pool zeroing and 512.00 KiB large chunk size slows down thin provisioning.
WARNING: Consider disabling zeroing (-Zn) or using smaller chunk size (<512.00 KiB).
Preferred pool metadata size 128.00 MiB.
Making pool datalvpool in VG data using segtype thin-pool
Test mode: Skipping archiving of volume group.
Creating logical volume datalvpool
Creating logical volume datalvpool_tmeta
Creating logical volume datalvpool_tdata
Test mode: Skipping backup of volume group.
Test mode: Skipping activation, zeroing and signature wiping.
Logical volume "datalvpool" created. 

Aansluitend ‘voor het echie’, ook OK:

# lvcreate -v --type thin-pool -L 1T -n datalvpool data
Setting chunk size to 512.00 KiB.
Thin pool volume with chunk size 512.00 KiB can address at most 126.50 TiB of data.
Enabling pool zeroing on default.
WARNING: Pool zeroing and 512.00 KiB large chunk size slows down thin provisioning.
WARNING: Consider disabling zeroing (-Zn) or using smaller chunk size (<512.00 KiB).
Preferred pool metadata size 128.00 MiB.
Making pool datalvpool in VG data using segtype thin-pool
Archiving volume group "data" metadata (seqno 17).
Creating logical volume datalvpool
activation/volume_list configuration setting not defined: Checking only host tags for data/datalvpool.
Creating data-datalvpool
Loading table for data-datalvpool (254:40).
Resuming data-datalvpool (254:40).
Initializing 4.00 KiB of logical volume "data/datalvpool" with value 0.
Removing data-datalvpool (254:40)
Creating logical volume datalvpool_tmeta
Creating logical volume datalvpool_tdata
Creating volume group backup "/etc/lvm/backup/data" (seqno 19).
Activating logical volume data/datalvpool.
activation/volume_list configuration setting not defined: Checking only host tags for data/datalvpool.
Creating data-datalvpool_tmeta
Loading table for data-datalvpool_tmeta (254:40).
Resuming data-datalvpool_tmeta (254:40).
Creating data-datalvpool_tdata
Loading table for data-datalvpool_tdata (254:41).
Resuming data-datalvpool_tdata (254:41).
Creating data-datalvpool
Loading table for data-datalvpool (254:42).
Resuming data-datalvpool (254:42).
Monitored LVM-OHMt6RDBp5VnJD9hQdjwYm5yfUSKWCDPGIvNwVRhR7YfVIYFwuZ3xiY1JNCe9fNw-tpool for events
Logical volume "datalvpool" created.

Testmodus van de conversie van video-LV-regulier naar video-LV-thin met extern RO-snapshot geeft een onverwachte waarschuwing:

# lvconvert -tv --type thin --thinpool data/datalvpool --originname videoRO data/video
TEST MODE: Metadata will NOT be updated and volumes will not be (de)activated.
Test mode: Skipping archiving of volume group.
activation/volume_list configuration setting not defined: Checking only host tags for data/datalvpool.
Deactivating public thin pool data/datalvpool.
Creating logical volume videoRO
WARNING: Sum of all thin volume sizes (<1.09 TiB) exceeds the size of thin pool data/datalvpool (1.00 TiB).
WARNING: You have not turned on protection against thin pools running out of space.
WARNING: Set activation/thin_pool_autoextend_threshold below 100 to trigger automatic extension of thin pools before they get full.
Test mode: Skipping backup of volume group.
Test mode: Skipping activation, zeroing and signature wiping.
Logical volume "videoRO" created.
Setting logical volume "data/videoRO" read-only.
Test mode: Skipping backup of volume group.

Wat me opvalt: ‘you have not turned on protection against thin pools running out of space’. Ik dacht dat er ‘sensible’ defaults gemaakt zouden zijn, zodat een overprovisioned (meer beloofd dan beschikbaar) thin LV ‘vanzelf’ goed zou gaan. De waarschuwing over 100% hint dat ik moet aangeven dat bijvoorbeeld bij 90% ruimte in gebruik, er 5% toegevoegd wordt aan datalvpool, uit VG data.

Ik realiseer me nu ook dat ik niet heb aangegeven dat datalvpool aangemaakt moet worden op de juiste schijf, dus dat doe ik opnieuw. Data op de ‘WD Red’ sde, metadata op SSD sdb. Het blijkt vanzelf al bijna goedgegaan:

# lvs -a
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
datalvpool data twi-a-tz-- 1.00t 0.00 10.42
[datalvpool_tdata] data Twi-ao---- 1.00t
[datalvpool_tmeta] data ewi-ao---- 128.00m
[lvol0_pmspare] data ewi------- 128.00m
# # VG, LV en PV: 
# vgs -a -o vg_name,lv_name,devices data|grep lv
data datalvpool datalvpool_tdata(0)
data [lvol0_pmspare] /dev/sda1(707573)
data [datalvpool_tmeta] /dev/sdd4(12288)
data [datalvpool_tdata] /dev/sde1(0)

Een actieve LV kan niet verwijderd worden, dus eerst deactiveren, daarna verwijderen:

# lvchange -an data/datalvpool
# lvremove data/datalvpool
Logical volume "datalvpool" successfully removed

Nu opnieuw aanmaken, met de PV’s die ik in gedachten heb. Daarvoor moeten de onderliggende LV’s (meta en data) voor de thin LV separaat aangemaakt worden en geconverteerd naar een thin LV. Er is vast een alles-in-een commando voor, maar die heb ik niet zo snel herkend.

# pvs /dev/sde*
Failed to find device for physical volume "/dev/sde".
PV VG Fmt Attr PSize PFree
/dev/sde1 data lvm2 a-- <2.00t <2.00t
/dev/sde2 homes lvm2 a-- <1024.00g <1024.00g
/dev/sde3 infra lvm2 a-- <2.00t <2.00t
/dev/sde4 system lvm2 a-- <100.00g 49.07g
# vgs data
VG #PV #LV #SN Attr VSize VFree
data 7 8 0 wz--n- 7.31t <2.42t
# pvs /dev/sdb*
Failed to find device for physical volume "/dev/sdb".
Failed to find physical volume "/dev/sdb1".
PV VG Fmt Attr PSize PFree
/dev/sdb2 system lvm2 a-- <30.00g <5.68g
/dev/sdb3 homes lvm2 a-- <20.00g <12.90g
/dev/sdb4 data lvm2 a-- <48.00g <7.90g
# lvcreate -n datalvpooltdata -L 1t data /dev/sde1
Logical volume "datalvpooltdata" created.
# lvcreate -n datalvpooltmeta -L 255m data /dev/sdb4
Rounding up size to full physical extent 256.00 MiB
Logical volume "datalvpooltmeta" created.
# lvconvert -tv --type thin-pool --poolmetadata data/datalvpooltmeta data/datalvpooltdata
TEST MODE: Metadata will NOT be updated and volumes will not be (de)activated.
Setting chunk size 256.00 KiB.
Thin pool volume with chunk size 256.00 KiB can address at most 63.25 TiB of data.
Enabling pool zeroing on default.
Preferred pool metadata size 256.00 MiB.
Pool metadata extents 64 chunk_size 512
WARNING: Converting data/datalvpooltdata and data/datalvpooltmeta 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 data/datalvpooltdata and data/datalvpooltmeta? [y/n]: y
Accepted input: [y]
Test mode: Skipping archiving of volume group.
activation/volume_list configuration setting not defined: Checking only host tags for data/datalvpooltmeta.
Initializing 4.00 KiB of logical volume "data/datalvpooltmeta" with value 0.
Creating logical volume datalvpooltdata
Activation of logical volume data/datalvpooltdata is prohibited while logical volume data/datalvpooltdata_tmeta is active.
Failed to activate pool logical volume data/datalvpooltdata.
Test mode: Skipping backup of volume group.
# lvchange -an data/datalvpooltdata_tmeta
Failed to find logical volume "data/datalvpooltdata_tmeta"
# lvchange -an data/datalvpooltdata
# lvchange -an data/datalvpooltmeta
# lvconvert -tv --type thin-pool --poolmetadata data/datalvpooltmeta data/datalvpooltdata
TEST MODE: Metadata will NOT be updated and volumes will not be (de)activated.
Setting chunk size 256.00 KiB.
Thin pool volume with chunk size 256.00 KiB can address at most 63.25 TiB of data.
Enabling pool zeroing on default.
Preferred pool metadata size 256.00 MiB.
Pool metadata extents 64 chunk_size 512
WARNING: Converting data/datalvpooltdata and data/datalvpooltmeta 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 data/datalvpooltdata and data/datalvpooltmeta? [y/n]: y
Accepted input: [y]
Test mode: Skipping archiving of volume group.
activation/volume_list configuration setting not defined: Checking only host tags for data/datalvpooltmeta.
Volume "data/datalvpooltmeta" is not active locally (volume_list activation filter?).
Aborting. Failed to wipe metadata lv.
# lvchange -ay data/datalvpooltmeta
# lvconvert -tv --type thin-pool --poolmetadata data/datalvpooltmeta data/datalvpooltdata
TEST MODE: Metadata will NOT be updated and volumes will not be (de)activated.
Setting chunk size 256.00 KiB.
Thin pool volume with chunk size 256.00 KiB can address at most 63.25 TiB of data.
Enabling pool zeroing on default.
Preferred pool metadata size 256.00 MiB.
Pool metadata extents 64 chunk_size 512
WARNING: Converting data/datalvpooltdata and data/datalvpooltmeta 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 data/datalvpooltdata and data/datalvpooltmeta? [y/n]: y
Accepted input: [y]
Test mode: Skipping archiving of volume group.
activation/volume_list configuration setting not defined: Checking only host tags for data/datalvpooltmeta.
Initializing 4.00 KiB of logical volume "data/datalvpooltmeta" with value 0.
Creating logical volume datalvpooltdata
Test mode: Skipping backup of volume group.
Converted data/datalvpooltdata and data/datalvpooltmeta to thin pool.

Anders dan in de documentatie, klaagt lvconvert in testmodus dat de LV actief is. Na ze allebei inactief gemaakt te hebben, blijkt meta juist wel actief te moeten zijn en enkel data moet inactief zijn. Ik vroeg me af of dat enkel voor de testmodus gold, en heb de data-LV ook weer actief gemaakt voor ik de conversie uitvoerde. Het blijkt een verschil tusses de test- en werkelijke modus te zijn, want nu wordt het wel uitgevoerd. Voorafgaand aan de conversie en aansluitend daaraan doe ik een opsomming van de LV’s om het verschil te bekijken:

# lvs -a data
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
datalvpooltdata data -wi------- 1.00t
datalvpooltmeta data -wi-a----- 256.00m
[lvol0_pmspare] data ewi------- 128.00m
# lvchange -ay data/datalvpooltdata
# lvconvert -v --type thin-pool --poolmetadata data/datalvpooltmeta data/datalvpooltdata
Setting chunk size 256.00 KiB.
Thin pool volume with chunk size 256.00 KiB can address at most 63.25 TiB of data.
Enabling pool zeroing on default.
Preferred pool metadata size 256.00 MiB.
Pool metadata extents 64 chunk_size 512
WARNING: Converting data/datalvpooltdata and data/datalvpooltmeta 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 data/datalvpooltdata and data/datalvpooltmeta? [y/n]: y
Accepted input: [y]
Removing data-datalvpooltmeta (254:40)
Archiving volume group "data" metadata (seqno 22).
activation/volume_list configuration setting not defined: Checking only host tags for data/datalvpooltmeta.
Creating data-datalvpooltmeta
Loading table for data-datalvpooltmeta (254:40).
Resuming data-datalvpooltmeta (254:40).
Initializing 4.00 KiB of logical volume "data/datalvpooltmeta" with value 0.
Removing data-datalvpooltmeta (254:40)
Removing data-datalvpooltdata (254:41)
Creating logical volume datalvpooltdata
activation/volume_list configuration setting not defined: Checking only host tags for data/datalvpooltdata.
Creating data-datalvpooltdata_tmeta
Loading table for data-datalvpooltdata_tmeta (254:40).
Resuming data-datalvpooltdata_tmeta (254:40).
Creating data-datalvpooltdata_tdata
Loading table for data-datalvpooltdata_tdata (254:41).
Resuming data-datalvpooltdata_tdata (254:41).
Creating data-datalvpooltdata
Loading table for data-datalvpooltdata (254:42).
Resuming data-datalvpooltdata (254:42).
Monitored LVM-OHMt6RDBp5VnJD9hQdjwYm5yfUSKWCDPonYy5uF9vqMtqiiYilhdeQZrmjXlo518-tpool for events
Creating volume group backup "/etc/lvm/backup/data" (seqno 23).
Converted data/datalvpooltdata and data/datalvpooltmeta to thin pool.
# lvs -a data
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
datalvpooltdata data twi-a-tz-- 1.00t 0.00 6.67
[datalvpooltdata_tdata] data Twi-ao---- 1.00t
[datalvpooltdata_tmeta] data ewi-ao---- 256.00m
[lvol0_pmspare] data ewi------- 256.00m

Nu is de naam nog niet wat ik wil. De oorspronkelijke naam van de meta-LV wordt overschreven met de naam van de data-LV, die twee krijgen toevoegingen _dmeta en _tdata, respectievelijk, en de resulterende thin LV pool krijgt de oorspronkelijke naam van de data-LV. Om de naam te krijgen die ik wil:

  • verwijder de thin LV pool
  • controleer of de onderliggende meta- en data-LV weer reguliere LV’s zijn
  • hernoem de data-LV
  • doe de conversie opnieuw
# lvremove data/datalvpooltdata
Do you really want to remove active logical volume data/datalvpooltdata? [y/n]: y
Logical volume "datalvpooltdata" successfully removed
# lvs -a data
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
archief data -wi-ao---- 800.00g
[cache_fotos] data Cwi---C--- 48.00g 2.82 9.16 0.00
[cache_fotos_cdata] data Cwi-ao---- 48.00g
[cache_fotos_cmeta] data ewi-ao---- 100.00m
fotos data Cwi-aoC--- 2.68t [cache_fotos] [fotos_corig] 2.82 9.16 0.00
[fotos_corig] data owi-aoC--- 2.68t
geluid data -wi-ao---- 16.56g
[lvol0_pmspare] data ewi------- 256.00m
muziekNR data -wi-ao---- 150.00g
pubNR data -wi-ao---- 8.00g
rom data -wi-ao---- 90.00g
ssdata data -wi-ao---- 40.00g
video data -wi-ao---- <1.09t

Opnieuw een verrassing: de onderliggende LV’s zijn meteen opgeruimd. Goed om te onthouden, ergens wel logisch: zonder de overkoepelende structuur heeft de meta-LV niet meer met de data-LV te maken, en zonder de metadata is de data niet meer te interpeteren (de fysieke sectoren worden niet lineair aan de thin LV’s toegewezen, dus alles staat door elkaar). Het staat ook zo in de handleiding: “Removing a thin pool LV removes both the data LV and metadata LV and returns the space to the VG.”

De naam van de meta-LV wordt overschreven, daar hergebruik ik het vorige commando. De naam van de data-LV wordt datatlvpool, voor (VG) data, thin logical volume pool.

# lvcreate -n datalvpooltmeta -L 255m data /dev/sdb4
Rounding up size to full physical extent 256.00 MiB
Logical volume "datalvpooltmeta" created.
# lvcreate -n datatlvpool -L 0.4t data /dev/sde1
Rounding up size to full physical extent 409.60 GiB
Logical volume "datatlvpool" created.
# lvconvert --type thin-pool --poolmetadata data/datalvpooltmeta data/datatlvpool
Thin pool volume with chunk size 384.00 KiB can address at most <94.88 TiB of data.
WARNING: Converting data/datatlvpool and data/datalvpooltmeta 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 data/datatlvpool and data/datalvpooltmeta? [y/n]: yes
Converted data/datatlvpool and data/datalvpooltmeta to thin pool.
# lvs -a
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
datatlvpool data twi-a-t--- 409.60g 0.00 6.59
[datatlvpool_tdata] data Twi-ao---- 409.60g
[datatlvpool_tmeta] data ewi-ao---- 256.00m
[lvol0_pmspare] data ewi------- 256.00m

Ik wijs bij nader inzien minder ruimte toe aan de data-LV: groter maken gebeurt automatisch, maar kleiner maken wordt niet ondersteund.

  • Foto’s: minder dan 50GB/maand, dus zo’n 500GB/jaar
  • Films/video: enkele GB/maand, minder dan 100GB/jaar
  • 400GB zou toereikend zijn voor ruim een half jaar

Ergens onderweg is lvol0_pmspare verdubbeld in grootte, voor de rest staat de basis hiermee. Nu de lvm.conf instellingen nalopen en de conversie van de LV’s op /dev/sda* naar extern origine uitvoeren.

# cat /etc/lvm/lvm.conf|grep autoextend    
    snapshot_autoextend_threshold = 100
    snapshot_autoextend_percent = 20
    thin_pool_autoextend_threshold = 100
    thin_pool_autoextend_percent = 20
    vdo_pool_autoextend_threshold = 100

Daarmee (treshold = 100) wordt nooit automatisch extra ruimte toegewezen, aanpassen dus! Ik zet de threshold op 95%, en het percentage waarmee dan de thin pool vergroot wordt op 10%.

Eerste test voor daadwerkelijk gebruik van thin LV met extern snapshot:

# umount /home/wbk/sounds 
# vgchange -an data/geluid
  Invalid volume group name data/geluid.
  Run `vgchange --help' for more information.
# lvchange -an data/geluid
# lvcreate -vt --type thin --thinpool datatlvpool -n geluidRW data/geluid
  TEST MODE: Metadata will NOT be updated and volumes will not be (de)activated.
    Making thin LV geluidRW in pool datatlvpool in VG data using segtype thin.
    activation/volume_list configuration setting not defined: Checking only host tags for data/datatlvpool.
    Deactivating public thin pool data/datatlvpool.
  Cannot use writable LV as the external origin.
# lvchange --permission r data/geluid
  Logical volume data/geluid changed.
# lvcreate -vt --type thin --thinpool datatlvpool -n geluidRW data/geluid
  TEST MODE: Metadata will NOT be updated and volumes will not be (de)activated.
    Making thin LV geluidRW in pool datatlvpool in VG data using segtype thin.
    activation/volume_list configuration setting not defined: Checking only host tags for data/datatlvpool.
    Deactivating public thin pool data/datatlvpool.
    Test mode: Skipping archiving of volume group.
    Creating logical volume geluidRW
    Test mode: Skipping backup of volume group.
    Test mode: Skipping activation, zeroing and signature wiping.
  Logical volume "geluidRW" created.
# lvcreate -v --type thin --thinpool datatlvpool -n geluidRW data/geluid
    Making thin LV geluidRW in pool datatlvpool in VG data using segtype thin.
    activation/volume_list configuration setting not defined: Checking only host tags for data/datatlvpool.
    Deactivating public thin pool data/datatlvpool.
    Not monitoring data/datatlvpool with libdevmapper-event-lvm2thin.so
    Unmonitored LVM-OHMt6RDBp5VnJD9hQdjwYm5yfUSKWCDPezYY3rnhKDVAyfaQI76PcSbAdHdkZYu0-tpool for events
    Removing data-datatlvpool (254:42)
    Executing: /usr/sbin/thin_check -q /dev/mapper/data-datatlvpool_tmeta
    Removing data-datatlvpool_tdata (254:41)
    Removing data-datatlvpool_tmeta (254:40)
    Archiving volume group "data" metadata (seqno 34).
    Creating logical volume geluidRW
    Creating volume group backup "/etc/lvm/backup/data" (seqno 35).
    activation/volume_list configuration setting not defined: Checking only host tags for data/datatlvpool.
    Creating data-datatlvpool_tmeta
    Loading table for data-datatlvpool_tmeta (254:33).
    Resuming data-datatlvpool_tmeta (254:33).
    Creating data-datatlvpool_tdata
    Loading table for data-datatlvpool_tdata (254:40).
    Resuming data-datatlvpool_tdata (254:40).
    Executing: /usr/sbin/thin_check -q /dev/mapper/data-datatlvpool_tmeta
    Creating data-datatlvpool-tpool
    Loading table for data-datatlvpool-tpool (254:41).
    Resuming data-datatlvpool-tpool (254:41).
    Creating data-datatlvpool
    Loading table for data-datatlvpool (254:42).
    Resuming data-datatlvpool (254:42).
    Monitored LVM-OHMt6RDBp5VnJD9hQdjwYm5yfUSKWCDPezYY3rnhKDVAyfaQI76PcSbAdHdkZYu0-tpool for events
    Loading table for data-datatlvpool_tdata (254:40).
    Suppressed data-datatlvpool_tdata (254:40) identical table reload.
    Loading table for data-datatlvpool_tmeta (254:33).
    Suppressed data-datatlvpool_tmeta (254:33) identical table reload.
    Loading table for data-datatlvpool-tpool (254:41).
    Suppressed data-datatlvpool-tpool (254:41) identical table reload.
    Creating volume group backup "/etc/lvm/backup/data" (seqno 36).
    Activating logical volume data/geluidRW.
    activation/volume_list configuration setting not defined: Checking only host tags for data/geluidRW.
    Loading table for data-datatlvpool_tdata (254:40).
    Suppressed data-datatlvpool_tdata (254:40) identical table reload.
    Loading table for data-datatlvpool_tmeta (254:33).
    Suppressed data-datatlvpool_tmeta (254:33) identical table reload.
    Loading table for data-datatlvpool-tpool (254:41).
    Suppressed data-datatlvpool-tpool (254:41) identical table reload.
    Creating data-geluid-real
    Loading table for data-geluid-real (254:43).
    Resuming data-geluid-real (254:43).
    Creating data-geluidRW
    Loading table for data-geluidRW (254:44).
    Resuming data-geluidRW (254:44).
    data/datatlvpool already monitored.
  Logical volume "geluidRW" created.
root@fractal:/var/log# lvs data/geluid data/geluidRW
  LV       VG   Attr       LSize  Pool        Origin Data%  Meta%  Move Log Cpy%Sync Convert
  geluid   data ori------- 16.56g                                                           
  geluidRW data Vwi-a-t--- 16.56g datatlvpool geluid 0.00     

Dat ziet er goed uit. Wel weer een verrassing: bij het aankoppelen van geluidRW gebeurt er ‘niets’. Na wat puzzelen, lijkt er een mismatch te zijn tussen LVM-partities in /dev/mapper en de namen die lvs teruggeeft:

# mount /dev/mapper/data-geluidRW /home/wbk/sounds -o users
# ls /home/wbk/sounds/
# mount /dev/mapper/data-geluid /home/wbk/sounds -o users
mount: /home/wbk/sounds: special device /dev/mapper/data-geluid does not exist.
# ls /dev/mapper/data-gel*
/dev/mapper/data-geluid-real  /dev/mapper/data-geluidRW
# mount /dev/mapper/data-geluid-real /home/wbk/sounds -o users
mount: /home/wbk/sounds: /dev/mapper/data-geluid-real already mounted or mount point busy.
# partprobe
# lvscan -a |grep geluid
  inactive          '/dev/data/geluid' [16.56 GiB] inherit
  ACTIVE            '/dev/data/geluidRW' [16.56 GiB] inherit
# lsof|grep geluid
#

Bij het maken van de thin LV zijn er twee LV’s gemaakt: data-geluid-real en data-geluidRW, maar ik zie niets over data-geluid zelf. Misschien dat er een restart van een of ander proces nodig is. LVM2 kan ik niet zomaar restarten, ik probeer het met een reboot. Om tijdens het booten problemen te voorkomen, zet ik /dev/mapper/data-geluid in /etc/fstab in commentaar, en bij voorbaat veel van de overige data-LV’s.

… een reboot later …

@ ls /dev/mapper/data-gel*
/dev/mapper/data-geluid  /dev/mapper/data-geluid-real  /dev/mapper/data-geluidRW
# lvs -a |grep geluid
  geluid              data   ori-a-----  16.56g                                                                    
  geluidRW            data   Vwi-a-t---  16.56g datatlvpool   geluid        0.01                                   
# mount /dev/mapper/data-geluidRW /home/wbk/sounds -o users
# ls /home/wbk/sounds/
 20000101025420.amr   20080922191656.amr   20090324192216.amr   20111231180403.amr

Phew, ziet er nu wel goed uit. Het ‘-real’-record zie ik in lvs -a niet terug, Wel in /dev/mapper/ en met dmsetup:

# ls -l /dev/mapper/* |grep gelu   
lrwxrwxrwx 1 root root       8 Jan  2 11:35 /dev/mapper/data-geluid -> ../dm-34
lrwxrwxrwx 1 root root       8 Jan  2 11:35 /dev/mapper/data-geluid-real -> ../dm-33
lrwxrwxrwx 1 root root       8 Jan  2 11:35 /dev/mapper/data-geluidRW -> ../dm-45
# dmsetup ls --tree
....
data-geluidRW (254:45)
 ├─data-datatlvpool-tpool (254:43)
 │  ├─data-datatlvpool_tdata (254:42)
 │  │  └─ (8:65)
 │  └─data-datatlvpool_tmeta (254:41)
 │     └─ (8:20)
 └─data-geluid-real (254:33)
    └─ (8:1)
data-geluid (254:34)
 └─data-geluid-real (254:33)
    └─ (8:1)
....

Bij het schrijven naar de aangekoppelde partitie, als gebruiker, laat iostat zien dat er (inderdaad) naar de PV van de thin LV geschreven wordt, dus naar sde1 en niet naar sda*:

$ dd if=/dev/urandom of=bestand bs=1M count=4512
dd: error writing 'bestand': No space left on device
4469+0 records in
4468+0 records out
4685910016 bytes (4.7 GB, 4.4 GiB) copied, 29.7742 s, 157 MB/s
$ df -hT .
Filesystem                Type  Size  Used Avail Use% Mounted on
/dev/mapper/data-geluidRW ext4   17G   16G     0 100% /home/wbk/sounds
$ ls -hls bestand
4.4G -rw-r--r-- 1 wbk fam 4.4G Jan  2 14:23 bestand

# iostat -hd 3 /dev/sda[1239] /dev/sdb4 /dev/sdb4 /dev/sdd4 /dev/sde1
      tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn Device
     3.00         1.3k        26.7k       4.0k      80.0k sdb4
     0.00         0.0k         0.0k       0.0k       0.0k sda1
     0.00         0.0k         0.0k       0.0k       0.0k sda2
     0.00         0.0k         0.0k       0.0k       0.0k sda3
     0.00         0.0k         0.0k       0.0k       0.0k sda9
     0.00         0.0k         0.0k       0.0k       0.0k sdd4
   136.00         0.0k       169.4M       0.0k     508.2M sde1

$ df -T .
Filesystem                Type 1K-blocks     Used Available Use% Mounted on
/dev/mapper/data-geluidRW ext4  16962388 16077652         0 100% /home/wbk/sounds
# lvs -a data 
  LV                  VG   Attr       LSize   Pool        Origin     Data% Meta% 
  datatlvpool         data twi-aot--- 409.60g                        1.19  7.07                            
  [datatlvpool_tdata] data Twi-ao---- 409.60g                                                                    
  [datatlvpool_tmeta] data ewi-ao---- 256.00m                                                                   
  geluid              data ori-a-----  16.56g                                                                    
  geluidRW            data Vwi-aot---  16.56g datatlvpool geluid     29.48               

Ook hier weer een verrassing: de thin LV ‘geluidRW’ is maar voor <30% gevuld, terwijl het bestandssysteem op de partitie voor 100% gevuld is. Ik probeer wat er gebeurt als ik thin LV geluidRW vergroot met 4GB:

# lvextend -tvr -L+4G data/geluidRW /dev/sde1
  TEST MODE: Metadata will NOT be updated and volumes will not be (de)activated.
    Executing: /sbin/fsadm --dry-run --verbose check /dev/data/geluidRW
fsadm: "ext4" filesystem found on "/dev/mapper/data-geluidRW".
fsadm: Skipping filesystem check for device "/dev/mapper/data-geluidRW" as the filesystem is mounted on /home/wbk/sounds
    /sbin/fsadm failed: 3
    Test mode: Skipping archiving of volume group.
    Extending logical volume data/geluidRW to 20.56 GiB
  Size of logical volume data/geluidRW changed from 16.56 GiB (4240 extents) to 20.56 GiB (5264 extents).
    Test mode: Skipping backup of volume group.
  Logical volume data/geluidRW successfully resized.
    Executing: /sbin/fsadm --dry-run --verbose resize /dev/data/geluidRW 21561344K
fsadm: "ext4" filesystem found on "/dev/mapper/data-geluidRW".
fsadm: Device "/dev/mapper/data-geluidRW" size is 17783848960 bytes
fsadm: Parsing tune2fs -l "/dev/mapper/data-geluidRW"
fsadm: Resizing filesystem on device "/dev/mapper/data-geluidRW" to 22078816256 bytes (4341760 -> 5390336 blocks of 4096 bytes)
fsadm: Dry execution resize2fs /dev/mapper/data-geluidRW 5390336
# lvextend -vr -L+4G data/geluidRW /dev/sde1
    Executing: /sbin/fsadm --verbose check /dev/data/geluidRW
fsadm: "ext4" filesystem found on "/dev/mapper/data-geluidRW".
fsadm: Skipping filesystem check for device "/dev/mapper/data-geluidRW" as the filesystem is mounted on /home/wbk/sounds
    /sbin/fsadm failed: 3
    Archiving volume group "data" metadata (seqno 36).
    Extending logical volume data/geluidRW to 20.56 GiB
  Size of logical volume data/geluidRW changed from 16.56 GiB (4240 extents) to 20.56 GiB (5264 extents).
    Loading table for data-datatlvpool_tdata (254:42).
    Suppressed data-datatlvpool_tdata (254:42) identical table reload.
    Loading table for data-datatlvpool_tmeta (254:41).
    Suppressed data-datatlvpool_tmeta (254:41) identical table reload.
    Loading table for data-datatlvpool-tpool (254:43).
    Suppressed data-datatlvpool-tpool (254:43) identical table reload.
    Loading table for data-geluid-real (254:33).
    Suppressed data-geluid-real (254:33) identical table reload.
    Loading table for data-geluidRW (254:45).
    Loading table for data-geluid-real (254:33).
    Suppressed data-geluid-real (254:33) identical table reload.
    Loading table for data-geluid (254:34).
    Suppressed data-geluid (254:34) identical table reload.
    Not monitoring data/datatlvpool with libdevmapper-event-lvm2thin.so
    Unmonitored LVM-OHMt6RDBp5VnJD9hQdjwYm5yfUSKWCDPezYY3rnhKDVAyfaQI76PcSbAdHdkZYu0-tpool for events
    Suspending data-geluidRW (254:45)
    Suspending data-datatlvpool-tpool (254:43)
    Suspending data-geluid-real (254:33)
    Suspending data-datatlvpool_tdata (254:42)
    Suspending data-datatlvpool_tmeta (254:41)
    Loading table for data-datatlvpool_tdata (254:42).
    Suppressed data-datatlvpool_tdata (254:42) identical table reload.
    Loading table for data-datatlvpool_tmeta (254:41).
    Suppressed data-datatlvpool_tmeta (254:41) identical table reload.
    Loading table for data-datatlvpool-tpool (254:43).
    Suppressed data-datatlvpool-tpool (254:43) identical table reload.
    Loading table for data-geluid-real (254:33).
    Suppressed data-geluid-real (254:33) identical table reload.
    Resuming data-datatlvpool_tdata (254:42).
    Resuming data-datatlvpool_tmeta (254:41).
    Resuming data-datatlvpool-tpool (254:43).
    Resuming data-geluid-real (254:33).
    Resuming data-geluidRW (254:45).
    Monitored LVM-OHMt6RDBp5VnJD9hQdjwYm5yfUSKWCDPezYY3rnhKDVAyfaQI76PcSbAdHdkZYu0-tpool for events
    Creating volume group backup "/etc/lvm/backup/data" (seqno 37).
  Logical volume data/geluidRW successfully resized.
    Executing: /sbin/fsadm --verbose resize /dev/data/geluidRW 21561344K
fsadm: "ext4" filesystem found on "/dev/mapper/data-geluidRW".
fsadm: Device "/dev/mapper/data-geluidRW" size is 22078816256 bytes
fsadm: Parsing tune2fs -l "/dev/mapper/data-geluidRW"
fsadm: Resizing filesystem on device "/dev/mapper/data-geluidRW" to 22078816256 bytes (4341760 -> 5390336 blocks of 4096 bytes)
fsadm: Executing resize2fs /dev/mapper/data-geluidRW 5390336
resize2fs 1.44.5 (15-Dec-2018)
Filesystem at /dev/mapper/data-geluidRW is mounted on /home/wbk/sounds; on-line resizing required
old_desc_blocks = 2, new_desc_blocks = 2
The filesystem on /dev/mapper/data-geluidRW is now 5390336 (4k) blocks long.
# lvs -a data 
  LV                  VG   Attr       LSize   Pool        Origin  Data%  Meta%       
  datatlvpool         data twi-aot--- 409.60g                     1.21   7.08                            
  [datatlvpool_tdata] data Twi-ao---- 409.60g                                                                    
  [datatlvpool_tmeta] data ewi-ao---- 256.00m                                                                    
  geluid              data ori-a-----  16.56g                                                                    
  geluidRW            data Vwi-aot---  20.56g datatlvpool geluid  24.06                                  
  [lvol0_pmspare]     data ewi------- 256.00m      
# df -hT /dev/mapper/data-geluidRW 
Filesystem                Type  Size  Used Avail Use% Mounted on
/dev/mapper/data-geluidRW ext4   21G   16G  3.8G  81% /home/wbk/sounds
                      

Constateringen:

  • Het gebruikte deel van geluidRW is afgenomen met het toewijzen van extra ruimte
  • Er is een kleine impact op thin pool datatlvpool
  • Het bestandssysteem op de thin LV is ook groter, en heeft nu weer 3.8GB beschikbaar
  • De thin LV heeft een reservering van 20.56GB, waarvan de verdeling nu is:
    • 16.56GB wordt 1-op-1 gelezen uit (read only) LV geluid. Daarvoor is geen fysieke ruimte in geluidRW. Die ruimte is dus nog beschikbaar in pool datatvlpool
    • 4.4GB is geschreven in de fysieke ruimte van geluidRW. Daarvoor zijn naar rato fysieke eenheden van pool datatvlpool gebruikt
    • 3.8GB is wel gereserveerd maar nog niet beschreven. Die ruimte is vrij in de pool datatvlpool, nog niet opgeeist door geluidRW en het is vrije ruimte in het bestandssysteem dat over thin LV geluidRW heen ligt.

In lvm.conf heb ik ‘discard’ op de standaardwaarde laten staan, dat is ‘passdown’. Als er in de thin LV een bestand weggegooid wordt waardoor fysieke eenheden vrijkomen, wordt de ruimte teruggegeven aan de pool en doorgegeven (passed down) naar beneden aan het apparaat dat daaronder ligt. Dat zou een RAID-constructie kunnen zijn, maar in mijn geval staan de PV’s rechtstreeks op de fysieke opslagmedia. De SSD of HDD krijgt (van LVM/device manager, via de kernel) bericht dat er blokken vrijgekomen zijn, zodat de trim-functie van de SSD of het interne huishouden van de SMR-schijf z’n werk kan doen. Als het meezit is de machine niet al te druk, en kan dat tussendoor een keer plaatsvinden. De media zijn dan weer beschikbaar als er vraag naar onbeschreven ruimte is, zonder dat er op dat moment low-level opruimwerk gedaan hoeft te worden. Bij een normale HDD geeft het iets overhead, omdat het bij zulke schijven niet nodig is om sectoren te wissen/vrij te maken voor ze weer beschreven kunnen worden.

Voorwaarde is wel dat LVM/device manager een discard moet ontvangen van het bestandssysteem. Voor ext4 kan het in /etc/fstab opgegeven worden, maar dat werd nog niet aanbevolen (actuele, 2020/2021 stand van zaken kan ik niet vinden).

Ik kan de discard-actie nu handmatig veroorzaken door fstrim te gebruiken. Als ik het bestand van 4,4GB weggooi en fstrim gebruik, moet de ruimte dus weer beschikbaar komen in de pool:

$ df  .
Filesystem                1K-blocks     Used Available Use% Mounted on
/dev/mapper/data-geluidRW  21090900 16077652   3963368  81% /home/wbk/sounds
$ rm ~sounds/bestand*
$ df  .
Filesystem                1K-blocks     Used Available Use% Mounted on
/dev/mapper/data-geluidRW  21090900 11501564   8539456  58% /home/wbk/sounds
# lvs -o+discards data/geluidRW
  LV       VG   Attr       LSize  Pool        Origin Data%  Meta%  Discards
  geluidRW data Vwi-aot--- 20.56g datatlvpool geluid 24.06         passdown
# lvs -o+discards data/datatlvpool
  LV          VG   Attr       LSize   Pool Origin Data%  Meta%  Discards
  datatlvpool data twi-aot--- 409.60g             1.21   7.08   passdown
# fstrim /home/wbk/sounds 
# lvs -o+discards data/geluidRW
  LV       VG   Attr       LSize  Pool        Origin Data%  Meta%  Discards
  geluidRW data Vwi-aot--- 20.56g datatlvpool geluid 0.33          passdown
# lvs -o+discards data/datatlvpool
  LV          VG   Attr       LSize   Pool Origin Data%  Meta%  Discards
  datatlvpool data twi-aot--- 409.60g             0.02   6.59   passdown

Leuk, geen verrassing deze keer! Er komt schot in de zaak, tijd voor iets nieuws blijkbaar. Ik meen gelezen te hebben dat verkleinen van thin LV’s niet mogelijk is, maar dat kan ik niet terugvinden. Omdat er nu nog geen (nuttige) data naar geluidRW geschreven is, geeft dat mooi een gelegenheid het te testen. Met lvextend vang ik bot, maar met lvreduce lijkt het goed te gaan zolang ik niet vertel dat het specifiek van /dev/sde1 weggehaald moet worden:

# lvextend -tvr -L-4G data/geluidRW /dev/sde1
  Size may not be negative.
  Invalid argument for --size: -4G
  Error during parsing of command line.
# lvextend -tvr -L16G data/geluidRW /dev/sde1
  TEST MODE: Metadata will NOT be updated and volumes will not be (de)activated.
  New size given (4096 extents) not larger than existing size (5264 extents)
# lvreduce -tvr -L-4G data/geluidRW 
  TEST MODE: Metadata will NOT be updated and volumes will not be (de)activated.
    Executing: /sbin/fsadm --dry-run --verbose check /dev/data/geluidRW
fsadm: "ext4" filesystem found on "/dev/mapper/data-geluidRW".
fsadm: Skipping filesystem check for device "/dev/mapper/data-geluidRW" as the filesystem is mounted on /home/wbk/sounds
    /sbin/fsadm failed: 3
    Executing: /sbin/fsadm --dry-run --verbose resize /dev/data/geluidRW 17367040K
fsadm: "ext4" filesystem found on "/dev/mapper/data-geluidRW".
fsadm: Device "/dev/mapper/data-geluidRW" size is 22078816256 bytes
fsadm: Parsing tune2fs -l "/dev/mapper/data-geluidRW"
fsadm: resize2fs needs unmounted filesystem
Do you want to unmount "/home/wbk/sounds" ? [Y|n] y
fsadm: Dry execution umount /home/wbk/sounds
fsadm: Dry execution fsck -f -p /dev/mapper/data-geluidRW
fsadm: Resizing filesystem on device "/dev/mapper/data-geluidRW" to 17783848960 bytes (5390336 -> 4341760 blocks of 4096 bytes)
fsadm: Dry execution resize2fs /dev/mapper/data-geluidRW 4341760
fsadm: Remounting unmounted filesystem back
fsadm: Dry execution mount /dev/mapper/data-geluidRW /home/wbk/sounds
    Test mode: Skipping archiving of volume group.
    Reducing logical volume data/geluidRW to 16.56 GiB
  Size of logical volume data/geluidRW changed from 20.56 GiB (5264 extents) to 16.56 GiB (4240 extents).
    Test mode: Skipping backup of volume group.
  Logical volume data/geluidRW successfully resized.
# lvreduce -tvr -L-4G data/geluidRW /dev/sde1
  Command does not accept argument: /dev/sde1.
root@fractal:~# lvreduce -vr -L-4G data/geluidRW 
    Executing: /sbin/fsadm --verbose check /dev/data/geluidRW
fsadm: "ext4" filesystem found on "/dev/mapper/data-geluidRW".
fsadm: Skipping filesystem check for device "/dev/mapper/data-geluidRW" as the filesystem is mounted on /home/wbk/sounds
    /sbin/fsadm failed: 3
    Executing: /sbin/fsadm --verbose resize /dev/data/geluidRW 17367040K
fsadm: "ext4" filesystem found on "/dev/mapper/data-geluidRW".
fsadm: Device "/dev/mapper/data-geluidRW" size is 22078816256 bytes
fsadm: Parsing tune2fs -l "/dev/mapper/data-geluidRW"
fsadm: resize2fs needs unmounted filesystem
Do you want to unmount "/home/wbk/sounds" ? [Y|n] y
fsadm: Executing umount /home/wbk/sounds
umount: /home/wbk/sounds: target is busy.
fsadm: Cannot proceed with mounted filesystem "/home/wbk/sounds".
  /sbin/fsadm failed: 1
  Filesystem resize failed.

Ja, de directory staat nog op verschillende plaatsen open. Sluiten en retry:

# lvreduce -vr -L-4G data/geluidRW 
    Executing: /sbin/fsadm --verbose check /dev/data/geluidRW
fsadm: "ext4" filesystem found on "/dev/mapper/data-geluidRW".
fsadm: Skipping filesystem check for device "/dev/mapper/data-geluidRW" as the filesystem is mounted on /home/wbk/sounds
    /sbin/fsadm failed: 3
    Executing: /sbin/fsadm --verbose resize /dev/data/geluidRW 17367040K
fsadm: "ext4" filesystem found on "/dev/mapper/data-geluidRW".
fsadm: Device "/dev/mapper/data-geluidRW" size is 22078816256 bytes
fsadm: Parsing tune2fs -l "/dev/mapper/data-geluidRW"
fsadm: resize2fs needs unmounted filesystem
Do you want to unmount "/home/wbk/sounds" ? [Y|n] y
fsadm: Executing umount /home/wbk/sounds
fsadm: Executing fsck -f -p /dev/mapper/data-geluidRW
fsck from util-linux 2.33.1
geluid: 7753/1351680 files (1.3% non-contiguous), 2993002/5390336 blocks
fsadm: Resizing filesystem on device "/dev/mapper/data-geluidRW" to 17783848960 bytes (5390336 -> 4341760 blocks of 4096 bytes)
fsadm: Executing resize2fs /dev/mapper/data-geluidRW 4341760
resize2fs 1.44.5 (15-Dec-2018)
Resizing the filesystem on /dev/mapper/data-geluidRW to 4341760 (4k) blocks.
The filesystem on /dev/mapper/data-geluidRW is now 4341760 (4k) blocks long.

fsadm: Remounting unmounted filesystem back
fsadm: Executing mount /dev/mapper/data-geluidRW /home/wbk/sounds
    Archiving volume group "data" metadata (seqno 37).
    Reducing logical volume data/geluidRW to 16.56 GiB
  Size of logical volume data/geluidRW changed from 20.56 GiB (5264 extents) to 16.56 GiB (4240 extents).
    Loading table for data-datatlvpool_tdata (254:42).
    Suppressed data-datatlvpool_tdata (254:42) identical table reload.
    Loading table for data-datatlvpool_tmeta (254:41).
    Suppressed data-datatlvpool_tmeta (254:41) identical table reload.
    Loading table for data-datatlvpool-tpool (254:43).
    Suppressed data-datatlvpool-tpool (254:43) identical table reload.
    Loading table for data-geluid-real (254:33).
    Suppressed data-geluid-real (254:33) identical table reload.
    Loading table for data-geluidRW (254:45).
    Loading table for data-geluid-real (254:33).
    Suppressed data-geluid-real (254:33) identical table reload.
    Loading table for data-geluid (254:34).
    Suppressed data-geluid (254:34) identical table reload.
    Not monitoring data/datatlvpool with libdevmapper-event-lvm2thin.so
    Unmonitored LVM-OHMt6RDBp5VnJD9hQdjwYm5yfUSKWCDPezYY3rnhKDVAyfaQI76PcSbAdHdkZYu0-tpool for events
    Suspending data-geluidRW (254:45)
    Suspending data-datatlvpool-tpool (254:43)
    Suspending data-geluid-real (254:33)
    Suspending data-datatlvpool_tdata (254:42)
    Suspending data-datatlvpool_tmeta (254:41)
    Loading table for data-datatlvpool_tdata (254:42).
    Suppressed data-datatlvpool_tdata (254:42) identical table reload.
    Loading table for data-datatlvpool_tmeta (254:41).
    Suppressed data-datatlvpool_tmeta (254:41) identical table reload.
    Loading table for data-datatlvpool-tpool (254:43).
    Suppressed data-datatlvpool-tpool (254:43) identical table reload.
    Loading table for data-geluid-real (254:33).
    Suppressed data-geluid-real (254:33) identical table reload.
    Resuming data-datatlvpool_tdata (254:42).
    Resuming data-datatlvpool_tmeta (254:41).
    Resuming data-datatlvpool-tpool (254:43).
    Resuming data-geluid-real (254:33).
    Resuming data-geluidRW (254:45).
    Monitored LVM-OHMt6RDBp5VnJD9hQdjwYm5yfUSKWCDPezYY3rnhKDVAyfaQI76PcSbAdHdkZYu0-tpool for events
    Creating volume group backup "/etc/lvm/backup/data" (seqno 38).
  Logical volume data/geluidRW successfully resized.
# df -h /home/wbk/sounds/
Filesystem                 Size  Used Avail Use% Mounted on
/dev/mapper/data-geluidRW   17G   11G  4.4G  72% /home/wbk/sounds

Kind kan de was doen, zou je bijna zeggen. In het kort voor elk van de LV’s op de SMR-schijf te doen:

  • umount /home/wbk/sounds
  • lvchange -an data/geluid
  • lvchange –permission r data/geluid
  • lvcreate –type thin –thinpool datatlvpool -n geluidRW data/geluid
  • Foutmelding over ontbrekende thin-pool, oid? Dan eerst de LV voor de pool aanmaken:
    • lvcreate -v –type thin-pool -L 3T -n datatlvpool data

Telkens in plaats van geluid, een van de volgende LV’s nemen:

  • fotos
  • muziekNR
  • pubNR
  • rom
  • video

Toch weer een verrassing. Het resultaat is bijna hetzelfde als bij geluid: er wordt een verborgen LV ‘-real’ aangemaakt, maar deze keer is muziekRW na corrigeren van /ect/fstab meteen aan te koppelen:

# lvchange -an data/muziekNR
# lvchange --permission r data/muziekNR
  Logical volume data/muziekNR changed.
# lvcreate  --type thin --thinpool datatlvpool -n muziekRW data/muziekNR
  Logical volume "muziekRW" created.
# lvs -a data
  LV                  VG   Attr       LSize   Pool        Origin   Data%  Meta%  
  datatlvpool         data twi-aot--- 409.60g                      0.02   6.59                            
  [datatlvpool_tdata] data Twi-ao---- 409.60g                                                                    
  [datatlvpool_tmeta] data ewi-ao---- 256.00m                                                                    
  [lvol0_pmspare]     data ewi------- 256.00m                                                                    
  muziekNR            data ori------- 150.00g                                                                    
  muziekRW            data Vwi-a-t--- 150.00g datatlvpool muziekNR 0.00             
# ls /dev/mapper/data-muziek
data-muziekNR-real  data-muziekRW     
# vi /etc/fstab
# mount /home/wbk/music/
# ls /home/wbk/music/  
 allerlei
 audiobook
 Gandalf
 GEENMUZIEK
 lupin
 ...

Voor publiek toegankelijke LV pubNR:

# lvchange -an data/pubNR
# lvchange --permission r data/pubNR
  Logical volume data/pubNR changed.
# lvcreate  --type thin --thinpool datatlvpool -n pubRW data/pubNR
  Logical volume "pubRW" created.
# vi /etc/fstab
# vi /etc/fstab
# mount /dev/mapper/data-pubRW 
# ls /home/wbk/pubNR/
ftp  lost+found  recup_dir.1

Voor de rom-LV wil ik de naam aanpassen naar romRO. romROr met r voor recursief is mooier zijn, of romdOr. Dat breekt weer met NR (non-raid), RW (read/write) en RO (read-only), dus toch niet.

Voor videos alles op een rijtje. Bij lvextend kwam een hele rits inode-meldingen, ‘ignored’. Ik weet niet of een een bestandssysteem op een inactieve (RO) LV gerepareerd wordt. Ik zou denken dat eventuele reparaties op de actieve (RW) thin LV gedaan worden.

# lvrename data/video data/videoRO
  Renamed "video" to "videoRO" in volume group "data"
# umount /home/wbk/movies
# lvchange -an data/videoRO
# lvchange --permission r data/videoRO
  Logical volume data/videoRO changed.
# lvcreate  --type thin --thinpool datatlvpool -n videoRW data/videoRO
  Logical volume "videoRW" created.
# cat /etc/fstab|grep movies
##/dev/mapper/data-video /home/wbk/movies ext4    noatime,noexec  0       2
# vi /etc/fstab
# cat /etc/fstab|grep movies
/dev/mapper/data-videoRW /home/wbk/movies ext4    noatime,noexec  0       2
# lvextend -r -L+50G data/videoRW /dev/sde1  
fsck from util-linux 2.33.1
filmNR: Inode 17 extent tree (at level 1) could be narrower.  IGNORED.
filmNR: Inode 19 extent tree (at level 1) could be narrower.  IGNORED.
filmNR: Inode 20 extent tree (at level 1) could be narrower.  IGNORED.
filmNR: Inode 2490370 extent tree (at level 2) could be narrower.  IGNORED.
filmNR: Inode 23461890 extent tree (at level 2) could be narrower.  IGNORED.
filmNR: Inode 23855108 extent tree (at level 1) could be shorter.  IGNORED.
filmNR: Inode 23855117 extent tree (at level 1) could be narrower.  IGNORED.
...
filmNR: Inode 60030985 extent tree (at level 1) could be narrower.  IGNORED.
filmNR: 3724/73007104 files (10.6% non-contiguous), 291110129/292028416 blocks
  Size of logical volume data/videoRW changed from <1.09 TiB (285184 extents) to <1.14 TiB (297984 extents).
  Logical volume data/videoRW successfully resized.
resize2fs 1.44.5 (15-Dec-2018)
Resizing the filesystem on /dev/mapper/data-videoRW to 305135616 (4k) blocks.
The filesystem on /dev/mapper/data-videoRW is now 305135616 (4k) blocks long.

root@fractal:~# mount /home/wbk/movies
# df -h /home/wbk/movies
Filesystem                Size  Used Avail Use% Mounted on
/dev/mapper/data-videoRW  1.2T  1.1T   52G  96% /home/wbk/movies

Bij het controleren of ik foto’s al verdund had, viel me de inconsistente naamgeving van de read-only ‘origin’ LV’s op. Bij wijze van test heb ik de muziekNR-LV hernoemd, alles werkt gewoon 🙂

# lvs data
  LV          VG   Attr       LSize   Pool          Origin        Data%  Meta%  Move Log Cpy%Sync Convert
  archief     data -wi-a----- 800.00g                                                                    
  datatlvpool data twi-aot--- 409.60g                             1.65   7.18                            
  fotos       data Cwi-a-C---   2.68t [cache_fotos] [fotos_corig] 2.83   9.16            0.00            
  geluid      data ori-a-----  16.56g                                                                    
  geluidRW    data Vwi-aot---  16.56g datatlvpool   geluid        0.43                                   
  muziekNR    data ori------- 150.00g                                                                    
  muziekRW    data Vwi-aot--- 150.00g datatlvpool   muziekNR      3.87                                   
  pubNR       data ori-------   8.00g                                                                    
  pubRW       data Vwi-aot---   8.00g datatlvpool   pubNR         0.01                                   
  romRO       data -wi-ao----  90.00g                                                                    
  ssdata      data -wi-ao----  40.00g                                                                    
  videoRO     data ori-------  <1.09t                                                                    
  videoRW     data Vwi-aot---  <1.14t datatlvpool   videoRO       0.07                                   
# lvrename -tv data/muziekNR data/muziekRO
  TEST MODE: Metadata will NOT be updated and volumes will not be (de)activated.
    Test mode: Skipping archiving of volume group.
    Test mode: Skipping backup of volume group.
  Renamed "muziekNR" to "muziekRO" in volume group "data"
root@fractal:~# lvrename -v data/muziekNR data/muziekRO
    Archiving volume group "data" metadata (seqno 52).
    Loading table for data-datatlvpool_tdata (254:42).
    Suppressed data-datatlvpool_tdata (254:42) identical table reload.
    Loading table for data-datatlvpool_tmeta (254:41).
    Suppressed data-datatlvpool_tmeta (254:41) identical table reload.
    Loading table for data-datatlvpool-tpool (254:43).
    Suppressed data-datatlvpool-tpool (254:43) identical table reload.
    Loading table for data-muziekNR-real (254:37).
    Suppressed data-muziekNR-real (254:37) identical table reload.
    Loading table for data-muziekRW (254:46).
    Suppressed data-muziekRW (254:46) identical table reload.
    Not monitoring data/datatlvpool with libdevmapper-event-lvm2thin.so
    Unmonitored LVM-OHMt6RDBp5VnJD9hQdjwYm5yfUSKWCDPezYY3rnhKDVAyfaQI76PcSbAdHdkZYu0-tpool for events
    Suspending data-muziekRW (254:46)
    Suspending data-datatlvpool-tpool (254:43)
    Suspending data-muziekNR-real (254:37)
    Suspending data-datatlvpool_tdata (254:42)
    Suspending data-datatlvpool_tmeta (254:41)
    Loading table for data-datatlvpool_tdata (254:42).
    Suppressed data-datatlvpool_tdata (254:42) identical table reload.
    Loading table for data-datatlvpool_tmeta (254:41).
    Suppressed data-datatlvpool_tmeta (254:41) identical table reload.
    Loading table for data-datatlvpool-tpool (254:43).
    Suppressed data-datatlvpool-tpool (254:43) identical table reload.
    Loading table for data-muziekNR-real (254:37).
    Suppressed data-muziekNR-real (254:37) identical table reload.
    Loading table for data-muziekRW (254:46).
    Suppressed data-muziekRW (254:46) identical table reload.
    Resuming data-datatlvpool_tdata (254:42).
    Resuming data-datatlvpool_tmeta (254:41).
    Resuming data-datatlvpool-tpool (254:43).
    Renaming data-muziekNR-real (254:37) to data-muziekRO-real
    Resuming data-muziekRO-real (254:37).
    Resuming data-muziekRW (254:46).
    Monitored LVM-OHMt6RDBp5VnJD9hQdjwYm5yfUSKWCDPezYY3rnhKDVAyfaQI76PcSbAdHdkZYu0-tpool for events
    Creating volume group backup "/etc/lvm/backup/data" (seqno 53).
  Renamed "muziekNR" to "muziekRO" in volume group "data"

Dat kan met veel minder output, zoals hier voor geluid:

# lvrename  data/geluid data/geluidRO
  Renamed "geluid" to "geluidRO" in volume group "data"

Voor de foto-LV doe ik de check van het bestandssysteem voorafgaand aan het inactief zetten van de LV, aansluitend verdunnen en vergroten (eindelijk…)

# fsck.ext4 /dev/mapper/data-fotos
e2fsck 1.44.5 (15-Dec-2018)
foto has gone 208 days without being checked, check forced.
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
foto: 251505/2813440 files (39.3% non-contiguous), 684036576/720210944 blocks
# lvrename data/fotos data/fotosRO
  Renamed "fotos" to "fotosRO" in volume group "data"
root@fractal:~# lvchange -an data/fotosRO
root@fractal:~# lvchange --permission r data/fotosRO
  Logical volume data/fotosRO changed.
# lvcreate --type thin --thinpool datatlvpool -n fotosRW data/fotosRO
  WARNING: Sum of all thin volume sizes (3.99 TiB) exceeds the size of thin pool data/datatlvpool and the amount of free space in volume group (<2.02 TiB).
  Logical volume "fotosRW" created.
# cat /etc/fstab|grep fotos
##/dev/mapper/data-fotos /home/wbk/photos ext4    noatime,noexec 0       2
# cat /etc/fstab|grep fotos
/dev/mapper/data-fotosRW /home/wbk/photos ext4    noatime,noexec 0       2
root@fractal:~# lvextend -r -L+100G data/fotosRW /dev/sde1
fsck from util-linux 2.33.1
foto: clean, 251505/2813440 files, 684036576/720210944 blocks
  WARNING: Sum of all thin volume sizes (<4.09 TiB) exceeds the size of thin pool data/datatlvpool and the amount of free space in volume group (<2.02 TiB).
  Size of logical volume data/fotosRW changed from 2.68 TiB (703331 extents) to 2.78 TiB (728931 extents).
  Logical volume data/fotosRW successfully resized.
resize2fs 1.44.5 (15-Dec-2018)
Resizing the filesystem on /dev/mapper/data-fotosRW to 746425344 (4k) blocks.
The filesystem on /dev/mapper/data-fotosRW is now 746425344 (4k) blocks long.
root@fractal:~# df -hTt ext4
Filesystem                Type  Size  Used Avail Use% Mounted on
/dev/mapper/data-fotosRW  ext4  2.8T  2.6T   99G  97% /home/wbk/photos

Van alle bewerkingen (los van het verplaatsen van VG’s van de ene schijf naar de andere bij het leegmaken van de oude schijven), duurde de wijziging van deze LV het langst, maar nog steeds binnen enkele minuten.

Hiermee is de saga zo ongeveer ten einde. Todo’s:

  • /homes als external origin voor thin LV aanwijzen
  • lvrename van homes-home naar homes-homeRO
  • /home/wbk als external origin voor thin LV aanwijzen
  • lvrename van homes-wbk naar homes-wbkRO

Vrijwel alle bestandssystemen hangen in /home of in /home/wbk, en zodra ik inlog zijn de bestanden in /home/wbk in gebruik. Trucjes helpen niet, umount -l, mount -o remount,ro : allebei geen succes, ook niet na switchen naar single-user mode via telinit 1. Reboot dus, en in GRUB kiezen voor recovery en inloggen als root ipv ctrl-d om de normale boot voort te zetten.

 # lvcreate -v --type thin-pool -L 800G -n homestlvpool homes
  /dev/sdc: open failed: No medium found
    Setting chunk size to 512.00 KiB.
  Thin pool volume with chunk size 512.00 KiB can address at most 126.50 TiB of data.
    Preferred pool metadata size 100.00 MiB.
    Making pool homestlvpool in VG homes using segtype thin-pool
    Archiving volume group "homes" metadata (seqno 21).
    Creating logical volume homestlvpool
    activation/volume_list configuration setting not defined: Checking only host tags for homes/homestlvpool.
    Creating homes-homestlvpool
    Loading table for homes-homestlvpool (254:25).
    Resuming homes-homestlvpool (254:25).
    Initializing 4.00 KiB of logical volume "homes/homestlvpool" with value 0.
    Removing homes-homestlvpool (254:25)
    Creating logical volume homestlvpool_tmeta
    Creating logical volume homestlvpool_tdata
    Creating volume group backup "/etc/lvm/backup/homes" (seqno 23).
    Activating logical volume homes/homestlvpool.
    activation/volume_list configuration setting not defined: Checking only host tags for homes/homestlvpool.
    Creating homes-homestlvpool_tmeta
    Loading table for homes-homestlvpool_tmeta (254:25).
    Resuming homes-homestlvpool_tmeta (254:25).
    Creating homes-homestlvpool_tdata
    Loading table for homes-homestlvpool_tdata (254:26).
    Resuming homes-homestlvpool_tdata (254:26).
    Creating homes-homestlvpool
    Loading table for homes-homestlvpool (254:27).
    Resuming homes-homestlvpool (254:27).
    Monitored LVM-mbnSwLqfZ9AQdDOJomVPhP76nuV6tX8WTafMmPQKm45r5XfNrefU9gCltUwvLkn3-tpool for events
  Logical volume "homestlvpool" created.
 # umount /home/wbk
 # lvrename homes/wbk homes/wbkRO
 # lvchange -an homes/wbkRO
 # lvchange --permission r homes/wbkRO
 # lvcreate --type thin --thinpool homestlvpool -n wbkRW homes/wbkRO
 # lvchange -an homes/homeRO
 # lvchange --permission r homes/homeRO
 # lvcreate --type thin --thinpool hometlvpool -n homesRW homes/homeRO

De ontbrekende /dev/sdc gaf me wat bedenkingen, het lijkt of een aantal disks opgeschoven is qua nummering.

Bij het opslaan van het tmux-scherm heb ik blijkbaar wat foutgedaan, of ik heb een van de logs overscreven met de ander. Ik heb nu twee identieke logs, en geen feedback van de laatste 8 opdrachten. Het resultaat lijkt wel in orde.

Het meeste is nu gebeurt. Nog te doen:

  • Controleren of het reeds ingerichte cache voor de LV’s nu voor de thin-LV’s actief is
  • Tekst fatsoeneren zodat het later nog leesbaar is
  • Controleren of er nog todo’s in staan die ik ondertussen over het hoofd gezien heb
  • Misschien nog een in het Engels publiceren, hoewel er in het Engels al voldoende te vinden is over LVM.

Print this entry

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *