Freitag, 15. November 2024

Dateiserver unter Proxmox

Auf meinem bisherigen KVM/Libvirt Host habe ich ein paar SMB und NFS Shares sowie ISCSI Platten. Ich hielt das bisher für einfacher, als extra eine NAS als virtuellen Server aufzusetzen. Aber: ein GUI macht die Bedienung und Wartung etwas einfacher und bringt auch immer wieder einen Lerneffekt, vor allem wenn man sich nicht tagtäglich mit der Thematik beschäftigt. Durch die Proxmox VE Helper-Scripts bin ich auf etwas mir bis dahin unbekanntes gestoßen: Turnkey Appliances eine Seite mit gut gewarteten VMs und LXC Templates für diverse Anwendungsfälle. 

Die erste Idee war, einfach das Helper-Script zu nehmen, der eine Turnkey Appliance als LXC installiert (bzw. Storage/local/CT Templates/Templates). Der zweite Blick offenbarte den entscheidenden Unterschied: zu VMs kann man die Festplatte direkt durchreichen (nur qm set ...) zu LXC geht das leider nicht. Ich wollte gerne meine existierenden HDDs einfach umhängen.

Setup

Hier findet man ein aktuelles ISO Image und baut daraus in der Proxmox Oberfläche ein neue minimale (Debian) Maschine. Ich habe alle Einstellungen auf den Vorgaben gelassen. Beim ersten Start wird die Advanced Console aufgerufen, in der habe ich erstmal nur die Zeitzone eingestellt.

In dem Setup ist alles drin was ich brauche, außer ISCSI (irgendwas ist ja immer). Die Administration wird durch Webmin schlicht und einfach.

Aufrüsten

Wie hier beschrieben, installiere ich nur das Paket tgt für die ISCSI Unterstützung nach und administriere das später per Hand. Eigentlich gibt es für Webmin auch ein ISCSI Plugin, das bekam ich aber noch nicht zum Laufen.

Konfigurationen sichern

Hinweis: Wir arbeiten auf der VM Fileserver!

Je nach persönlicher Vorliebe kann man mit den Tools grep, tail oder cat ganz oder teilweise die existierenden Konfigurationen anschauen und per ssh auf den neuen Host übertragen. 

Für iscsi einfach komplett übernehmen:

ziel='user@host'
ssh $ziel 'cat /etc/tgt/conf.d/*' | tee /etc/tgt/conf.d/storage.conf

Für den Rest erzeuge ich ein paar temporäre Dateien um sie noch zu bearbeiten und später in die Zielkonfiguration zu schreiben. 

Was ist in der fstab gemounted?

ssh $ziel 'grep /dev/mapper /etc/fstab' | tee fstab

Welche nfs exports beginnen mit /mnt?

ssh $ziel 'grep /mnt /etc/exports' | tee exports

Bei Samba nur die letzten relevanten Zeilen der config ermitteln (Zahl anpassen):

ssh $ziel 'tail -22 /etc/samba/smb.conf' | tee smb

Jetzt ist Zeit, den bisherigen Host herunterzufahren.

Anmerkung: Der Host wird ohne die Festplatten später im Emergency Modus starten, dafür braucht man Monitor und Tastatur (oder PI-KVM). An den Festplatten wurde bisher nichts verändert, gelingt der Umzug nicht im ersten Versuch kann man einfach die Fileserver VM beenden, den Storage umstecken und den alten Server wieder starten.

Festplatten in die VM einhängen

Hinweis: Wir arbeiten auf dem Proxmox Host!

Ich stecke mein Storage Case an die andere Hardware, ermittle die Device Pfade und reiche die Festplatten direkt an die VM durch. Man schaut zuerst die Situation an, entweder ohne (*) oder mit einem Suchmuster.

ls -ld /dev/disk/by-id/usb*

Mit dem Ergebnis kann man sich die Kommandozeile zusammenbauen

qm set <VM ID> -scsi<nächste freie SCSI ID> /dev/disk/by-id/<HDD ID>

Hat man ein geeignetes Suchmuster, kann man auch mit einem kurzen Script arbeiten:

i=1
for d in $(ls -d /dev/disk/by-id/usb-Terra*:0)
  do qm set 117 -scsi${i} $d
  i=$((i+1))
done

Auch wenn außen eine Nummer an der LED steht und diese mit der Nummer am HDD Einschub übereinstimmt bedeutet das nicht, dass die HDD1 auch die niedrigste ID bei /dev/disk/by-id/* hat!

Welche Platte steckte jetzt in welchem Slot?

for d in $(ls -d /dev/disk/by-id/usb-Terra*:0)
do
echo $d
for i in {1..5}
  do 
    smartctl -a $d >/dev/null
    sleep 2
  done
done

Mit einem lsblk kann man sich in der File Server VM überzeugen ob alles richtig angekommen ist.

Festplatten am Fileserver mounten

Hinweis: Wir arbeiten auf dem VM Fileserver!

Die Laufwerke sind eingehängt die Volumes sichtbar, aber noch nicht gemountet! Tipp: man kann im Webmin / Hardware / Partitions on Local Disks das Drive blinken lassen, allerdings funktioniert das bei mir nicht richtig. Ein hdparm -t /dev/sdx hingegen funktioniert.

Das mounten machen wir mit Webmin - der dreistufige Prozess (mountpoint erstellen, mounten, fstab schreiben) wird ganz komfortabel in einer Maske abgehandelt.

https://fileserver:12321 (Webmin anmelden) dann System/Disk and Network Filesystems -> add mount



  • links /srv/storage/nfs eintragen und rechts das LVM Logical Volume für nfs
  • links /srv/storage/smb/shares eintragen und rechts LVM Logical Volume für data shares wählen
  • links /srv/storage/smb/sicherung eintragen und rechts LVM Logical Volume für data sicherung wählen



Solange wiederholen bis alles gemountet ist, die mountpoints werden automatisch angelegt, wenn man sie einfach in die Zeile einträgt.

Konfigurationen aktivieren

Hinweis: Wir arbeiten auf der VM Fileserver!

Die ISCSI Konfiguration nur aktivieren und prüfen:

tgt-admin --update ALL --force
tgtadm --mode target --op show

Webadmin kann unter Networking / NFS Exports den Pfad und Optionen eintragen, aber die Netzwerkmaske muss in der Form 255.255.255.0 angegeben werden. Deshalb mach ich es auf Kommandozeile:

echo '/srv/storage/nfs 192.168.56.0/24' >> /etc/exports
exportfs -a
showmount -e

Meine neue Samba Konfiguration hat andere Pfade (vorher ohne Schreiben prüfen):

sed -e 's/\/mnt\//\/srv\/storage\/smb\//;s/data-//' smb.conf >> /etc/samba/smb.conf
testparm
net share

Ein systemctl restart smbd kann man sparen, bei Samba wird die conf alle 90 sec automatisch eingelesen.

Aufräumen

Wie gesagt: man lernt ja uU mit neuen grafischen Tools. Meine Volume Namen im LVM waren mMn etwas unglücklich gewählt. Das kann man mit Webmin ziemlich gut und intuitiv bereinigen.

ToDo

User muss man auch übernehmen.

Code Block

Ende


1 Kommentar:

  1. Danke für Dein Tutorial. Leider ist der Urheber der HelperScripts kürzlich verstorben. Das Projekt wird zum Glück weitergeführt:

    https://community-scripts.github.io/ProxmoxVE/scripts

    AntwortenLöschen