- chalblog - https://blog.is-a-geek.org -

Mehrere Festplatten zusammenfassen mit LVM auf Ubuntu Server / Desktop

Mehrere Festplatten zusammenfassen mit LVM auf Ubuntu Server / Desktop [1]Mehrere Festplatten zu einem zusammenhängenden Speicher zusammenzuführen ist in Linuxsystemen mit Hilfe von LVM sehr einfach zu lösen. Dieses LVM-Volume lässt sich beliebig durch Hinzufügen oder durch Entfernen von Platten vergrößern oder verkleinern. Vor allem für Fileserver mit >2 Harddisks bringt diese Methode einige Vorteile und erspart ständiges Herumkopieren zwischen den einzelnen Partitionen.

In diesem Tutorial werde ich euch zeigen, wie ihr die Festplatten vorbereiten müsst, eine Volumegroup bzw. Logical-Volume erstellt und das LV vergrößert oder verkleinert.

Achtung: Ich übernehme KEINE Verantwortung für einen eventuell auftretenden Datenverlust. Die für das LV verwendeten Festplatten werden neu partitioniert und der Inhalt dieser gelöscht. Sollten sich Daten darauf befinden, müssen diese zuvor gesichert werden.

Das Tutorial beschreibt nicht das Hinzufügen der Systemplatte zu einer Volumegroup, da ich dies persönlich als nicht empfehlenswert betrachte (ausser alle Disks sind in einem RAID1). Es wird nur das Erstellen einer solchen mit zusätzlich vorhandenen Platten gezeigt.

Vorbereitung

Als allererstes sichern wir die Daten der Festplatten, welche wir später verwenden wollen, um einem Datenverlust vorzubeugen.

Jetzt fahren wir mit der Installation der benötigten Pakete fort:

sudo apt-get install blkid lvm2

Festplatten partitionieren und Physical-Volume erstellen

Zuerst müssen wir z.B. mit diesem Befehl in Erfahrung bringen, welche Platten wir verwenden wollen und notieren diese (bei mir in diesem Tutorial sdb,sdc,sdd):

sudo fdisk -l

Um diese später zu einer Volumegroup hinzufügen zu können, müssen wir eine Partition mit dem Typ “Linux LVM” erstellen. Dazu benutzen wir “fdisk”:

sudo fdisk /dev/sdb

Indem man “m” drückt, bekommt man die Befehlsübersicht angezeigt:

Command action
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   d   delete a partition
   l   list known partition types
   m   print this menu
   n   add a new partition
   o   create a new empty DOS partition table
   p   print the partition table
   q   quit without saving changes
   s   create a new empty Sun disklabel
   t   change a partition's system id
   u   change display/entry units
   v   verify the partition table
   w   write table to disk and exit
   x   extra functionality (experts only)

Nun löschen wir mit der Auswahl “d” alle vorhandenen Partitionen. Dann erstellt man mit “n” eine neue und drückt “p” für “primary partition“. Bei Partitionsnummer wählt man “1” und die Zylinderabfragen bestätigt man einfach mit “Enter“.

Command (m for help): >>n<<
Command action
   e   extended
   p   primary partition (1-4) >>p<<
Partition number (1-4): >>1<<
First cylinder (1-60801, default 1): >>ENTER<<
Using default value 1
Last cylinder, +cylinders or +size{K,M,G}: >>ENTER<<
.
.
.

Der soeben erstellten Partition weisen wir den Typ “Linux LVM” zu. Dazu verwendet man das Kommando “t” (change a partition’s system id) und den Hex-Code “8e” als Typ.

Command (m for help): >>t<<
Selected partition 1
Hex code (type L to list codes): >>8e<<
Changed system type of partition 1 to 8e (Linux LVM)

Abschließend muss man die Partitionstabelle mit dem Befehl “w” (write table to disk and exit) noch auf die Platte schreiben.

Dies wiederholt ihr für alle Festplatten, welche ihr später hinzufügen wollt (in meinem Fall sdc, sdd).

Danach erstellen wir auf diesen das “physical volume” (natürlich auf eure Plattennamen und Anzahl anpassen).

sudo pvcreate /dev/sdb1
sudo pvcreate /dev/sdc1
sudo pvcreate /dev/sdd1

Erhält man als Ausgabe Folgendes, ist alles glatt gelaufen.

Physical volume "/dev/sd*1" successfully created

Mit “pvdisplay” kann man sich das Ganze auch noch anzeigen lassen

sudo pvdisplay

Volumegroup und Logical-Volume erstellen

Mit einem einzigen Befehl erstellt man die Gruppe (VOLUMEGROUPNAME auf den gewünschten Namen ändern). Hier kann man auch gleich die Platten angeben, welche eingebunden werden sollen.

sudo vgcreate VOLUMEGROUPNAME /dev/sdb1 /dev/sdc1 /dev/sdd1

Oder man fügt sie mit “vgextend” hinzu:

sudo vgextend VOLUMEGROUPNAME /dev/sde1

Diese Anweisung erzeugt ein logisches Volume über die ganze Größe der Volumegroup (die Namen natürlich wieder ändern):

sudo lvcreate -l 100%FREE -n VOLUMEGROUPNAME LOGICALVOLUMENAME

Man kann jedoch auch wie in diesem Beispiel mehrere Laufwerke mit bestimmter Größe erzeugen (hier 3GB):

