Einbinden weiterer Festplatten in eine virtuelle Umgebung unter Proxmox

Hinweis: Alle vorbereitenden Maßnahmen werden im Terminal der Virtualisierungssoftware Proxmox (Version 5.4.78-2-pve) als root vorgenommen. Entweder findet der Zugriff per Terminalsoftware putty remote statt oder von der Proxmox Weboberfläche, wenn Rechenzentrum (Datacenter) ausgewählt ist über die Konsole.

Die Problemstellung ist klar. Virtuelle Umgebungen benötigen enormen Speicherplatz in zweierlei Hinsicht, Hauptspeicherplatz und “Festplattenspeicherplatz”. Wobei der Festplattenspeicherplatz bei SSD nicht mehr so “fest” ist wie bei den langsameren aber meist günstigeren HDD. Und die heute immer leistungsfähiger werdenden CPUs bieten bei richtigem Einsatz sogar ein Loadbalancing, um die Last gleichmäßiger auf die virtuellen Maschinen (VMs) zu verteilen.

Da die Anwendungsgebiete auch im Heimbereich immer weiter steigen, steigen die Ansprüche an solche Systeme ebenso. Aus diesem Grund wird hier ein Konzept der Erweiterung von Plattenkapazität vorgestellt, das noch etwas “Luft nach oben” zuläßt.

In dieses System sind drei “Festplatten” eingebaut:

SSD 500GB 2.3/3.4G 970 EVO PLUS M.2 SAM von Samsung mit M.2 PCI
ST2000DM001-1ER1 2 TB
ST4000NE0025-2EW 4 TB

Die SSD soll auf einer 100 GB Partition die Virtualisierung Proxmox und die ISO-Images der Betriebssysteme der Virtuellen Maschinen (VMs) aufnehmen und auf einer weiteren Partition für die VMs die installierten Betriebssysteme (vorwiegend Debian 10.6 oder höher) verschiedener Größen. Die VMs werden als Nummern ab VM 100 kontinuierlich hochgezählt.

Die 2TB HDD soll als /home für die VM 100 als File-Server eingebunden werden und die 4TB HDD soll verschiedene /home Verzeichnisse aufnehmen, die als Partitionen angelegt werden sollen.

Um das Erkennen und Bearbeiten der Hardware und die Einbindungen leichter zu gestalten, sollten die Programme cfdisk und lshw installiert sein. Sollte dies nicht der Fall sein, hilft

apt install cfdisk

und

apt install lshw

aus dieser Misere.

Mit lsblk läßt sich zeigen welche HDD welche Bezeichnung bekommen hat. Das ist insofern wichtig, weil cfdisk immer nur die erste HDD anzeigt und die weiteren beim Aufruf des Programms mit angegeben werden müssen.

Achtung: Die SSD werden anders verwaltet, weil ein anderer Controller dafür verantwortlich ist. Bei mir heißen HDD und Partitionen

root@pve:~# lsblk
NAME                         MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
nvme0n1                      259:0    0 465.8G  0 disk
├─nvme0n1p1                  259:1    0  1007K  0 part
├─nvme0n1p2                  259:2    0   512M  0 part /boot/efi
└─nvme0n1p3                  259:3    0 465.3G  0 part

also sind die folgenden HDD, die an den SATA Ports angeschlossen sind, mit sda und sdb bezeichnet

root@pve:~# lsblk
NAME                         MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda                            8:0    0   1.8T  0 disk
└─sda1                         8:1    0   1.8T  0 part
sdb                            8:16   0   3.7T  0 disk
├─sdb1                         8:17   0   300G  0 part
├─sdb2                         8:18   0     1T  0 part
├─sdb3                         8:19   0    50G  0 part
└─sdb4                         8:20   0   100G  0 part

sda geht komplett zur vm-100 weshalb es dort nur die Partition sda1 gibt. Die 4TB HDD zeigt hier als sdb die Partitionen für die verschieden großen /home Verzeichnisse der erste vier VMs.

Angelegt werden sie über den Aufruf mit

cfdisk /dev/sdb

in putty als Terminal im pve oder auf der Proxmox Web-Oberfläche durch auswählen des Knotens pve und Aufruf der Konsole als root. Und nicht die Pfadangabe für die HDD vergessen. Sonst geht’s nicht.

Dann sieht das so aus, wenn es erledigt ist:

Oder so, wenn es bereits Partitionen gibt, sollte eine bereits in Verwendung gewesene HDD eingesetzt werden.

