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.