Server::LVM Oplossingen en Voorbeelden
Beheer van Logical Volumes
![]() |
|
Logical Volumes
Volume Management creëert een abstracte laag over de fysieke opslag, waarmee het mogelijk gemaakt wordt logische opslag volumes aan te maken.
Zie hiervoor ook de LVM Administrator's Guide. Dit verschaft op diverse manieren een veel grotere flexibiliteit dan wanneer de fysieke oplsag direct gebruikt wordt.
Een Logisch Volume verschaft opslagvirtualisatie. Met een Logisch Volume is er geen restrictie tot de fysieke hardeschijfvolumes. Tevens is de hardware opslagconfiguratie verborgen voor de software waardoor het volume aangepast en/of verplaatstkan worden zonder applicaties te stoppen of het systeem te moeten unmounten.
Logische Volumes hebben de volgende voordelen ten opzichte van direct gebruik van fysieke opslag:
- Flexibele capaciteit
Met Logical Volumes (LV) kan het bestandssysteem uitgebreid worden door meerdere opslagstations en partities samen te voegen in een enkel Logisch Volume. - Instelbare opslag ruimtes.
Logische Volumes kunnen uitgebreid en gereduceerd worden met eenvoudige commando's, zonder herformattering en/of herpartitionering van de onderliggende opslagstations. - On-line data verhuizen
Om nieuwere, snellere, of betrouwbaardere opslagstations in gebruik te nemen kunnen data verhuisd worden terwijl het systeem actief is. Data kunnen opnieuw op de opslagstations ingedeeld worden terwijl deze stations in gebruik zijn. Een hot-swappable station kan bijvoorbeeld leeggemaakt worden voordat het verwijderd wordt. - Simpele naamgeving van de devices.
Logische Volumes kunnen beheerd worden in door de gebruiker te definieren groepen, en voorzien worden van herkenbare namen. - Striping
Er kan een Logisch Volume aangemaakt worden met data-striping over twee of meer stations. Dit kan de doorvoersnelheid dramatisch verbeteren. - Mirroring van volumes
Logische Volumes zijn ideaal om een data-mirror te configureren - Volume Snapshots
Met Logische Volumes kunnen snapshots voor backup gemaakt worden of om wijzigingen te testen zonder de oorspronkelijke data te verliezen.
In de volgende secties worden enkele LVM beheerstaken met voorbeelden uitgevoerd.
Inventarisatie van huidige status
In de hoofdstukken Installeren en Data Opslag hebben we een compact bestandssysteem opgezet gebruikmakend van Logical Volume Management (LVM).
Met de hiernavolgende commando's worden de gegevens verzameld voor een overzicht van het bestandssysteem.
Note: van de output worden alleen de relevante regels weergegeven.
[root@testserver ~]# lvmdiskscan /dev/main/root [ 3.73 GiB] /dev/sda1 [ 476.00 MiB] /dev/main/swap [ 7.45 GiB] /dev/sda2 [ 18.63 GiB] LVM physical volume /dev/main/var [ 5.59 GiB] /dev/sda3 [ 446.66 GiB] LVM physical volume /dev/main/logs [ 1.86 GiB] /dev/data/data0 [ 409.78 GiB] [root@testserver ~]# pvs PV VG Fmt Attr PSize PFree /dev/sda2 main lvm2 a-- 18.63g 0 /dev/sda3 data lvm2 a-- 446.66g 36.88g [root@testserver ~]# parted /dev/sda GNU Parted 3.1 Using /dev/sda Welcome to GNU Parted! Type 'help' to view a list of commands. (parted) print free Model: ATA ST3500412AS (scsi) Disk /dev/sda: 500GB Sector size (logical/physical): 512B/512B Partition Table: msdos Disk Flags: Number Start End Size Type File system Flags 32.3kB 1049kB 1016kB Free Space 1 1049kB 500MB 499MB primary ext4 boot 2 500MB 20GB 19GB primary lvm 3 20GB 500GB 480GB primary lvm 500GB 500GB 0GB Free Space [root@testserver ~]# lvdisplay main LV Path /dev/main/root LV Name root VG Name main LV Size 3.70 GiB LV Path /dev/main/var LV Name var VG Name main LV Size 5.59 GiB LV Path /dev/main/swap LV Name swap VG Name main LV Size 7.45 GiB LV Path /dev/main/logs LV Name logs VG Name main LV Size 1.86 GiB
Uit deze verkregen resultaten kan het volgende statusoverzicht gemaakt worden
Verhuis VG met data naar nwe HDD, hergebruik vrije ruimte
OS en Data fysiek scheiden
ClearOS 7 voorziet in het buiten de OS opslaan van data mbv bindmounts maar zoals uit voorgaand statusoverzicht blijkt staan VG 'main' met het OS en VG 'data' nog wel steeds op het zelfde fysieke opslagstation. Als er meerdere stations beschikbaar zijn heeft het de voorkeur de Volume Groups ook fysiek te scheiden. Als het ene opslagstation het begeeft is dan niet gelijk alles tegelijk onbruikbaar.
Logisch Volume 'root' vergroten
Van bovenstaand schema is het gegeven volume voor Logisch Volume 'root' voldoende en wordt voor minder dan 50% benut.
[root@testserver ~]# df -h / Filesystem Size Used Avail Use% Mounted on /dev/mapper/main-root 3.7G 1.6G 7.8G 43% /
ClearOS recommendeert voor LV 'root' echter een minimum van 10 GB om voldoende ruimte te houden voor toekomstige apps, etc.
Hiervoor is echter in VG 'main' geen ruimte meer. En er is ook geen ruimte op het opslagstation om VG 'main' te vergroten.
Als de VG 'data' verhuisd wordt van /dev/sda naar /dev/sdb dan komt er ruimschoots ruimte vrij om VG 'main' te laten groeien en zodoende ruimte te bieden voor een groter LV 'root'.
NOTE: Met alleen VG 'main' op het eerste station zou een schijf van 50-100 GB al ruim voldoende zijn voor het complete OS.
Procedure
Met de toevoeging van een extra harde schijf kunnen we een herverdeling maken met onderstaand schema als resultaat.
Om te komen tot bovenstaand resultaat te komen doorlopen we een aantal stappen die in het hierna uitgewerkt voorbeeld worden beschreven:
- Voeg harde schijf /dev/sdb toe en partitioneer met partitietype xfs 'Linux LVM'
- Initialiseer /dev/sdb1 als LVM Physical Volume
- Voeg PV '/dev/sdb1' toe aan VG 'data'
- Verhuis data van PV '/dev/sda3' naar PV '/dev/sdb1'
- Verwijder PV /dev/sda3 uit VG 'data' en delete partitie /dev/sda3
- Vergroot /dev/sda2 met vrijgekomen ruimte
- Sync PV '/dev/sda2' met partitie /dev/sda2
- Vergroot LV 'root' naar 10 GB en resize het filesysteem
- Nieuw statusoverzicht
1. Voeg HDD toe en partitioneer met 'Linux LVM'
- Zorg dat de harddisk niet gemount is en delete eerst een eventueel aanwezige partitie met # fdisk of #parted
- Oudere versies van fdisk starten in DOS-compatible mode, dit moet uitgeschakeld worden (met command 'c').
Tevens moet display units op 'sectors' staan (met command 'u').
De huidige versie 'fdisk' start al op met de juiste zettingen.
Voor schijven groter dan 2 TB gebruiken we # parted ipv #fdisk - In het nu volgende voorbeeld zijn van de ouput alleen relevante regels weergegeven.
Maak met fdisk of parted op /dev/sdb een nieuwe primaire partitie aan die de hele hdd beslaat en zet partitie type naar 'LVM' (flag).
[root@mainserver ~]# parted /dev/sdb GNU Parted 3.1 Using /dev/sdb Welcome to GNU Parted! Type 'help' to view a list of commands. (parted) mklabel gpt (parted) print Model: ATA WDC WDXXXXXXX-68N (scsi) Disk /dev/sdb: 500GB Sector size (logical/physical): 512B/4096B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags Zet units naar TB (parted) unit TB Maak partitie: 1, primair en gebruik gehele hdd (parted) mkpart primary 0 100% (parted) print Model: ATA WDC WDXXXXXXX-68N (scsi) Disk /dev/sdb: 0.5 TB Sector size (logical/physical): 512B/4096B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 0.00TB 0.5 TB 4.00TB primary Maak partitie een LVM partitie (parted) set 1 lvm on (parted) print Model: ATA WDC WDXXXXXXX-68N (scsi) Disk /dev/sdb: 0.5 TB Sector size (logical/physical): 512B/4096B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 0.00TB 0.5 TB 4.00TB primary lvm
2. Initialiseer /dev/sdb1 als LVM Physical Volume
[root@testserver ~]# pvcreate /dev/sdb1
Physical volume "/dev/sdb1" successfully created
Confirmeer initialisatie
[root@testserver ~]# lvmdiskscan /dev/main/root [ 3.73 GiB] /dev/sda1 [ 476.00 MiB] /dev/main/swap [ 7.45 GiB] /dev/sda2 [ 18.63 GiB] LVM physical volume /dev/main/var [ 5.59 GiB] /dev/sda3 [ 446.66 GiB] LVM physical volume /dev/main/logs [ 1.86 GiB] /dev/data/data0 [ 409.78 GiB] /dev/sdb1 [ 465.76 GiB] LVM physical volume /dev/sdc1 [ 465.76 GiB] 4 disks 3 partitions 0 LVM physical volume whole disks 3 LVM physical volumes
Geef nieuwe status weer met LVM commando's
Note: alleen relevante outputregels weergegeven
[root@testserver ~]# pvs PV VG Fmt Attr PSize PFree /dev/sda2 main lvm2 a-- 18.63g 0 /dev/sda3 data lvm2 a-- 446.66g 36.88g /dev/sdb1 lvm2 --- 465.76g 465.76g [root@testserver ~]# pvdisplay /dev/sdb1 "/dev/sdb1" is a new physical volume of "465.76 GiB" PV Name /dev/sdb1 PV Size 465.76 GiB
3. Voeg PV '/dev/sdb1' toe aan VG 'data'
Voor het toevoegen omvat de Volume Group 'data' alleen PV '/dev/sda3'
Geef deze status weer:
[root@testserver ~]# vgdisplay data VG Name data Format lvm2 Cur PV 1 Act PV 1 VG Size 446.66 GiB PE Size 4.00 MiB Total PE 114345 Alloc PE / Size 104904 / 409.78 GiB Free PE / Size 9441 / 36.88 GiB
Voeg PV /dev/sdb1 toe
[root@testserver ~]# vgextend data /dev/sdb1
Volume group "data" successfully extended
De Volume Group 'data' omvat na toevoegen de PV's '/dev/sda3' en '/dev/sdb1'
Geef deze status weer:
[root@testserver ~]# vgdisplay data VG Name data Format lvm2 Cur PV 2 Act PV 2 VG Size 912.42 GiB PE Size 4.00 MiB Total PE 233579 Alloc PE / Size 104904 / 409.78 GiB Free PE / Size 128675 / 502.64 GiB
4. Verhuis data van PV '/dev/sda3' naar PV '/dev/sdb1'
Verhuis binnen VG 'data' de in PV '/dev/sda3 aanwezige data naar PV '/dev/sdb1'
[root@testserver ~]# pvmove /dev/sda3 /dev/sdb1
/dev/sda3: Moved: 0.0%
/dev/sda3: Moved: 0.3%
/dev/sda3: Moved: 0.7%
... etc
/dev/sda3: Moved: 100.0%
5. Verwijder PV '/dev/sda3' uit VG 'data' en delete partitie /dev/sda3
Verwijder /dev/sda3 uit VG 'data'
[root@testserver ~]# vgreduce data /dev/sda3
Removed "/dev/sda3" from volume group "data"
De Volume Group 'data' omvat nu alleen nog PV '/dev/sdb1'
Geef deze status weer:
[root@testserver ~]# vgdisplay data VG Name data Format lvm2 Cur PV 1 Act PV 1 VG Size 465.76 GiB PE Size 4.00 MiB Total PE 119234 Alloc PE / Size 104904 / 409.78 GiB Free PE / Size 14330 / 55.98 GiB [root@testserver ~]# lvdisplay /dev/data --- Logical volume --- LV Path /dev/data/data0 LV Name data0 VG Name data LV Size 409.78 GiB
Er is nu in VG 'data' 465 GB beschikbaar waarvan door LV 'dev/data/data0' 409 GB gebruikt wordt.
Er is daarnaast nog 56 GB beschikbaar voor een nieuwe LV en/og uitbreiding van de huidige.
Verwijder de partitie /dev/sda3
Confirmeer eerst dat /dev/sda3 leeg is
[root@testserver ~]# pvdisplay /dev/sda3 "/dev/sda3" is a new physical volume of "446.66 GiB" PV Name /dev/sda3 PV Size 446.66 GiB Allocatable NO PE Size 0
De-initialiseer /dev/sda3 (verwijder LVM-flag)
Hierboven is te lezen dat /dev/sda3 nog steeds geïnitieerd is als Physical Volume (PV).
Voor we verder gaan moet deze partitie eerst nog gedeinitialiseerd worden als LVM Physical Volume
[root@mainserver ~]# pvremove /dev/sda3 Labels on physical volume "/dev/sda3" successfully wiped.
Delete partitie /dev/sda3 (gebruik #parted : d voor grote HDD's)
[root@testserver ~]# fdisk /dev/sda
Welcome to fdisk (util-linux 2.23.2).
Command (m for help): d
Partition number (1-3, default 3):
Partition 3 is deleted
Command (m for help): p
Disk /dev/sda: 500.1 GB, 500107862016 bytes, 976773168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000dd4af
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 976895 487424 83 Linux
/dev/sda2 976896 40052735 19537920 8e Linux LVM
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16:
Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.
[root@testserver ~]# reboot
6. Vergroot /dev/sda2 met vrijgekomen ruimte
ClearOS recommendeert voor LV 'root' minimaal 10 GB om voldoende ruimte te houden voor toekomstige apps, etc.
Hiervoor is echter in VG 'main' momenteel geen ruimte en op PV /dev/sda2 is ook geen ruimte om VG 'main' te vergroten.
Verifiëer gebruik van LV 'root' en beschikbare capaciteit
[root@testserver ~]# df -h /dev/mapper/main-root Filesystem Size Used Avail Use% Mounted on /dev/mapper/main-root 3.7G 1.6G 1.9G 46% / [root@testserver ~]# vgdisplay main VG Name main VG Size 18.63 GiB Alloc PE / Size 4769 / 18.63 GiB Free PE / Size 0 / 0 [root@testserver ~]# pvdisplay /dev/sda2 PV Name /dev/sda2 VG Name main PV Size 18.63 GiB Free PE 0
Uit voorgaande blijkt dat om LV 'root' te vergroten eerst VG 'main' vergroot worden. Omdat PV '/dev/sda2' ook geen vrije ruimte meer heeft zullen we moeten beginnen /dev/sda2 uit moeten breiden (zonder de aanwezige data te verliezen).
Maak eerst backups!
Maak met 'fdisk' overzicht van huidige /dev/sda
[root@testserver /]# fdisk /dev/sda -l Disk /dev/sda: 500.1 GB, 500107862016 bytes, 976773168 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk label type: dos Disk identifier: 0x000dd4af Device Boot Start End Blocks Id System /dev/sda1 * 2048 976895 487424 83 Linux /dev/sda2 976896 40052735 19537920 8e Linux LVM
Belangrijk:
Om een partitie te wijzigen moet deze eerst verwijderd worden
Om data op deze partitie te behouden is het essentieel dat de start van de nieuwe /dev/sda2 op exact de zelfde cilinder begint en het volume gelijk of groter wordt. Het partitietype moet weer naar 8e voor 'Linux LVM' gezet worden.
Dus voor dit voorbeeld: Start 976896 en Eind >= 40052735
Delete '/dev/sda2' en maak nieuwe aan
[root@testserver /]# fdisk /dev/sda Welcome to fdisk (util-linux 2.23.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Command (m for help): d Partition number (1,2, default 2): 2 Partition 2 is deleted Command (m for help): n Partition type: p primary (1 primary, 0 extended, 3 free) e extended Select (default p): p Partition number (2-4, default 2): 2 First sector (976896-976773167, default 976896): Using default value 976896 Last sector, +sectors or +size{K,M,G} (976896-976773167, default 976773167): +100 G Partition 2 of type Linux and of size 100 GiB is set Command (m for help): t Partition number (1,2, default 2): 2 Hex code (type L to list all codes): 8e Changed type of partition 'Linux' to 'Linux LVM' Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. WARNING: Re-reading the partition table failed with error 16: Device or resource busy. The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8) Syncing disks. [root@testserver /]# reboot
7. Sync PV '/dev/sda2' met partitie '/dev/sda2'
[root@testserver ~]# pvresize /dev/sda2
Physical volume "/dev/sda2" changed
1 physical volume(s) resized / 0 physical volume(s) not resized
Verifiëer PV resize
[root@testserver ~]# pvdisplay /dev/sda2
PV Name /dev/sda2
VG Name main
PV Size 100.00 GiB / not usable 3.00 MiB
Total PE 25599
Free PE 20830
Allocated PE 4769
Aangezien VG 'main' alleen PV '/dev/sda2' bevat zal het VG 'main' volume ook gelijk zijn aan PV '/dev/sda2'
[root@testserver ~]# vgdisplay main VG Name main Format lvm2 Cur PV 1 Act PV 1 VG Size 100.00 GiB Alloc PE / Size 4769 / 18.63 GiB Free PE / Size 20830 / 81.37 GiB
Uit voorgaande blijkt dat de VG 'main' nu 100 GB groot is, waarvan 81,37 GB vrij.
Dus nu voldoende ruimte om LV '/dev/main/root' te vergroten van 3,7 naar 10 GB
8. Vergroot LV 'root' naar 10 GB en resize het filesysteem
[root@testserver ~]# lvextend -L10G /dev/main/root
Size of logical volume main/root changed from 3.73 GiB (954 extents)
to 10.00 GiB (2560 extents).
Logical volume root successfully resized.
Verifiëer LV 'root' resize
[root@testserver ~]# lvdisplay /dev/main/root
LV Path /dev/main/root
LV Name root
VG Name main
LV Size 10.00 GiB
Nu moet het filesysteem nog uitgebreid worden naar het nieuwe volume van LV '/dev/main/root'
Dit kan online met resize2fs (duurt lang). Voortgang is te volgen (op andere console) met # df -h /dev/main/root.
[root@testserver ~]# resize2fs /dev/main/root
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/main/root is mounted on /; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 2
The filesystem on /dev/main/root is now 2621440 blocks long.
Gebruik xfs_growfs in plaats van resize2fs als er sprake is van het xfs filesystem
[root@testserver ~]# xfs_growfs /dev/main/root meta-data=... data blocks changed from ..... to .....
Verifiëer volume van LV 'root' en gebruik
[root@testserver ~]# df -h /
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/main-root 9.8G 1.6G 7.8G 17% /
9. Nieuw statusoverzicht
Voer de verschillende commando's uit om status te registreren
[root@testserver ~]# lvmdiskscan /dev/main/root [ 10.00 GiB] /dev/sda1 [ 476.00 MiB] /dev/main/swap [ 7.45 GiB] /dev/sda2 [ 100.00 GiB] LVM physical volume /dev/data/data0 [ 409.78 GiB] /dev/safe/vault [ 465.76 GiB] /dev/main/var [ 5.59 GiB] /dev/main/logs [ 1.86 GiB] /dev/sdb1 [ 465.76 GiB] LVM physical volume [root@testserver ~]# parted /dev/sda GNU Parted 3.1 Using /dev/sda Welcome to GNU Parted! Type 'help' to view a list of commands. (parted) print free Model: ATA ST3500412AS (scsi) Disk /dev/sda: 500GB Sector size (logical/physical): 512B/512B Partition Table: msdos Disk Flags: Number Start End Size Type File system Flags 32.3kB 1049kB 1016kB Free Space 1 1049kB 500MB 499MB primary ext4 boot 2 500MB 108GB 107GB primary lvm (VG main) 108GB 500GB 392GB Free Space
Op schijfstation /dev/sda is dus nog 392 GB ongepartitioneerde ruimte beschikbaar
Op schijfstation /dev/sdb is geen vrije ruimte, alle 465,76 GB is ingenomen door /dev/sdb1
[root@testserver ~]# lvdisplay main LV Path /dev/main/root LV Name root VG Name main LV Size 10.00 GiB LV Path /dev/main/var LV Name var VG Name main LV Size 5.59 GiB LV Path /dev/main/swap LV Name swap VG Name main LV Size 7.45 GiB LV Path /dev/main/logs LV Name logs VG Name main LV Size 1.86 GiB [root@testserver ~]# vgdisplay main VG Name main Format lvm2 Open LV 4 Act PV 1 VG Size 100.00 GiB Alloc PE / Size 6375 / 24.90 GiB Free PE / Size 19224 / 75.09 GiB
Resumerend:
10. Vergroot een LV met alle beschikbare vrije ruimte ipv met slechts 10 GB
In voorgaande secties beschrijven we het vergroten van de VG 'main' van 20 naar 100 GB. In voorgaande sectie 8 vergroten we daarna het LV naar 10 GB.
Hieronder een voorbeeld van het vergroten van het LV met alle beschikbaar gemaakte ruimte (81,37 GB) in VG 'main'
[root@testserver ~]# vgdisplay main VG Name main Format lvm2 Cur PV 1 Act PV 1 VG Size 100.00 GiB Alloc PE / Size 4769 / 18.63 GiB Free PE / Size 20830 / 81.37 GiB
Extend LV 'root' met deze beschikbare ruimte.
[root@testserver ~]# lvextend -l +100%FREE /dev/main/root
Size of logical volume main/root changed from 3.73 GiB to 85.00 GiB.
Logical volume root successfully resized.
Verifiëer LV 'root' resize
[root@testserver ~]# lvdisplay /dev/main/root
LV Path /dev/main/root
LV Name root
VG Name main
LV Size 85.00 GiB
Nu moet het filesysteem nog uitgebreid worden naar het nieuwe volume van LV '/dev/main/root'
Dit kan online met resize2fs (duurt lang). Voortgang is te volgen (op andere console) met # df -h /dev/main/root
[root@testserver ~]# resize2fs /dev/main/root
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/main/root is mounted on /; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 2
The filesystem on /dev/main/root is now xxxxxxxx blocks long.
Gebruik xfs_growfs in plaats van resize2fs als er sprake is van het xfs filesystem
[root@testserver ~]# xfs_growfs /dev/main/root meta-data=... data blocks changed from ..... to .....
Verifiëer volume van LV 'root' met # df -h
Maak nieuwe VG met nieuwe HDD
Backup in /vault
Voor backup van systeem en data voegen we een Volume Group (VG) 'safe' toe met een Physical Volume (PV) '/dev/sdc1. Deze PV omvat een partitie op een fysiek gescheiden HDD.
Het hierna volgende voorbeeld kent de volgende stappen:
Om te komen tot bovenstaand resultaat te komen doorlopen we een aantal stappen die in het hierna uitgewerkt voorbeeld worden beschreven:
- Voeg harde schijf /dev/sdc toe en partitioneer met 'Linux LVM'
Gebruik voor partitionering van schijven groter dan 2 TB # parted ipv # fdisk
Zie Voeg HDD toe en partitioneer met 'Linux LVM' - Initialiseer /dev/sdc1 als LVM Physical Volume (PV /dev/sdc1)
- Voeg PV '/dev/sdc1' toe aan VG 'safe'
- Maak Logical Volume 'vault' (met grootte 100%FREE)
- Formatteer LV 'vault' met ext4
- Voeg mount van LV safe-vault toe in /etc/fstab
1. Voeg HDD toe en partitioneer met type 8e 'Linux LVM'
- Zorg dat de harddisk niet gemount is en delete eerst een eventueel aanwezige partitie met # fdisk en schrijf dit eerst weg.
- Oudere versies van fdisk starten in DOS-compatible mode, dit moet uitgeschakeld worden (met command 'c').
Tevens moet display units op 'sectors' staan (met command 'u').
De huidige versie 'fdisk' start al op met de juiste zettingen. - Het later verkleinen van een partitie met data is lastig en riskant. Maak een partitie daarom niet groter dan nodig. Het resterend volume kan later toegevoegd worden door de partitie te vergroten en met LVM kan het zelfs met de server on-line door met het resterend vrije volume een nieuwe partitie te maken en die als PV toe te voegen aan elke gewenste VG
- In het nu volgende voorbeeld zijn van de output alleen relevante regels weergegeven.
Maak met fdisk op /dev/sdc van 500 GB een nieuwe primaire partitie aan van 250 GB en zet partitie type naar 8e 'Linux LVM'
[root@testserver ~]# fdisk /dev/sdc Welcome to fdisk (util-linux 2.23.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Command (m for help): p Disk /dev/sdc: 500.1 GB, 500107862016 bytes, 976773168 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk label type: dos Disk identifier: 0x00003777 Device Boot Start End Blocks Id System Command (m for help): n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): p Partition number (1-4, default 1): 1 First sector (2048-976773167, default 2048): Using default value 2048 Last sector, +sectors or +size{K,M,G} (2048-976773167, default 976773167): +250G Partition 1 of type Linux and of size 250 GiB is set Command (m for help): t Selected partition 1 Hex code (type L to list all codes): 8e Changed type of partition 'Linux' to 'Linux LVM' Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks.
Hiermee is de partitie /dev/sdc1 aangemaakt met een volume van 250 GB.
Zie voor resterend vrij volume de output hieronder van commando: # parted
[root@testserver ~]# parted /dev/sdc
GNU Parted 3.1
Using /dev/sdc
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print free
Model: ATA WDC WD5000AAKB-0 (scsi)
Disk /dev/sdc: 500GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
32.3kB 1049kB 1016kB Free Space
1 1049kB 268GB 268GB primary lvm
268GB 500GB 232GB Free Space
2. Initialiseer /dev/sdc1 als LVM Physical Volume
[root@testserver ~]# pvcreate /dev/sdc1
Physical volume "/dev/sdc1" successfully created
Confirmeer initialisatie
[root@testserver ~]# lvmdiskscan
/dev/main/root [ 10.00 GiB]
/dev/sda1 [ 476.00 MiB]
/dev/main/swap [ 7.45 GiB]
/dev/sda2 [ 100.00 GiB] LVM physical volume
/dev/data/data0 [ 409.78 GiB]
/dev/main/var [ 5.59 GiB]
/dev/main/logs [ 1.86 GiB]
/dev/sdb1 [ 465.76 GiB] LVM physical volume
/dev/sdc1 [ 250.00 GiB] LVM physical volume
4 disks
2 partitions
0 LVM physical volume whole disks
3 LVM physical volumes
Geef nieuwe status weer met LVM commando's
Note: alleen relevante outputregels weergegeven
Geef status weer met diverse LVM comando's [root@testserver ~]# pvs PV VG Fmt Attr PSize PFree /dev/sda2 main lvm2 a-- 100.00g 75.09g /dev/sdb1 data lvm2 a-- 465.76g 55.98g /dev/sdc1 lvm2 --- 250.00g 250.00g [root@testserver ~]# pvdisplay /dev/sdc1 "/dev/sdc1" is a new physical volume of "250.00 GiB" --- NEW Physical volume --- PV Name /dev/sdc1 VG Name PV Size 250.00 GiB Allocatable NO
3. Voeg PV '/dev/sdc1' toe aan VG 'safe'
Maak Volume Group (VG) 'safe' met PV '/dev/sdc1'
[root@testserver ~]# vgcreate safe /dev/sdc1
Volume group "safe" successfully created
Geef deze status weer van VG 'safe':
[root@testserver ~]# vgdisplay safe --- Volume group --- VG Name safe Format lvm2 Metadata Areas 1 Metadata Sequence No 1 VG Access read/write VG Status resizable Cur PV 1 Act PV 1 VG Size 250.00 GiB PE Size 4.00 MiB Alloc PE / Size 0 / 0 Free PE / Size 63999 / 250.00 GiB
4. Maak Logical Volume 'vault' (met grootte 100%FREE)
Maak LV 'vault'. Zie # man lvcreate voor de mogelijke argumenten.
In het voorbeeld kiezen we voor -l 100%FREE, dwz dat de hele VG 'safe' gebruikt wordt om LV 'vault'aan te maken.
[root@testserver ~]# lvcreate -l 100%FREE -n vault safe
Logical volume "vault" created.
Geef status weer
[root@testserver ~]# lvdisplay safe --- Logical volume --- LV Path /dev/safe/vault LV Name vault VG Name safe LV Write Access read/write LV Status available LV Size 250.00 GiB
5. Formatteer LV 'vault' met ext4
Inplaats van 'ext4' wordt voor servers veelal gebruik gemaakt van 'xfs'
[root@testserver ~]# mkfs -t ext4 /dev/safe/vault
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
16384000 inodes, 65534976 blocks
3276748 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2214592512
2000 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736,
1605632, 2654208, 4096000, 7962624, 11239424, 20480000,
23887872
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
6. Voeg mount van LV safe-vault toe in /etc/fstab
# /etc/fstab
# Created by anaconda on Thu Dec 10 08:40:37 2015
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/main-root / ext4 defaults 1 1
UUID=b431c78b-dc08-4b30-b109-40809b4afec2 /boot ext4 defaults 1 2
/dev/mapper/data-data0 /store/data0 ext4 defaults 1 2
/dev/mapper/main-var /var ext4 defaults 1 2
/dev/mapper/main-logs /var/log ext4 defaults 1 2
/dev/mapper/main-swap swap swap defaults 0 0
/dev/mapper/safe-vault /vault ext4 defaults 1 2
Mount de nwe HDD
[root@testserver ~]# mount -a
7. Nieuw statusoverzicht
[root@testserver ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/main-root 9.8G 1.6G 7.8G 17% / devtmpfs 3.9G 0 1.3G 0% /dev /dev/mapper/data-data0 404G 194G 190G 51% /home /dev/sda1 453M 99M 351M 22% /boot /dev/mapper/main-var 5.4G 423M 4.7G 9% /var /dev/mapper/main-logs 1.9G 181M 1.6G 11% /var/log /dev/mapper/safe-vault 246G 61M 234G 1% /vault [root@testserver ~]# parted /dev/sdc GNU Parted 3.1 Using /dev/sdc Welcome to GNU Parted! Type 'help' to view a list of commands. (parted) print free Model: ATA WDC WD5000AAKB-0 (scsi) Disk /dev/sdc: 500GB Sector size (logical/physical): 512B/512B Partition Table: msdos Disk Flags: Number Start End Size Type File system Flags 32.3kB 1049kB 1016kB Free Space 1 1049kB 268GB 268GB primary lvm 268GB 500GB 232GB Free Space
Nieuwe HDD toevoegen aan bestaande VG
Uitbreiding van VG 'data' met extra HDD
Aan de bestaande VG 'data' voegen we extra Harddisk toe.
We doorlopen een aantal stappen die in het hierna uitgewerkt voorbeeld worden beschreven:
- Voeg harde schijf /dev/sdb toe en partitioneer met partitietype 'Linux LVM'
- Initialiseer /dev/sdb1 als LVM Physical Volume (PV /dev/sdb1)
- Voeg PV '/dev/sdb1' toe aan VG 'data'
- a
1. Voeg HDD toe en partitioneer met type 8e 'Linux LVM'
- Zorg dat de harddisk niet gemount is en delete eerst een eventueel aanwezige partitie met # fdisk en schrijf dit eerst weg.
- Voeg harde schijf toe en partitioneer met 'Linux LVM'
Gebruik voor partitionering van schijven groter dan 2 TB # parted ipv # fdisk
Zie Voeg HDD toe en partitioneer met 'Linux LVM'
- In het nu volgende voorbeeld zijn van de output alleen relevante regels weergegeven.
Maak met fdisk op /dev/sdb een nwe partitie aan die de hele HDD beslaat. Zet fyletype naar 8e (linux LVM)
[root@homeserver ~]# fdisk /dev/sdb The device presents a logical sector size that is smaller than the physical sector size. Aligning to a physical sector (or optimal I/O) size boundary is recommended, or performance may be impacted. Welcome to fdisk (util-linux 2.23.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Command (m for help): p Disk /dev/sdb: 2000.4 GB, 2000398934016 bytes, 3907029168 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 4096 bytes Disk label type: dos Disk identifier: 0x000c128a Device Boot Start End Blocks Id System Command (m for help): n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): p Partition number (1-4, default 1): 1 First sector (2048-3907029167, default 2048): 2048 Last sector, +sectors or +size{K,M,G} (2048-3907029167, default 3907029167): 3907029167 Partition 1 of type Linux and of size 1.8 TiB is set Command (m for help): t Selected partition 1 Hex code (type L to list all codes): 8e Changed type of partition 'Linux' to 'Linux LVM' Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks.
2. Initialiseer /dev/sdb1 als LVM Physical Volume
[root@testserver ~]# pvcreate /dev/sdb1
Physical volume "/dev/sdc1" successfully created
Confirmeer initialisatie
[root@testserver ~]# lvmdiskscan /dev/main/root [ 10.00 GiB] /dev/sda1 [ 500.00 MiB] /dev/main/swap [ 7.81 GiB] /dev/sda2 [ 100.00 GiB] LVM physical volume /dev/main/var [ 10.00 GiB] /dev/sda3 [ 1.72 TiB] LVM physical volume /dev/main/logs [ 10.00 GiB] /dev/data/data0 [ 1.72 TiB] /dev/sdb1 [ 1.82 TiB] LVM physical volume 4 disks 2 partitions 0 LVM physical volume whole disks 3 LVM physical volumes
Geef nieuwe status weer met LVM commando's
Note: alleen relevante outputregels weergegeven
[root@homeserver ~]# pvs PV VG Fmt Attr PSize PFree /dev/sda2 main lvm2 a-- 100.00g 62.19g /dev/sda3 data lvm2 a-- 1.72t 532.00m /dev/sdb1 lvm2 --- 1.82t 1.82t [root@homeserver ~]# pvdisplay /dev/sdb1 "/dev/sdb1" is a new physical volume of "1.82 TiB" --- NEW Physical volume --- PV Name /dev/sdb1 PV Size 1.82 TiB
3. Voeg PV '/dev/sdb1' toe aan VG 'data'
Geef status VG 'data'
[root@homeserver ~]# vgdisplay data --- Volume group --- VG Name data Format lvm2 Cur PV 1 Act PV 1 VG Size 1.72 TiB Alloc PE / Size 451072 / 1.72 TiB Free PE / Size 133 / 532.00 MiB
Voeg PV /dev/sdb1 toe
[root@homeserver ~]# vgextend data /dev/sdb1
Volume group "data" successfully extended
Geef status VG 'data'
[root@homeserver ~]# vgdisplay data --- Volume group --- VG Name data Format lvm2 Cur PV 2 Act PV 2 VG Size 3.54 TiB Alloc PE / Size 451072 / 1.72 TiB Free PE / Size 477064 / 1.82 TiB
4. Extend LV 'data0' met vrije ruimte
Extend LV 'data0' met alle vrije ruimte in VG 'data'
[root@homeserver ~]# lvextend -l +100%FREE /dev/data/data0
Size of logical volume data/data0 changed from 1.82 TiB (477064 extents)
to 3.54 TiB (928136 extents).
Logical volume data/data0 successfully resized.
Geef status VG 'data'
[root@homeserver ~]# vgdisplay data --- Volume group --- VG Name data Format lvm2 Cur PV 2 Act PV 2 VG Size 3.54 TiB Alloc PE / Size 928136 / 3.54 TiB Free PE / Size 0 / 0
Geef status LV 'data'
[root@homeserver ~]# lvdisplay data
--- Logical volume ---
LV Path /dev/data/data0
LV Name data0
VG Name data
LV Size 3.54 TiB
5. Vergroot filesysteem naar het nieuwe LV volume
[root@homeserver ~]# resize2fs /dev/data/data0
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/data/data0 is mounted on /store/data0; on-line resizing required
old_desc_blocks = 221, new_desc_blocks = 454
The filesystem on /dev/data/data0 is now 950411264 blocks long.
Gebruik xfs_growfs in plaats van resize2fs als er sprake is van het xfs filesystem
[root@testserver ~]# xfs_growfs /dev/data/data0 meta-data=... data blocks changed from ..... to .....
Confirmeer status
[root@homeserver ~]# df -h
Filesystem Size Used Avail Use% Mounted on
...
/dev/mapper/data-data0 3.5T 68M 3.4T 1% /store/data0
...
Vervang (slechte of te kleine) HDD in bestaande VG
Als een HDD (PV) in een LVM tekenen toont van storing is het zaak deze te vervangen voordat deze schijf niet meer aanspreekbaar is en daarmee alle data verloren gaan.
Als een gecrashte HDD onderdeel is van een VG zijn we niet alleen de data kwijt van deze éne HDD maar alle data van de VG waar deze HDD onderdeel is, samen met 1 of meerdere HDD's (PV's).
In dit voorbeeld vergroten we de te klein wordende VG 'datalive' door de enige PV /dev/sdb1 in deze VG te vervangen door een HDD met een grotere partitie.
Met de LVM kunnen we dit alleen oplossen door eerst een lege of nieuwe HDD toe te voegen aan de VG en vervolgens de data over te zetten van de 'slechte of te kleine' schijf naar de vervanger. Het is daarbij zaak dat het fysieke volume van de nwe HDD gelijk is of groter dan die van de PV die we over willen zetten.
Plaats maken voor extra schijf
We moeten dus om te beginnen plaats maken door een bestaande schijf te ontkoppelen. In onze server kan hiervoor heel goed de HDD (dev/sdd) van de VG 'safe' worden gebruikt.
- Markeer in crontab alle cron's die mogelijk backups starten naar de LV safe-vault
- Markeer in /etc/fstab de mount naar /vault
...
# /dev/mapper/safe-vault /vault ext4 defaults 1 2
... - Stop de server
Ontkoppel op /dev/sdd de 'vault' HDD en sluit de nwe HDD aan.
Start de server
Procedure
Volg de onderstaande stappen voor het overzetten van de data en vervolgens verwijderen van de oude PV
1. Geef status weer en maak nieuwe partitie
Geef status weer na plaatsen nieuwe HDD
Note: alleen relevante outputregels weergegeven
[root@testserver ~]# lvmdiskscan
...
/dev/sdb1 [ 465.76 GiB] LVM physical volume
...
/dev/sdd [ 1.82 TiB]
...
[root@testserver ~]# pvs ... /dev/sdb1 datalive lvm2 a-- 465.76g 0 ...
[root@testserver ~]# df -h ... /dev/mapper/datalive-live 459G 149G 287G 35% /home ...
Maak partitie aan op nieuwe HDD /dev/sdd
Gebruik voor partitionering van schijven groter dan 2 TB # parted ipv # fdisk
Zie Voeg HDD toe en partitioneer met 'Linux LVM'
[root@testserver ~]# fdisk /dev/sdd Command (m for help): n Partition type: p Partition number (1-4, default 1): 1 First sector using default 2048 Last sector using default value 3907029167 Partition 1 of type Linux and of size 1.8 TiB is set Command (m for help): t Selected partition 1 Hex code (type L to list all codes): 8e Changed type of partition 'Linux' to 'Linux LVM' Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks.
2. Initialiseer /dev/sdd1 als LVM Physical Volume
[root@testserver ~]# pvcreate /dev/sdd1
Physical volume "/dev/sdd1" successfully created
Confirmeer initialisatie
Note: alleen relevante outputregels weergegeven
[root@testserver ~]# lvmdiskscan ... /dev/sdd1 [ 1.82 TiB] LVM physical volume ...
[root@testserver ~]# pvs ... /dev/sdd1 lvm2 --- 1.82t 1.82t ...
[root@testserver ~]# pvdisplay /dev/sdd1
"/dev/sdd1" is a new physical volume of "1.82 TiB"
PV Name /dev/sdd1
VG Name
PV Size 1.82 TiB
3. Voeg PV '/dev/sdd1' toe aan VG 'datalive'
[root@testserver ~]# vgextend datalive /dev/sdd1 Volume group "datalive" successfully extended
Confirmeer toevoeging
[root@testserver ~]# vgdisplay datalive --- Volume group --- VG Name datalive Format lvm2 VG Size 2.27 TiB
4. Verhuis data binnen VG van PV /dev/sdb1 naar PV /dev/sdd1
[root@testserver ~]# pvmove /dev/sdb1 /dev/sdd1 /dev/sdb1: Moved: 0.00% /dev/sdb1: Moved: 1.11% ....etc /dev/sdb1: Moved: 100.0%
5. Verwijder PV /dev/sdb1 uit VG datalive en de-initialiseer LVM
[root@testserver ~]# vgreduce datalive /dev/sdb1 Removed "/dev/sdb1" from volume group "datalive" [root@testserver ~]# pvremove /dev/sdb1 Labels on physical volume "/dev/sdb1" successfully wiped.
6. Extend LV 'live' met vrije ruimte
Rapporteer volume VG 'datalive' na toevoeging nieuw PV en verwijdering oude PV
[root@testserver ~]# vgdisplay datalive --- Volume group --- VG Name datalive Format lvm2 Alloc PE / Size 119234 / 465.76 GiB Free PE / Size 357697 / 1.36 TiB
Van PV /dev/sdd1 is 466 GiB in gebruik en nog 1.36 TiB vrij.
Verleng (extend) LV 'live' naar 100% van PV '/dev/sdd1'
[root@testserver ~]# lvextend -l +100%FREE /dev/datalive/live
Size of logical volume datalive/live changed from 465.76 GiB (119234 extents) to 1.82 TiB (476931 extents).
Logical volume datalive/live successfully resized.
Confirmeer nieuw volume LV 'live'
[root@testserver ~]# vgdisplay datalive --- Volume group --- VG Name datalive Format lvm2 Alloc PE / Size 476931 / 1.82 TiB Free PE / Size 0 / 0
[root@testserver ~]# lvdisplay /dev/datalive
--- Logical volume ---
LV Path /dev/datalive/live
LV Name live
VG Name datalive
LV Size 1.82 TiB
7. Vergroot filesysteem naar het nieuwe LV volume
[root@testserver ~]# resize2fs /dev/datalive/live resize2fs 1.42.9 (28-Dec-2013) Filesystem at /dev/datalive/live is mounted on /store/live; on-line
resizing required old_desc_blocks = 59, new_desc_blocks = 233 The filesystem on /dev/datalive/live is now 488377344 blocks long.
Gebruik xfs_growfs in plaats van resize2fs als er sprake is van het xfs filesystem
[root@testserver ~]# xfs_growfs /dev/main/root meta-data=... data blocks changed from ..... to .....
Confirmeer
[root@testserver ~]# df -h Filesystem Size Used Avail Use% Mounted on ... /dev/mapper/datalive-live 1.8T 149G 1.6T 9% /home ...
8. Delete partitie /dev/sdb1, verwijder HDD en restore Server
[root@testserver ~]# fdisk /dev/sdb Command (m for help): d Selected partition 1 Partition 1 is deleted Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks.
Verwijder HDD, plaats 'vault' disk terug en mount
- Stop de server
- Verwijder de HDD op Sata 2 (/dev/sdb)
- Verhuis de nieuwe HDD met VG 'datalive' van Sata 4 naar Sata 2
- We moesten om te beginnen plaats maken voor een nieuwe HDD en hiervoor verwijderden we de HDD met VG 'safe'.
Plaats deze HDD nu terug op zijn oorspronkelijke plaats Sata 4 - Start de server
- Verwijder in /etc/fstab de markering voor de mount naar /vault
- ...
/dev/mapper/safe-vault /vault ext4 defaults 1 2
... - Re-mount /vault met commando # mount -a
- Verwijder in crontab alle aangebrachte markeringen van de cron's die mogelijk backups starten naar de LV safe-vault
In LVM gebruikte HDD terugwinnen
Voorbeeld: Recover gehele HDD /dev/sdb uit VG
1. Verwijder PV uit VG.
Als we een HDD elders in willen zetten die tot nog toe tot één of meerdere VG's behoorde moeten we eerst de PV's uit de VG's verwijderen en de-initialiseren.
Dit kunnen we bewerkstelligen zoals omschreven in de sectie Verwijder PV '/dev/sda3' uit VG 'data' of wat meer radicaal met het commando # pvremove --force --force /dev/sdb1. Als de HDD meerdere partities en/of PV's bevatte herhaal dit dan voor elke PV, bijvoorbeeld # pvremove --force --force /dev/sdb1.
Toen de HDD ingebruik genomen werd, werd deze gepartitioneerd als Linux
LVM. Zie Voeg HDD toe en partitioneer met 'Linux LVM', deze moet nu teruggezet worden naar Linux.
Dit doen we met commando #
pvremove /dev/sdb1, hiermee wordt de lvm-flag verwijderd en is de partitie weer een standaard linux partitie.
We kunnen echter ook (met grof geweld) de hele partitietabel verwijderen zoals hieronder:
2. Verwijder PV uit Partitietabel
Als een HDD gebruikt wordt die voorheen een PV bevatte moet deze PV eerst uit de partitietabel verwijderd worden met het commando:
# dd if=/dev/zero of=/dev/sdb bs=512 count=1
3. Opnieuw partititioneren
Nu kunnen we met fdisk of parted op /dev/sdb een nieuwe partitie(s) aanmaken.