Mit New wird der noch freie Speicherplatz angeboten, wenn die Auswahl auf “Free space” steht. Wichtig sind noch die Größenbezeichnungen der Partitionen, die ordnungsgemäß anzugeben sind. Die sind allerdings in der Fußzeile als Bespiel aufgelistet.

Nach der Auswahl von Write kommt die Nachfrage, ob die Partition angelegt werden soll, die mit geschriebenem “yes” zu beantworten ist. Da es eine Vorbereitung auf ein Linux Filesystem ist, wird eine gpt Tabelle angelegt. Mit cfdisk wird nur die leere Partition angelegt, die mit ihrer Bezeichnung jeweils plus 1 hochgezählt und aufgelistet wird. Mit der Auswahl und Betätigen von Quit das Programm verlassen.

Um auch ein Filesystem einzurichten, ist dies mit dem Befehl

mkfs.ext4 /dev/sdbX

möglich. Damit wählt man das Filesystem aus und formatiert die Partition. Wobei X die jeweilige Partition aus der Liste in cfdisk ist. An dieser Stelle besteht auch die Möglichkeit die Partition mit ZFS oder btrfs zu formatieren.

Das Einbinden der Partition wie bei mount mit den Bezeichnungen /dev/sdbX wird nicht empfohlen, weil beim Verschieben der VM bzw. bei Neustart des pve oder Einbinden weiterer Komponenten die Bezeichnungen verändert werden könnten, weshalb zwingend empfohlen wird, das Einbinden “by-id” vorzunehmen.

Dafür wechselt man entweder mit dem Kommando

cd /dev/disk/by-id

direkt in das Verzeichnis und schaut sich an wie die gewünschte Partition benannt ist –dabei ist es egal, welchen Bezeichner man für die gewünschte Partition nimmt, entweder den mit dem Präfix ata- oder wwn- — oder man liest die entstandenen Partitionen aus und selektiert die gewünschten Bezeichnungen aus der Auflistung. Dazu ist das Kommando

lshw –class disk –class storage

notwendig. Aufgelistet wird dann

*-disk:1
description: ATA Disk
product: ST4000NE0025-2EW
physical id: 1
bus info: scsi@1:0.0.0
logical name: /dev/sdb
version: EN02
serial: ZC19AZ4L
size: 3726GiB (4TB)
capabilities: gpt-1.00 partitioned partitioned:gpt
configuration: ansiversion=5 guid=ce107984-63af-48c6-b0d4-25271a2c9c35 logicalsectorsize=512 sectorsize=4096

Mit der eindeutigen Seriennummer kann nun nach der gewünschten Bezeichnung geforscht werden.

ls –al /dev/disk/by-id | grep ZC19AZ4L

als Antwort gibt’s dann

 9 Dec 10 14:24 ata-ST4000NE0025-2EW107_ZC19AZ4L -> ../../sdb
10 Dec 10 14:24 ata-ST4000NE0025-2EW107_ZC19AZ4L-part1 -> ../../sdb1
10 Dec 10 14:24 ata-ST4000NE0025-2EW107_ZC19AZ4L-part2 -> ../../sdb2
10 Dec 10 14:24 ata-ST4000NE0025-2EW107_ZC19AZ4L-part3 -> ../../sdb3
10 Dec 10 14:24 ata-ST4000NE0025-2EW107_ZC19AZ4L-part4 -> ../../sdb4

Zugewiesen wird die gewünschte Partition sdb2 dann zur VM 102 und die nächste freie Schnittstelle scsi3 über das Kommando

qm set 102 –scsi3 /dev/disk/by-id/ata-ST4000NE0025-2EW107_ZC19AZ4L-part2

das Kommando liefert dann die Quittung zurück

update VM 102: -scsi3 /dev/disk/by-id/ata-ST4000NE0025-2EW107_ZC19AZ4L-part2

Die Proxmox Weboberfläche weist dann sofort die Einbindung aus. Damit ist die Einbindung aber noch nicht abgeschlossen, sondern die HDD ist erst der VM bekanntgemacht worden.

Nun muß die Partition sdb2 noch als 1TB HDD in die VM 102 eingehängt werden. Dazu mit putty oder der Konsole in die neu erstellte VM 102 einloggen.

Wer es etwas bequemer haben kann (will), weil Debian oder Ubuntu Desktop es ermöglichen, kann nun die Remotezugriffsmöglichkeit für root herstellen, indem er die Konfiguration des sshd verändert, um mit putty als root direkt auf die VM 102 zugreifen zu können. Im eigenen Netzwerk hinter einer gut konfigurierten Firewall ist das unkritisch.

