Dies ist ein vollständiger Anfängerleitfaden für LVM (Logical Volume Management) unter Linux.
In diesem Tutorial lernen Sie das Konzept von LVM, seine Komponenten und warum Sie es verwenden sollten.
Ich werde mich nicht nur auf die theoretische Erklärung beschränken. Ich werde auch praktische Beispiele für das Erstellen und Verwalten von LVMs in Linux zeigen.
Kurz gesagt, ich werde Ihnen alle notwendigen Informationen geben, die Sie benötigen, um mit LVM in der realen Welt zu arbeiten.
Was ist LVM unter Linux?
LVM steht für Logical Volume Management. Dies ist eine alternative Methode zur Verwaltung von Speichersystemen als die herkömmliche partitionsbasierte Methode. In LVM erstellen Sie anstelle von Partitionen logische Volumes, und dann können Sie diese Volumes genauso einfach in Ihr Dateisystem einhängen wie eine Festplattenpartition.
Eine Ausnahme zur vorherigen Anweisung besteht darin, dass Sie keine logischen Volumes für/boot
verwenden können . Das liegt daran, dass GRUB (der gebräuchlichste Bootloader für Linux) nicht von logischen Volumes lesen kann. Die bekannte Alternative zu GRUB, systemd-boot, liest dagegen nur vfat-Dateisysteme, also wird das auch nicht funktionieren. Komponenten von LVM
LVM besteht aus drei Hauptkomponenten:
- Physische Volumes
- Volumengruppen
- Logische Volumes
Obwohl die Liste aus drei Komponenten besteht, sind nur zwei davon direkte Gegenstücke zum Partitionierungssystem. Die folgende Tabelle protokolliert das.
Plattenpartitionierungssystem | LVM |
---|---|
Partitionen | Logische Volumes |
Festplatten | Volumengruppen |
Physische Datenträger haben kein direktes Gegenstück, aber darüber werde ich gleich sprechen.
Warum LVM verwenden?
Der Hauptvorteil von LVM besteht darin, wie einfach es ist, die Größe eines Volumes oder einer Volume-Gruppe zu ändern. Es abstrahiert alle hässlichen Teile (Partitionen, Raw-Festplatten) und hinterlässt uns einen zentralen Speicherpool, mit dem wir arbeiten können.
Wenn Sie jemals den Schrecken der Größenänderung von Partitionen erlebt haben, sollten Sie LVM verwenden.
Laborvorbereitung für praktische Übungen
Dieser Artikel ist nicht nur Theorie. Ich werde dabei aktuelle Befehlsbeispiele zeigen, und der beste Weg, etwas zu lernen, besteht darin, praktisch damit zu arbeiten. Dafür empfehle ich Ihnen, eine virtuelle Maschine zu verwenden.
Um Ihnen dabei zu helfen, habe ich bereits eine einfache Vagrant-Datei vorbereitet, mit der Sie eine sehr leichte virtuelle Maschine mit VirtualBox hochfahren können. Diese virtuelle Maschine verfügt über drei zusätzliche Festplatten, die Sie und ich für die folgenden Befehlsbeispiele verwenden können.
Erstellen Sie irgendwo in Ihrem Dateisystem ein Verzeichnis und speichern Sie dort Folgendes in einer Datei mit dem Namen Vagrantfile
.
Vagrant.configure "2" do |config|
config.vm.box = "ubuntu/focal64"
config.vm.hostname = "lvm"
3.times {|i| config.vm.disk :disk, size: "5GB", name: "drive-#{i}"}
config.vm.provider :virtualbox do |machine|
machine.memory = 1024
machine.cpus = 1
machine.customize ["modifyvm", :id, "--cpuexecutioncap", "50"]
end
end
# vi: set ft=ruby
Oder wenn Sie möchten, können Sie wget
verwenden oder curl
um die Datei von meinem Kern herunterzuladen.
wget https://gist.githubusercontent.com/debdutdeb/98ed1b6aef36885d07ce8247188dfd5e/raw/524259da5dfa2d8750883d01c8159829729e224d/Vagrantfile
Stellen Sie sicher, dass Sie Vagrant und VirtualBox installiert haben.
Sobald die Vagrant-Datei vorhanden ist, setzen Sie die Umgebungsvariable VAGRANT_EXPERIMENTAL
auf disks
.
export VAGRANT_EXPERIMENTAL=disks
Starten Sie schließlich die virtuelle Maschine mit dem folgenden Befehl (stellen Sie sicher, dass Sie sich im selben Verzeichnis wie die Vagrantfile befinden):
vagrant up
Sobald die Maschine läuft, können Sie vagrant ssh
verwenden in SSH hinein und führen Sie die Beispielbefehle aus diesem Artikel aus.
Denken Sie daran, vagrant destroy
auszuführen aus demselben Verzeichnis wie die Vagrantfile, nachdem Sie fertig sind.
Installieren von LVM
Bevor Sie einen der Befehle verwenden können, müssen Sie lvm2
installieren Paket. Das sollte in den meisten modernen Distributionen vorinstalliert sein, insbesondere in den Ubuntu-basierten. Aber trotzdem musste ich dies erwähnen, bevor ich fortfuhr. Um lvm2
zu installieren , konsultieren Sie die Dokumentation Ihrer Distribution.
Hands-on mit LVM
Für diese praktische Anleitung habe ich eine virtuelle Maschine mit 40 GB Root-Speicher (unwichtig) und drei externen Festplatten der Größe 5 GB erstellt. Die Größe dieser Festplatten ist beliebig.
[email protected]:~$ lsblk -o name,size,fstype
NAME SIZE FSTYPE
loop0 55.5M squashfs
loop1 32.3M squashfs
loop2 70.4M squashfs
sda 40G
└─sda1 40G ext4
sdb 10M iso9660
sdc 5G
sdd 5G
sde 5G
Wie Sie sehen können, sind die Geräte, die ich verwenden werde, sdc
, sdd
und sde
.
Erinnern Sie sich, dass ich Ihnen gesagt habe, dass LVM aus drei Hauptkomponenten besteht?
- Physische Volumes
- Volumengruppen
- Logische Volumes
Es ist Zeit, sie einen nach dem anderen zu sehen.
1. Physische Volumes
Das Allererste, was Sie über LVM wissen müssen, sind physische Volumes. Physische Volumes sind die Rohmaterialien oder Bausteine, die verwendet werden, um die Abstraktion zu erreichen, die logische Volumes sind. Einfacher ausgedrückt sind physische Volumes die logische Einheit eines LVM-Systems.
Ein physisches Volume kann alles sein, eine Raw-Festplatte oder eine Festplattenpartition. Das Erstellen und Initialisieren eines physischen Volumes ist dasselbe. Beides bedeutet, dass Sie nur die Bausteine (d. H. Partitionen, Festplatten) für weitere Operationen vorbereiten. Dies wird gleich klarer.
Dienstprogramme: Alle Dienstprogramme, die physische Volumes verwalten, beginnen mit den Buchstaben pv
für P physikalisches V olume. Z.B. pvcreate
, pvchange
, pvs
, pvdisplay
usw.
Physische Volumes erstellen
Sie können ein physisches Volume erstellen, indem Sie eine rohe, nicht partitionierte Festplatte oder die Partitionen selbst verwenden.
Wie ich bereits erwähnt habe, habe ich drei externe Laufwerke an meine virtuelle Maschine angeschlossen, beginnen wir mit /dev/sdc
.
Wir verwenden den pvcreate
Befehl zum Erstellen eines physischen Volumes. Übergeben Sie ihm einfach den Gerätenamen und sonst nichts.
sudo pvcreate /dev/sdc
Sie sollten so etwas sehen:-
[email protected]:~$ sudo pvcreate /dev/sdc
Physical volume "/dev/sdc" successfully created.
Als nächstes werde ich /dev/sdd
partitionieren in gleiche Teile. Verwenden Sie ein beliebiges Tool, cfdisk
, parted
, fdisk
usw. gibt es viele Werkzeuge, um diese Aufgabe zu erfüllen.
[email protected]:~$ lsblk -o name,size,fstype | grep sdd
sdd 5G
├─sdd1 2.5G
└─sdd2 2.5G
Sie können jetzt schnell zwei weitere physische Volumes aus diesen beiden Partitionen in einem einzigen Schritt erstellen, übergeben Sie diese beiden Geräte an pvcreate
sofort.
sudo pvcreate /dev/sdd1 /dev/sdd2
Schau mal:-
[email protected]:~$ sudo pvcreate /dev/sdd1 /dev/sdd2
Physical volume "/dev/sdd1" successfully created.
Physical volume "/dev/sdd2" successfully created.
Auflisten der verfügbaren physischen Volumes
Es gibt drei Befehle, die Sie verwenden können, um die Liste der verfügbaren physischen Volumes abzurufen, pvscan
, pvs
und pvdisplay
. Im Allgemeinen müssen Sie diesen Befehlen nichts weitergeben.
pvscan
:-
[email protected]:~$ sudo pvscan
PV /dev/sdc lvm2 [5.00 GiB]
PV /dev/sdd1 lvm2 [2.50 GiB]
PV /dev/sdd2 lvm2 [<2.50 GiB]
Total: 3 [<10.00 GiB] / in use: 0 [0 ] / in no VG: 3 [<10.00 GiB]
pvs
:-
[email protected]:~$ sudo pvs
PV VG Fmt Attr PSize PFree
/dev/sdc lvm2 --- 5.00g 5.00g
/dev/sdd1 lvm2 --- 2.50g 2.50g
/dev/sdd2 lvm2 --- <2.50g <2.50g
pvdisplay
:-
[email protected]:~$ sudo pvdisplay
"/dev/sdc" is a new physical volume of "5.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdc
VG Name
PV Size 5.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID SzSkdD-xKYa-4y7P-teyU-481p-uiQ8-qieMJJ
"/dev/sdd1" is a new physical volume of "2.50 GiB"
--- NEW Physical volume ---
PV Name /dev/sdd1
VG Name
PV Size 2.50 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID 553Iy4-JJ21-LfIw-udtO-j9Cd-7gFS-iXXFVS
"/dev/sdd2" is a new physical volume of "<2.50 GiB"
--- NEW Physical volume ---
PV Name /dev/sdd2
VG Name
PV Size <2.50 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID bf7ghn-QkPm-EUdp-GdyW-shMG-5sMn-VhNtYB
Wie Sie sehen können, geben Ihnen diese Befehle neben der bloßen Auflistung der physischen Volumes auch eine Menge anderer Informationen über diese Volumes.
Entfernen eines physischen Volumes
Sie können ein physisches Volume mit pvremove
entfernen Befehl. Genau wie pvcreate
, übergeben Sie einfach die Geräte (die als physische Volumes initialisiert sind) an pvremove
Befehl.
Zur Demonstration entferne ich /dev/sdd2
aus der Liste.
sudo pvremove /dev/sdd2
Die Ausgabe sollte identisch sein mit:-
[email protected]:~$ sudo pvremove /dev/sdd2
Labels on physical volume "/dev/sdd2" successfully wiped.
Listen Sie nun die physischen Volumes mit sudo pvs
auf
[email protected]:~$ sudo pvs
PV VG Fmt Attr PSize PFree
/dev/sdc lvm2 --- 5.00g 5.00g
/dev/sdd1 lvm2 --- 2.50g 2.50g
/dev/sdd2
ist nicht mehr hier.
2. Volumengruppen
Datenträgergruppen sind Sammlungen physischer Datenträger. Es ist die nächste Abstraktionsebene in LVM. Datenträgergruppen sind der Speicherpool, der die Speicherkapazität mehrerer Rohspeichergeräte kombiniert.
Dienstprogramme: Alle Namen von Volumengruppendienstprogrammen beginnen mit vg
, steht für V olume G Gruppe, z. vgcreate
, vgs
, vgrename
usw.
Erstellen von Volumegruppen
Datenträgergruppen werden mit vgcreate
erstellt Befehl. Das erste Argument für vgcreate
ist der Name, den Sie dieser Datenträgergruppe geben möchten, und der Rest ist die Liste der physischen Datenträger, die den Speicherpool sichern werden.
sudo vgcreate lvm_tutorial /dev/sdc /dev/sdd1
Beispiel:-
[email protected]:~$ sudo vgcreate lvm_tutorial /dev/sdc /dev/sdd1
Volume group "lvm_tutorial" successfully created
Auflisten der Volumegruppen
Das Auflisten von Datenträgergruppen ähnelt dem Auflisten physischer Datenträger, Sie können verschiedene Befehle mit unterschiedlichen Ausführlichkeitsstufen verwenden, vgdisplay
, vgscan
und vgs
.
Ich persönlich bevorzuge die vgs
Befehl, sudo vgs
[email protected]:~$ sudo vgs
VG #PV #LV #SN Attr VSize VFree
lvm_tutorial 2 0 0 wz--n- 7.49g 7.49g
vgscan
:-
[email protected]:~$ sudo vgscan
Found volume group "lvm_tutorial" using metadata type lvm2
vgdisplay
:-
[email protected]:~$ sudo vgdisplay
--- Volume group ---
VG Name lvm_tutorial
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 2
Act PV 2
VG Size 7.49 GiB
PE Size 4.00 MiB
Total PE 1918
Alloc PE / Size 0 / 0
Free PE / Size 1918 / 7.49 GiB
VG UUID LYVE9P-vY0G-OAW6-an8q-yfBx-rrB1-YU61m1
Auflisten der physischen Volumes, die einer Volume-Gruppe zugeordnet sind
Sie können alle physischen Datenträger auflisten, die mit einer bestimmten Datenträgergruppe verbunden sind, indem Sie den folgenden Befehl verwenden:-
sudo pvdisplay -S vgname=<volume_group_name> -C -o pv_name
Beispiel:-
[email protected]:~$ sudo pvdisplay -S vgname=lvm_tutorial -C -o pv_name
PV
/dev/sdc
/dev/sdd1
Sie können auch die Anzahl der physischen Volumes abrufen.
sudo vgdisplay -S vgname=<volume_group_name> -C -o pv_count
Beispiel:-
[email protected]:~$ sudo vgdisplay -S vgname=lvm_tutorial -C -o pv_count
#PV
3
Erweitern einer Volume-Gruppe
Das Erweitern einer Datenträgergruppe bedeutet das Hinzufügen zusätzlicher physischer Datenträger zu einer Datenträgergruppe. Dazu vgextend
Befehl verwendet wird. Die Syntax ist einfach:-
vgextend <volume_group> <physical_volume1> <physical_volume2> ....
Lassen Sie uns unser lvm_tutorial
erweitern Lautstärke durch /dev/sdd2
.
sudo vgextend lvm_tutorial /dev/sdd2
Konzentrieren Sie sich auf die Ausgabe:-
[email protected]:~$ sudo vgextend lvm_tutorial /dev/sdd2
Physical volume "/dev/sdd2" successfully created.
Volume group "lvm_tutorial" successfully extended
Im Abschnitt über physische Volumes haben wir am Ende /dev/sdd2
entfernt als physisches Volume, aber eine Partition oder Raw-Festplatte muss als physisches Volume initialisiert werden, da LVM es sonst nicht als Teil einer Volume-Gruppe verwalten kann. Also vgextend
macht /dev/sdd2
bereit bevor Sie es der Volume-Gruppe hinzufügen.
Listen Sie nun zur Sicherheit die physischen Volumes auf, die dieser Volume-Gruppe zugeordnet sind.
sudo pvdisplay -S vgname=lvm_tutorial -C -o pv_name
Ausgabe:-
[email protected]:~$ sudo pvdisplay -S vgname=lvm_tutorial -C -o pv_name
PV
/dev/sdc
/dev/sdd1
/dev/sdd2
/dev/sdd2
ist jetzt wie erwartet in der Liste.
Reduzieren einer Volume-Gruppe
So wie das Erweitern einer Volume-Gruppe das Hinzufügen eines weiteren physischen Volumes bedeutet, bedeutet das Reduzieren, dass ein oder mehrere physische Volumes entfernt werden.
Wir verwenden den vgreduce
Befehl dazu. Die allgemeine Syntax lautet wie folgt:-
vgreduce <vgname> <physical_volume1> <physical_volume2> ....
Lassen Sie uns die physischen Volumes /dev/sdc
entfernen und /dev/sdd1
.
sudo vgreduce lvm_tutorial /dev/sdc /dev/sdd1
Beispiel:-
[email protected]:~$ sudo vgreduce lvm_tutorial /dev/sdc /dev/sdd1
Removed "/dev/sdc" from volume group "lvm_tutorial"
Removed "/dev/sdd1" from volume group "lvm_tutorial"
Wenn eine Volume-Gruppe aktive logische Volumes hat, können Sie sie nicht auf diese Weise reduzieren. Listen Sie die physischen Volumes erneut auf.
sudo pvdisplay -S vgname=lvm_tutorial -C -o pv_name
Ausgabe:-
[email protected]:~$ sudo pvdisplay -S vgname=lvm_tutorial -C -o pv_name
PV
/dev/sdd2
Diese beiden physischen Volumes sind weg.
Fügen Sie nun für den Rest dieses Artikels diese beiden physischen Volumes wieder hinzu.
sudo vgextend lvm_tutorial /dev/sdc /dev/sdd1
Entfernen einer Volume-Gruppe
Sie können ein logisches Volume mit vgremove
entfernen Befehl.
sudo vgremove lvm_tutorial
Führen Sie diesen Befehl jetzt nicht aus, da Sie sonst die Volumengruppe neu erstellen müssten. Wenn Sie es ausprobieren möchten, führen Sie es ganz am Ende dieses Artikels aus.
3. Logische Volumes
Damit wirst du hauptsächlich arbeiten. Ein logisches Volume ist wie eine Partition, aber anstatt auf einer Raw-Festplatte sitzt es auf einer Volume-Gruppe. Sie können,
- Formatieren Sie ein logisches Volume mit einem beliebigen Dateisystem.
- Mounten Sie es an einer beliebigen Stelle im gewünschten Dateisystem ein.
In diesem Abschnitt lernen Sie,
- So erstellen Sie logische Volumes.
- Allgemeine Operationen auf einem logischen Volume.
- Größe eines logischen Volumes ändern.
- Logisches Volume entfernen.
Dienstprogramme: Alle Namen von Volumengruppendienstprogrammen beginnen mit lv
, steht für L logisches V olume. z.B. lvcreate
, lvs
, lvreduce
usw.vgcreate
, vgs
, vgrename
usw.
Logische Volumes erstellen
Logische Volumes werden mit lvcreate
erstellt Befehl. Die häufig verwendete Syntax sieht wie folgt aus,
sudo lvcreate -L <size> -n <lvname> <vgname>
Lassen Sie es mich für Sie aufschlüsseln:-
- Das
-L
Option für die Größe des neuen logischen Volumes ist, können Sie eine beliebige Ganzzahl mit "GB", "MB" oder "KB" am Ende verwenden. Z.B. "1 GB". - Das
-n
Option ist für die Benennung dieses logischen Volumens. - Schließlich müssen Sie ihm den Namen der Volumengruppe übergeben, zu der dieses logische Volumen gehören wird. Stellen Sie also sicher, dass die Volume-Gruppe über den verfügbaren Speicherplatz verfügt, während Sie dem logischen Volume eine Größe zuweisen.
Führen Sie den folgenden Befehl auf der virtuellen Maschine aus:-
sudo lvcreate -L 5GB -n lv1 lvm_tutorial
Beispielausgabe:-
[email protected]:~$ sudo lvcreate -L 5GB -n lv1 lvm_tutorial
Logical volume "lv1" created.
Allgemeine Operationen auf einem logischen Volume
Wie ich bereits sagte, können Sie ein Dateisystem auf ein logisches Volume legen und es überall im Dateisystem einhängen.
Nach der Erstellung finden Sie das logische Volume in /dev/<vgname>/<lvname>
Weg. In unserem Fall befindet sich das Volume beispielsweise in /dev/lvm_tutorial/lv1
.
[email protected]:~$ ls -l /dev/lvm_tutorial/lv1
lrwxrwxrwx 1 root root 7 May 17 02:09 /dev/lvm_tutorial/lv1 -> ../dm-0
Jetzt können Sie es wie jede andere Partition verwenden. Formatieren Sie es mit ext4,
sudo mkfs.ext4 /dev/lvm_tutorial/lv1
Mounten Sie es an einer Stelle in Ihrer aktuellen Verzeichnisstruktur wie /mnt
,
sudo mount -t ext4 /dev/lvm_tutorial/lv1 /mnt
Größe eines logischen Volumes ändern
Sie können ein logisches Volume mit lvextend
erweitern Befehl und reduzieren Sie seine Größe mit lvreduce
Befehl. Oder Sie können den einzelnen Befehl lvresize
verwenden um beide Aufgaben zu erfüllen.
Lassen Sie uns zuerst sehen, ob die Volume-Gruppe noch Platz hat oder nicht.
sudo vgs -S vgname=lvm_tutorial -o vg_free
Ausgabe:-
[email protected]:~$ sudo vgs -S vgname=lvm_tutorial -o vg_free
VFree
<4.99g
Laut Ausgabe habe ich noch etwas Platz, also erhöhen wir die Volume-Größe um 2 GB.
Denken Sie daran, dass das logische Volume immer noch unter /mnt
gemountet ist .
[email protected]:~$ mount | grep '/mnt'
/dev/mapper/lvm_tutorial-lv1 on /mnt type ext4 (rw,relatime)
Verwenden Sie den folgenden Befehl, um die Größe des Volumes zu ändern:-
sudo lvresize -L +2GB lvm_tutorial/lv1
Die allgemeine Syntax sieht ungefähr so aus:-
lvresize -L [+|-][Size] <vgname>/<lvname>
Das Symbol + oder - nach -L
hängt davon ab, ob Sie versuchen, die Lautstärke zu erhöhen oder zu verringern.
Nachdem die Volume-Größe zugenommen hat, muss auch das Dateisystem in der Größe angepasst werden. Für ext4 ist der zu verwendende Befehl resize2fs
.
sudo resize2fs /dev/lvm_tutorial/lv1
Ausgabe:-
[email protected]:~$ sudo resize2fs /dev/lvm_tutorial/lv1
resize2fs 1.45.5 (07-Jan-2020)
Filesystem at /dev/lvm_tutorial/lv1 is mounted on /mnt; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/lvm_tutorial/lv1 is now 1835008 (4k) blocks long.
Nicht alle Dateisysteme unterstützen Hot Resizing, Ext4 und XFS gehören zu den unterstützten. Ich empfehle Ihnen, sich an diese zu halten. Das Reduzieren eines logischen Volumes ist eine etwas kompliziertere Aufgabe und ich werde hier in diesem Artikel nicht darauf eingehen. Ich verringere die Größe dieses Volumes um 1 GB.
Entfernen eines logischen Volumes
Mit lvremove
entfernen Sie ein logisches Volume Befehl. Die Befehlssyntax lautet wie folgt:-
lvremove <vgname>/<lvname>
Führen Sie diesen Befehl auf der virtuellen Maschine aus:-
sudo lvremove lvm_tutorial/lv1
Ausgabe:-
[email protected]:~$ sudo lvremove lvm_tutorial/lv1
Do you really want to remove and DISCARD active logical volume lvm_tutorial/lv1? [y/n]: y
Logical volume "lv1" successfully removed
Es gibt eine Vielzahl anderer Operationen, die auf logischen Volumes, physischen Volumes und Volume-Gruppen durchgeführt werden können, aber es ist nicht möglich, all das in einen einzigen Artikel zu schreiben.
Ich habe Ihnen eine weitere Diskette /dev/sde
überlassen in der virtuellen Maschine. Verwenden Sie es, üben Sie einige der Befehle aus diesem Artikel, erstellen Sie eine neue Volume-Gruppe, erweitern Sie eine vorhandene, üben Sie einfach.
Ich hoffe, dieser Artikel war hilfreich für Sie. Wenn Sie in Zukunft mehr darüber erfahren möchten, lassen Sie es mich im Kommentarbereich unten wissen.