githubixx.lvm
ansible-role-lvm
Diese Ansible-Rolle installiert Linux Logical Volume Manager (LVM) Ressourcen wie Volume Groups
(VG), Logical Volumes
(LV) und verwaltet die Erstellung von Dateisystemen
und Mountpunkten
.
Changelog
Siehe CHANGELOG
Rollenvariablen
Standardmäßig werden keine LVM-Ressourcen erstellt. Siehe Beispiele unten. Der Schlüssel lvm_vgs
ist der Einstiegspunkt für alle LVM-Ressourcen, die erstellt werden sollen.
lvm_vgs: []
Hier sind ein paar Beispiele zur Erstellung von LVM-Ressourcen (wie die Löschung gehandhabt wird, siehe weiter unten).
Erstelle eine Volume-Gruppe (VG) namens test-vg-01
, die das Gerät /dev/vdb
als physisches Volume nutzt:
lvm_vgs:
- vgname: test-vg-01
pvs: /dev/vdb
state: present
Alle drei Parameter sind erforderlich! vgname ist der Name der Volume-Gruppe. pvs ist eine Liste von durch Kommas getrennten Geräten, die als physische Geräte in dieser Volume-Gruppe verwendet werden. state steuert, ob die Volume-Gruppe existiert.
Um eine VG zu löschen, müssen Sie state: absent
und auch force: true
angeben. Im Gegensatz zum force
-Parameter des community.general.lvg Moduls löscht force: true
keine VGs, die noch (eine) logische Volumen enthalten! Dies soll die versehentliche Löschung von Daten erschweren.
Erstelle eine Volume-Gruppe (VG) namens test-vg-01
, die die Geräte /dev/vdb
und /dev/vdc
als physische Volumes nutzt:
lvm_vgs:
- vgname: test-vg-01
pvs: /dev/vdb,/dev/vdc
state: present
Momentan werden die folgenden zusätzlichen community.general.lvg Parameter unterstützt:
Wie im vorherigen Beispiel, aber auch ein logisches Volume test-lv-01
erstellen und 10%
des verfügbaren VG-Speichers zuweisen:
lvm_vgs:
- vgname: test-vg-01
pvs: /dev/vdb
state: present
lvm_lvs:
- lvname: test-lv-01
size: 10%VG
state: present
Alle logischen Volumen, die eine Volumen-Gruppe enthält, sind unter dem Schlüssel lvm_lvs
aufgeführt. Die Parameter lvname
, size
und state
sind erforderlich! lvname ist der Name des logischen Volumens. size gibt die Größe des logischen Volumens an, basierend auf lvcreate(8) --size
, standardmäßig in Megabyte oder optional mit einer der [bBsSkKmMgGtTpPeE] Einheiten; oder basierend auf lvcreate(8) --extents
als Prozentsatz von [VG|PVS|FREE]; Fließkommawerte müssen mit einer Ziffer beginnen. state steuert, ob das logische Volumen existiert. Um ein LV zu löschen, müssen Sie state: absent
und auch force: true
angeben.
Aktuell werden auch die folgenden zusätzlichen community.general.lvol Parameter unterstützt:
Wie im vorherigen Beispiel, aber auch ein ext4
-Dateisystem erstellen, wobei das logische Volumen test-lv-01
als Gerät für das Dateisystem verwendet wird:
lvm_vgs:
- vgname: test-vg-01
pvs: /dev/vdb
state: present
lvm_lvs:
- lvname: test-lv-01
size: 10%VG
state: present
fs:
type: ext4
state: present
Der Schlüssel fs
gibt an, dass das logische Volumen ein Dateisystem enthalten soll. type gibt an, welches Dateisystem verwendet werden soll. state: present
gibt an, dass das Dateisystem erstellt wird, wenn es noch nicht vorhanden ist. Bei state: absent
werden die Signaturen des Dateisystems auf dem Gerät gelöscht, wenn es ein Dateisystem enthält (wie mit blkid
bekannt). Bei state: absent
werden alle anderen Optionen außer dem Gerät ignoriert, und das Modul schlägt nicht fehl, wenn das Gerät tatsächlich nicht existiert. Bei state: absent
muss auch force: true
angegeben werden, ansonsten wird das Dateisystem nicht berührt. Im Gegensatz zum force Parameter des community.general.filesystem Moduls wird force: true
kein vorhandenes Dateisystem überschreiben. Sie müssen das alte zuerst löschen, um ein neues Dateisystem zu erstellen! Dies soll erneut versehentliche Löschungen vermeiden.
Wie im vorherigen Beispiel, aber auch ein Verzeichnis /mnt1
erstellen und das ext4
-Dateisystem dort einhängen. Dies erzeugt auch einen Eintrag in /etc/fstab
(standardmäßig).
lvm_vgs:
- vgname: test-vg-01
pvs: /dev/vdb
state: present
lvm_lvs:
- lvname: test-lv-01
size: 10%VG
state: present
fs:
type: ext4
state: present
mountpoint:
state: mounted
path:
name: /mnt1
Der Schlüssel mountpoint
verwaltet die mit dem Mountpunkt verbundenen Aktionen. state hat die gleichen Optionen wie das ansible.posix.mount Modul, nämlich mounted
, absent
, present
, unmounted
und remounted
(siehe auch state). state
und path.name
sind erforderlich. path.name
spezifiziert den Namen des Verzeichnisses, in dem der Mountpunkt montiert werden soll. Wenn das Verzeichnis noch nicht existiert, wird es erstellt. Für weitere Optionen siehe das nächste Beispiel.
Wie im vorherigen Beispiel, aber jetzt erhält das Dateisystem ein Label mnt1
. Außerdem wird das Dateisystem unter /mnt1
mit der Dateisystemoption noatime
gemountet. Das Dateisystem wird ebenfalls unter Verwendung des Labels mnt1
gemountet (src: LABEL=mnt1
). Der owner
und die group
des Verzeichnisses /mnt1
werden auf vagrant
gesetzt und die Verzeichnisberechtigungen betragen 0750
:
lvm_vgs:
- vgname: test-vg-01
pvs: /dev/vdb
state: present
lvm_lvs:
- lvname: test-lv-01
size: 10%VG
state: present
fs:
type: ext4
opts: -L mnt1
state: present
mountpoint:
opts: noatime
state: mounted
src: LABEL=mnt1
path:
name: /mnt1
mode: '0750'
owner: vagrant
group: vagrant
Standardmäßig ist mountpoint.src
/dev/ + vgname + / + lvname
. Im obigen Beispiel wurde LABEL=mnt1
verwendet. In opts: -L mnt
wurde die Option bereitgestellt, ein Dateisystem mit diesem Label zu erstellen. Dieses kann später für mountpoint.src
verwendet werden.
mountpoint
unterstützt die folgenden zusätzlichen Parameter:
Erstellen Sie zwei Volume-Gruppen (VG) namens test-vg-01
und test-vg-02
, die das Gerät /dev/vdb
bzw. /dev/vdc
als physische Volumes verwenden:
lvm_vgs:
- vgname: test-vg-01
pvs: /dev/vdb
state: present
- vgname: test-vg-02
pvs: /dev/vdc
state: present
Hier ist ein Beispiel, um einen Mountpunkt auszuhängen und seinen Eintrag aus /etc/fstab
zu löschen:
mountpoint:
state: absent
path:
name: /vg01lv01
Dies funktioniert natürlich nur, wenn der Mountpunkt nicht von einem Programm oder Dienst verwendet wird.
Da das Löschen von Dateisystemen, logischen Volumen (LV) und Volumen-Gruppen (VG) potenziell Ihre Daten gefährden kann, sollte besondere Vorsicht walten! In diesem Fall ist es nicht genug, state: absent
zum Löschen einer solchen Ressource anzugeben. force: true
wird ebenfalls benötigt. Natürlich wird das Löschen einer Volumen-Gruppe, die noch ein logisches Volumen enthält, fehlschlagen. Auch das Löschen eines logischen Volumens mit einem Dateisystem mit state: present
schlägt fehl.
Das folgende Beispiel wird den angegebenen Mountpunkt (/vg02lv01
) aushängen und seinen Eintrag aus /etc/fstab
entfernen, das ext4
-Dateisystem löschen, das logische Volumen (vg02lv01
) löschen und schließlich die Volumen-Gruppe (vg02
) löschen (in dieser Reihenfolge):
lvm_vgs:
- vgname: vg02
pvs: /dev/vdc
state: absent
force: true
lvm_lvs:
- lvname: vg02lv01
size: 10%VG
state: absent
force: true
fs:
type: ext4
state: absent
force: true
mountpoint:
state: absent
path:
name: /vg02lv01
Um Dateisysteme erstellen zu können, sind zusätzliche Pakete erforderlich. Für ext(2|3|4)
benötigen Sie z.B. das Paket e2fsprogs
. Je nachdem, welches Dateisystem Sie einrichten möchten, müssen möglicherweise zusätzliche Pakete installiert oder nicht benötigte Pakete aus der Liste entfernt werden. Natürlich können Sie beliebige Pakete, die Sie installieren möchten, zur Liste hinzufügen.
Standardmäßig sind nur die notwendigen Werkzeuge für ext(2|3|4)
oder xfs
installiert. Für andere Dateisysteme benötigen Sie möglicherweise btrfsprogs/btrfs-progs
, dosfstools
, f2fs-tools
oder reiserfsprogs
z.B.:
# Zusätzliche Pakete für SuSE-kompatible Betriebssysteme
additional_packages_suse:
- e2fsprogs
- xfsprogs
# Zusätzliche Pakete für Debian-kompatible Betriebssysteme
additional_packages_debian:
- e2fsprogs
- xfsprogs
# Zusätzliche Pakete für Redhat-kompatible Betriebssysteme
additional_packages_redhat:
- e2fsprogs
- xfsprogs
# Zusätzliche Pakete für Archlinux-kompatible Betriebssysteme
additional_packages_arch:
- e2fsprogs
- xfsprogs
Im Allgemeinen werden die meisten Optionen der folgenden Module unterstützt:
community.general.lvg
community.general.lvol
community.general.filesystem
ansible.posix.mount
Abhängigkeiten
Diese Rolle hängt von einigen Ansible-Modulen ab:
community.general.lvg
community.general.lvol
community.general.filesystem
ansible.posix.mount
TODO
Momentan sind die folgenden Funktionen nicht implementiert:
- Größe von Volume Groups ändern
- Logisches Volumen verkleinern
- Snapshot von logischen Volumen erstellen
- Größe von logischen Volumen/Dateisystem ändern
Beispiel-Playbook
Beispiel 1 (ohne Rollentag)
- hosts: your-host
roles:
- githubixx.lvm
Beispiel 2 (Rollentag zuweisen)
-
hosts: your-host
roles:
-
role: githubixx.lvm
tags: role-lvm
Weitere Beispiele
Es gibt noch ein paar weitere Beispiele, die zum Testen dieser Rolle verwendet werden. Siehe die molecule Verzeichnisse.
Testen
Diese Rolle hat eine kleine Testumgebung, die mit Molecule, libvirt (vagrant-libvirt) und QEMU/KVM erstellt wurde. Siehe meinen Blogbeitrag Testing Ansible roles with Molecule, libvirt (vagrant-libvirt) and QEMU/KVM wie man es einrichtet. Die Testkonfiguration ist hier.
Danach kann Molecule ausgeführt werden:
molecule converge -s kvm
Dies richtet mehrere virtuelle Maschinen (VM) mit verschiedenen unterstützten Linux-Betriebssystemen ein und erstellt verschiedene LVM-Ressourcen.
Um aufzuräumen, führen Sie aus:
molecule destroy -s kvm
Lizenz
GNU Allgemeine öffentliche Lizenz v3.0 oder später
Autoreninformation
ansible-galaxy install githubixx.lvm