sudo lvcreate -L 3G -n VOLUMEGROUPNAME LOGICALVOLUMENAME

Den Gesamtspeicher kann man sich mit “lvdisplay” anzeigen lassen:

sudo lvdisplay
  --- Logical volume ---
  LV Name                /dev/VG01/LV01
  VG Name                VG01
  LV UUID                gsnrPy-rVLH-gnCf-bUTd-35GM-eA44-YSKg19
  LV Write Access        read/write
  LV Status              available
  # open                 1
  LV Size                1.36 TiB
  Current LE             357700
  Segments               3
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           251:0

Dann formatieren wir das Laufwerk wie jedes andere normale auch:

sudo mkfs.ext3 /dev/VOLUMEGROUPNAME/LOGICALVOLUMENAME

Logisches Laufwerk mounten

Um dies zu bewerkstelligen braucht man einen Ordner in diesen gemountet werden soll:

sudo mkdir /mnt/LV1

Danach der “mount” Befehl:

sudo mount /dev/VOLUMEGROUPNAME/LOGICALVOLUMENAME /mnt/LV1

Will man das Laufwerk automatisch beim Start einhängen lassen öffnet man die “fstab” mit nano …

sudo nano /etc/fstab

… und fügt diese Zeile (nach Anpassung der Namen) am Ende der Datei ein.

/dev/VOLUMEGROUPNAME/LOGICALVOLUMENAME /mnt/LV1 ext3 defaults,errors=remount-ro,noatime,nobootwait 0 0

Festplatte hinzufügen und Volume erweitern

Um eine neue Festplatte hinzuzufügen, muss man sie wie oben beschrieben vorbereiten (partitionieren, Typ ändern und pvcreate). Dann kann man diese mit Hilfe von “vgextend” der Gruppe hinzufügen.

sudo vgextend VOLUMEGROUPNAME /dev/sd*1

Ebenso muss das logische Laufwerk vergrößert werden. Entweder wieder auf die gesamte verfügbare Größe …

sudo lvextend -l +100%FREE /dev/VOLUMEGROUPNAME/LOGICALVOLUMENAME

… oder man erweitert das Laufwerk um eine bestimmte Speichergröße (hier um 1GB):

sudo lvextend -L+1G /dev/VOLUMEGROUPNAME/LOGICALVOLUMENAME

Das Dateisystem kann entweder im eingehängen Zustand angepasst werden …

sudo resize2fs /dev/VOLUMEGROUPNAME/LOGICALVOLUMENAME

… oder wem dies zu gewagt erscheint, kann zuvor Unmounten und dann die Größe ändern:

sudo umount /dev/VOLUMEGROUPNAME/LOGICALVOLUMENAME
sudo e2fsck -f /dev/VOLUMEGROUPNAME/LOGICALVOLUMENAME
sudo resize2fs /dev/VOLUMEGROUPNAME/LOGICALVOLUMENAME

Danach wieder Mounten nicht vergessen 😉

Festplatte entfernen

Um eine Platte aus der Volumegroup zu entfernen fängt man mit der Größenänderung des Filesystems an. Bevor “resize2fs” dies zulässt, muss das Dateisystem überprüft werden:

sudo umount /dev/VOLUMEGROUPNAME/LOGICALVOLUMENAME
sudo e2fsck -f /dev/VOLUMEGROUPNAME/LOGICALVOLUMENAME

Dieses verkleinert man um ein paar GB mehr als die Speichergröße der zu entfernenden Platte (in meinem Fall vorher 1500GB, danach 950GB und die Platte, welche es zu entfernen gilt hat 500GB).

sudo resize2fs /dev/VOLUMEGROUPNAME/LOGICALVOLUMENAME 950G

Danach verkleinert man das logische Laufwerk ebenso um ein paar GB mehr:

sudo lvreduce -L -510G /dev/VOLUMEGROUPNAME/LOGICALVOLUMENAME

Dann löscht man die Disk aus der Volumegroup:

sudo vgreduce VOLUMEGROUPNAME /dev/sd*1

Um das logische Laufwerk wieder über die gesamte Größe zu erweitern, führt man folgende Befehle aus:

sudo lvextend -l +100%FREE /dev/VOLUMEGROUPNAME/LOGICALVOLUMENAME
sudo mount /dev/VOLUMEGROUPNAME/LOGICALVOLUMENAME /mnt/MOUNTORDNER
sudo resize2fs /dev/VOLUMEGROUPNAME/LOGICALVOLUMENAME

Festplatte austauschen

Festplatten des Volumegroups lassen sich relativ einfach gegen gleich große oder größere austauschen. Die Vorbereitung (partitionieren, Typ ändern und pvcreate) und das Hinzufügen zur VG (vgextend) wurde oben schon beschrieben.

Hat man dies erledigt, lässt man die Daten der alten Platte mit “pvmove” im LVM verteilen.

sudo pvmove /dev/sd*1

Nach dem Tausch gegen eine größere Platte kann das LV folgendermaßen wieder auf die ganze VG erweitert werden:

sudo lvextend -l +100%FREE /dev/VOLUMEGROUPNAME/LOGICALVOLUMENAME
sudo mount /dev/VOLUMEGROUPNAME/LOGICALVOLUMENAME /mnt/MOUNTORDNER
sudo resize2fs /dev/VOLUMEGROUPNAME/LOGICALVOLUMENAME

 
 

Viel Spaß beim Befüllen des Volumes!