nano /etc/ssh/sshd_config

Hier nach der Zeile

#PermitRootLogin prohibit-password

suchen, das Doppelkreuz entfernen und die Zeile in

PermitRootLogin yes

ändern. Mit Strg+o speichern und nano mit Strg+x verlassen. Anschließend den sshd neu starten

systemctl restart sshd

und die Anmeldung als root über das Terminalprogramm putty ist möglich.

Jetzt noch einen Mountpoint schaffen, in den sdb2 eingehängt werden kann. Im Terminal das Kommando aufrufen

mkdir /home/data

und mit

mount -t ext4 /dev/sdb2 /home/data/

die Partition als HDD einhängen.

Sicherheitshalber das mount in der fstab verstetigen, damit nach einem reboot die HDD auch wieder eingehängt wird. Dies geschieht idealerweise über die UUID die sich nicht ändert und damit die HDD immer im System fest verankert. Dafür die UUID auslesen mit

blkid

Die Rückmeldung sieht dann evtl. so aus

root@itc-dev:/home/data# blkid
/dev/sda1: LABEL=”System” UUID=”18666665-a333-4172-8f55-4b261b6c6623″ TYPE=”ext4″ PARTUUID=”8968d90b-01″
/dev/sda5: LABEL=”var” UUID=”00b8339b-1a4e-4cc5-a849-c62582a9f49a” TYPE=”ext4″ PARTUUID=”8968d90b-05″
/dev/sda6: UUID=”f666df3b-35cd-405a-8b47-d80d6ce4ffa0″ TYPE=”swap” PARTUUID=”8968d90b-06″
/dev/sda7: LABEL=”tmp” UUID=”e644d383-f280-444b-a971-502f862fcf46″ TYPE=”ext4″ PARTUUID=”8968d90b-07″
/dev/sda8: LABEL=”home” UUID=”01bdf1aa-e5cf-41d2-91ad-adaff8be62d4″ TYPE=”ext4″ PARTUUID=”8968d90b-08″
/dev/sdb: UUID=”c8532b5f-2736-4362-96ed-2a18b0494a52″ TYPE=”ext4″

Nun die UUID der sdb mit der Maus markieren und mit Strg+c die Kennung kopieren.

nano /etc/fstab

aufrufen und in die letzte leere Zeile mit der Maus mit Rechtsklick die UUID hineinkopieren. Nun noch die Anführungszeichen löschen, so daß als vorletzte Zeile in der /etc/fstab steht

UUID=c8532b5f-2736-4362-96ed-2a18b0494a52  ext4  default   0   2

Es sollte in der /etc/fstab nach der letzten Eintragung IMMER eine Leerzeile folgen. Nun mit Strg+o die Eintragung abspeichern, mit Strg+x nano verlassen und mit

mount –a

die /etc/fstab neu einlesen. Wer nun mit

cd /home/data

in den Moutpoint wechselt und mit

df –h

den verfügbaren Platz prüft, der wird das möglicherweise so ähnlich vorfinden:

root@itc-dev:/home/data# df -h
Dateisystem    Größe Benutzt Verf. Verw% Eingehängt auf
udev            4,9G       0  4,9G    0% /dev
tmpfs          1000M    9,1M  991M    1% /run
/dev/sda1        73G    3,3G   66G    5% /
tmpfs           4,9G       0  4,9G    0% /dev/shm
tmpfs           5,0M    4,0K  5,0M    1% /run/lock
tmpfs           4,9G       0  4,9G    0% /sys/fs/cgroup
/dev/sda7       9,1G     37M  8,5G    1% /tmp
/dev/sda8       427M    3,4M  397M    1% /home
/dev/sda5       6,4G    306M  5,8G    5% /var
tmpfs          1000M    8,0K 1000M    1% /run/user/0
tmpfs          1000M    8,0K 1000M    1% /run/user/1000
/dev/sdb       1007G     77M  956G    1% /home/data
tmpfs          1000M    4,0K 1000M    1% /run/user/115

Sollte die Installation eine Desktop Version sein, kann von der Proxmox Weboberfläche über die Konsole die graphische Anmeldung aufgerufen und über den Dateiexplorer in das Verzeichnis /home/data gewechselt werden. Rechte Maustaste und Eigenschaften zeigt auch die Größe des Verzeichnisses.

Fertig.