Proxmox VE

Einführung Vorwort

Einführung Vorwort

Virtualisierung / Hyperkonvergenz

Hyperkonvergenz ist ein IT-Framework, das Storage, Computing und Networking in einem einzigen System kombiniert und so eine geringere Rechenzentrumskomplexität und höhere Skalierbarkeit garantiert. Eine Hyperconverged-Plattform umfasst einen Hypervisor für virtualisiertes Computing, Software-Defined Storage und Netzwerkvirtualisierung.
 
Definition von Hyperkonvergenz

Hyperkonvergenz ist eine softwarezentrierte Architektur, die Computing-, Storage- und Virtualisierungsressourcen nahtlos in einem einzigen System integriert – im Rahmen einer x86-basierten Appliance oder als Software, die sich auf der bestehenden Hardware installieren lässt.
Verwandte Themen

    Rechenzentrumsbetrieb
    Lösungen für Rechenzentren
    Storage Area Network

Wie funktioniert Hyperkonvergenz?

Mit Hyperkonvergenz werden alle kritischen Rechenzentrumsfunktionen auf einem nahtlos integrierten Software-Layer statt auf speziell entwickelter Hardware ausgeführt. Hyperconverged-Plattformen bestehen aus drei Softwarekomponenten: Computing-Virtualisierung, Storage-Virtualisierung und Management. Die Virtualisierungssoftware abstrahiert die zugrunde liegenden Ressourcen, fasst sie in Pools zusammen und weist sie dann dynamisch in VMs oder Containern ausgeführten Anwendungen zu.

Das ganze ist mit Proxmox VE zu realisieren.

Proxmox - Backup Server (PBS)

Proxmox - Backup Server (PBS)

Proxmox Backupserver Logs älter als 90 Tage löschen

Da es kein Logrotate gibt, wird die festplatte über kurz über lang vollaufen, da alte logs nicht gelöscht werden.
zum einmaligen ausführen

find /var/log/proxmox-backup/tasks -type f  -name 'UPID*' -mtime +90 -delete

Cronjob erstellen

Eine neue Datei im /etc/cron.d Ordner anlegen

nano /etc/cron.d/deletepbslog

und folgenden Inhalt einfügen.

0 0 * * * find /var/log/proxmox-backup/tasks -type f  -name 'UPID*' -mtime +90 -delete >/dev/null 2>&1

 

Proxmox - Backup Server (PBS)

Proxmox KVM / CT Restore via Terminal

dir: local
	path /var/lib/vz
	content vztmpl,backup,iso
	prune-backups keep-last=1
	shared 0

zfspool: local-zfs
	pool rpool/data
	content rootdir,images
	sparse 1

cephfs: cephfs
	path /mnt/pve/cephfs
	content iso,vztmpl,backup

pbs: backup
	datastore backup
	server <ip_from_pbs_server>
	content backup
	fingerprint *******************************************
	prune-backups keep-all=1
	username root@pam

Beschreibung

Eigentlich gehört das ja unter den Proxmox Server selbst. Da es aber hier explizit um den Restore von einem PBS Speicher geht.
Dachte ich schreib cih das hier rein.

Ermitteln des PBS Speicher namens

Mittels den Befehl

cat /etc/pve/storage.cfg

Ausgabe:

dir: local
	path /var/lib/vz
	content vztmpl,backup,iso
	prune-backups keep-last=1
	shared 0

zfspool: local-zfs
	pool rpool/data
	content rootdir,images
	sparse 1

cephfs: cephfs
	path /mnt/pve/cephfs
	content iso,vztmpl,backup

pbs: backup
	datastore backup
	server <pbs_server_ip>
	content backup
	fingerprint ***************************************
	prune-backups keep-all=1
	username root@pam

Nun sehen wir, das unser PBD Store hier backup heißt.

Auflisten der Backups

Da wir jetzt wissen, wie unser Backupstore heißt , lassen wir uns alle Backups Auflisten, damit wir wissen welches wir haben wollen.

Befehl:

pvesm list <pbsname>
Beispiel
pvesm list backup

Ausgabe:

Volid                                     Format  Type               Size VMID
backup:backup/ct/104/2021-08-16T04:26:02Z pbs-ct  backup       2479283013 104
backup:backup/ct/104/2021-08-16T06:21:03Z pbs-ct  backup       2479207164 104
backup:backup/ct/107/2021-12-25T23:04:12Z pbs-ct  backup        673609752 107
backup:backup/ct/107/2022-06-25T22:09:42Z pbs-ct  backup        673182555 107
backup:backup/ct/107/2022-07-30T22:47:38Z pbs-ct  backup        672557354 107
backup:backup/ct/107/2022-08-27T22:15:19Z pbs-ct  backup        672595329 107
backup:backup/ct/107/2022-09-24T22:12:42Z pbs-ct  backup        672370901 107
backup:backup/ct/107/2022-10-01T22:08:55Z pbs-ct  backup        672927418 107
ackup:backup/vm/139/2023-01-01T00:36:43Z pbs-vm  backup    8624294872084 139
backup:backup/vm/139/2023-01-02T00:51:24Z pbs-vm  backup    8624294872086 139
backup:backup/vm/139/2023-01-03T00:47:49Z pbs-vm  backup    8624294872086 139
backup:backup/vm/139/2023-01-04T00:44:20Z pbs-vm  backup    8624294872085 139
backup:backup/vm/139/2023-01-05T00:35:17Z pbs-vm  backup    8624294872084 139
backup:backup/vm/139/2023-01-06T00:53:37Z pbs-vm  backup    8624294872088 139
backup:backup/vm/139/2023-01-07T00:33:51Z pbs-vm  backup    8624294872085 139
backup:backup/vm/139/2023-01-08T00:45:41Z pbs-vm  backup    8624294872087 139
backup:backup/vm/139/2023-01-09T00:34:17Z pbs-vm  backup    8624294872089 139
backup:backup/vm/139/2023-01-10T00:23:08Z pbs-vm  backup    8624294872085 139
backup:backup/vm/139/2023-01-11T00:39:43Z pbs-vm  backup    8624294872085 139
backup:backup/vm/139/2023-01-12T00:29:20Z pbs-vm  backup    8624294872086 139
backup:backup/vm/139/2023-01-13T00:29:04Z pbs-vm  backup    8624294872087 139
backup:backup/vm/139/2023-01-14T00:22:10Z pbs-vm  backup    8624294872086 139
backup:backup/vm/139/2023-01-15T00:25:47Z pbs-vm  backup    8624294872085 139

So eine Liste kann auch lang werden.
Sonst diese einfach nur durch grep mit der vmid schieben z.b /221 für die VM 221.
Wir machen ein slash davor, falls die 139 in irgendeinem hash auftauchen sollte, diese nicht mit ausgegeben wird

pvesm list backup | grep /221

Ausgabe

backup:backup/vm/221/2021-12-25T23:00:02Z pbs-vm  backup     108447925038 221
backup:backup/vm/221/2022-04-23T22:00:02Z pbs-vm  backup     108447925035 221
backup:backup/vm/221/2022-05-28T22:00:03Z pbs-vm  backup     108447925035 221
backup:backup/vm/221/2022-06-24T22:00:02Z pbs-vm  backup     108447925037 221
backup:backup/vm/221/2022-07-30T22:00:03Z pbs-vm  backup     108447925037 221
backup:backup/vm/221/2022-08-06T22:00:10Z pbs-vm  backup     108447925038 221
backup:backup/vm/221/2022-08-13T22:00:05Z pbs-vm  backup     108447925036 221
backup:backup/vm/221/2022-08-19T22:00:04Z pbs-vm  backup     108447925035 221
backup:backup/vm/221/2022-08-27T22:00:06Z pbs-vm  backup     108447925035 221
backup:backup/vm/221/2022-08-28T22:00:02Z pbs-vm  backup     108447925036 221
backup:backup/vm/221/2022-08-30T22:00:02Z pbs-vm  backup     108447925039 221
backup:backup/vm/221/2022-08-31T22:00:07Z pbs-vm  backup     108447925034 221
backup:backup/vm/221/2022-09-01T22:00:02Z pbs-vm  backup     108447925037 221
backup:backup/vm/221/2022-09-04T22:00:01Z pbs-vm  backup     108447925037 221
backup:backup/vm/221/2022-09-05T22:00:08Z pbs-vm  backup     108447925039 221
backup:backup/vm/221/2022-09-06T22:00:04Z pbs-vm  backup     108447925037 221
backup:backup/vm/221/2022-09-08T22:00:01Z pbs-vm  backup     108447925039 221
backup:backup/vm/221/2022-09-09T22:00:05Z pbs-vm  backup     108447925037 221
backup:backup/vm/221/2022-09-11T22:00:05Z pbs-vm  backup     108447925036 221
backup:backup/vm/221/2022-09-14T22:00:04Z pbs-vm  backup     108447925037 221
backup:backup/vm/221/2022-09-15T22:00:03Z pbs-vm  backup     108447925036 221
backup:backup/vm/221/2022-09-16T22:00:07Z pbs-vm  backup     108447925038 221
backup:backup/vm/221/2022-09-17T22:00:01Z pbs-vm  backup     108447925037 221
backup:backup/vm/221/2022-09-18T22:00:05Z pbs-vm  backup     108447925037 221
backup:backup/vm/221/2022-09-23T22:00:03Z pbs-vm  backup     108447925037 221
backup:backup/vm/221/2022-09-24T22:00:02Z pbs-vm  backup     108447925037 221
backup:backup/vm/221/2022-09-26T22:00:03Z pbs-vm  backup     108447925039 221
backup:backup/vm/221/2022-09-29T22:00:03Z pbs-vm  backup     108447925040 221
backup:backup/vm/221/2022-09-30T22:00:12Z pbs-vm  backup     108447925032 221
backup:backup/vm/221/2022-10-01T22:00:06Z pbs-vm  backup     108447925034 221
backup:backup/vm/221/2022-10-02T22:00:07Z pbs-vm  backup     108447925039 221
backup:backup/vm/221/2022-10-03T22:00:06Z pbs-vm  backup     108447925037 221
backup:backup/vm/221/2022-10-05T22:00:02Z pbs-vm  backup     108447925039 221
backup:backup/vm/221/2022-10-07T22:00:04Z pbs-vm  backup     108447925039 221
backup:backup/vm/221/2022-10-08T22:00:06Z pbs-vm  backup     108447925036 221
backup:backup/vm/221/2022-10-10T22:00:03Z pbs-vm  backup     108447925037 221
backup:backup/vm/221/2022-10-11T22:00:02Z pbs-vm  backup     108447925038 221
backup:backup/vm/221/2022-10-13T22:00:01Z pbs-vm  backup     108447925038 221
backup:backup/vm/221/2022-10-14T22:00:01Z pbs-vm  backup     108447925036 221
backup:backup/vm/221/2022-10-16T22:00:11Z pbs-vm  backup     108447925041 221
backup:backup/vm/221/2022-10-17T22:00:04Z pbs-vm  backup     108447925039 221
backup:backup/vm/221/2022-10-18T22:00:03Z pbs-vm  backup     108447925036 221
backup:backup/vm/221/2022-10-19T22:00:05Z pbs-vm  backup     108447925038 221
backup:backup/vm/221/2022-10-21T22:00:02Z pbs-vm  backup     108447925039 221
backup:backup/vm/221/2022-10-23T22:00:02Z pbs-vm  backup     108447925037 221
backup:backup/vm/221/2022-10-24T22:00:03Z pbs-vm  backup     108447925034 221
backup:backup/vm/221/2022-10-25T22:00:01Z pbs-vm  backup     108447925035 221
backup:backup/vm/221/2022-10-26T22:00:03Z pbs-vm  backup     108447925038 221
backup:backup/vm/221/2022-10-27T22:00:01Z pbs-vm  backup     108447925036 221
backup:backup/vm/221/2022-10-28T22:00:02Z pbs-vm  backup     108447925035 221
backup:backup/vm/221/2022-10-29T22:00:00Z pbs-vm  backup     108447925036 221
backup:backup/vm/221/2022-10-30T23:00:03Z pbs-vm  backup     108447925036 221
backup:backup/vm/221/2022-11-01T23:00:06Z pbs-vm  backup     108447925037 221
backup:backup/vm/221/2022-11-02T23:00:04Z pbs-vm  backup     108447925039 221
backup:backup/vm/221/2022-11-03T23:00:02Z pbs-vm  backup     108447925035 221
backup:backup/vm/221/2022-11-04T23:00:03Z pbs-vm  backup     108447925036 221
backup:backup/vm/221/2022-11-06T23:00:05Z pbs-vm  backup     108447925036 221
backup:backup/vm/221/2022-11-08T23:00:01Z pbs-vm  backup     108447925040 221
backup:backup/vm/221/2022-11-09T23:00:01Z pbs-vm  backup     108447925040 221
backup:backup/vm/221/2022-11-10T23:00:01Z pbs-vm  backup     108447925037 221
backup:backup/vm/221/2022-11-13T23:00:03Z pbs-vm  backup     108447925037 221
backup:backup/vm/221/2022-11-19T23:00:02Z pbs-vm  backup     108447925039 221
backup:backup/vm/221/2022-11-20T23:00:05Z pbs-vm  backup     108447925027 221
backup:backup/vm/221/2022-11-22T23:00:02Z pbs-vm  backup     108447925038 221
backup:backup/vm/221/2022-11-23T23:00:00Z pbs-vm  backup     108447925036 221
backup:backup/vm/221/2022-11-24T23:00:02Z pbs-vm  backup     108447925036 221
backup:backup/vm/221/2022-11-25T23:00:00Z pbs-vm  backup     108447925037 221
backup:backup/vm/221/2022-11-26T23:00:03Z pbs-vm  backup     108447925034 221
backup:backup/vm/221/2022-11-29T23:00:09Z pbs-vm  backup     108447925040 221
backup:backup/vm/221/2022-11-30T23:00:05Z pbs-vm  backup     108447925038 221
backup:backup/vm/221/2022-12-04T23:00:00Z pbs-vm  backup     108447925040 221
backup:backup/vm/221/2022-12-06T23:00:04Z pbs-vm  backup     108447925038 221
backup:backup/vm/221/2022-12-07T23:00:01Z pbs-vm  backup     108447925036 221
backup:backup/vm/221/2022-12-09T23:00:04Z pbs-vm  backup     108447925038 221
backup:backup/vm/221/2022-12-10T23:00:06Z pbs-vm  backup     108447925036 221
backup:backup/vm/221/2022-12-17T23:00:04Z pbs-vm  backup     108447925040 221
backup:backup/vm/221/2022-12-18T23:00:01Z pbs-vm  backup     108447925040 221
backup:backup/vm/221/2022-12-19T23:00:04Z pbs-vm  backup     108447925039 221
backup:backup/vm/221/2022-12-20T23:00:01Z pbs-vm  backup     108447925039 221
backup:backup/vm/221/2022-12-21T23:00:05Z pbs-vm  backup     108447925035 221
backup:backup/vm/221/2022-12-24T23:00:06Z pbs-vm  backup     108447925038 221
backup:backup/vm/221/2022-12-25T23:00:01Z pbs-vm  backup     108447925039 221
backup:backup/vm/221/2022-12-26T23:00:01Z pbs-vm  backup     108447925034 221
backup:backup/vm/221/2022-12-27T23:00:01Z pbs-vm  backup     108447925038 221
backup:backup/vm/221/2022-12-29T23:00:00Z pbs-vm  backup     108447925035 221
backup:backup/vm/221/2022-12-30T23:00:01Z pbs-vm  backup     108447925035 221
backup:backup/vm/221/2022-12-31T23:00:03Z pbs-vm  backup     108447925036 221
backup:backup/vm/221/2023-01-02T23:00:05Z pbs-vm  backup     108447925039 221
backup:backup/vm/221/2023-01-03T23:00:02Z pbs-vm  backup     108447925039 221
backup:backup/vm/221/2023-01-04T23:00:04Z pbs-vm  backup     108447925036 221
backup:backup/vm/221/2023-01-08T23:00:01Z pbs-vm  backup     108447925040 221
backup:backup/vm/221/2023-01-10T23:00:04Z pbs-vm  backup     108447925037 221
backup:backup/vm/221/2023-01-11T23:00:02Z pbs-vm  backup     108447925037 221
backup:backup/vm/221/2023-01-13T23:00:06Z pbs-vm  backup     108447925039 221
backup:backup/vm/221/2023-01-14T23:00:00Z pbs-vm  backup     108447925036 221
backup:backup/vm/221/2023-01-15T23:00:03Z pbs-vm  backup     108447925037 221
backup:backup/vm/221/2023-01-17T23:00:01Z pbs-vm  backup     108447925040 221
backup:backup/vm/221/2023-01-18T23:00:03Z pbs-vm  backup     108447925039 221
backup:backup/vm/221/2023-01-19T23:00:02Z pbs-vm  backup     108447925039 221
backup:backup/vm/221/2023-01-20T23:00:05Z pbs-vm  backup     108447925035 221
backup:backup/vm/221/2023-01-21T23:00:03Z pbs-vm  backup     108447925033 221
backup:backup/vm/221/2023-01-22T23:00:04Z pbs-vm  backup     108447925039 221
backup:backup/vm/221/2023-01-23T23:00:02Z pbs-vm  backup     108447925037 221
backup:backup/vm/221/2023-01-26T23:00:04Z pbs-vm  backup     108447925039 221
backup:backup/vm/221/2023-01-29T23:00:03Z pbs-vm  backup     108447925040 221
backup:backup/vm/221/2023-01-31T23:00:03Z pbs-vm  backup     108447925040 221
backup:backup/vm/221/2023-02-02T23:00:02Z pbs-vm  backup     108447925036 221
backup:backup/vm/221/2023-02-05T23:00:05Z pbs-vm  backup     108447925040 221
backup:backup/vm/221/2023-02-06T23:00:01Z pbs-vm  backup     108447925040 221
backup:backup/vm/221/2023-02-08T23:00:01Z pbs-vm  backup     108447925038 221
backup:backup/vm/221/2023-02-09T23:00:03Z pbs-vm  backup     108447925039 221
backup:backup/vm/221/2023-02-11T12:51:38Z pbs-vm  backup     108447924970 221

Nun suchen wir das Backup  raus was wir haben wollen. Ich möchte das aktuellste Backup also das letzte haben.
Die letzte zeile. Aber es kann auch sein das ein älteres Backup gewünscht ist einfach die Zeile des gewünschten backups nehmen. Dort brauchen wir dann für den nächsten Befehl aus der gewünschten zeile die Volid

Meine gewünschte Zeile ist hier die letze

backup:backup/vm/221/2023-02-11T12:51:38Z pbs-vm  backup     108447924970 221

Nun nur noch zurück sichern, wenn das Backup von einem PBS kommt kann man auch noch live restore wählen, beuedet die maschine ist schon nutzbar während des restore

qmrestore <volumeid> <neue_vmid_in_die_zurück_gesichert_werden_soll> --storage <store_in_den_das_image_zurückgesichert_soll> 
Beispiel Volumeid, meinspeicherpool rbd, neue vmid bei mir
qmrestore backup:backup/vm/221/2023-02-11T12:51:38Z 147  --storage rbd

Optional mit live restore
qmrestore backup:backup/vm/221/2023-02-11T12:51:38Z 147  --storage rbd --live-restore true

Ausgabe:

restore-drive-scsi0: transferred 0.0 B of 32.0 GiB (0.00%) in 0s
restore-drive-scsi0: transferred 188.0 MiB of 32.0 GiB (0.57%) in 1s
restore-drive-scsi0: transferred 372.0 MiB of 32.0 GiB (1.14%) in 2s
restore-drive-scsi0: transferred 572.0 MiB of 32.0 GiB (1.75%) in 3s
restore-drive-scsi0: transferred 752.0 MiB of 32.0 GiB (2.29%) in 4s
restore-drive-scsi0: transferred 824.0 MiB of 32.0 GiB (2.51%) in 5s
restore-drive-scsi0: transferred 1000.0 MiB of 32.0 GiB (3.05%) in 6s
restore-drive-scsi0: transferred 1.1 GiB of 32.0 GiB (3.58%) in 7s
restore-drive-scsi0: transferred 1.3 GiB of 32.0 GiB (4.14%) in 8s
restore-drive-scsi0: transferred 1.5 GiB of 32.0 GiB (4.61%) in 9s
restore-drive-scsi0: transferred 1.6 GiB of 32.0 GiB (5.14%) in 10s
restore-drive-scsi0: transferred 1.8 GiB of 32.0 GiB (5.65%) in 11s
restore-drive-scsi0: transferred 2.0 GiB of 32.0 GiB (6.20%) in 12s
restore-drive-scsi0: transferred 2.1 GiB of 32.0 GiB (6.71%) in 13s
restore-drive-scsi0: transferred 2.4 GiB of 32.0 GiB (7.46%) in 14s
restore-drive-scsi0: transferred 2.6 GiB of 32.0 GiB (8.25%) in 15s
restore-drive-scsi0: transferred 2.7 GiB of 32.0 GiB (8.41%) in 16s
restore-drive-scsi0: transferred 2.9 GiB of 32.0 GiB (8.97%) in 17s
restore-drive-scsi0: transferred 3.1 GiB of 32.0 GiB (9.58%) in 18s
restore-drive-scsi0: transferred 3.2 GiB of 32.0 GiB (10.16%) in 19s
restore-drive-scsi0: transferred 3.3 GiB of 32.0 GiB (10.38%) in 20s
restore-drive-scsi0: transferred 3.4 GiB of 32.0 GiB (10.50%) in 21s
...
restore-drive-scsi0: transferred 31.3 GiB of 32.0 GiB (97.89%) in 4m 3s
restore-drive-scsi0: transferred 31.5 GiB of 32.0 GiB (98.58%) in 4m 4s
restore-drive-scsi0: transferred 31.7 GiB of 32.0 GiB (99.17%) in 4m 5s
restore-drive-scsi0: transferred 31.9 GiB of 32.0 GiB (99.72%) in 4m 6s
restore-drive-scsi0: stream-job finished
restore-drive jobs finished successfully, removing all tracking block devices to disconnect from Proxmox Backup Server

 

 

 

 

 

 

Proxmox - Backup Server (PBS)

Proxmox Backup Fehler behebung

Beschreibung:

Liste von Backupfehler und eventuelle Lösung dazu

Fehler:

ERROR: Backup of VM 137 failed - VM 137 qmp command 'backup' failed - backup connect failed: command error: not a valid user id

Der Fehler im ganzen Backup Task log.

()
INFO: starting new backup job: vzdump 137 --remove 0 --mode snapshot --node vserv0007 --notes-template '{{guestname}}' --storage backup
INFO: Starting Backup of VM 137 (qemu)
INFO: Backup started at 2023-12-16 11:16:55
INFO: status = running
INFO: VM Name: budibase
INFO: include disk 'scsi0' 'data:vm-137-disk-0' 32G
INFO: backup mode: snapshot
INFO: ionice priority: 7
INFO: snapshots found (not included into backup)
INFO: creating Proxmox Backup Server archive 'vm/137/2023-12-16T10:16:55Z'
ERROR: VM 137 qmp command 'backup' failed - backup connect failed: command error: not a valid user id
INFO: aborting backup job
INFO: resuming VM again
ERROR: Backup of VM 137 failed - VM 137 qmp command 'backup' failed - backup connect failed: command error: not a valid user id
INFO: Failed at 2023-12-16 11:16:55
INFO: Backup job finished with errors
TASK ERROR: job errors

Die Datei die den Besitzer angibt, ist aus unerklärlichen gründen leer.
Diese einfach löschen, bzw gleich das ganze Verzeichnis
Dazu auf dem Backupserver einloggen per ssh.
In das Verzeichnis des Datastore gehen und das VM Verzeichnis löschen:
Bei mir liegt das Datastore Verzeichnis unter

Auswahl_1131.png

in das Verzeichnis gehen.
In diesem Verzeichnis gibt es ein Unterverzeichnsi vm, auch in dieses gehen.

cd /mnt/pve/cephfs/vm

mit ls sieht man  alle VM Verzeichniss die mal angelegt wurden.
Wenn wir in unter die vm id rein gehen (bei mir die 137) und ein ls durchführen sehen wir eine Datei namens owner mit der Größe von 0. und auch ein cat auf die Datei würde zeigen das da nichts drin ist.
Wie auch bei Größe 0

cd /mnt/pve/cephfs/vm/137
ls -l

Ausgabe:
/mnt/pve/cephfs/vm/137# ls -l
insgesamt 0
-rw-r--r-- 1 backup backup 0 27. Aug 21:06 owner


Ausgabe von einem anderen Verzeichnis bei VM 124 wie es aussehen müsste, 
da sind auch noch zwei Backups mit drin, aber uns interessiert die owner Datei.
Da hat die Ownder Datei eine größe von 9 Byte


/mnt/pve/cephfs/vm/124# ls -l
insgesamt 1
drwxr-xr-x 2 backup backup 4 15. Dez 03:17 2023-12-15T01:56:57Z
drwxr-xr-x 2 backup backup 4 16. Dez 03:37 2023-12-16T01:30:05Z
-rw-r--r-- 1 backup backup 9 15. Dez 02:05 owner


Nun das komplette Verzeichnis löschen. (Hier wieder die 137)

rm -Rf /mnt/pve/cephfs/vm/137/

Nun von der SSH Sitzung wieder ausloggen.

Nun das Backup nochmals starten

Auswahl_1132.png

Die Task Log Ausgabe:

Auswahl_1133.png

Er sichert wieder.
Fertig

Proxmox installation auf Debian (Optional mit Verschlüsselung)

Proxmox installation auf Debian (Optional mit Verschlüsselung)

Installation Debian 11 Bullseye (Grundeinstellungen Sprache Benutzerkonten)

  1. Installation Debian 11 Bullseye von der Debian Net install ISO Starten
    https://www.debian.org/distrib/
    wir wählen den Textbasierten installer
  2. Installtion starten mit Install für Textmodus
    Auswahl_733.png
    Sprache wählen, Ich bevorzuge Deutsch
    Auswahl_734.png
    Sprache auswählen, ich wähle hier Deutsch:
    Auswahl_735.png
    Tastatursprache wählen
    Auswahl_736.png
    Rechner / Hostname vergeben
    Auswahl_737.png
    Domainnamen festlegen
    Auswahl_738.png
    Root Passwort festlegen und wiederholen
    Auswahl_739.png
    neuen Admin Benutzer erstellen z.b administrator
    Auswahl_740.png
    Benutzername angeben z.b administrator, wird auch vorgeschalgen
    Auswahl_741.png
    Passwort vergeben und wiederholen
    Auswahl_742.png





Proxmox installation auf Debian (Optional mit Verschlüsselung)

Installation Debian 11 Bullseye (Installation mit Verschlüsselung)

  1. Soll unverschlüsselt gewählt werden vollständige Festplatte verwenden oder manuell
    Soll verschlüsselt werden, dann gesamte Platte mit verschlüsseltem LVM auswählen.
    oder manuell wenn alles selbst ausgewählt werden soll.
    Wir wählen hier:

    Soll verschlüsselt werden, dann gesamte Platte mit verschlüsseltem LVM auswählen.
    Auswahl_744.png
    Festplatte auswählen
    Auswahl_745.png
    Alle Dateien auf eine Partition auswählen.
    Auswahl_746.png
    Änderungen speichern und schreiben
    Auswahl_747.png

    Festplatte wird überschrieben um Datenwiederherstellung zu vermeiden, ich drücke hier jetzt abbrechen, ihr solltest das durchlaufen lassen um weil sonst eine geringere Verschlüsselungsqualität zur Verfüng steht.
    Auswahl_749.png
    Kennwort / Passephrase eintippen.
    Wir nutzen hier zur demonstration:
    aaaaaBBBBBcccccDDDDDeeeee!!!!!

    Diesen Kennwort natürlich nicht nutzen sondern logischerweise ein eigenes verwenden.
    Auswahl_751.png
    und noch einmal
    Auswahl_752.png
    Größe fürs LVM Volume festlegen
    es kann auch max für die Gesamte Größe angegeben werden.
    Hier der Vorschlag vom System
    Auswahl_753.png
    mit dem Wert max die gesamten Speicher für die Volumegroup nehmen
    Auswahl_754.png
    Partionierung durchführen und Anderungen speichern
    Auswahl_755.png
    Änderungen auf Festplatten schreiben Ja
    Auswahl_756.png
    Festplatte wird formatiert und Installation Grundsystem
    Auswahl_757.png
    Auswahl_758.png
    Weiteres installationsmedium verwenden? Nein
    Auswahl_760.png
    Sprache Paketmanager, hier Deutsch
    Auswahl_761.png
    Archiv Server auswählen, debian.org
    Auswahl_762.png
    Proxy angeben, wenn vorhanden, hier haben wir keinen Proxy
    Auswahl_763.png
    APT wird konfiguriert und software auswählen und installieren, simply wait
    Auswahl_764.png
    Auswahl_765.png
    Paketverwendungserfassungteilnehmen. ich sag hier nein muss aber jeder selbst wissen
    Auswahl_766.png
    Sofware auswählen
    ssh-Server und Standardsystemwerkzeuge
    alles andere abhaken
    Auswahl_767.png
    Installation läuft...
    Auswahl_768.png
    Grubloader auf auf Ihrem primären Laufwerk installieren? Ja auswählen
    Auswahl_769.png
    Festplatte auswählen.
    Auswahl_770.png
    Installation abgeschlossen system wird neu gestartet
    Auswahl_771.png
    Nach dem neustart steht der Bildschirm zum Passphrase eingeben
    Auswahl_772.png
    wir geben unser Kennwort an und e voila drin
    login screen
    nun können wir usn mit dem root passwort einloggen
    Auswahl_773.png
    Drin
    Auswahl_774.png
Proxmox installation auf Debian (Optional mit Verschlüsselung)

Einloggen per SSH Preauthentication ,damit Kennwort nicht per VNC eingeben weden muss

  1.  Da es natürlich immer sehr mühselig ist, das Kennwort per Tastatur über VNC oder wenn es Bare Metal ist, direkt am Server einzutippen, installieren wir einen SSH Server in initramfs wo wir uns dann hin verbinden können um die Passphrase per copy und paste, einzufügen / eingeben zu können.

  2.  root login per ssh freischalten und ssh-key kopieren macht

     nano /etc/ssh/sshd_config 

    auf yes ändern und dann den dienst neustarten   

     PermitRootLogin yes 
    service ssh restart

    Nun kann ein login per ssh stattfinden. Jetzt kopieren wir mit

    ssh-copy id root@ip-adresse

    unseren public ssh key auf den Server und kommentieren danach die

    #PermitRootLogin yes

    wieder aus. Nun Dienst wieder neustarten.

    service ssh restart
  3. Dropbear initramfs
    apt update && apt install dropbear-initramfs
    update-initramfs -u
    Mit y bestätigen

    Nun bekommen wir die Meldung invalid authorized file
    Auswahl_775.png
    Dazu einen Pub key, am besten einen aderen als der der fürs eigentliche System benutzt wird in die Datei
    /etc/dropbear-initramfs/authorized_keys

    nano /etc/dropbear-initramfs/authorized_keys

    und dort den Pub key rein und speichern.
    Es empfiehlt sich einen aderen SSH-Port zu wählen
    Dazu die Datei /etc/dropbear-initramfs/config öffnen

    nano /etc/dropbear-initramfs/config

    Und dort bei, sollte dropbear options auskemmntiert sein, das raute symbol natürlich entfernen
    DROPBEAR_OPTIONS="-p 12345"
    den Port angeben. In diesem Beispiel ist unser Port 12345

    Nur durchführen wenn kein DHCP-Server vorhanden oder man die IP-Adresse selbst vergeben will

    /etc/initramfs-tools/initramfs.conf

    Inhalt:

    IP Address=192.168.1.27
    Gateway=192.168.1.1
    Subnet Mask: 255.255.255.0
    Hostname=nothing.local.lan
    



    nun initramfs aktualisieren
    update-initramfs -u

    Nun keine Fehler mehr. SSH config dropbear scheint richtig zu sein. ;-)
    Nun neustart

    reboot

    Nun steht beim starten die IP Adresse von drop-bear (DCHP-Server vorrausgesetzt)
    in unserem Falle. 192.168.178.212
    Auswahl_777.png
    Nun per ssh verbinden (denkt daran port 12345

    ssh root@192.168.178.212 -p 12345

    in der busybox wird uns schon verraten das der Befehl zum entschlüsseln cryptroot-unlock ist

    cryptroot-unlock

    Nun das Passwort über die Zwischenablage oder Keepass einfügen
    Danach wird man ausgeloggt und der Server startet.
    Auswahl_779.png

    Die VNC Konsole oder Echter Bildschirm mit dem Login Fenster
    Auswahl_780.png


 

 



   
   


    

Proxmox installation auf Debian (Optional mit Verschlüsselung)

Die eigentliche Proxmox installation

Die hosts Datei anpassen.
und in unserem Beispiel hat die Prox node die 192.168.178.222

127.0.0.1       localhost
192.168.178.222 prox-node-01.locallan prox-node-01 pvelocalhost
  1. Netzwerkconfig anpassen
    nano /etc/network/interfaces

    Inhalt

    iface ens18 inet manual
    
    auto vmbr0
      iface vmbr0 inet static
      address 192.168.178.222
      netmask 255.255.255.0
      gateway 192.168.178.1
      bridge_ports ens18
      bridge_stp off
      bridge_fd 0

    Diese an seinen eigenen Interface Namen und ip Adressen anpassen
    Danach

    service networking restart

    ausführen.

  2. Nun die Pakete installieren und nicht benötigte entfernen
    Repo hinzufügen
    echo "deb [arch=amd64] http://download.proxmox.com/debian/pve bullseye pve-no-subscription" > /etc/apt/sources.list.d/pve-install-repo.list
    wget https://enterprise.proxmox.com/debian/proxmox-release-bullseye.gpg -O /etc/apt/trusted.gpg.d/proxmox-release-bullseye.gpg
    
    

    Pakete installieren. Bei der Postfix installation. Den Typ lokal auswählen.

    apt update && apt full-upgrade
    apt install proxmox-ve postfix open-iscsi
    apt remove linux-image-amd64 'linux-image-5.10*'
    update-grub
    apt remove os-prober
    update-grub
    Nun neustart mittels reboot, system entsperren und über https://192.168.178.222:8006 anmelden.

    Dieser Abschnitt gillt nur wenn Verschlüsselung aktiv
    Nach dem neustart bekommt der ssh-server bei der Verschlüsselung, wenn verschlüsselung vorhanden, die gleiche Adresse wie der Proxmox host, in unserem beispiel auch die 192.168.178.222 was vorher ja noch die 212 war.
    siehe Monitor / VNC Konsole
    Auswahl_781.png
    Wieder unlock fertig.
    Auswahl_782.png
    Dieser Abschnitt gillt nur wenn Verschlüsselung aktiv
    ende des Abschnittes
    Nun sehen wir auf dem Bildschirm KVM Konsole den Login Bildschirm von proxmox
    Auswahl_783.png
  3. Nun mit dem Webbrowser per https://192.168.178.222:8006 aufrufen, selbsigniertes Zertifikat zur Ausnahme hinzufügen
    Auswahl_784.png
    und mit dem root Benutzer und Kennwort Anmelden. Fertig.
    Auswahl_785.png
    Auswahl_786.png




Proxmox - Installation eines arm64 VM Gastest

Proxmox - Installation eines arm64 VM Gastest

Vorbereiten der VM

Beschreibung

Es ist unter Proxmox dank Qemu/KVM auch möglich eine arm64 CPU zu emulieren. Z.b Für ein Raspberry System oder einen UniFi Videorekorder als Beispiel.

Vorbereitung

ISO Download in den Proxmox Storage. Unter Version 7 geht das direkt über die GUI ansonsten per WGET
Die aktuellen Dieban ARM64 ISOs findet man hier : https://cdimage.debian.org/debian-cd/current/arm64/iso-cd/

Ab Version 8.0 :

Muss das Efi Image in Proxmox nachinstalliert werden.
per ssh auf Proxmox gehen und

apt install pve-edk2-firmware-aarch64
GUI-Methode wer sie noch nicht kennt:

AUf den gewünschten Speicher klicken wo die ISO heruntergeladen werden soll

Auswahl_074.png

Dann im Menü ISO Images auswählen

Auswahl_075.png

Nun oben auf Download from URL klicken

Auswahl_076.png

Nun die URL zur ISO einfügen, hier die : https://cdimage.debian.org/debian-cd/current/arm64/iso-cd/debian-11.6.0-arm64-netinst.iso und auf Query URL klicken.

Auswahl_077.png

Nun wird der Name ermittelt und dann auf Download klicken

Auswahl_078.png

Download Fenster schließen über X wenn unten Task OK steht.

Auswahl_079.png


WGET Methode:

Auf dem Proxmoxhost als root per ssh einloggen und folgenden wget Befhl absetzten. Dazu die gewünschte URL zur ISO eingeben/einfügen zum Beispiel diese: wget https://cdimage.debian.org/debian-cd/current/arm64/iso-cd/debian-11.6.0-arm64-netinst.iso

#bei standard local storage

cd /var/lib/vz/template/iso
wget https://cdimage.debian.org/debian-cd/current/arm64/iso-cd/debian-11.6.0-arm64-netinst.iso


#bei anderen storages wie bei mir ein cephfs
cd /mnt/pve/<datastorename>/template/iso
cd /mnt/pve/cephfs/template/iso
wget https://cdimage.debian.org/debian-cd/current/arm64/iso-cd/debian-11.6.0-arm64-netinst.iso

Virtuelle Machine anlegen

Auf Create VM klicken

Auswahl_072.png

Nun dem Kind einen Namen geben und auf weiter klicken.

Auswahl_073.png

Nun als ISO aus dem Storages die arm64 iso auswählen und auf weiter klicken.

Auswahl_080.png

Nun als BIOS : OVMF (UEFI) auswählen
Add EFI Disk  : abhaken

Auf weiter klicken

Auswahl_081.png

Storage auswählen und Größe angeben. Mir reichen 32GB, aber so wir Ihr es braucht

Auswahl_082.png

CPU Kerne auswählen. Ich nehme 4 aber das wieder nach den eigenen bedürfnissen anpassen

Auswahl_083.png

Genau wie bei Arbeistspeicher, ich nehme 4096 aber auch wieder nach den Bedürfnissen

Ballooning Device : haken raus

Auf weiter

Auswahl_084.png

Netzwerk passt bei mir so. Ansonsten euren Bedürfnissen anpassen und auf weiter.

Auswahl_085.png

Nun auf Finish klicken

Auswahl_086.png

Virtuelle machine bearbeiten

Nun Im Menü die Virtuelle Machine auswählen

Auswahl_087.png

Nun Auf den Menüpunkt Hardware klicken

Auswahl_088.png

Nun das CD/DVD Laufwerk anklciken und danach oben auf remove klicken

Auswahl_089.png

Frage ob wirklich gelöscht werden soll, mit ja beantworten

Auswahl_090.png

Nun Oben im Neü auf ADd und dann Serial Port anklicken

Menü_006.png

Nun einfach auf Add klicken. Denn der Port 0 reicht uns

Auswahl_091.png

Nun wieder auf Add und CD/DVD auswählen

Menü_007.png

Als BUS SCSI auswählen
Den Stoarge wo die Iso liegt auswählen
Die arm64 iso auswählen

Auf add klicken

Auswahl_092.png

Nun doppelklick auf Display

Auswahl_093.png

Bei Graphiccard : Serial terminal 0 auswählen und ok

Auswahl_094.png

Nun doppelklick auf die Festplatte

Auswahl_101.png

Dort dann den haken bei iothread raus und auf ok

Auswahl_102.png

Nun doppelklick auf SCSI Controller

Auswahl_103.png

Nun den von VirtIO SCSI single auf VirtIO SCSI ändern und auf ok

Auswahl_104.png


Nun im Menü auf options klicken

Auswahl_095.png

Dann doppelklcik auf Boot Order

Auswahl_096.png

Nun das CD Laufwerk mit Linksgedrückt halten und an die erste stelle ziehen, so das es dann so aussieht

Auswahl_097.png

Anpassen der Architektur der Maschine

Dazu wieder per ssh auf dem Host einloggen und die Conf datei von der Machine zu editieren

nano /etc/pve/qemu-server/<vmid>.conf

in usnerem Fall

nano /etc/pve/qemu-server/134.conf

Von:

balloon: 0
bios: ovmf
boot: order=scsi1;scsi0;net0
cores: 4
memory: 4096
meta: creation-qemu=7.1.0,ctime=1677936909
name: myarm64guest
net0: virtio=56:3F:39:75:A3:0C,bridge=vmbr0,firewall=1
numa: 0
ostype: l26
scsi0: rbd:vm-134-disk-0,iothread=1,size=32G
scsi1: cephfs:iso/debian-11.6.0-arm64-netinst.iso,media=cdrom,size=337196K
scsihw: virtio-scsi-single
serial0: socket
smbios1: uuid=4d234d40-733c-4881-bc0c-38ec912e0432
sockets: 1
vga: serial0
vmgenid: 6794e873-22e6-4ff1-b35e-654e01d58f02

Nach ändern:

vmgenid: .... auskommentieren
und arch:aarch64     hinzufügen

Sieht dann so aus:

balloon: 0
bios: ovmf
boot: order=scsi1;scsi0;net0
cores: 4
memory: 4096
meta: creation-qemu=7.1.0,ctime=1677936909
name: myarm64guest
net0: virtio=56:3F:39:75:A3:0C,bridge=vmbr0,firewall=1
numa: 0
ostype: l26
scsi0: rbd:vm-134-disk-0,iothread=1,size=32G
scsi1: cephfs:iso/debian-11.6.0-arm64-netinst.iso,media=cdrom,size=337196K
scsihw: virtio-scsi-single
serial0: socket
smbios1: uuid=4d234d40-733c-4881-bc0c-38ec912e0432
sockets: 1
vga: serial0
#vmgenid: 6794e873-22e6-4ff1-b35e-654e01d58f02
arch:aarch64

Nun noch die Efi Disk mit folgendem Befehl hinzufügen

efitype=2m, wenn es über die GUI gemacht wird, gibts an array fehler

qm set VMID -efidisk0 local:1,efitype=2m,pre-enrolled-keys=0,format=qcow2

Speicherpfad anpassen wenn nötig
Mein Beispiel:

Die formate sind qcow2 und raw.
je nachdem was euer Zielspeicher unterstützt.
RBD unterstützt nur raw

qm set 134 -efidisk0 rbd:1,efitype=2m,pre-enrolled-keys=0,format=raw
Output
<pre>pdate VM 134: -efidisk0 rbd:1,efitype=2m,pre-enrolled-keys=0,format=raw
transferred 0.0 B of 64.0 MiB (0.00%)
transferred 2.0 MiB of 64.0 MiB (3.12%)
transferred 4.0 MiB of 64.0 MiB (6.25%)
transferred 6.0 MiB of 64.0 MiB (9.38%)
transferred 8.0 MiB of 64.0 MiB (12.50%)
transferred 10.0 MiB of 64.0 MiB (15.62%)
transferred 12.0 MiB of 64.0 MiB (18.75%)
transferred 14.0 MiB of 64.0 MiB (21.88%)
transferred 16.0 MiB of 64.0 MiB (25.00%)
transferred 18.0 MiB of 64.0 MiB (28.12%)
transferred 20.0 MiB of 64.0 MiB (31.25%)
transferred 22.0 MiB of 64.0 MiB (34.38%)
transferred 24.0 MiB of 64.0 MiB (37.50%)
transferred 26.0 MiB of 64.0 MiB (40.62%)
transferred 28.0 MiB of 64.0 MiB (43.75%)
transferred 30.0 MiB of 64.0 MiB (46.88%)
transferred 32.0 MiB of 64.0 MiB (50.00%)
transferred 34.0 MiB of 64.0 MiB (53.12%)
transferred 36.0 MiB of 64.0 MiB (56.25%)
transferred 38.0 MiB of 64.0 MiB (59.38%)
transferred 40.0 MiB of 64.0 MiB (62.50%)
transferred 42.0 MiB of 64.0 MiB (65.62%)
transferred 44.0 MiB of 64.0 MiB (68.75%)
transferred 46.0 MiB of 64.0 MiB (71.88%)
transferred 48.0 MiB of 64.0 MiB (75.00%)
transferred 50.0 MiB of 64.0 MiB (78.12%)
transferred 52.0 MiB of 64.0 MiB (81.25%)
transferred 54.0 MiB of 64.0 MiB (84.38%)
transferred 56.0 MiB of 64.0 MiB (87.50%)
transferred 58.0 MiB of 64.0 MiB (90.62%)
transferred 60.0 MiB of 64.0 MiB (93.75%)
transferred 62.0 MiB of 64.0 MiB (96.88%)
transferred 64.0 MiB of 64.0 MiB (100.00%)
transferred 64.0 MiB of 64.0 MiB (100.00%)
efidisk0: successfully created disk &apos;rbd:vm-134-disk-0,efitype=2m,pre-enrolled-keys=0,size=64M&apos;
</pre>

Fehler:

EFI-DIsk

Sollte beim Efi Disk erstellen dieser Fehler auftauchen:

root@pve01:~# qm set 100 -efidisk0 local-lvm:1,efitype=2m,pre-enrolled-keys=0,format=raw
update VM 100: -efidisk0 local-lvm:1,efitype=2m,pre-enrolled-keys=0,format=raw
EFI base image '/usr/share/pve-edk2-firmware//AAVMF_CODE.fd' not found

Ap Version 8 gibt es keine aarch64 efi images mehr.

Nachinstallieren

apt install pve-edk2-firmware-aarch64

Starten Fehler CPU Typ nicht erkannt

In Proxmox 8 und höher wird Standard mäßig der CPU Typ gesetzt.
Das heißt in der <vmid>.conf wird der cpu typ festgelegt.
Da aarch64 keine kvm64  oder host kennt, muss der cpu eintrag auskommentiert werden

Vorher

...
#vmgenid%3A 9f0a633a-762b-4c4b-a43e-59460eb51e92
arch: aarch64
balloon: 0
bios: ovmf
boot: order=scsi1;scsi0;net0
cores: 4
cpu: x86-64-v2-AES
efidisk0: local-lvm:vm-100-disk-1,efitype=2m,pre-enrolled-keys=0,size=64M
memory: 2048
meta: creation-qemu=8.1.5,ctime=1718456554
name: unvr
...

nachher

...
#vmgenid%3A 9f0a633a-762b-4c4b-a43e-59460eb51e92
arch: aarch64
balloon: 0
bios: ovmf
boot: order=scsi1;scsi0;net0
cores: 4
#cpu: x86-64-v2-AES  #wurde hier auskommentiert
efidisk0: local-lvm:vm-100-disk-1,efitype=2m,pre-enrolled-keys=0,size=64M
memory: 2048
meta: creation-qemu=8.1.5,ctime=1718456554
name: unvr
...

 




Proxmox - Installation eines arm64 VM Gastest

Installation des Betriebssystems

Beschreibung:

Nachdem die VM konfiguriert und zum starten auf die ISO eingestellt ist, wird jett das Betriebssystem installiert.
In meinem Fall wird das ein Debian für Unifi UNVR aber ihr könnt den Namen natürlich an eure Bedürfnisse anpassen.

Installation:

VM auswahlen

Auswahl_087.png

Und oben recht im Menü auf start klicken

Auswahl_098.png

Nun einen Moment warten und dann auf den Buton Console klicken

Auswahl_105.png

Nun öffnet sich eine neue Console

Auswahl_109.png

Dort drin einmal die Enter Taste drücken. Dann Grub BootMenü wird leider nicht dargestellt.
Aber Gott sei Dank ist ETxtmodus Install vorausgewählt.
Danach erschein ein graes Fenster. Dieses abwarten

Auswahl_110.png

Denn nach dem kurzen warten, haben wir den Installer vor uns.
Hier wählen wir english aus und enter.

Auswahl_111.png

Bei Land other

Auswahl_112.png

Hier bei location nun Europe auswählen

Auswahl_113.png

Nun Germany auswählen

Auswahl_114.pngNun United States auswählen.

Auswahl_115.png

Jetzt lädt der Installer, da es ein emulirtes ARM64 System ist, das kann bis zu 5 Minuten dauern...

Nun den Hostnamen angeben. Ich lass den bei debian. Ihr könnt eintragen was ich möchtet

Auswahl_116.png

Domain Name eintragen oder leer lassen. Ich lass ihn leer.

Auswahl_117.png

Root Password vergeben

Auswahl_118.png

Root Passwort bestätigen

Auswahl_119.png

Nun einen Anzeige Namen vergeben, ich nehme Administrator

Auswahl_120.png

Nun einen Benutzernamen festlegen.
Ich nenne Ihn auch administrator, aber ihr könnt sonst jeden Namen nehmen der vom System NICHT reserviert ist.

Auswahl_121.png

Nun auch für diesen Benutzer ein Kennwort vergeben

Auswahl_122.png

Dieses Kennwort bestätigen

Auswahl_123.png

Nun hier die gesamte Disk auswählen.

Auswahl_124.png

Nun die Festplatte auswählen

Auswahl_125.png

Alle Dateien in eine Partition

Auswahl_126.png

Nun auf Finish Partioning and write changes to disk

Auswahl_127.png

Nun auf Ja

Auswahl_128.png

und wieder warten kann bis zu 5 min dauern.

Nun die Frage nach extra medium mit nein beantworten

Auswahl_129.png

Nun die Sprache für den mirror auswählen, hier Germany

Auswahl_130.png

Mirror auswählen, in debian.org 

Auswahl_131.png

Proxy - auswählen, wenn Ihr einen Proxy nutz, eintragen.

Auswahl_132.png

Nun wird wieder installiert. Abwarten.

An der Paketanalyse teilnehmen : nein

Auswahl_133.png

Nun alles abwählen außer SSH und Systemwerkzeuge und dann continue

Auswahl_134.png

Auswahl_135.png

Nun einfach blind enter drücken. Dann kommt finish. Und das System startet mit der CD wieder neu.
Nun die Machine stoppen. Dazu oben im Menü bei  Herunterfahren auf den Pfeil  ->  Stop

Menü_009.png

Installtion beendet. Auf der nächsten Seite, System startklar machen.

Proxmox - Installation eines arm64 VM Gastest

System Starten und startbar machen

  1.  Unter Hardware bei der VM Eine EFI Disk hinzufügen. (hier ausgegraut weil schon vorhanden)
    Efi Disk Add.png
  2. VM Starten, Console öffnen und sofort mit der ESC Taste mehrfach drücken um ins EFI Bios zu gelangen.
  3. Dort unter Boot Maintenance -> Boot options - >
    BootMaintenance.png
    Nun Add Boot option auswählen
    add boot option.png

    Festplatte auswählen
    festplatte auswählen.png
    nun durch Daitsystem hangelb bis zur Efi file
    verzeichnis hangeln bis zur efi.png
    Nun die EFI File auswählen
    efi file auswählen.png
    Nun eine Beschreibung angeben durch drücken von enter
    beschreibung boot option.png
    Nun die Beschreibung eingeben zum Beispiel debian und mit enter bestätigen dann auf commit changes and exit
    beschreibung2.png

    Zurück im Menü Change Boot  order auswählen
    boot order.png
    Nun enter drücken und mittels enter um die liste zu verändern.
    liste boot order.png
    Debian auswählen und mittels +/- Taste den eintrag nach oben schieben
    debian_unten.png
    Nun oben vor CDROm falls man doch nochmals von CD starten möchte
    liste_oben.png
    Nun auf enter drücken dann auf esc, dann ist man wieder im Boot Maintenance Menü.
    Nun auf Go Back To Main Page
    mainetenacne_menü.png

    Nun esc drücken
    Bildschirmfoto vom 2022-07-22 19-54-53.png
    jetzt sind wir wieder im Hauptmenü und dort reset auswählen.
    Nun startet das Debian System von selbst.
  4. Fertig

Proxmox - Installation eines arm64 VM Gastest

System als Template anlegen (Optional)

Beschreibung:

Da die installation einer arm64 VM lange dauert. Werden wir uns dieses Grundsystem als Template anlegen.

Template anlegen

DIe Machine stoppen falls sie noch nicht gestoppt ist.
Shutdown -> Stop

Menü_009.png

Rechtsklick auf dei VM und dann im Menü  convert to template auswählen.

Menü_010.png

Die Frage mit ja beantworten

Auswahl_136.png

Nun haben wir die VM in ein Template umgewandelt.
 Nun steht es hier in der Liste.

Auswahl_137.png


Eine VM aus dem Template erstellen

Rechtsklick auf das Template und clone auswählen

Menü_011.png

Nun Name ausfüllen  zb: clonearm64
Mode : Full Clone oder Linked Clone
Ich nehme Full Clone, falls das Template mal nicht mehr bestehen sollte.

Menü_012.png

Fertig.

Proxmox - Benutzerverwaltung

Proxmox - Benutzerverwaltung

Benutzer und Gruppe im Terminal anlegen

  1. Gruppe anlegen mit Admin Rechten
    pveum group add admin -comment "System Administrators"

    Gruppe eine Rolle zuweisen

    pveum acl modify / -group admin -role Administrator


  2. Nun einen Benutzeranlegen auf dem Realm PVE Server (PVE)
    Realm PAM wäre ein Linux Benutzer

    pveum user add <username>r@pve --password <password>

    Möchte man im nach hinein nochmals das Kennwort ändern dann mittels Befehl

    pveum passwd <username>@pve

    Nun dem User die Gruppe admin zuweisen

    pveum user modify stefanhacker@pve -group admin

    -



Proxmox - Hardware durchreichen in VM (KVM)

Um echte Hardware in die Virtuelle Machine durchzureichen (KVM)

Proxmox - Hardware durchreichen in VM (KVM)

Einschalten von vt-d für Intel CPUs (iommu)

Immou aktivieren für Intel CPUs. Hier wird unterschiedn ob es ein UEFI System oder legacy System ist mit oder ohne zfs.

Vorrausetzung ist das im BIOS alles mit vt-d eingeschlatet ist und somit das Mainboard und CPU das auch unterstützen.

Überpüfe welches System vorliegt
!!!!!VGA PASSTHROUGH funktioniert nur wenn das Host Betriebssystem im EFI Boot installiert wurde!!!!!

ls /sys/firmware/efi

Wenn kein Ergebnis vor liegt ist es BIOS legacy boot.

Unter Legacy Boot (also nicht EFI) in der Datei oder EFI ohne ZFS!

nano /etc/default/grub

Dort

GRUB_CMDLINE_LINUX_DEFAULT="quiet"

zu

GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on

ändern und

update-grub

 ausführen.

Unter EFI Boot mit ZFS in der Datei

nano /etc/kernel/cmdline 

Dort

root=ZFS=rpool/ROOT/pve-1 boot=zfs

 zu   

root=ZFS=rpool/ROOT/pve-1 boot=zfs intel_iommu=on

ändern und

pve-efiboot-tool refresh

ausführen.

Module beim start laden. Der Modules Datei anfügen

nano /etc/modules


vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd

Wenn Grafikkarten durchgereicht werden sollen müssen noch die Treiber geblacklistet werden.
ansonsten kann dieser Teil übersprungen werden.

echo "blacklist radeon" >> /etc/modprobe.d/blacklist.conf
echo "blacklist nouveau" >> /etc/modprobe.d/blacklist.conf
echo "blacklist nvidia" >> /etc/modprobe.d/blacklist.conf
update-initramfs -u
   


Hier gehts weiter. Wenn der Grafikkarten teil übersprungen wurde.
Nun die Machine neustarten. Ob iommu aktiv ist kann man mittels.

dmesg | grep IOMMU

festellen.
Ausgabe:

[    0.028060] DMAR: IOMMU enabled
[    0.090496] DMAR-IR: IOAPIC id 2 under DRHD base  0xfed90000 IOMMU 0

Sollte nichts ausgegeben werden, im bios nochmals schauen ob vt-d aktiv ist.

Nun iommu_unsafe_interruptssetzten

echo "options vfio_iommu_type1 allow_unsafe_interrupts=1" > /etc/modprobe.d/iommu_unsafe_interrupts.conf
update-initramfs -u

Für ein Funktionieren pci passthroug müssen alle Geräte die in eine VM durchgereicht werden sollen in einer eigenen Gruppe  befinden. Sprich alleine sein. Zur Not PCI Karte umstecken.
Um überhaupt seperate IOMMU Gruppen zu haben, must das feature ACS (Access Control Services, im BIOS aktiv sein.

find /sys/kernel/iommu_groups/ -type l

Ausgabe: In usn erem Beispiel ist es die 01:00, diese steckt aber noch mit 00:01.0
(00:01.0 PCI bridge: Intel Corporation 6th-10th Gen Core Processor PCIe Controller (x16) (rev 05)
in einer Gruppe.
Wenn PCI Karte umbauen nicht geht, so wie bei mir.
Dann dem grup loader noch

pcie_acs_override=downstream

Unter legancy
nano /etc/default/grub
update grub

Unter EFI
nano /etc/kernel/cmdline
pve-efiboot-tool refresh

und danach egal welches system
update-initramfs -u

mit geben.
Ausgabe ohne PCI KArte umsetzten oder grub Befehl Downstream

/sys/kernel/iommu_groups/7/devices/0000:00:1c.7
/sys/kernel/iommu_groups/5/devices/0000:00:1c.0
/sys/kernel/iommu_groups/3/devices/0000:00:16.0
/sys/kernel/iommu_groups/11/devices/0000:05:00.0
/sys/kernel/iommu_groups/1/devices/0000:00:01.0
/sys/kernel/iommu_groups/1/devices/0000:01:00.0
/sys/kernel/iommu_groups/1/devices/0000:01:00.1
/sys/kernel/iommu_groups/8/devices/0000:00:1f.2
/sys/kernel/iommu_groups/8/devices/0000:00:1f.0
/sys/kernel/iommu_groups/8/devices/0000:00:1f.3
/sys/kernel/iommu_groups/8/devices/0000:00:1f.4
/sys/kernel/iommu_groups/6/devices/0000:00:1c.5
/sys/kernel/iommu_groups/4/devices/0000:00:17.0
/sys/kernel/iommu_groups/2/devices/0000:00:14.2
/sys/kernel/iommu_groups/2/devices/0000:00:14.0
/sys/kernel/iommu_groups/10/devices/0000:03:00.0
/sys/kernel/iommu_groups/0/devices/0000:00:00.0
/sys/kernel/iommu_groups/9/devices/0000:02:00.0

Ausgabe mit grub parameter downstream. Es hat geklappt

/sys/kernel/iommu_groups/7/devices/0000:00:1c.7
/sys/kernel/iommu_groups/5/devices/0000:00:1c.0
/sys/kernel/iommu_groups/3/devices/0000:00:16.0
/sys/kernel/iommu_groups/11/devices/0000:03:00.0
/sys/kernel/iommu_groups/1/devices/0000:00:01.0
/sys/kernel/iommu_groups/8/devices/0000:00:1f.2
/sys/kernel/iommu_groups/8/devices/0000:00:1f.0
/sys/kernel/iommu_groups/8/devices/0000:00:1f.3
/sys/kernel/iommu_groups/8/devices/0000:00:1f.4
/sys/kernel/iommu_groups/6/devices/0000:00:1c.5
/sys/kernel/iommu_groups/4/devices/0000:00:17.0
/sys/kernel/iommu_groups/12/devices/0000:05:00.0
/sys/kernel/iommu_groups/2/devices/0000:00:14.2
/sys/kernel/iommu_groups/2/devices/0000:00:14.0
/sys/kernel/iommu_groups/10/devices/0000:02:00.0
/sys/kernel/iommu_groups/0/devices/0000:00:00.0
/sys/kernel/iommu_groups/9/devices/0000:01:00.0
/sys/kernel/iommu_groups/9/devices/0000:01:00.1

Die Grafikkarte ist jetzt unter der Gruppe 9 kann bei euch andersd sein . Zu der Grafikkarte gehören zwei Einträge.

/sys/kernel/iommu_groups/9/devices/0000:01:00.0
/sys/kernel/iommu_groups/9/devices/0000:01:00.1

ff

Proxmox - Hardware durchreichen in VM (KVM)

VGA Grafikkarte in VM (KVM) durchreichen

Vorraussetzung wie im vorherigen Seite. Das auch die Grafikkarten geblacklistet wurden.

!!!!!VGA PASSTHROUGH funktioniert nur wenn das Host Betriebssystem im EFI Boot installiert wurde!!!!!
!!!!Wenn eine Onboard Grafikkarte verfügbar ist, diese als Primär im BIOS einstellen.!!!!!


Siehe: Einschalten von vt-d für Intel CPUs (iommu)

Eine VM Erstellen:
Bildschirmfoto vom 2022-10-20 13-13-35.png

Nun ISO und OS auswählen, hier eine Windows 10 Machine mit ISO. Wenns ein Linux ist,linux auswählen.
Hier sind die Einstellungen egal.


Bildschirmfoto vom 2022-10-20 13-17-11.png

Hier:

Machine q53 auswählen.
BIOS : OVMF (UEFI) auswählen
Add EFI Disk : Haken rein
Storage dazu auswählen
Pre-Enroll-Keys : Haken rein
Qemu Agent : Haken rein
Add TPM : Haken rein
Storage dazu auswählen

Bildschirmfoto vom 2022-10-20 13-19-00.png

Nun wieder wie gehabt eine Festplatte zuweisen. Ich nehme hier virtio und 128 GB.
Denkt bei Windows dran, im Anschluss ein zweites CD/DVD Laufwerk mit den Virtio Treibern hinzuzufügen.
Download hier : https://github.com/virtio-win/virtio-win-pkg-scripts/blob/master/README.md
Die latest Stable und die guest tools sin im Anhang dieses Artikels.

Nun  die CPU settings
Bildschirmfoto vom 2022-10-20 13-26-59.png

Memory Settings

Bildschirmfoto vom 2022-10-20 13-28-05.png

Network Settings.
Hier auf VirtIO stellen
Das schöne ist das Win 110/1 die Treiber nicht kennt und somit ein lokales Konto verwendet/erstellt werden kann,

Bildschirmfoto vom 2022-10-20 13-29-37.png

Nun auf finisch, haken bei Start after creation raus.

Bildschirmfoto vom 2022-10-20 13-30-41.png

Nun noch ein zweites CD/DVD Laufwerk erstellen für die VirtIO treiber. Aber nur nötig bei Windows VMS. sonst kann dieser Teil übersprungen werden.

Nun die Grafikkarte hinzufügen.
Dazu auf Add Hardware PCI, dann die Grafikkarte auswählen. mit der 0 bei der ID am ende.

Menü_001.png

Hier Haken bei :
All Funcktions rein
Primary GPU rein
Rom-BAR rein
PCI-Express rein

Screenshot 2022-10-21 at 21-32-55 vservwohn - Proxmox Virtual Environment.png

Damit die Graffikarte nicht geladen wird, müssen wir die IDs black listen.
Dazu erstmal die IDs bekommen.
Die bekommen wir mittels  lspci -n -s 01:00
01:00 ist die erste PCI ID usnerer Graffikarte (Siehe Screenshot Grafikkarten auswahl in derVM

lspci -n -s 01:00


Ausgabe:

01:00.0 0300: 10de:1380 (rev a2)
01:00.1 0403: 10de:0fbc (rev a1)

Nun die Beiden IDS blacklisten. DIese IDS sind von der GPU und der Soundkarte auf der GPU (HDMI hat Sound)

echo "options vfio-pci ids=10de:1380,10de:0fbc" > /etc/modprobe.d/vfio.conf

Den Grub anhängen

initcall_blacklist=sysfb_init vfio_pci.ids=10de:1380,10de:0fbc iommu=pt vfio_iommu_type1.allow_unsafe_interrupts=1"

In der GRUb conf hinzufügen
Für legacy

nano /etc/default/grub
update grub

Unter EFI mit ZFS

Achtung in der cmdline kein gänsefüßchen am ende!!!!

nano /etc/kernel/cmdline
pve-efiboot-tool refresh

hinzufügen

dann initrafs aktualisieren

update-initramfs -u

Für Soundkartenasugabe kratzen verzerrung oder gar keinen Ton mehr

echo "options snd-hda-intel enable_msi=1" >> /etc/modprobe.d/snd-hda-intel.conf





Nun reboot, des Proxmox hosts.

reboot

Wenn alles geklappt hat sollte der Loginscreen nicht mehr kommen, sondern mitten im Boottext stecken bleiben, da die Grafikkarte hier abgewürgt wurde.

Nun nur noch die conf file der vm folgende Zeile am ende hinzufügen.

nano /etc/pve/qemu-server/<vmid>.conf
nano /etc/pve/qemu-server/100.conf 
...
args: -cpu 'host,+kvm_pv_unhalt,+kvm_pv_eoi,hv_vendor_id=1234567890a4,kvm=off' -machine 'type=q35,kernel_irqchip=on'

Speichern.

Nun die Vm starten, voila oder aber nein Kein Bild.
Dann Fehlersuche hier


Fehlersuche


Wenn das Bild auf no  signal bleibt.

In der /var/log/syslog schauen

tail -f /var/log/syslog

Hier der LOG Fehler. Bedeutet nicht im EFI Boot modus installiert der Host

Oct 21 16:15:57 mediawohn kernel: [   32.695520] vfio-pci 0000:01:00.0: No more image in the PCI ROM
Oct 21 16:15:58 mediawohn pvedaemon[1616]: <root@pam> end task UPID:mediawohn:000007B2:00000C05:6352A99B:qmstart:100:root@pam: OK
Oct 21 16:15:59 mediawohn kernel: [   34.964385] vfio-pci 0000:01:00.0: No more image in the PCI ROM
Oct 21 16:15:59 mediawohn kernel: [   34.964435] vfio-pci 0000:01:00.0: No more image in the PCI ROM

weiterer Fehler:
Ab Kernel 5.15.+ muss in der grub conf
video=efifb:off
durch
initcall_blacklist=sysfb_init
ersetzt werden

- Invalid PCI ROM header signature
- kernel: vfio-pci 0000:01:00.0: BAR 1: can't reserve [mem 0x4020000000-0x402fffffff 64bit pref]

Jetzt bleibt nur noch  Invalid PCI ROM header signature und cannot read device übrig

vfio-pci: Cannot read device rom at 0000:01:00.0
Oct 21 20:27:02 pve kernel: [  298.009369] vfio-pci 0000:01:00.0: vfio_ecap_init: hiding ecap 0x1e@0x258
Oct 21 20:27:02 pve kernel: [  298.009382] vfio-pci 0000:01:00.0: vfio_ecap_init: hiding ecap 0x19@0x900
Oct 21 20:27:02 pve kernel: [  298.010765] vfio-pci 0000:01:00.0: Invalid PCI ROM header signature: expecting 0xaa55, got 0xffff




Bevor es weiter geht testen ob die Grafikarte UEFI OMFV fähig ist

apt install git gcc make
git clone https://github.com/awilliam/rom-parser
cd rom-parser
make

Nun das rom aus der Grafikkarte holen ud testen

cd /sys/bus/pci/devices/0000:01:00.0/
echo 1 > rom
cat rom > /root/image.rom
echo 0 > rom
cd ~
cd rom-parser
./rom-parser /root/image.rom

Ausgabe :
Hier ein Fehler, am ende.
Dies bedeutet das Auf das Rom nicht zugegriffen werden kann. In meinem Beispiel hab Ich legacy Boot.
Denn am einfachsten gets wenn das Hostsystem gleich als UEFI installiert ist.
Die gegenprobe mach ich noch. Also für die Grafikkarte ein VBIOS holen

alid ROM signature found @0h, PCIR offset 190h
	PCIR: type 0 (x86 PC-AT), vendor: 10de, device: 1380, class: 030000
	PCIR: revision 0, vendor revision: 1
Error, ran off the end

VBIOS holen:

unter https://www.techpowerup.com/vgabios/ sein passendes rom suchen.
Dann dort mit rechtsklick den Downlink undklicken und adresse kopiren meins liegt unter
https://www.techpowerup.com/vgabios/175522/Asus.GTX750Ti.2048.141104.rom
Nun per wget das image ablegen.

Wenn das passende rom nicht dabei selbst dumpen mit nvflash

https://www.techpowerup.com/download/nvidia-nvflash/
 Usage:

chmox +x nvflash
./nvflash --save <filename>

ansonsten mit wget das richtige file holen, wenn bei techpowerup verfügbar.
Beispiel für meine File

wget -O /usr/share/kvm/gtx750ti2048m.bin https://www.techpowerup.com/vgabios/175522/Asus.GTX750Ti.2048.141104.rom

ROM File ablegen unter
/usr/share/kvm/meinromfile.bin

Nun die vm conf anpassen und die romfile reinpacken ohnepfad nur den dateinamen

nano /etc/pve/qemu-server/1<VMID>.conf
nano /etc/pve/qemu-server/100.conf

Dort an die vga Zeile anfügen

,romfile=vbios.bin

Beispiel:

,romfile=gtx750ti2048m.bin


hostpci0: 0000:01:00,pcie=1,x-vga=1,romfile=gtx750ti2048m.bin

Nun an die Syslog hängen

tail -f /var/log/syslog




ff

Proxmox - Tools / BUG Fixes Workarounds / Tipps und Tricks

Hier kommen alle Themen Rund um Fehlerbehebungen und Workarounds rein

Proxmox - Tools / BUG Fixes Workarounds / Tipps und Tricks

Proxmox 7 - Deutsche Windows ISO nach installation keine Netzwerkkarten nur Ausrufungszeichen

Bei einem Proxmox update auf Version 7 können keine neuen Netzwerkkarten hinzugefügt werden und wenn doch Fehler 53
klassenkonfiguration wird von windows noch eingerichtet

Siehe Schreenshot.

IMG_20221022_194808.jpg

Abhilfe q35 auf version 5.1 umstellen.

Screenshot 2022-10-22 at 19-58-06 vservwohn - Proxmox Virtual Environment.png

Beim neustart / starten könnte es einen Bluescreen geben.
einfach nochmals starten, läuft dann.
Fertig

Proxmox - Tools / BUG Fixes Workarounds / Tipps und Tricks

Proxmox/Debian bei älteren Monitoren - Out of Range

Hat man am Server einen Monitor aus den 2000er angeschlossen und der unterstützt die akteullen modi nicht mehr.
Per SSH einloggen oder gleich nach der installation im grub nomodeset stezten.


Für GRUP legacy boot oder EFI ohne ZFS

nano /etc/default/grub

FÜR EFI Boot mit ZFS

nano /etc/kernel/cmdline

hinter quiet einfach 

nomodeset
schreiben

Beispiel

GRUB_CMDLINE_LINUX_DEFAULT="quiet nomodeset"

solltet ihr noch mehr custom paremter haben stehen die natürlich dahinter

zum Schluss für legacy oder nur efi

update-grub

für EFI mit ZFS

pve-efiboot-tool refresh

Dann den Server neustarten fertig.
Nun haben wir auch endlich Bild mit nem alten Monitor


Proxmox - Tools / BUG Fixes Workarounds / Tipps und Tricks

Proxmox ZFS Offline Mount mit PVE Install DVD/STICK

Beschreibung

Wie oft hat man das Problem zum Beispiel einen Proxmoxhost wo die Grafikkarte durchgereicht ist und so die Bedienung mit Tastatur und Maus nicht möglich ist. Es war immer nur möglich den Host per ssh und Weboberfläche zu steuern.
Jetzt kommt ein ein neues Mainboard oder neue Grafikkarte rein und schon ändert sich der Name der Netzwerkkarte.
Und nun? Mit der PVE DVD Starten das ZFS Mounten die Netzwerkkonfig ändern undfertig.

DVD Starten

Von der PVE Install DVD/Stick starten und den Debug Mode auswählen.

Bildschirmfoto vom 2023-01-03 08-09-59.png

Nun sind wir in einem Debug Terminal.
in diesem können wir aber noch nicht wirkliche Befhele absetzten.
Deswegen hier mit STRG+D drücken um in das zweite Terminal zu gelangen.

Bildschirmfoto vom 2023-01-03 08-16-16.png

Hier können wir nun Befehle absetzten.

Bildschirmfoto vom 2023-01-03 08-17-01.png

Netzwerkkarte ermitteln und Tastatursprache festlegen

Als erstes wollen wir wissen wir wissen wie unsere Netzwerkkarte heißt, das hat zwar nichts mit ZFS zu tun, allerings soll es hier ja auch einen Sinn machen.

ip a

In unserem Beispiel ens18

Bildschirmfoto vom 2023-01-03 08-18-06.png

Die Tastaursprache legen wir mit 
dpkg-reconfigure keyboard-configuration

fest.

Nun werden wir nach dem Tastaturmodell gefragt.

Bildschirmfoto vom 2023-01-03 08-21-06.png

Mit Enter gehts auf die nächste Seite. Ich nehme die 71 Generic 105 intl..
Solange enter drücken bis Keyboardmodel dort steht, 71 eintippen enter drücken

Bildschirmfoto vom 2023-01-03 08-31-22.png

Nun das Layout, hier die 11 keine toten Tasten

Bildschirmfoto vom 2023-01-03 08-26-02.png

Nun ALT-GR Funktionstaste hier standard 1 wählen

Bildschirmfoto vom 2023-01-03 08-27-44.png

Nun den Compose Key wählen (Ich habe keinen) da eure Einstellung wählen.
Also bei mir die 1

Bildschirmfoto vom 2023-01-03 08-28-43.png

Da wir keinen X-Server haben hier nein (no) wählen

Bildschirmfoto vom 2023-01-03 08-29-26.png

Vielleicht klappts bei euch bir mir nicht.

Legende für English

\ = #
- = ß
/ = -
? = shift + -
z = y
y = z
* = shift + 8
@ = shift + 2
# = shift + 3
^ = shift + 6
& = shift + 7
( = shift + 9
) = shift + 0
_ = shift + ß
: = shift + ö

ZFS einbinden

Pools auflisten.

Mit diesem Befehl werden alle pools aufgelistet ohne diese zu importieren. Villeicht möchte man ja nur einen bestimmten pool importieren. Wir haben hier nur einen. nämlich rpool.

zpool import -a

Hier bekommen wir nämlcih einen Hinweis, das der Pool schon mal woanders gemountet war. Diese machen wir uns zu nutze um die Pools aufzulisten.

Bildschirmfoto vom 2023-01-03 08-51-30.png

Möchte man explicit einen pool importieren gibt man dessen namen an und nicht -a

zpool import rpool

Die selbe Meldung halt nur für den Pool

Bildschirmfoto vom 2023-01-03 08-52-47.png
Da wir diesen aber importieren wollfen den Paramter -f hinter her.

zpool import rpool -f

Nun schauen wir uns den Status an

zpool status

Dem Pool gehts gut

Bildschirmfoto vom 2023-01-03 08-54-53.png

Mit dem Befehl

mount

sehen wir, wo er den Pool gemountet hat. Diese mount points unbedingt merken.

Bildschirmfoto vom 2023-01-03 08-59-03.png

Das gleiche geht auch mit

zfs list

Bildschirmfoto vom 2023-01-03 09-02-10.png

Wie wir sehen ist der PVE-1 eigentlich auf / gemountet, was natürlich nicht geht, da ja schon / vom system vergeben ist.
Also müssen wir den Mountpoint umbiegen

zfs set mountpoint=/mnt rpool/ROOT/pve-1

Bildschirmfoto vom 2023-01-03 09-05-59.png

Nun wurde das Verzeichnis geremounted. Siehe mittels

mount

Bildschirmfoto vom 2023-01-03 09-07-24.png

Nun können wir zum Beispiel die Netzwerkkarte editieren.
Das root Verzeichnis vom ZFS Pool wurde in /mnt gemountet

nano /mnt/etc/network/interfaces

Tadaaa unsere Netzwerk konfig. Diese oder noch andere sachen ändern

Bildschirmfoto vom 2023-01-03 09-08-45.png

und zum Schluss den Mountpoint wieder zrucüksetzen auf /

Dazu auf / wechseln, denn das Verzeichnis darf nicht offen sein

cd /

Nun zurücksetzten

zfs set mountpoint=/ rpool/ROOT/pve-1

Mit

mount

nochmals überprüfen.

Bildschirmfoto vom 2023-01-03 09-13-32.png

Passt. Fertig.
neustarten mit STRG+D

und dann abort auswählen.

Bildschirmfoto vom 2023-01-03 09-14-46.png

Nun im Terminal wieder STRG+D drücken
Das System startet neu.

Beim Starten bekommen wir wieder den Hinweis das der pool fremdimportiert wurde.

Bildschirmfoto vom 2023-01-03 09-17-41.png

Wie in der Beschreibung ja auch zu lesen

zpool import rpool -f

Bildschirmfoto vom 2023-01-03 09-19-02.png

Nun wieder STRG+D

Und die Kiste läuft.

Bildschirmfoto vom 2023-01-03 09-20-04.png


Jetzt einloggen und nochmal neustarten.

Bildschirmfoto vom 2023-01-03 09-21-18.png

Läuft so durch

Bildschirmfoto vom 2023-01-03 09-20-04.png

fertig

Proxmox - Tools / BUG Fixes Workarounds / Tipps und Tricks

LXC Conatiner startet nach Installation einer Software die als Dienst startet nicht mehr. (AppArmor)

Beschreibung

LXC Conatiner startet nach Installation einer Software die als Dienst startet nicht mehr.
So sieht das Bild aus. Einfach ein schwarzes terminal wo wir reinschreiben können.
Auswahl_001.png

Vorbereitung

Damit wir info bekommen, warum das ding nicht startet müssen wir in den Option des Containers die Console von tty auf Console umstellen.

Dazu auf Optionen des Containers und Doppelklick auf Console

Auswahl_002.png

Nun aus der Liste /dev(console auswählen und ok

Auswahl_003.png

Wenn wir jetzt den Container neu starten und ein neues Konsolenfenter aufmachen bekommen wir infos.

Auswahl_004.png

Nun melden wir uns mit unserem Kennwort an und sheen wir sind als root eingeloggt

Auswahl_005.png

Nun mit journalctl -xe schauen was Sache ist. Dazu scrollen wir hoch bis zum Fehler.

emd[86]: /sbin/apparmor_parser: Unable to replace "lsb_release".  Permission de>
emd[93]: /sbin/apparmor_parser: Unable to replace "/usr/bin/man".  Permission d>
emd[92]: /sbin/apparmor_parser: Unable to replace "/usr/lib/NetworkManager/nm-d>
emd[96]: Skipping profile in /etc/apparmor.d/disable: usr.sbin.rsyslogd
emd[94]: /sbin/apparmor_parser: Unable to replace "tcpdump".  Permission denied>
emd[118]: /sbin/apparmor_parser: Unable to replace "lsb_release".  Permission d>
emd[121]: /sbin/apparmor_parser: Unable to replace "kmod".  Permission denied; >
emd[121]: /sbin/apparmor_parser: Unable to replace "nvidia_modprobe".  Permissi>
emd[133]: /sbin/apparmor_parser: Unable to replace "/usr/bin/man".  Permission >
emd[131]: /sbin/apparmor_parser: Unable to replace "/usr/lib/NetworkManager/nm->
emd[139]: Skipping profile in /etc/apparmor.d/disable: usr.sbin.rsyslogd
emd[135]: /sbin/apparmor_parser: Unable to replace "tcpdump".  Permission denie>
emd[77]: Error: At least one profile failed to load
pparmor.service: Main process exited, code=exited, status=1/FAILURE

scroll right

replace "lsb_release".  Permission denied; attempted to load a profile while >
o replace "/usr/bin/man".  Permission denied; attempted to load a profile while>
o replace "/usr/lib/NetworkManager/nm-dhcp-client.action".  Permission denied; >
or.d/disable: usr.sbin.rsyslogd
o replace "tcpdump".  Permission denied; attempted to load a profile while conf>
to replace "lsb_release".  Permission denied; attempted to load a profile while>
to replace "kmod".  Permission denied; attempted to load a profile while confin>
to replace "nvidia_modprobe".  Permission denied; attempted to load a profile w>
to replace "/usr/bin/man".  Permission denied; attempted to load a profile whil>
to replace "/usr/lib/NetworkManager/nm-dhcp-client.action".  Permission denied;>
mor.d/disable: usr.sbin.rsyslogd
to replace "tcpdump".  Permission denied; attempted to load a profile while con>
led to load

scroll right
ied; attempted to load a profile while confined?
nied; attempted to load a profile while confined?
cp-client.action".  Permission denied; attempted to load a profile while confin>

 attempted to load a profile while confined?
nied; attempted to load a profile while confined?
ttempted to load a profile while confined?
n denied; attempted to load a profile while confined?
enied; attempted to load a profile while confined?
hcp-client.action".  Permission denied; attempted to load a profile while confi>

; attempted to load a profile while confined?


In dem Conatiner dann apparmor deaktivieren

systemctl disable apparmor

Dann sollte die Kiste starten.
Allerdings rate ich genau wegen solchen Dingen von Containern ab und empfehle KVM in Verbindung mit cloudinit.



Proxmox - Tools / BUG Fixes Workarounds / Tipps und Tricks

Proxmox Wartungsmodus / Maintenance Mode - Diasable / Enable VMS at Start

Beschreibung

Man möchte den Server mehrmals neustarten, dann nervt es doch, wenn alle VMs/CTs mit starten.
Mit folgendem Script kann man das ein und auschalten

Installation des scripte

Auf den Server einloggen (sollte es ein Cluster sein, braucht das nur auf eine Node gepackt werden)
Nun eine Neue Datei erstellen

nano /root/save_boot_state.sh

Den Inhalt einfügen

#!/bin/bash
# boot-save-disable.sh
# Speichert alle onboot=1 VMs/CTs und deaktiviert sie

SAVEFILE="/root/boot-state.txt"
> "$SAVEFILE"

echo "=== Speichere Boot-Status ==="

for conf in /etc/pve/qemu-server/*.conf /etc/pve/lxc/*.conf; do
    [ -f "$conf" ] || continue
    if grep -q "^onboot: 1" "$conf"; then
        id=$(basename "$conf" .conf)
        type="vm"
        [[ "$conf" == *"/lxc/"* ]] && type="ct"
        echo "$type $id" >> "$SAVEFILE"
        sed -i 's/^onboot: 1/onboot: 0/' "$conf"
        echo "  Deaktiviert: $type $id"
    fi
done

echo ""
echo "Gespeichert in: $SAVEFILE"
echo "$(wc -l < "$SAVEFILE") Einträge"

 

Ausführbar machen

chmod +x /root/save_boot_state.sh

Wiederherstellung Script

nano /root/restore-boot-state.sh

Inhalt

#!/bin/bash
# boot-restore.sh
# Stellt onboot=1 für alle gespeicherten VMs/CTs wieder her

SAVEFILE="/root/boot-state.txt"

if [ ! -f "$SAVEFILE" ]; then
    echo "Fehler: $SAVEFILE nicht gefunden!"
    exit 1
fi

echo "=== Stelle Boot-Status wieder her ==="

while read -r type id; do
    if [ "$type" = "vm" ]; then
        conf="/etc/pve/qemu-server/${id}.conf"
    else
        conf="/etc/pve/lxc/${id}.conf"
    fi

    if [ -f "$conf" ]; then
        if grep -q "^onboot:" "$conf"; then
            sed -i 's/^onboot: 0/onboot: 1/' "$conf"
        else
            echo "onboot: 1" >> "$conf"
        fi
        echo "  Aktiviert: $type $id"
    else
        echo "  FEHLER: $conf nicht gefunden"
    fi
done < "$SAVEFILE"

echo ""
echo "Fertig."

Ausführbar machen

chmod +x /root/restore_boot_state.sh

Status script

nano /root/status_boot_state.sh

Inhalt

#!/bin/bash
# boot-status.sh
# Zeigt aktuellen onboot-Status aller VMs/CTs

SAVEFILE="/root/boot-state.txt"

echo "=== Aktueller onboot-Status ==="
echo ""
printf "%-6s %-6s %-8s %s\n" "Typ" "ID" "onboot" "Name"
echo "-------------------------------------"

for conf in /etc/pve/qemu-server/*.conf /etc/pve/lxc/*.conf; do
    [ -f "$conf" ] || continue
    id=$(basename "$conf" .conf)
    type="vm"; [[ "$conf" == *"/lxc/"* ]] && type="ct"
    name=$(grep "^name:" "$conf" | awk '{print $2}')
    [ -z "$name" ] && name=$(grep "^hostname:" "$conf" | awk '{print $2}')
    onboot=$(grep "^onboot:" "$conf" | awk '{print $2}')
    [ -z "$onboot" ] && onboot="0"
    printf "%-6s %-6s %-8s %s\n" "$type" "$id" "$onboot" "${name:-}"
done

echo ""
if [ -f "$SAVEFILE" ]; then
    echo "Gespeicherte Einträge in $SAVEFILE: $(wc -l < "$SAVEFILE")"
else
    echo "Kein Savefile vorhanden ($SAVEFILE)"
fi

Ausführbar machen

chmod +x /root/status_boot_state.sh

 

 





Proxmox - Tools / BUG Fixes Workarounds / Tipps und Tricks

Proxmox Host aus VM herunterfahren

Beschreibung

Es gibt Situtationen, zum Beispiel bei einer VM mit durchgereichter Grafikkare und USB Ports, wo man den ganzen Host mit einem Doppelklick oder einem Befehl gerne herunterfahren möchte.
Damit die VMs auch das Signal bekommen zum herunterfahren muss der qemu Agent installiert sein.
Siehe : Proxmox - Qemu Agent installation

Proxmox aus einer Windows VM herunterfahren

Als erstes downloaden wir uns plink von der putty Seite.
https://www.putty.org

Nun auf Download klicken

Bildschirmfoto vom 2023-02-25 08-42-48.png

Dort nun runterscrollen bis wir bei plink.exe ankommen.
Dort für eure Architektur plink.exe anklicken

Bildschirmfoto vom 2023-02-25 08-43-19.png

Da ich ein 64 Bit Windows habe, nehme ich 64bit x86 und klicke es an.
Nun klicken wir aud das Ordnersymbol neben dem download

Bildschirmfoto vom 2023-02-25 08-44-50.png
Nun öffnet sich der Download Ordner

Bildschirmfoto vom 2023-02-25 08-47-23.png

Wir schneiden die plink exe aus

Bildschirmfoto vom 2023-02-25 08-47-49.png

und legen sie in Program Files wieder ein

Bildschirmfoto vom 2023-02-25 08-48-53.png

Drücken dann auf fortsetzen

Bildschirmfoto vom 2023-02-25 08-49-05.png

Nun liegt die plink.exe im Programmverzeichnis.
Nun legen wir eine neue Verknüpfung auf dem Desktop an.
Rechtklick auf den Desktop -> Neu -> Verknüpfung

Bildschirmfoto vom 2023-02-25 08-50-51.png

Nun auf den Durchsuchen button klicken

Bildschirmfoto vom 2023-02-25 08-51-02.png

Nun AUf Dieser PC -> Laufwerk C-> Proragmme gehen

Bildschirmfoto vom 2023-02-25 08-51-45.png

Nun runterscrollen bis plink.exe

Bildschirmfoto vom 2023-02-25 08-51-56.png

Nun auf OK

Bildschirmfoto vom 2023-02-25 08-52-01.png

Nun steht der Pfad dazu im Textfeld, hier noch NICHT auf weiter klicken, weil wir plink ein paar Paramter übergeben wollen

Bildschirmfoto vom 2023-02-25 08-54-15.png

Diese wären

"C:\Program Files\plink.exe" -ssh -pw <proxmoxpasswort> root@<proxmoxhost> poweroff

Beispiel: "C:\Program Files\plink.exe" -ssh -pw 12345678 root@192.168.0.100 poweroff

Dann sähe das so aus, und nun auf weiter

Bildschirmfoto vom 2023-02-25 08-57-37.png

Jetz dem Kind noch ein Namen geben zum Beispiel Herunterfahren und dann auf Fertigstellen klicken

Bildschirmfoto vom 2023-02-25 08-59-30.png

Nun haben wir eine Verknüpfung mit herunterfahren.
Doppelklick drauf dier Proxmoxhost fährt runter und beendet die VMs

Bildschirmfoto vom 2023-02-25 08-59-42.png
Nun kommt die Frage ob der Key im cache store gespeichert werden soll. Mit y bestätigen

Bildschirmfoto vom 2023-02-25 09-04-00.png
Nun kommt acces granted. Einfach enter drücken

Bildschirmfoto vom 2023-02-25 09-04-31.png

Nach jedem Ausführen kommt die frage ob ausgeführt werden soll. Einfach mit enter bestätigen.
nun fahren die VMs und dann der HOst  herunter.


Proxmox - Tools / BUG Fixes Workarounds / Tipps und Tricks

Proxmox - Es lassen sich keine Snapshots anlegen

Beschreibung:

Man hat einen proxmox Host und nur den Standard local-lvm Storage.
Aber aus irgendeinem Grund kann man keine Snapchots anlegen.
Fehler : 

The current guest configuration does not support taking new snapshots

Auswahl_129.png

Vorrausetzungen für Snap-Shots:

  1. Keine laufenden Migrationen oder Aufgaben: Wenn eine VM migriert oder andere Aufgaben ausgeführt werden, kann es nicht möglich sein, einen Snapshot zu erstellen. Sie müssen alle laufenden Aufgaben abschließen, bevor Sie einen Snapshot erstellen können.

  2. Unterstützung auf Dateisystemebene: Das Dateisystem der VM muss Snapshots unterstützen. Zum Beispiel werden Snapshots auf der EXT4- und XFS-Dateisystemebene nicht unterstützt.
    LVM-Thin (Nicht LVM, LVM ünterstützt keine Snapshots) und ZFS unterstützen jedoch Snapshots.
    Ausnahme bei EXT4:

    Nur wenn das Disk-Image der VM im QCOW2-Format (QEMU Copy-On-Write) ist.

    QCOW2 ist ein von QEMU entwickeltes Dateiformat, das Snapshots auf Dateiebene unterstützt. Diese Snapshots sind unabhängig vom zugrundeliegenden Dateisystem und funktionieren daher auf Ext4. Sie sind auch wesentlich flexibler und einfacher zu verwalten als LVM-Snapshots.

    Bitte beachten Sie jedoch, dass das QCOW2-Format in einigen Situationen eine geringere Leistung aufweisen kann als RAW-Disk-Images oder LVM-basierte Speicher.
    Es ist wichtig, die spezifischen Anforderungen und die Performance Ihrer Umgebung zu berücksichtigen, wenn Sie sich für ein Disk-Image-Format entscheiden.

  3. Disk-Konfiguration: In einigen Fällen kann die Konfiguration der VM-Festplatte die Erstellung von Snapshots verhindern. Zum Beispiel unterstützen Virtio-IDE uns SATA nicht das Erzeugen von Live-Snapshots (Snapshots, während die VM läuft).

  4. QEMU-Gastagent: Der QEMU-Gastagent sollte installiert und laufend sein, wenn Sie versuchen, einen laufenden Snapshot zu erstellen (auch als Live-Snapshot bezeichnet). Der Gastagent ermöglicht eine bessere Interaktion zwischen dem Host und der VM, einschließlich der korrekten Verwaltung von Snapshots.

Wenn Ihre VM diese Anforderungen erfüllt, sollten Sie in der Lage sein, Snapshots zu erstellen. Wenn Sie trotzdem weiterhin Probleme haben, sollten Sie die Fehlermeldung und das VM-Setup genauer untersuchen.


Proxmox - Tools / BUG Fixes Workarounds / Tipps und Tricks

Proxmox 7 installation hängt bei 99% make system bootable

Beschreibung:

Das System bleibt stehen bei 99% make System Bootable.
Bei einem Intel Board s5520hc soll das wohl standard so sein. Da das EFI broken ist.
Kann kein NVRAM schreiben.

IMG_20230609_085444.jpg

Was hab Ich probiert, sollte probiert werden:


Festplatte an Onboardcontroller gehängt -> kein Erfolg
Anderen Stick verwendet -> kein Erfolg
Proxmox 6.4 iso installtiert, dann inplace update durchgeführt -> kein Erfolg
(falls über Ventoy gebootet werden soll, hier wird die ISO nicht gefunden. Also vom Stick der mit Schreiber für Datenträger beschrieben wurde, sonst findet er die iso nicht)
Holzhammer Methode: Festplatte in anderen Rechner hängen, dort installieren.
Wieder zurückbauen, Netzwerkkonfig ändern. -> kein erfolg

Was brachte Erflog:

Installieren bis Fehler 99%
Dann ausschalten, von der Proxmox ISO Starten Advanced Debug Modus auswählen.
Dann STRG+D drücken damit ein System geladen wird.
Dann nochmals STRG+D damit ein System mit richtigem Terminal geladen wird

Dann nochmals STRG+D damit Netzwerk geladen wird un der Installer.
Dann im installer auf abort klciken
Nun sind wir wieder in der shell.

apt update
apt install openssh-server

Nun die sshd config anpassen

nano /etc/ssh/ssd_config

und root zugriff erlauben

danach

service ssh restart

Nun das root Passwort neu setzten

passwd

nun mit

ip a

IP-Adresse ausgeben und per ssh verbinden.

Schlüsel akzeptierun, kennwort eingeben.
Wir sind drin ;-)

Auswahl_154.png

Nun den rpool mounten, wenn nichts zurück gegeben wird, hats geklappt

zpool import -f -R /mnt rpool

Nun die Verzeichnisse mounten /dev /proc /sys

mount --rbind /dev  /mnt/rpool/ROOT/pve-1/dev
mount --rbind /proc /mnt/rpool/ROOT/pve-1/proc
mount --rbind /sys  /mnt/rpool/ROOT/pve-1/sys

Nun müssen wir noch unsere EFI Partion herausfinden.
in unserem Beispiel ist  das Laufwerk sda, bei euch anpassen

gdisk /dev/sda

Nun p drücken um die Partitionen angezeigt zu bekommen

isk /dev/sda: 937703088 sectors, 447.1 GiB
Model: KINGSTON SA400S3
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): E8AF2BF1-95B5-445D-89E4-E08361D101A3
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 937703054
Partitions will be aligned on 8-sector boundaries
Total free space is 0 sectors (0 bytes)

Number  Start (sector)    End (sector)  Size       Code  Name
   1              34            2047   1007.0 KiB  EF02  
   2            2048         2099199   1024.0 MiB  EF00  
   3         2099200       937703054   446.1 GiB   BF01  

Die Partition mit EF00 ist unsere Efi Boot Partition
in unserem Beispiel dann /dev/sda2

Nun mounten wir die Partition in /boot/efi unser chroot umgebung

mount /dev/sda2 /mnt/rpool/ROOT/pve-1/boot/efi

Danach chrooten wir uns mit einer bash ins root Verzeichnis unserer Proxmox installtion

chroot /mnt/rpool/ROOT/pve-1 /bin/bash

Nun installieren wir endlich grub neu, aber ohne nv-ram

grub-install --no-nvram

Ausgabe:

root@proxmox:/# grub-install --no-nvram
Installing for x86_64-efi platform.
Installation finished. No error reported.
root@proxmox:/# 

Grub aktualisieren

update-grub

Ausgabe, bedeutet er schaut nicht nach anderen systemen, diese werden nicht hinzugefügt

root@proxmox:/# update-grub
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-5.15.102-1-pve
Found memtest86+ image: /ROOT/pve-1@/boot/memtest86+.bin
Found memtest86+ multiboot image: /ROOT/pve-1@/boot/memtest86+_multiboot.bin
Warning: os-prober will not be executed to detect other bootable partitions.
Systems on them will not be added to the GRUB boot configuration.
Check GRUB_DISABLE_OS_PROBER documentation entry.
done

Dann exit.
Am richtigen Server wierder STRG+D drücken, dann startet der Server neu

 

aot install grub-efi-amd64

Nun haben wir ein System mit tools.
Dort den grubinstall neu konfiguriern

dpkg-reconfigure grub-efi-amd64




Nun herausfinden welche unsere EFI Partition ist.

lsblk -o +FSTYPE

Die wählen wo VFAT steht, also /dev/sda2
Ausgabe:

Nun den rpool mounten

    zpool import -f -R /mnt rpool

Nun die Verzeichnisse mounten die wir brauchen

mount -o rbind /proc /mnt/rpool/ROOT/pve-1/proc
mount -o rbind /sys /mnt/rpool/ROOT/pve-1/sys
mount -o rbind /dev /mnt/rpool/ROOT/pve-1/dev
mount -o rbind /run /mnt/rpool/ROOT/pve-1/run

Nun in das root Verzeichnis vom pve-1 chrooten

chroot /mnt/rpool/ROOT/pve-1 /bin/bash



Jetzt den Bootloader neu installieren.

Dazu müssen wir vorher die EFI Partion mounten.
In meinem Beispiel ist das die 1GB partition

mount /dev/sda2 /mnt

Nun können wir den Befehl zum Grub installieren absetzten



Proxmox - Tools / BUG Fixes Workarounds / Tipps und Tricks

Anlegen / Clonen einer ARM64 VM Fehler

Beschreibung:

Ab Version 8.1 muss das Firmware Paket für arm64 manuell nachinstalliert werden.
Sonst bekommtman diesen Fehler:

TASK ERROR: clone failed: EFI base image '/usr/share/pve-edk2-firmware//AAVMF_CODE.fd' not found

Lösung:

Folgendes Paket manuell installieren

apt install pve-edk2-firmware-aarch64

Fertig.
nun lässt sich die VM wieder erstellen / clonen


Proxmox - Tools / BUG Fixes Workarounds / Tipps und Tricks

LXC Conatiner - Routen beim start setzten,da post in interfaces nicht geht

Beschreibung:

leider unterstützen LCX keine einträge in der /etc/interfaces weil die bei jedem Start wieder gelöscht werden.
Abhilfe mit einem Systemd service

Einrichtung

Ein script erstellen was die route anlegt:

nano /usr/local/bin/set-routes.sh

Inhalt

route add route add <zieladresse oder netz> gw <gateway> dev <netzwerkkarte>
route add 185.26.156.118 gw 222.222.0.7 dev eth1

bei einem netz sähe das so aus

bei einem 28er netz
route add 185.26.156.0/28 gw 222.222.0.7 dev eth1
bei einem 24 netz
route add 185.26.156.24 gw 222.222.0.7 dev eth1

also nun das script


#!/bin/bash
route add route add <zieladresse oder netz> gw <gateway> dev <netzwerkkarte>



Script ausführbar machen

chmod +x /usr/local/bin/set-routes.sh

Nun einen Systemd Service Datei anlegen

nano /etc/systemd/system/set-routes.service

Inhalt:

 

[Unit]
Description=Set custom routes after network is up
After=network.target

[Service]
Type=oneshot
ExecStart=/usr/local/bin/set-routes.sh
RemainAfterExit=true

[Install]
WantedBy=multi-user.target

Nun den systemctl neuladen den Dienst aktivieren und starten

systemctl daemon-reload
systemctl enable set-routes.service
systemctl start set-routes.service

Fertig

Proxmox - Tools / BUG Fixes Workarounds / Tipps und Tricks

Ceph Upgrade von Pacific 17.2.7 auf reef 18.2.2 osd starten nicht

Beschreibung:


Beim Upgrade von 17.2.7 auf 18.2.2 starten die OSD nicht.


Lösung:


Erstmal auf 18.2.1 downgraden, dann warten bis die osds gestartet sind.

apt install ceph=18.2.1-pve2 ceph-mon=18.2.1-pve2 ceph-mgr=18.2.1-pve2 ceph-osd=18.2.1-pve2 ceph-mds=18.2.1-pve2 ceph-base=18.2.1-pve2 librados2=18.2.1-pve2 ceph-mgr-modules-core=18.2.1-pve2 libradosstriper1=18.2.1-pve2 libsqlite3-mod-ceph=18.2.1-pve2 librados2=18.2.1-pve2 librbd1=18.2.1-pve2 ceph-common=18.2.1-pve2 libcephfs2=18.2.1-pve2 python3-cephfs=18.2.1-pve2 python3-ceph-argparse=18.2.1-pve2 python3-ceph-common=18.2.1-pve2 python3-rados=18.2.1-pve2 python3-rbd=18.2.1-pve2 python3-rgw=18.2.1-pve2 librgw2=18.2.1-pve2 ceph-fuse=18.2.1-pve2 ceph-volume=18.2.1-pve2

Nun die min version zurück auf quincy setzten

ceph osd require-osd-release quincy

Danach leider die node neustarten, da aber eh alle OSDs offline sind, wäre das bei der Node auch egal.
Sollte das auch nicht gehen dann downgrade auf 17.2.7 zurück

apt install ceph=17.2.7-pve3 ceph-mon=17.2.7-pve3 ceph-mgr=17.2.7-pve3 ceph-osd=17.2.7-pve3 ceph-mds=17.2.7-pve3 ceph-base=17.2.7-pve3 librados2=17.2.7-pve3 ceph-mgr-modules-core=17.2.7-pve3 libradosstriper1=17.2.7-pve3 libsqlite3-mod-ceph=17.2.7-pve3 librados2=17.2.7-pve3 librbd1=17.2.7-pve3 ceph-common=17.2.7-pve3 libcephfs2=17.2.7-pve3 python3-cephfs=17.2.7-pve3 python3-ceph-argparse=17.2.7-pve3 python3-ceph-common=17.2.7-pve3 python3-rados=17.2.7-pve3 python3-rbd=17.2.7-pve3 python3-rgw=17.2.7-pve3 librgw2=17.2.7-pve3 ceph-fuse=17.2.7-pve3 ceph-volume=17.2.7-pve3




Proxmox - Tools / BUG Fixes Workarounds / Tipps und Tricks

Cpeh crash log löschen

Beschreibung:

Wenn ein Doamen crasht bleibt da in der log.
um diese zu lsöchen folgenden Befehl ausführen

Screenshot 2024-09-16 at 17-41-27 backupsrv001 - Proxmox Virtual Environment.png

Befehl:
To display a list of messages:

ceph crash ls

Wenn wir die Nachricht lesen wollen:

ceph crash info <id>

dann:

ceph crash archive <id>

or alle archivieren:

ceph crash archive-all

 

 

 

Proxmox - Tools / BUG Fixes Workarounds / Tipps und Tricks

HDD Tray ermitteln LED blinken und/oder austauschen

Beschreibung:

Es gibt ein tolles Tool. Mit der man die LED zum Tray blinken lassen kann.
Noch ein kleines Script dazu wo man nur dass device angeben muss.Ein weiteres script zum Datenträger tausch.
Lässt slot blinken.
festplatte tauschen
Alte festplatte wird deregistriert und neue hinzugefügt.
LED ausgeschaltet.
BAM

Durchführung:

apt-get install -y lsscsi sg3-utils

Festplatten anzeigen lassen:

lsscsi -g

Ausgabe:

[1:0:0:0]    cd/dvd  Slimtype DVD A  DS8ACSH   LP5M  /dev/sr0   /dev/sg17
[3:0:0:0]    disk    SEAGATE  XS400ME70004     0004  /dev/sda   /dev/sg0 
[3:0:1:0]    disk    SEAGATE  ST20000NM002D    E004  /dev/sdb   /dev/sg1 
[3:0:2:0]    disk    WDC      WUS721010AL5204  C980  /dev/sdc   /dev/sg2 
[3:0:3:0]    disk    SEAGATE  ST20000NM002D    E006  /dev/sdd   /dev/sg3 
[3:0:4:0]    disk    WDC      WUS721010AL5204  C980  /dev/sde   /dev/sg4 
[3:0:5:0]    disk    SEAGATE  ST20000NM002D    E006  /dev/sdf   /dev/sg5 
[3:0:6:0]    disk    WDC      WUS721010AL5204  C980  /dev/sdg   /dev/sg6 
[3:0:7:0]    disk    WDC      WUS721010AL5204  C980  /dev/sdh   /dev/sg7 
[3:0:8:0]    disk    WDC      WUS721010AL5204  C980  /dev/sdi   /dev/sg8 
[3:0:9:0]    disk    WDC      WUS721010AL5204  C980  /dev/sdj   /dev/sg9 
[3:0:10:0]   disk    WDC      WUS721010AL5204  C980  /dev/sdk   /dev/sg10
[3:0:11:0]   disk    SEAGATE  XS400ME70004     0004  /dev/sdl   /dev/sg11
[3:0:12:0]   disk    WDC      WUS721010AL5204  C980  /dev/sdm   /dev/sg12
[3:0:13:0]   disk    WDC      WUS721010AL5204  C980  /dev/sdn   /dev/sg13
[3:0:14:0]   disk    WDC      WUS721010AL5204  C980  /dev/sdo   /dev/sg14
[3:0:15:0]   disk    WDC      WUS721010AL5204  C980  /dev/sdp   /dev/sg15
[3:0:16:0]   enclosu BROADCOM VirtualSES       03    -          /dev/sg16
[4:0:0:0]    cd/dvd  AMI      Virtual CDROM0   1.00  /dev/sr1   /dev/sg18

Script:

nano /usr/local/bin/identify-disk.sh

Inhalt

#!/usr/bin/env bash
set -euo pipefail

usage() {
  cat <<USAGE
Usage:
  identify-disk [--on|--off|--blink SECONDS] [--symlink|--ses] [--all] [/dev/sdX|sdX|sdXn]

Optionen:
  --on / --off / --blink SECONDS   LED steuern
  --symlink                        nur sysfs/enclosure_device* nutzen
  --ses                            nur SES (sg_ses) nutzen
  --all                            auf alle verfügbaren Slots anwenden
  (ohne Methode)                   auto: erst symlink, dann SES-Fallback

Beispiele:
  identify-disk --on        sdi
  identify-disk --blink 10  sdg8
  identify-disk --off       --symlink sdi
  identify-disk --on        --ses     sdi
  identify-disk --off       --all             # alle LEDs aus
  identify-disk --blink 5   --all --symlink   # alle via sysfs blinken
USAGE
}

MODE="on"
BLINK_SECS=0
METHOD="auto"   # auto | symlink | ses
ALL=0
DISK=""

[[ $# -lt 1 ]] && { usage; exit 1; }

while [[ $# -gt 0 ]]; do
  case "${1:-}" in
    --on) MODE="on"; shift ;;
    --off) MODE="off"; shift ;;
    --blink) MODE="blink"; BLINK_SECS="${2:-}"; [[ -z "$BLINK_SECS" ]] && { echo "Fehlende Sekunden bei --blink"; exit 1; }; shift 2 ;;
    --symlink) METHOD="symlink"; shift ;;
    --ses) METHOD="ses"; shift ;;
    --all) ALL=1; shift ;;
    -h|--help) usage; exit 0 ;;
    *)
      DISK="$1"; shift ;;
  esac
done

# ---------------------------
# Helpers (norm/req/printing)
# ---------------------------
need() { command -v "$1" >/dev/null 2>&1 || { echo "$1 fehlt. Bitte installieren."; exit 1; }; }

normalize_disk() {
  local d="$1"
  [[ "$d" =~ ^sd ]] && d="/dev/$d"
  local base="$(basename "$d")"
  local base_nopart="${base%%[0-9]*}"
  echo "/dev/$base_nopart"
}

# --------------------------------------
# Einzel-Operationen (SYMLINK / per Disk)
# --------------------------------------
do_symlink_one() {
  local disk="$1"
  local base_nopart="$(basename "$disk")"
  local p="/sys/class/block/${base_nopart}/device"
  local enc=( "$p"/enclosure_device* )
  [[ -e "${enc[0]}" ]] || { echo "Kein enclosure_device* für $disk gefunden."; return 2; }
  local LOCATE="${enc[0]}/locate"
  [[ -w "$LOCATE" ]] || { echo "'locate' nicht verfügbar/schreibbar unter ${enc[0]}."; return 3; }
  local slot="$(cat "${enc[0]}/slot" 2>/dev/null || echo "")"
  local slot_lbl=""; [[ -n "$slot" ]] && slot_lbl=" (Slot $slot)"
  case "$MODE" in
    on)    echo 1 | sudo tee "$LOCATE" >/dev/null; echo "ON  via sysfs$slot_lbl – $disk";;
    off)   echo 0 | sudo tee "$LOCATE" >/dev/null; echo "OFF via sysfs$slot_lbl – $disk";;
    blink) echo 1 | sudo tee "$LOCATE" >/dev/null; echo "ON  via sysfs$slot_lbl – $disk"; sleep "$BLINK_SECS"; echo 0 | sudo tee "$LOCATE" >/dev/null; echo "OFF via sysfs$slot_lbl – $disk";;
  esac
}

# --------------------------------------
# Einzel-Operationen (SES / per Disk)
# --------------------------------------
do_ses_one() {
  local disk="$1"
  need lsscsi; need sg_ses
  local LINE
  LINE="$(lsscsi -g | awk -v d="$disk" '{if ($(NF-1)==d) {print; exit}}')"
  [[ -n "$LINE" ]] || { echo "Konnte $disk nicht in 'lsscsi -g' finden."; return 6; }

  local HOST BUS TARGET LUN
  if [[ "$LINE" =~ \[([0-9]+):([0-9]+):([0-9]+):([0-9]+)\] ]]; then
    HOST="${BASH_REMATCH[1]}"; BUS="${BASH_REMATCH[2]}"; TARGET="${BASH_REMATCH[3]}"; LUN="${BASH_REMATCH[4]}"
  else
    echo "Konnte SCSI-Adresse nicht parsen."; return 7
  fi

  local SES_LINE SES_DEV
  SES_LINE="$(lsscsi -g | awk -v h="$HOST" -v b="$BUS" '$2=="enclosu" && $1 ~ ("\\["h":"b":"){print; exit}')"
  [[ -n "$SES_LINE" ]] || { echo "Kein SES/Enclosure auf ${HOST}:${BUS} gefunden (HW-RAID? Hersteller-CLI nötig)."; return 8; }
  SES_DEV="$(echo "$SES_LINE" | awk '{print $NF}')"
  [[ -e "$SES_DEV" ]] || { echo "SES-Gerät existiert nicht: $SES_DEV"; return 9; }

  local SAS_PATH="/sys/class/scsi_device/${HOST}:${BUS}:${TARGET}:${LUN}/device/sas_address"
  [[ -r "$SAS_PATH" ]] || { echo "SAS-Adresse nicht lesbar: $SAS_PATH"; return 10; }
  local DISK_SAS; DISK_SAS="$(tr -d '\n' < "$SAS_PATH")"
  [[ -n "$DISK_SAS" ]] || { echo "Leere SAS-Adresse."; return 11; }

  local INDEX SLOTNUM
  read INDEX SLOTNUM < <(sg_ses -p aes "$SES_DEV" 2>/dev/null \
    | awk -v want="$DISK_SAS" '
        /Element index:/              {idx=$3; gsub(":","",idx); slot=""}
        /device slot number:/         {slot=$5}
        /SAS address:/ && $3 ~ /^0x/  {sas=$3; if (tolower(sas)==tolower(want)) {print idx, slot; exit}}
      ')
  [[ -n "${INDEX:-}" ]] || { echo "Konnte SES-Index für $disk nicht ermitteln."; return 12; }

  local slot_lbl=""; [[ -n "${SLOTNUM:-}" ]] && slot_lbl=" (Slot $SLOTNUM, idx $INDEX)" || slot_lbl=" (idx $INDEX)"
  case "$MODE" in
    on)    sg_ses --index="$INDEX" --set=ident "$SES_DEV"; echo "ON  via SES$slot_lbl – $disk";;
    off)   sg_ses --index="$INDEX" --clear=ident "$SES_DEV"; echo "OFF via SES$slot_lbl – $disk";;
    blink) sg_ses --index="$INDEX" --set=ident "$SES_DEV"; echo "ON  via SES$slot_lbl – $disk"; sleep "$BLINK_SECS"; sg_ses --index="$INDEX" --clear=ident "$SES_DEV"; echo "OFF via SES$slot_lbl – $disk";;
  esac
}

# --------------------------------------
# ALL-Operationen (SYMLINK)
# --------------------------------------
do_symlink_all() {
  local disks=()
  for d in /sys/class/block/sd*; do
    [[ -e "$d" ]] || continue
    local name="$(basename "$d")"
    [[ "$name" =~ [0-9]$ ]] && continue   # nur Whole Disks
    comp=( "$d"/device/enclosure_device* )
    [[ -e "${comp[0]}" ]] || continue
    disks+=( "/dev/$name" )
  done
  local n="${#disks[@]}"
  [[ $n -gt 0 ]] || { echo "Keine sysfs/enclosure Slots gefunden."; return 2; }

  if [[ "$MODE" == "blink" ]]; then
    # Alle an, warten, alle aus
    for disk in "${disks[@]}"; do
      local loc=( "/sys/class/block/$(basename "$disk")/device"/enclosure_device*/locate )
      [[ -w "${loc[0]}" ]] || continue
      echo 1 | sudo tee "${loc[0]}" >/dev/null
      local slot=""; [[ -r "${loc[0]%/*}/slot" ]] && slot="$(cat "${loc[0]%/*}/slot")"
      echo "ON  via sysfs$( [[ -n "$slot" ]] && echo " (Slot $slot)" ) – $disk"
    done
    sleep "$BLINK_SECS"
    for disk in "${disks[@]}"; do
      local loc=( "/sys/class/block/$(basename "$disk")/device"/enclosure_device*/locate )
      [[ -w "${loc[0]}" ]] || continue
      echo 0 | sudo tee "${loc[0]}" >/dev/null
      echo "OFF via sysfs – $disk"
    done
  else
    local val=$([[ "$MODE" == "on" ]] && echo 1 || echo 0)
    for disk in "${disks[@]}"; do
      local loc=( "/sys/class/block/$(basename "$disk")/device"/enclosure_device*/locate )
      [[ -w "${loc[0]}" ]] || continue
      echo $val | sudo tee "${loc[0]}" >/dev/null
      local slot=""; [[ -r "${loc[0]%/*}/slot" ]] && slot="$(cat "${loc[0]%/*}/slot")"
      echo "$( [[ $val -eq 1 ]] && echo ON || echo OFF ) via sysfs$( [[ -n "$slot" ]] && echo " (Slot $slot)" ) – $disk"
    done
  fi
}

# --------------------------------------
# ALL-Operationen (SES)
# --------------------------------------
do_ses_all() {
  need lsscsi; need sg_ses
  mapfile -t ENCS < <(lsscsi -g | awk '$2=="enclosu"{print $NF}')
  [[ ${#ENCS[@]} -gt 0 ]] || { echo "Kein SES/Enclosure gefunden."; return 3; }

  for SES_DEV in "${ENCS[@]}"; do
    # Alle belegten Element-Indices sammeln (die eine SAS address haben)
    mapfile -t IDX < <(sg_ses -p aes "$SES_DEV" 2>/dev/null \
      | awk '
          /Element index:/ {idx=$3; gsub(":","",idx); slot=""; has_sas=0}
          /device slot number:/ {slot=$5}
          /SAS address:/ && $3 ~ /^0x/ {has_sas=1}
          has_sas && /SAS address:/ {print idx "|" slot}
        ')
    [[ ${#IDX[@]} -gt 0 ]] || { echo "Keine befüllten Slots für $SES_DEV."; continue; }

    if [[ "$MODE" == "blink" ]]; then
      # alle an
      for pair in "${IDX[@]}"; do
        IFS='|' read -r index slot <<<"$pair"
        sg_ses --index="$index" --set=ident "$SES_DEV" || true
        [[ -n "$slot" ]] && echo "ON  via SES (Slot $slot, idx $index) – $SES_DEV" || echo "ON  via SES (idx $index) – $SES_DEV"
      done
      sleep "$BLINK_SECS"
      # alle aus
      for pair in "${IDX[@]}"; do
        IFS='|' read -r index slot <<<"$pair"
        sg_ses --index="$index" --clear=ident "$SES_DEV" || true
        [[ -n "$slot" ]] && echo "OFF via SES (Slot $slot, idx $index) – $SES_DEV" || echo "OFF via SES (idx $index) – $SES_DEV"
      done
    else
      local cmd=$([[ "$MODE" == "on" ]] && echo "--set=ident" || echo "--clear=ident")
      for pair in "${IDX[@]}"; do
        IFS='|' read -r index slot <<<"$pair"
        sg_ses --index="$index" $cmd "$SES_DEV" || true
        local state=$([[ "$MODE" == "on" ]] && echo ON || echo OFF)
        [[ -n "$slot" ]] && echo "$state via SES (Slot $slot, idx $index) – $SES_DEV" || echo "$state via SES (idx $index) – $SES_DEV"
      done
    fi
  done
}

# -----------------------
# Main-Dispatch
# -----------------------
if [[ $ALL -eq 1 ]]; then
  case "$METHOD" in
    symlink)
      do_symlink_all
      ;;
    ses)
      do_ses_all
      ;;
    auto)
      # erst symlink-Variante probieren; wenn nichts gefunden, SES-all
      if ! do_symlink_all; then
        echo "(Auto) Fallback auf SES (alle)…"
        do_ses_all
      fi
      ;;
    *) echo "Unbekannte Methode: $METHOD"; usage; exit 1 ;;
  esac
  exit 0
fi

# Einzel-Disk-Pfad (keine --all)
[[ -n "$DISK" ]] || { echo "Bitte /dev/sdX angeben oder --all nutzen."; exit 1; }
DISK="$(normalize_disk "$DISK")"
[[ -b "$DISK" ]] || { echo "Gerät nicht gefunden: $DISK"; exit 1; }

case "$METHOD" in
  symlink)
    do_symlink_one "$DISK" || exit $?
    ;;
  ses)
    do_ses_one "$DISK" || exit $?
    ;;
  auto)
    if do_symlink_one "$DISK"; then
      exit 0
    else
      echo "(Auto) Fallback auf SES…"
      do_ses_one "$DISK"
    fi
    ;;
  *)
    echo "Unbekannte Methode: $METHOD"; usage; exit 1 ;;
esac

Ausführbar machen

chmod +x /usr/local/bin/identify-disk.sh

Hilfe/Bedienung

Usage:
  identify-disk [--on|--off|--blink SECONDS] [--symlink|--ses] [--all] [/dev/sdX|sdX|sdXn]

Optionen:
  --on / --off / --blink SECONDS   LED steuern
  --symlink                        nur sysfs/enclosure_device* nutzen
  --ses                            nur SES (sg_ses) nutzen
  --all                            auf alle verfügbaren Slots anwenden
  (ohne Methode)                   auto: erst symlink, dann SES-Fallback

Beispiele:
  identify-disk --on        sdi
  identify-disk --blink 10  sdg8
  identify-disk --off       --symlink sdi
  identify-disk --on        --ses     sdi
  identify-disk --off       --all             # alle LEDs aus
  identify-disk --blink 5   --all --symlink   # alle via sysfs blinken

Alte Laufwerke entfernen:

Sobald alte Laufwerke entfernt werden, bleiben Sie tot in der Liste.
Erst Laufwerk entfernen. Dann neu einschieben.
Das machen wir wieder mit einem script. Das Script wartet solange bis wir die festplatte getauscht haben.
wenn getauscht bestätigen.

nano /usr/local/bin/scsi-hotswap.sh

Inhalt

#!/usr/bin/env bash
set -euo pipefail

usage() {
  cat <<USAGE
Usage:
  scsi-hotswap [--method auto|symlink|ses] [--blink N|--no-led] [--no-prompt] /dev/sdX|sdX|sdXn

Optionen:
  --method M     M = auto (default) | symlink | ses
  --blink N      LED vor dem Tausch N Sekunden blinken (statt dauerhaft an)
  --no-led       keine LED-Steuerung
  --no-prompt    nicht auf ENTER warten (setze voraus, dass neue Platte schon steckt)

Beispiele:
  scsi-hotswap sdi
  scsi-hotswap --method symlink --blink 8 sdg8
  scsi-hotswap --method ses --no-prompt sdm
USAGE
}

METHOD="auto"      # auto | symlink | ses
BLINK_SECS=0       # 0 = steady on
USE_LED=1
PROMPT=1

[[ $# -lt 1 ]] && { usage; exit 1; }
while [[ $# -gt 0 ]]; do
  case "${1:-}" in
    --method) METHOD="${2:-}"; shift 2 ;;
    --blink)  BLINK_SECS="${2:-}"; [[ -z "$BLINK_SECS" ]] && { echo "Fehlende Sekunden bei --blink"; exit 1; }; shift 2 ;;
    --no-led) USE_LED=0; shift ;;
    --no-prompt) PROMPT=0; shift ;;
    -h|--help) usage; exit 0 ;;
    *) DISK="$1"; shift ;;
  esac
done

# --- Device normalisieren ---
[[ "$DISK" =~ ^sd ]] && DISK="/dev/$DISK"
BASE="$(basename "$DISK")"
BASE_NOPART="${BASE%%[0-9]*}"
DISK="/dev/$BASE_NOPART"
[[ -b "$DISK" ]] || { echo "Gerät nicht gefunden: $DISK"; exit 1; }

need() { command -v "$1" >/dev/null 2>&1 || { echo "$1 fehlt. Bitte installieren."; exit 1; }; }

# --------------------------
# LED via sysfs (symlink-Weg)
# --------------------------
# merkt sich LOCATE_PATH_CACHED+SLOT_CACHED, damit "off" nach dem Swap immer klappt
LOCATE_PATH_CACHED=""
SLOT_CACHED=""

led_symlink() {
  local mode="$1"  # on|off|blink
  local LOCATE_PATH=""
  local SLOT=""

  # bereits gecachten Pfad benutzen, wenn vorhanden
  if [[ -n "$LOCATE_PATH_CACHED" && -e "$LOCATE_PATH_CACHED" ]]; then
    LOCATE_PATH="$LOCATE_PATH_CACHED"
    SLOT="$SLOT_CACHED"
  else
    local p="/sys/class/block/${BASE_NOPART}/device"
    local enc=( "$p"/enclosure_device* )
    [[ -e "${enc[0]}" ]] || return 2
    LOCATE_PATH="${enc[0]}/locate"
    [[ -w "$LOCATE_PATH" ]] || return 3
    SLOT="$(cat "${enc[0]}/slot" 2>/dev/null || echo "")"
    LOCATE_PATH_CACHED="$LOCATE_PATH"
    SLOT_CACHED="$SLOT"
  fi

  local slot_label=""
  [[ -n "$SLOT" ]] && slot_label=" (Slot $SLOT)"

  case "$mode" in
    on)
      echo 1 | sudo tee "$LOCATE_PATH" >/dev/null
      echo "LED an${slot_label} via sysfs – $DISK"
      ;;
    off)
      echo 0 | sudo tee "$LOCATE_PATH" >/dev/null
      echo "LED aus${slot_label} via sysfs – $DISK"
      ;;
    blink)
      echo 1 | sudo tee "$LOCATE_PATH" >/dev/null
      echo "LED an${slot_label} – blinke ${BLINK_SECS}s…"
      sleep "$BLINK_SECS"
      echo 0 | sudo tee "$LOCATE_PATH" >/dev/null
      echo "LED aus."
      ;;
  esac
  return 0
}

# -------------------------------------------
# SES-Index + Slotnummer + SES-Device ermitteln (per SAS)
# -------------------------------------------
get_ses_index() {
  # Outputs (echo): "<SES_DEV> <INDEX> <SLOTNUM> <HOST> <BUS> <TARGET> <LUN>"
  need lsscsi; need sg_ses

  local LINE
  LINE="$(lsscsi -g | awk -v d="$DISK" '{if ($(NF-1)==d) {print; exit}}')"
  [[ -n "$LINE" ]] || { echo "Konnte $DISK nicht in 'lsscsi -g' finden." >&2; return 1; }

  if [[ "$LINE" =~ \[([0-9]+):([0-9]+):([0-9]+):([0-9]+)\] ]]; then
    local HOST="${BASH_REMATCH[1]}" BUS="${BASH_REMATCH[2]}" TARGET="${BASH_REMATCH[3]}" LUN="${BASH_REMATCH[4]}"
  else
    echo "Konnte SCSI-Adresse nicht parsen." >&2; return 1
  fi

  local SES_LINE SES_DEV
  SES_LINE="$(lsscsi -g | awk -v h="$HOST" -v b="$BUS" '$2=="enclosu" && $1 ~ ("\\["h":"b":"){print; exit}')"
  [[ -n "$SES_LINE" ]] || { echo "Kein SES/Enclosure auf ${HOST}:${BUS} gefunden (HW-RAID?)." >&2; return 1; }
  SES_DEV="$(echo "$SES_LINE" | awk '{print $NF}')"
  [[ -e "$SES_DEV" ]] || { echo "SES-Gerät existiert nicht: $SES_DEV" >&2; return 1; }

  local SAS_PATH="/sys/class/scsi_device/${HOST}:${BUS}:${TARGET}:${LUN}/device/sas_address"
  [[ -r "$SAS_PATH" ]] || { echo "SAS-Adresse nicht lesbar: $SAS_PATH" >&2; return 1; }
  local DISK_SAS; DISK_SAS="$(tr -d '\n' < "$SAS_PATH")"
  [[ -n "$DISK_SAS" ]] || { echo "Leere SAS-Adresse." >&2; return 1; }

  # In einem Durchlauf: Index + physische Slotnummer zu *dieser* Disk finden
  local INDEX SLOTNUM
  read INDEX SLOTNUM < <(sg_ses -p aes "$SES_DEV" 2>/dev/null \
    | awk -v want="$DISK_SAS" '
        /Element index:/              {idx=$3; gsub(":","",idx); slot=""}
        /device slot number:/         {slot=$5}
        /SAS address:/ && $3 ~ /^0x/  {sas=$3; if (tolower(sas)==tolower(want)) {print idx, slot; exit}}
      ')

  # Fallback über physische Slotnummer aus sysfs (falls vorhanden)
  if [[ -z "${INDEX:-}" || -z "${SLOTNUM:-}" ]]; then
    local p="/sys/class/block/${BASE_NOPART}/device"
    local enc=( "$p"/enclosure_device* )
    if [[ -e "${enc[0]}" && -r "${enc[0]}/slot" ]]; then
      local PHY_SLOT; PHY_SLOT="$(cat "${enc[0]}/slot" 2>/dev/null || true)"
      if [[ -n "$PHY_SLOT" ]]; then
        SLOTNUM="$PHY_SLOT"
        INDEX="$(sg_ses -p aes "$SES_DEV" 2>/dev/null \
          | awk -v slot="$PHY_SLOT" '
              /Element index:/ {idx=$3; gsub(":","",idx)}
              /device slot number:/ {if ($5==slot) {print idx; exit}}
            ')"
      fi
    fi
  fi

  # Es kann vorkommen, dass SLOTNUM leer bleibt → ist ok; dann nur Index nutzen
  [[ -n "$INDEX" ]] || { echo "SES-Index konnte nicht ermittelt werden." >&2; return 1; }
  echo "$SES_DEV" "$INDEX" "${SLOTNUM:-}" "$HOST" "$BUS" "$TARGET" "$LUN"
}

# -----------------------
# LED via SES (sg_ses)
# -----------------------
led_ses() {
  local mode="$1" SES_DEV="$2" INDEX="$3" SLOTNUM="${4:-}"
  need sg_ses
  local slot_label=""
  [[ -n "$SLOTNUM" ]] && slot_label=" (Slot $SLOTNUM)"
  case "$mode" in
    on)
      sg_ses --index="$INDEX" --set=ident "$SES_DEV"
      echo "LED an${slot_label}, SES index $INDEX via $SES_DEV – $DISK"
      ;;
    off)
      sg_ses --index="$INDEX" --clear=ident "$SES_DEV"
      echo "LED aus${slot_label}, SES index $INDEX via $SES_DEV – $DISK"
      ;;
    blink)
      sg_ses --index="$INDEX" --set=ident "$SES_DEV"
      echo "LED an${slot_label} – blinke ${BLINK_SECS}s (SES index $INDEX)…"
      sleep "$BLINK_SECS"
      sg_ses --index="$INDEX" --clear=ident "$SES_DEV"
      echo "LED aus."
      ;;
  esac
}

# ---------------------------------------------
# Methode wählen & LED einschalten (falls gew.)
# ---------------------------------------------
SES_DEV=""; INDEX=""; SLOTNUM=""; HOST=""; BUS=""; TARGET=""; LUN=""
OLDDEV=""

if (( USE_LED )); then
  case "$METHOD" in
    symlink)
      led_symlink "$([[ $BLINK_SECS -gt 0 ]] && echo blink || echo on)" \
        || { echo "Symlink-LED nicht verfügbar."; exit 1; }
      # H:B:T:L & OLDDEV für delete/scan:
      need lsscsi
      LINE="$(lsscsi -g | awk -v d="$DISK" '{if ($(NF-1)==d) {print; exit}}')"
      [[ -n "$LINE" ]] || { echo "Konnte $DISK nicht in 'lsscsi -g' finden."; exit 1; }
      OLDDEV="$(awk '{print $(NF-1)}' <<<"$LINE")"
      if [[ "$LINE" =~ \[([0-9]+):([0-9]+):([0-9]+):([0-9]+)\] ]]; then
        HOST="${BASH_REMATCH[1]}"; BUS="${BASH_REMATCH[2]}"; TARGET="${BASH_REMATCH[3]}"; LUN="${BASH_REMATCH[4]}"
      else
        echo "Konnte SCSI-Adresse nicht parsen."; exit 1
      fi
      ;;
    ses)
      read SES_DEV INDEX SLOTNUM HOST BUS TARGET LUN < <(get_ses_index) || exit 1
      led_ses "$([[ $BLINK_SECS -gt 0 ]] && echo blink || echo on)" "$SES_DEV" "$INDEX" "$SLOTNUM"
      # OLDDEV zusätzlich erfassen (nur Info)
      need lsscsi
      LINE="$(lsscsi -g | awk -v d="$DISK" '{if ($(NF-1)==d) {print; exit}}')"
      [[ -n "$LINE" ]] && OLDDEV="$(awk '{print $(NF-1)}' <<<"$LINE")" || true
      ;;
    auto)
      if ! led_symlink "$([[ $BLINK_SECS -gt 0 ]] && echo blink || echo on)"; then
        echo "(Auto) Fallback auf SES…"
        read SES_DEV INDEX SLOTNUM HOST BUS TARGET LUN < <(get_ses_index) || exit 1
        led_ses "$([[ $BLINK_SECS -gt 0 ]] && echo blink || echo on)" "$SES_DEV" "$INDEX" "$SLOTNUM"
      else
        # Symlink-Weg erfolgreich: H:B:T:L & OLDDEV besorgen
        need lsscsi
        LINE="$(lsscsi -g | awk -v d="$DISK" '{if ($(NF-1)==d) {print; exit}}')"
        [[ -n "$LINE" ]] || { echo "Konnte $DISK nicht in 'lsscsi -g' finden."; exit 1; }
        OLDDEV="$(awk '{print $(NF-1)}' <<<"$LINE")"
        if [[ "$LINE" =~ \[([0-9]+):([0-9]+):([0-9]+):([0-9]+)\] ]]; then
          HOST="${BASH_REMATCH[1]}"; BUS="${BASH_REMATCH[2]}"; TARGET="${BASH_REMATCH[3]}"; LUN="${BASH_REMATCH[4]}"
        else
          echo "Konnte SCSI-Adresse nicht parsen."; exit 1
        fi
      fi
      ;;
    *) echo "Unbekannte Methode: $METHOD"; exit 1 ;;
  esac
else
  # Keine LED: wir brauchen nur H:B:T:L & OLDDEV
  need lsscsi
  LINE="$(lsscsi -g | awk -v d="$DISK" '{if ($(NF-1)==d) {print; exit}}')"
  [[ -n "$LINE" ]] || { echo "Konnte $DISK nicht in 'lsscsi -g' finden."; exit 1; }
  OLDDEV="$(awk '{print $(NF-1)}' <<<"$LINE")"
  if [[ "$LINE" =~ \[([0-9]+):([0-9]+):([0-9]+):([0-9]+)\] ]]; then
    HOST="${BASH_REMATCH[1]}"; BUS="${BASH_REMATCH[2]}"; TARGET="${BASH_REMATCH[3]}"; LUN="${BASH_REMATCH[4]}"
  else
    echo "Konnte SCSI-Adresse nicht parsen."; exit 1
  fi
fi

# -------------
# Deregister
# -------------
echo ">>> Entferne $DISK (SCSI ${HOST}:${BUS}:${TARGET}:${LUN})"
echo 1 | sudo tee "/sys/class/scsi_device/${HOST}:${BUS}:${TARGET}:${LUN}/device/delete" >/dev/null || true

# -------------
# Prompt / Swap (ohne Slotnummer)
# -------------
if (( PROMPT )); then
  read -p ">>> Bitte neue Festplatte einsetzen und ENTER drücken… " _
fi

# -------------
# Rescan (gezielt für den Target-Slot)
# -------------
echo ">>> Rescanne Slot (Target ${TARGET}) über host${HOST}…"
echo "${HOST} ${BUS} ${TARGET}" | sudo tee "/sys/class/scsi_host/host${HOST}/scan" >/dev/null

# -------------
# Neues Device finden (by H:B:T:L)
# -------------
echo ">>> Warte auf neues Blockdevice im Slot (Target ${TARGET})…"
need lsscsi
NEWDISK=""
for i in {1..20}; do
  NEWLINE="$(lsscsi -g | awk -v h="$HOST" -v b="$BUS" -v t="$TARGET" '$1==sprintf("[%d:%d:%d:0]",h,b,t){print; exit}')"
  if [[ -n "$NEWLINE" ]]; then
    NEWDISK="$(awk '{print $(NF-1)}' <<<"$NEWLINE")"
    echo ">>> Neues Device: $NEWDISK  ($NEWLINE)"
    break
  fi
  sleep 1
done
if [[ -n "$NEWDISK" ]]; then
  if [[ -n "$OLDDEV" ]]; then
    if [[ "$NEWDISK" == "$OLDDEV" ]]; then
      echo ">>> Hinweis: Laufwerksbuchstabe unverändert geblieben ($NEWDISK) – alles ok."
    else
      echo ">>> Hinweis: Buchstabe wechselte: alt=$OLDDEV neu=$NEWDISK (normal bei Hot-Swap)."
    fi
  fi
else
  echo "Hinweis: Im Zeitfenster kein neues Device sichtbar. Entweder Treiber/Controller langsam, oder der Slot wurde noch nicht neu gemeldet. Prüfe lsscsi/Logs."
fi

# -------------
# LED aus
# -------------
if (( USE_LED )); then
  case "$METHOD" in
    symlink)
      led_symlink off || true           # nutzt den gecachten locate-Pfad
      ;;
    ses)
      led_ses off "$SES_DEV" "$INDEX" "$SLOTNUM" || true
      ;;
    auto)
      if [[ -n "${SES_DEV:-}" && -n "${INDEX:-}" ]]; then
        led_ses off "$SES_DEV" "$INDEX" "$SLOTNUM" || true
      else
        led_symlink off || true
      fi
      ;;
  esac
fi

echo ">>> Fertig."

Nun noch ausführbar machen

chmod +x /usr/local/bin/scsi-hotswap.sh

Hilfe/Benutzung:

Usage:
  scsi-hotswap [--method auto|symlink|ses] [--blink N|--no-led] [--no-prompt] /dev/sdX|sdX|sdXn

Optionen:
  --method M     M = auto (default) | symlink | ses
  --blink N      LED vor dem Tausch N Sekunden blinken (statt dauerhaft an)
  --no-led       keine LED-Steuerung
  --no-prompt    nicht auf ENTER warten (setze voraus, dass neue Platte schon steckt)

Beispiele:
  scsi-hotswap sdi
  scsi-hotswap --method symlink --blink 8 sdg8
  scsi-hotswap --method ses --no-prompt sdm

Ausgabe:

root@backupsrv001:~# scsi-hotswap.sh /dev/sdq
>>> Entferne /dev/sdq (SCSI 3:0:17:0)
>>> Bitte neue Festplatte in Slot 17 einsetzen...
Weiter mit ENTER, wenn neue Platte steckt.
>>> Rescanne Slot 17...
>>> Neue Device-Liste:

Proxmox - Lets Encrypt Zertifikat

Proxmox - Lets Encrypt Zertifikat

Einrichtung Lets Encrypt Zertifikat über Port 80 und im Terminal

Einrichtung des Clients

1. Als erstes Git installieren. Dazu per ssh einloggen


apt install git -y

2. Client herunterladen

cd /root/
git clone https://github.com/Neilpang/acme.sh.git acme-master

Client konfigurieren unsere einstellungen speichern wir unter /etc/pve/.le
Dazu wird das Verzeichnis erstellt.

mkdir /etc/pve/.le
cd /root/acme-master

Nun die Konfiguration erstellen, dazu benötigen wir eine Emailadresse

./acme.sh --install --accountconf /etc/pve/.le/account.conf --accountkey /etc/pve/.le/account.key --accountemail "eMail@addresse.de"

Danach aus der Shell ausloggen und wieder einloggen, um die bashrc neu zu laden

Das erste Zertifikat

zuerst wird ein Probezertifikat erstellt um zu sehen ob auch alles klappt bevor wir uns sperren lassen.
$DOMAIN wird mit unserer Domain ersetzt z.b meinedomain.org oder subdomain.meinedomain.org

cd /root/acme-master
./acme.sh --issue --standalone --keypath /etc/pve/local/pveproxy-ssl.key --fullchainpath /etc/pve/local/pveproxy-ssl.pem --reloadcmd "systemctl restart pveproxy" -d $DOMAIN --test

Ist das Zertifikat durchgelaufen, dann wird test durch --force ersetzt

./acme.sh --issue --standalone --keypath /etc/pve/local/pveproxy-ssl.key --fullchainpath /etc/pve/local/pveproxy-ssl.pem --reloadcmd "systemctl restart pveproxy" -d $DOMAIN --force

Zertifikat Updaten

Einen cronjob anlegen

crontab -e

Nun im crontab diese zeile einfügen

0 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null

Fertig


Proxmox - Lets Encrypt Zertifikat

Proxmox Lets Encyrpt Zertifikat über Webgui und DNS Challenge

Einrichtung Acme Account und DNS Plugin

Auf der Weboberfläche einloggen, Dann auf Datacenter -> Acme gehen.

Auswahl_870.png

Nun bei Accounts auf den Button Add klicken.

Auswahl_871.png

Nun eine gültige Emailadresse anlegen und die TOS Bedinnungen akzeptieren.
Wer möchte kann auch einen anderen namen verwenden, falls mehrere Accounts benötigt werden. Ich lasse es bei default
Dann auf Register klicken.

Auswahl_872.png

Wenn alles geklappt hat,bekommt eine Medlung mit TASK OK

Auswahl_873.png

Nun das DNS Plugin erstellen.
Dazu bei Challenge Plugin auf Add klicken

Auswahl_874.png

Plugin Name vergeben in meinem Fall plesk, dann das Plugin auswählen für den Hoster. In meinem Fall auch pleskxml

Auswahl_875.png

Nun die Api Daten also Benutzername Kennwort angeben und dann auf ok.

Auswahl_876.png

Nun haben wir einen Account und ein Plugin konfiguriert

Auswahl_877.png

Dann den Vserver anklicken für den das Zertifikat gelten soll, hat man mehrer VServer muss das für jeden VServer wiederholt werden. Vserver anklicken -> Certificates anklicken.
Nun sieht man auch schon das er das Lets Encrypt Konto default verwendet. Nun bei Acme auf Add klicken

Auswahl_878.png

Nun Channlenge Type DNS auswählen
Plugin : plesk auswählen
Domain namen eintragen.

Auswahl_879.png

Nun haben wir die Domain in der Übersicht. Dort dann auf order Certificates now klicken

Auswahl_880.png

 

 

Proxmox . Nested Virtualisierung

Proxmox . Nested Virtualisierung

Einschalten von Nested Virtualisation

Beschreibung

Damit man in eine VM einen Proxmoxhost virtualisieren kann, muss im oberen Host  Nested Virtualisation eingeschaltet werden. Wenn es nicht aktiv ist bekommt man bei der Proxmox installation diesen Fehler

WhatsApp Image 2023-01-27 at 08.32.47.jpeg


Einschalten

Ein Terminal auf dem Realen Host öffnen.
Nun checken ob Nested aktiv ist.

cat /sys/module/kvm_intel/parameters/nested

Ausgabe, in der Regel ist hier dann ein N für No

Für Intel CPUs diesen Befehl zum aktivieren

echo "options kvm-intel nested=Y" > /etc/modprobe.d/kvm-intel.conf

Für AMD CPUs diesen Befehl zum aktivieren

echo "options kvm-amd nested=1" > /etc/modprobe.d/kvm-amd.conf

Nun den Host neustarten oder die Module reloaden

reboot

oder

modprobe -r kvm_intel
modprobe kvm_intel

Wichtig das die VM die Nested benutzen soll, als CPU TYP Host hat.

backupvsrv0001 - Proxmox Virtual Environment – Mozilla Firefox_001.png

Fertig.


Proxmox - Import VirtualBoxAppliance

Proxmox - Import VirtualBoxAppliance

Kopieren der Appliance und Import des OVF Images

Beschreibung


Es ist auch in Proxmox möglich eine VirtualBox (OVF)  Vorlage zu importieren.

Abbhängigkeiten auf dem Proxmox Server: unzip

apt install unzip

Kopieren und entpacken Zip Datei der Appliance.

In Unserem Beispiel der OpenThinClientAppliance.
Von unserem Computer kopieren wir die Appliance in das Root Home Verzeichnis.

scp Downloads/openthinclient-Appliance-2022.1.1-virtualbox.zip root@<proxmoxhost>:/root

oder wenn möglich gleich von der website per wget runterladen ins Root Home Verzeichnis

wget "https://archive.openthinclient.org/openthinclient/customer/virtual-appliance_ZkiPsbW/openthinclient-Appliance-2022.1.1-virtualbox.zip" --no-check-certificate 

Nun das archiv entpacken und ins entpackte Verszeichnis gehen.

unzip openthinclient-Appliance-2022.1.1-virtualbox.zip
cd openthinclient-Appliance-2022.1.1-virtualbox

Import des OVF Images

qm importovf <vmid> <vorlagendatei>.ovf <speicher>

Beispiel

qm importovf 121 openthinclient-Appliance-2022.1.1.ovf vms

Fehler

Bei Fehler invalid host ressource /disk/vmdisk1, skipping folgendes durchführen.
Die gerade angelegte VM wieder löschen
Den Befehl nochmals ausführen aber diesmal das Format der Festplatte muss angegeben werden also.

qm importovf <vmid> <vorlagendatei>.ovf <speicher> --format qcow2

Beispiel

qm importovf 121 openthinclient-Appliance-2022.1.1.ovf vms --format raw|qcow2|vmdk

Sollte der Fehler weiterhin bestehen, die vmdk einzeln importieren. Die 121 Machine wurde ja schon angelegt.
Also diesmal nicht löschen.

Dann den qm importdisk Befehl nutzen

qm importdisk <vmid> <source> <storage>

Besipiel

qm importdisk 121 openthinclient-Appliance-2022.1.1-disk001.vmdk vms

Ausgabe:

WARNING: dos signature detected on /dev/datenpool/vm-121-disk-0 at offset 510. Wipe it? [y/n]: [n]
  Aborted wiping of dos.
  Logical volume "vm-121-disk-0" created.
  1 existing signature left on the device.
    (0.00/100%)
    (27.00/100%)

Nun warten bis fertig.

Proxmox - Import VirtualBoxAppliance

Unzip OVA Datei, inder dann die ovf liegt

Beschreibung:

Manchmal liegen die Dateien nicht in einer Zip file sondern in eine OVA Datei.
Diese kann entpackt werden wie ein tar archiv und darin befindet sich dann die ovf.
Das archiv von meineovafile.tar nach meineovafile.tar umbenennen.
Sonst lässt es sich nicht enpacken.

Diese tar ist eigentlich ein 7zip archiv.
Nun 7zip installieren

apt install 7zip

Nun

7zz x meienovafile.tar

Jetzt haben wir die Dateien im gleichen Verzeichnis wie die ova .tar datei liegen.

ls
haos_ova-12.3.tar  home-assistant.mf  home-assistant.ovf  home-assistant.vmdk

Nun können wir im Abschnitt ovf weitermachen

Kopieren der Appliance und Import des OVF Images

 

 

 

 

 

 

Proxmox - LVM in VM vergrößern

Proxmox - LVM in VM vergrößern

PV Group / VGroup und Logical Volume inklusive Dateisystem Vergrößern

Laufwerk der VM vergrößern

Im Proxmox einloggen, die Virtuelle Machine auswählen und auf Hardware gehen.
Dort die Festplatte auswählen und auf resize disk klicken.

Auswahl_030.png

Nun angeben um wie viel Gigabyte das Volume größer werden soll. In unserem Beispiel 99 GB
Somit hat das Laufwerk dann, 300 GB gesamt 201 GB + 99 GB = 300 GB.
Nachdem der gewünschte Wert angegeben ist auf resize disk klicken.

Auswahl_031.png

Nun  hat die Disk eine Größe von 300 GB

Auswahl_032.png

In der VM Gruppen vergrößern

Partition vergößern mit parted

Anmelden per noNC Konsole oder über ssh wenn möglich.
Zur erinnerung noVNC Console:
VM anklicken und im Menü oben auf Console klicken

Auswahl_033.png

Nun im Terminal erstmaldie Partionen und die Größen rausbekommen mit dem Befehl

lsblk

Ausgabe:

Auswahl_034.png

Wie in diesem Beispiel zu sehen, liegen die LVs auf dem Laufwerk /dev/sda2.
Die Festplatte sda hat 300 GB erreicht.
Nun müssen wir die Partiton auch auf 300 GB bringen.
Das machen wir mit dem Programm parted.
Sollte parted nicht installiert sein, dieses nachinstallieren.

apt-get install parted           [On Debian/Ubuntu systems]
yum install parted               [On RHEL/CentOS and Fedora]
dnf install parted               [On Fedora 22+ versions]

Nun parted starten mit dem Befehl

parted

Nun dort den Befehl eingeben:

select /dev/sda

Ausgabe:

Auswahl_038.png

Nun die Einheiten vom MB auf Sektoren umstellen damit wir den startsektor bekommen. Dazu den Befehl

unit s

verwenden.
Nun  lassen wir uns die Partitionen inklusive freien Bereich durch den Paramter free  anzeigen, mit dem Befehl:

print free

Ausgabe:

Auswahl_039.png

Jetz sehen wir die Infos. Uns interessiert das ende des Laufwerks.
Also Sektor :  629145599s
Diesen müssen wir spater angeben.


Nun die Partiton vergößern mit angabe der Partion, hier Partition 2, da liegt unser lvm drauf.
Befehl:

resizepart 2

Nun wird nach dem Ende gefragt. Vorgeschlagen wird uns das aktuelle ende der Partition.
Wir wollen die Partition ja auf das ende des Datenträgers legen.
Somit die Volle Kapazität des Datenträgers.

Auswahl_040.png

Also geben wir als Endsektor 629145599s

Auswahl_041.png

Nun nochmals ausgeben mit dem
Befehl:

print free

nun sieht man die 2 Partition geht bis ans ende. Voilla

Auswahl_042.png

Nun mit dem Befeh:

quit

raus.

PV Volume vergrößern

die PV Group rausfinden.
Befehl:

pvs

Ausgabe:

PV			VG			Fmt		Attr	PSize	Free
/dev/sda2	nvistaVG	lvm2	a--		200,53	0

Nun wissen wir das PV = /dev/sda2 ist und das die VG nvistaVG heißt.
Als erstes müssen wir die PV vergrößern.
Befehl:

pvresize <partition>
in userem Beispiel
pvresize /dev/sda2

Ausgabe:

Physical volume "/dev/sda2" changed
1 physical volume(s) resized / 0 physical volume(s) not resized

Nun überprüfen ob das Volume vergrößert wurde

pvs

Ausgabe:

Auswahl_043.png

Nun mit Befeh:

vgs

sehen wir, das auch gleich die volume group mit vergrößert wurde.

Ausgabe:

Auswahl_044.png

Logical Volume aufs Maximale Vergrößern

Mite dem Befehlen anzeigen lassen welche LogicalVolumes es gibt

ls /dev/mapper

Ausgabe:

Auswahl_045.png

Nun das Volume nvistaVG-ndcVolume vergrößern.
mit dem Befehl

lvextend --resizefs -l +100%FREE /dev/mapper/<volumegroup>-<logicalvolume>
In unserem Beispiel
lvextend --resizefs -l +100%FREE /dev/mapper/nvistaVG-ndcVolume

Ausgabe:

Auswahl_046.png

Speicher überpüfen mit dem Befehl:

df -h

in der Ausgabe zu sehen, das root laufwerk ist auf 287 GB gewachsen, denn in der Volume Group liegt ja noch das swap Volume und in der ersten Partition die Boot Partition, so das das ndcVolume nicht die Gesamtkapazität von 300 GB haben kann:

Auswahl_047.png

Fertig

 

 

 

 

 

 

Proxmox - LVM in VM vergrößern

Proxmox Host LVM Vergrößern

Laufwerk vergrößern und LVM Volumes vergößern

Partition vergößern mit parted

Nun im Terminal erstmal die Partionen und die Größen rausbekommen mit dem Befehl

lsblk

Ausgabe:

Auswahl_034.png

Wie in diesem Beispiel zu sehen, liegen die LVs auf dem Laufwerk /dev/sda2.
Die Festplatte sda hat 300 GB erreicht.
Nun müssen wir die Partiton auch auf 300 GB bringen.
Das machen wir mit dem Programm parted.
Sollte parted nicht installiert sein, dieses nachinstallieren.

apt-get install parted           [On Debian/Ubuntu systems]
yum install parted               [On RHEL/CentOS and Fedora]
dnf install parted               [On Fedora 22+ versions]

Nun parted starten mit dem Befehl

parted

Nun dort den Befehl eingeben:

select /dev/sda

Ausgabe:

Auswahl_038.png

Nun die Einheiten vom MB auf Sektoren umstellen damit wir den startsektor bekommen. Dazu den Befehl

unit s

verwenden.
Nun  lassen wir uns die Partitionen inklusive freien Bereich durch den Paramter free  anzeigen, mit dem Befehl:

print free

Ausgabe:

Auswahl_039.png

Jetz sehen wir die Infos. Uns interessiert das ende des Laufwerks.
Also Sektor :  629145599s
Diesen müssen wir später angeben.


Nun die Partiton vergößern mit angabe der Partion, hier Partition 2, da liegt unser lvm drauf.
Befehl:

resizepart 2

Nun wird nach dem Ende gefragt. Vorgeschlagen wird uns das aktuelle ende der Partition.
Wir wollen die Partition ja auf das ende des Datenträgers legen.
Somit die Volle Kapazität des Datenträgers.

Auswahl_040.png

Also geben wir als Endsektor 629145599s

Auswahl_041.png

Nun nochmals ausgeben mit dem
Befehl:

print free

nun sieht man die 2 Partition geht bis ans ende. Voilla

Auswahl_042.png

Nun mit dem Befeh:

quit

raus.

PV Volume vergrößern

die PV Group rausfinden.
Befehl:

pvs

Ausgabe:

PV			VG			Fmt		Attr	PSize	Free
/dev/sda2	nvistaVG	lvm2	a--		200,53	0

Nun wissen wir das PV = /dev/sda2 ist und das die VG nvistaVG heißt.
Als erstes müssen wir die PV vergrößern.
Befehl:

pvresize <partition>
in userem Beispiel
pvresize /dev/sda2

Ausgabe:

Physical volume "/dev/sda2" changed
1 physical volume(s) resized / 0 physical volume(s) not resized

Nun überprüfen ob das Volume vergrößert wurde

pvs

Ausgabe:

Auswahl_043.png

Nun mit Befeh:

vgs

sehen wir, das auch gleich die volume group mit vergrößert wurde.

Ausgabe:

Auswahl_044.png

Logical Volume aufs Maximale Vergrößern

Nun das Meta Volume um 32GB erweitern und dann das Daten Volume den rest
mit dem Befehl

lvextend -L +32G /dev/pve/data_tmeta
lvextend -l +100%FREE /dev/pve/data

Ausgabe:

lvextend -L +32G /dev/pve/data_tmeta
lvextend -l +100%FREE /dev/pve/data
  Reached maximum pool metadata size <15.88 GiB (4065 extents).
  Thin pool will use metadata without cropping.
  Size of logical volume pve/data_tmeta changed from 1.44 GiB (369 extents) to <15.88 GiB (4065 extents).
  Logical volume pve/data_tmeta successfully resized.
  Size of logical volume pve/data_tdata changed from <157.54 GiB (40329 extents) to <1.76 TiB (460266 extents).
  Logical volume pve/data successfully resized.

Speicher überpüfen in der Oberfläche

Auswahl_396.png

Fertig







Proxmox - Qemu Agent installation

Proxmox - Qemu Agent installation

Qemu Agent in der VM Aktivieren

Beschreibung

Der QEMU AGnet ist eine Geräte/Treiberschnittstelle mit der der Proxmox host mit der VM kommunizieren kann.

Aktivierung

DIeser muss in den VM Eigenschaften aktiviert werden.
Dazu rufen wir die Proxmox Web GUI auf.
Wählen die VM aus die den Agent bekommen soll.
Dort nun auf Options -> Doppelklick auf qemu Agent

Auswahl_069.png

Nun den Haken bei Enable Qemu Agent rein.
Dies ist für alle VMs gleich Egal ob Windows oder Linux

Auswahl_070.png
Nun wenn die Machine noch läuft einmal stoppen und wieder starten.
Nun sollte das so aussehen.

Auswahl_071.png

Fertig

Proxmox - Qemu Agent installation

Qemu Agent unter Windows

Beschreibung

Damit der Qemuagent genutz werden kann, muss der Treiber unter Windows installiert werden.

Installation

ISO Einlegen

Wir loggen uns auf der Proxmoxoberfläche ein gehen auf die Machine und legen die VirtIO Treiber ISO ein. DIese haben wir auch schon mal gebraucht um die Netzwerkkarte und/oder Festplattencontroller zu aktivieren ein.

Auswahl_068.png

Treiber installieren

Nun in der Windows VM den Gerätemanger öffnen. Dort sehen wir unter andere Geräte ein PCI-Komminkationscontroller. Ist dies nicht der Fall.

Bildschirmfoto vom 2023-02-25 10-01-21.png

Ist dies nicht der Fall unter Systemgeräte schauen ob es da schon ein VirtIO Serial Driver gibt.
wenn ja ist alles schon installiert. Wenn nein, schauen ob in der VM Guest Agent aktiviert ist.

Bildschirmfoto vom 2023-02-25 10-02-17.png

Ist der Eintragunter andere Geräte vorhandenn un doppelklick auf das Gerät und auf Treiber aktualisieren klicken

Bildschirmfoto vom 2023-02-25 10-01-32.png

Nun auf AUs einer Liste auswählen

Bildschirmfoto vom 2023-02-25 09-36-46.png

Nun auf Weiter

Bildschirmfoto vom 2023-02-25 09-36-55.png

Nun auf Datenträger

Bildschirmfoto vom 2023-02-25 09-37-04.png


Auf Durchsuchen

Bildschirmfoto vom 2023-02-25 09-37-13.png

Nun auf die VirtCD -> vioserial euer Bestriebsystem, bei mir Win10 dann die Architektur bei amd64

Bildschirmfoto vom 2023-02-25 09-37-44.png

Dort die vioser.inf öffnen

Bildschirmfoto vom 2023-02-25 09-37-55.png

Nun VirtIO Serial Driver ausählen und auf weiter

Bildschirmfoto vom 2023-02-25 09-38-24.png

Jetzt ist der Treiber isntalliert. Nun auf schließen klicken

Bildschirmfoto vom 2023-02-25 10-02-01.png

Jetzt ist der Treiber in der Liste zu sehen

Bildschirmfoto vom 2023-02-25 10-02-17.png

Agent Programm installieren

Zum Schlussn och den Agent Dienst installieren
Dazu auf die Virtio CD züruck in das Verzeichnis guest-agent. Und Dort für eure Architektur den Agent installieren

Bildschirmfoto vom 2023-02-25 09-25-54.png

Testen ob die Kommunikation


Dazu per SSH oder Webshell auf den Host anmelden und folgenden Befhl ausführen

qm agent <vmid> ping

Beispiel

qm agent 100 ping

Wenn nichts zurückgeben wird hats funktioniert.

Proxmox - Ceph

Ceph (Aussprache ​/⁠ˈsɛf⁠/​) ist eine quelloffene verteilte Speicherlösung (Storage-Lösung) in der Informationstechnik. Kernkomponente ist mit RADOS (englisch reliable autonomic distributed object store) ein über beliebig viele Server redundant verteilbarer Objektspeicher (englisch object store). Ceph bietet dem Nutzer drei Arten von Storage an: Einen mit der Swift- und S3-API kompatiblen Objektspeicher (RADOS Gateway), virtuelle Blockgeräte (RADOS Block Devices) und CephFS, ein verteiltes Dateisystem.[4]

Ceph kann als RADOS Block Device (RBD) über das Ceph iSCSI Gateway auch als hochverfügbares iSCSI-Target bereitgestellt werden. Dadurch kann es auf Client-Seite durch viele Betriebssysteme (auch Windows) genutzt werden.

Proxmox - Ceph

Crushmap dekompilieren / kompilieren

Beschreibung:

Die Ceph Crushmap ist eine Konfigurationsdatei in Ceph, die beschreibt, wie Daten auf physische Speicherressourcen verteilt werden sollen. Sie definiert die Hierarchie der Speichergeräte und ihre Beziehungen zueinander, um die Ausfallsicherheit und Leistung von Ceph-Clustern zu optimieren. Die Crushmap wird von der Crush-Algorithmus-Engine verwendet, um intelligente Verteilungsentscheidungen zu treffen und sicherzustellen, dass Daten auch bei Ausfällen von Speichergeräten zugänglich bleiben.

Dekompilieren

Crushmap im Binärformat speichern.

Syntax
ceph osd getcrushmap -o <zieldatei>
ceph osd getcrushmap -o ~/crush_map_compressed_2023-03-29

Nun die Binärdatei dekompilieren. Somit haben wir auch gleichzeitig eine Sicherungskopie, nämlich die Kompilierte Datei

Sytntax
crushtool -d <binärcrushmapdatei> -o <zielcrushmapdateidecompiled>

crushtool -d ~/crush_map_compressed_2023-03-29 -o ~/crush_map_decompiled_2023-03-29

Nun kann die crushdatei mit einem ganz  normelen Texteditor wie vi,vim,nano,joe etc. bearbeitet werden.

Kompilieren und wieder injekzieren

crushtool -c <crushmapdateidecompiled> -o <neuebinärcrushmapdatei>
crushtool -c ~/crush_map_decompiled_2023-03-29 -o ~/new_crush_map_compressed_2023-03-29

Nun kann diese Datei wieder Injekziert werden

Syntax
ceph osd setcrushmap -i <neuebinärcrushmap>
ceph osd setcrushmap -i ~/new_crush_map_compressed_2023-03-29

Fertig.

Proxmox - Ceph

Pools nach Classen anlegen (SSD Pool / HDD Pool)

Beschreibung:

In Ceph können Sie verschiedene Pools anlegen, um unterschiedliche Typen von Speichergeräten zu nutzen. Zum Beispiel können Sie SSD-, NVME- und HDD-Pools erstellen, um eine optimale Nutzung der verfügbaren Speichergeräte zu erreichen. Jeder Pool kann unterschiedliche Konfigurationen für die Leistung und die Ausfallsicherheit aufweisen, um den Anforderungen der Anwendung gerecht zu werden. Durch die Verteilung von Daten auf verschiedene Speichergeräte können Sie auch sicherstellen, dass Daten bei Ausfällen von Speichergeräten zugänglich bleiben.

Festplatten Typen (Classes)

In Ceph können einer OSD verschiedene Klassen hinzugefügt werden.
Diese sind:

  1. ssd: Eine OSD-Klasse für SSD-Speichergeräte. Diese OSDs werden normalerweise für Daten verwendet, die eine höhere Leistung erfordern.

  2. hdd: Eine OSD-Klasse für HDD-Speichergeräte. Diese OSDs werden normalerweise für Daten verwendet, die keine hohe Leistung erfordern, sondern eher für Archiv- oder Backupzwecke geeignet sind.

  3. nvme: Eine OSD-Klasse für NVMe-Speichergeräte. Diese OSDs werden normalerweise für Daten verwendet, die eine sehr hohe Leistung erfordern, z.B. für Anwendungen mit hohem I/O-Durchsatz.

Festplatten Klasse löschen/setzen

Ist schon eine Festplattenklasse gesetzt muss diese erst gelöscht werden, bevor eine neue vergeben werden kann. Im Terminal dienen folgende Befehle zum löschen/setzen.
In unserem Fall die OSD.12 auf NVME setzten.

Löschen
ceph osd crush rm-device-class <osdnr>
ceph osd crush rm-device-class osd.12
Ausgabe:
done removing class of osd(s): 12
Setzen
Syntax
classtype = hdd,ssd,nvme

ceph osd crush set-device-class <classtype> <osdnr>
ceph osd crush set-device-class nvme osd.12
Ausgabe:
set osd(s) 12 to class 'nvme'


Crushmap um weitere replicated rule erweitern/ändern.

!Wichtige Hinweise!!!

!!! WICHTIG!!! Es muss schon eine OSD mit der Klasse geben, bevor eine Rule dafür gebaut werden kann !!!
Ist dies nicht der Fall müsen wir erst die erste Rule nur anpassen für die Klasse die schon da ist.
Danach legen wir dei OSD mit der neuen Klasse an, aber vor alle dem alles auf Maintenance setzten!!!
!!! WICHTIG!!! Alles auf Maintenance stzten, wie no backfill, noreblance etc setzen.

Auswahl_941.png

Erst nach erstellung der Rule die haken wieder entfernen.

Über manuelles bearbeiten


Die Crushmap decompilieren so, das man diese auch bearbeiten kann. Siehe Seite : Crushmap dekompilieren / kompilieren

Ist die Map decompiliert. Der ersten Rule den Parameter für die Klassenzueweisung hinzufügen.
Damit wäre dann erste Regel definiert, das diese für HDDs gillt. Sollten nur NVMEs verbaut sein. Dann natürlich die erste Rule mit NVME setzen und die zweite dann auf HDDs.  In unserem Scenario sind aber HDDs vorhanden und wir wollen NVME Pool hinzufügen. Sind noch gar keine Pools definiert, so kann man auch die erste Rule noch umbenennen, z.b noch _hdd hinzufügen.
Ist die Rule allerdings schon einem pool zugewiesen, muss dies aktualisiert werden. Was in einer Prod umgebung nicht wirklich Sinnvoll ist, dann einfach als gedanken lassen, die erste Rule ist die Rule von dem Klassentyp die zu erst da war. Wie bei uns die HDDs.

Hier der Parameter der einer Rule hinzugefügt werden muss

step take default class <classtype>
step take default class hdd

In unsere Crushmap sehe das so aus.
Auszug.

Original
...
# rules
rule replicated_rule {
        id 0
        type replicated
        min_size 1
        max_size 10
        step chooseleaf firstn 0 type host
        step emit
}
...

Nun geändert mit HDD class

...
# rules
rule replicated_rule {
        id 0
        type replicated
        min_size 1
        max_size 10
        step take default class hdd
        step chooseleaf firstn 0 type host
        step emit
}

Diese speichern und wieder zurückzuspielen.
Siehe Seite :  Crushmap dekompilieren / kompilieren

Nun eine zweite Rule anlegen, dazu die erste kopieren und die ID und Namen ändern.

z.b so

...
# rules
rule replicated_rule {
        id 0
        type replicated
        min_size 1
        max_size 10
        step take default class hdd
        step chooseleaf firstn 0 type host
        step emit
}

# rules
rule replicated_rule_nvme {
        id 1
        type replicated
        min_size 1
        max_size 10
        step take default class nvme
        step chooseleaf firstn 0 type host
        step emit
}

Diese speichern und wieder zurückzuspielen.
Siehe Seite :  Crushmap dekompilieren / kompilieren

Fertig, nun Pool anlegen.

Über Kommandozeilen Befehl

Die Erste Rule die Klasse hinzufügen, wenn die noch keine Klasse hat

ceph osd crush rule modify <rulename> set class <classtype>

Beispiel
ceph osd crush rule modify replicated_rule set class hdd

Nun wenn nicht schon vorhanden OSD mit neuer Klasse hinzufügen.
Dann die weitere Rule erstellen

Erklärung der Parameter

<rule-name>

Name der Regel, um sie mit einem Pool zu verbinden (angezeigt in der GUI und CLI)

<root>

Zu welchem Crush-Root sie gehören sollte (Standard-Ceph-Root "default")

<failure-domain>

An welchem Fehlerbereich die Objekte verteilt werden sollten (normalerweise Host)
(Bei one Node wäre das hier osd)

<class>

Welcher Typ von OSD-Backing-Store verwendet werden soll (e.g., nvme, ssd, hdd)

Syntax
ceph osd crush rule create-replicated <rule-name> <root> <failure-domain> <class>

Beispiel
ceph osd crush rule create-replicated rule_nvme default host nvme

!!! WICHTIG!!! Maintenance mode wieder rausnehmen no backfill, noreblance etc aushaken.

Fertig nun Pool anlegen

Pool anlegen

Nun können wir einen weiteren Pool mit der neuen Rule anlegen.
Dazu auf der Weboberfläche proxmox anmelden, einen Host auswählen dann auf Ceph / Pools klicken

Auswahl_938.png

Dann auf Create klicken

Auswahl_939.png

nun einen Namen vergeben und unseer Ruleset auswählen. Auto PG auf on und den Haken bei Add Storage rein.
Dann bekommen wir auch gleich den Speicher zum Datastore um darauf zuzugreifen.

Auswahl_940.png

Fertig.

So könnte man zum Beispiel ein RBD Pool für NVMEs bauen und einen CephFS Pool mit HDDs.
Als Beispiel

!!!ACHTUNG! NICHT ZU EMPFEHLEN!!!


Man kann natürlich auch einen Vorhandenen Pool ein Komplett anderes Ruleset geben.
Aber Achtung die Daten ziehen dann nicht mit um. Die Änderungen gelten nur für neu geschriebene Daten.
Deshalb lieber einen neuen Pool Anlegen, Daten dort hin verschieben, alten Pool löschen.
Dann einen neuen Pool mit altem Namen und dann der richtigen Ruleset auswählen.
So bleiben die Daten konsistent

Proxmox - Ceph

Nach löschen eines Ceph Monitors bleibt immer noch der eintrag über

Beschreibung:

Monitor über die GUI gelöscht, bleibt aber als unbekannt stehen.

Auswahl_1024.png

Lösung 1:

Mittel ceph mon dump schauen ob der eintrag schon raus ist.
Wenn nicht den Monitor nochmals löschen.

ceph mon dump

Ausgabe, bau uns handelt es sich um mon.vserv0003

epoch 13
fsid 0b8471ac-848e-4ceb-8c97-469c327f8390
last_changed 2023-07-31T16:38:00.940392+0200
created 2023-05-14T23:50:35.830167+0200
min_mon_release 17 (quincy)
election_strategy: 1
0: [v2:172.31.128.2:3300/0,v1:172.31.128.2:6789/0] mon.vserv0002
2: [v2:172.31.128.5:3300/0,v1:172.31.128.3:6789/0] mon.vserv0003
3: [v2:172.31.128.5:3300/0,v1:172.31.128.5:6789/0] mon.vserv0005
4: [v2:172.31.128.6:3300/0,v1:172.31.128.6:6789/0] mon.vserv0006
dumped monmap epoch 13

Dann diesen nochmals löschen

ceph mon remove <mon-id>
Beispiel:
ceph mon remove vserv0003

Lösung 2:

Wenn in der mon dump unser Monitor nicht mehr drin ist, ist noch das Monitor Verzeichnis übrig geblieben.

epoch 13
fsid 0b8471ac-848e-4ceb-8c97-469c327f8390
last_changed 2023-07-31T16:38:00.940392+0200
created 2023-05-14T23:50:35.830167+0200
min_mon_release 17 (quincy)
election_strategy: 1
0: [v2:172.31.128.2:3300/0,v1:172.31.128.2:6789/0] mon.vserv0002
1: [v2:172.31.128.5:3300/0,v1:172.31.128.5:6789/0] mon.vserv0005
2: [v2:172.31.128.6:3300/0,v1:172.31.128.6:6789/0] mon.vserv0006
dumped monmap epoch 13

Auf dem Host wo der Monitor drauf war einloggen und im Verzeichnis /var/lib/ceph/mon schauen ob das Verzechnis noch da ist.
Wenn ja dieses löschen

cd /var/lib/ceph/mon
rm -r ceph-vserv0003/

Ergebnis:

Nun ist die Liste wieder korrekt

Auswahl_1026.png


Proxmox - Ceph

Nach entfernen eines Hosts bleibt in der Chrush Map der leere eintrag übrig

Beschreibung:

Nachdem man die OSD(s) den Monitor den manager , den MDS Manager gelöscht hat.
Bleibt in der Crushmap der Server stehen, halt ohne OSD(s) aber es nervt.


Auswahl_1025.png

Lösung:

Erstmal schauen ob die Node auch tatsächlich entfernt wurde.
Dieses habem wir vorher mit dem Befehl:

pvecm delnode <nodename>
Beispiel:
pvecm delnode vserv0003

gemacht.

Um zu sehen das die Node auch wirklich raus ist, rufen wir

pvecm nodes

Ausgabe:

pvecm nodes

Membership information
----------------------
    Nodeid      Votes Name
         1          1 vserv0002
         2          1 vserv0006
         3          1 vserv0005 (local)

Die Node 3 ist nicht mehr vorhanden, aber steht trotzdem noch in der Crushmap.
sollte die node doch noch drin stehen dann mit dem obigen befehl nochmals löschen.
Nun können wir den Eintrag aus der Crushmap entfernen.
nun schauen wir welche Nodes in der Crushmap sind

ceph osd tree

Ausgabe:

ceph osd tree
ID   CLASS  WEIGHT    TYPE NAME           STATUS  REWEIGHT  PRI-AFF
 -1         14.55417  root default                                 
 -5          2.91019      host vserv0002                           
  4   nvme   2.91019          osd.4           up   1.00000  1.00000
 -3                0      host vserv0003                           
 -9          5.82199      host vserv0005                           
  6   nvme   2.91100          osd.6           up   1.00000  1.00000
  7   nvme   2.91100          osd.7           up   1.00000  1.00000
-11          5.82199      host vserv0006                           
  3   nvme   2.91100          osd.3           up   1.00000  1.00000
  5   nvme   2.91100          osd.5           up   1.00000  1.00000

Dies ist die Zeile die uns interessiert

...
 -3                0      host vserv0003                           
...

nun den Eintrag löschen

ceph osd crush remove {name}
Beispiel:
ceph osd crush remove vserv0003

Dann sieht das ganze wieder so aus

 

Fertig

 

 

Proxmox - Migrationen

Proxmox - Migrationen

Proxmox VMDK oder img in VM importieren

Beschreibung:

Eine neue VM erstellen mit einer VMDK Datei oder img datei.

Vorgang:

Eine neue VM erstellen ohne DIsks. Lediglich EFI Disk wenn das System EFI Boot benötigt.
Die ID der gerade erstellten VM merken

Die VMD oder img Datei auf den Server kopieren z.b per scp.
Nun mit dem Befehl

qm disk import <vmid> <source> <storage> [OPTIONS]

Beispiel

qm disk import 100 /mnt/meinimage.vmdk data


Proxmox - Migrationen

VM im LVM/ qcow2 format auf anderen Host in ein RBD migrieren ohne zwischenspeicher via SSH

Beschreibung

Es gibt Situationen, da möchte man eine VM auf eine andere umziehen lassen. Hat aber kein USB Datenträger bzw. dieser ist zu langsam, bzw man muss vorgänge ausführen, draufkopieren wieder runterkoiperen. Auch doppelte Zeit, oder oder oder...

Es gibt die Möglichtkeit mit screen und ssh dieses zu bewältigen.

Vorraussetzungen:

Das die zu kopierende VM natürlich NICHT läuft
Auf dem Zielsystem ist das Ceph soweit vorhanden und auch eingerichtet.
Auf dem Quellsystem ist screen installiert. Befehl dazu

apt install screen

Quellsystem kann sich per ssh auf dem Zielsystem einloggen.

Vorgang

Auf dem Quellsystem Infos holen

Auf dem Quellsystem herausfinden wo unsere LVM Image liegen.
Dazu den Befehl lvs verwenden

Das LV ist sind die Diskimage und das VG die Volumegroup.
Somit wäre der Pfad im Dateisystem als Beispiel für vm-100-disk-1. Diese Disk nehmen wir auch für unserer Beispiel

/dev/datenppol/vm-100-disk-1
Ausgabe

root@vmserv:~# lvs
  LV            VG        Attr       LSize    Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  vm-100-disk-1 datenpool -wi-a-----  200.00g                                                    
  vm-101-disk-2 datenpool -wi-ao----  500.00g                                                    
  vm-101-disk-3 datenpool -wi-ao----  500.00g                                                    
  vm-101-disk-4 datenpool -wi-ao----  500.00g                                                    
  vm-101-disk-5 datenpool -wi-ao----  500.00g                                                    
  vm-101-disk-6 datenpool -wi-ao----  500.00g                                                    
  vm-101-disk-7 datenpool -wi-ao----  500.00g                                                    
  vm-101-disk-8 datenpool -wi-ao----  500.00g                                                    
  vm-102-disk-1 datenpool -wi-a-----  260.00g                                                    
  vm-102-disk-2 datenpool -wi-a-----  650.00g                                                    
  vm-103-disk-1 datenpool -wi-a-----  100.00g                                                    
  vm-104-disk-1 datenpool -wi-a-----   32.00g                                                    
  vm-105-disk-1 datenpool -wi-a-----  250.00g                                                    
  vm-105-disk-2 datenpool -wi-a-----  250.00g                                                    
  vm-106-disk-1 datenpool -wi-a-----   50.00g                                                    
  vm-107-disk-1 datenpool -wi-a-----  100.00g                                                    
  vm-108-disk-1 datenpool -wi-a-----  100.00g                                                    
  vm-111-disk-1 datenpool -wi-a-----  100.00g                                                    
  vm-112-disk-1 datenpool -wi-ao----  500.00g                                                    
  vm-112-disk-2 datenpool -wi-a----- 1000.00g                                                    
  vm-113-disk-0 datenpool -wi-a-----   50.00g                                                    
  vm-114-disk-0 datenpool -wi-a-----   50.00g                                                    
  vm-116-disk-0 datenpool -wi-a-----   32.00g                                                    
  vm-117-disk-0 datenpool -wi-a-----   16.00g                                                    
  vm-118-disk-0 datenpool -wi-a-----   32.00g                                                    
  vm-119-disk-0 datenpool -wi-a-----  250.00g                                                    
  vm-119-disk-1 datenpool -wi-a-----  250.00g                                                    
  vm-120-disk-0 datenpool -wi-a-----  128.00g                                                    
  vm-121-disk-0 datenpool -wi-a-----   20.00g                                                    
  medavol       media     -wi-a-----    3.42t                                                    
  data          pve       -wi-ao----   63.99g                                                    
  root          pve       -wi-ao----   31.75g                                                    
  swap          pve       -wi-ao----   15.88g 

Auf dem Zielsystem Infos holen

Nun auf dem Zielserver den Pool heruasfinden wo die Images hinsollen.
Dazu auf den Zielserver einloggen und den Befehl eingeben:

ceph osd pool ls

Ausgabe, in userem Beispiel nehmen wir den rbd pool

device_health_metrics
rbd
rbd_hdd
cephfs_data
cephfs_metadata

Auf dem Zielsystem die nächste freie VMID ermitteln, mittels

pvesh get /cluster/nextid

Ausgabe:
111

Somit wird die 111 die neue VM ID auf dem Zielsystem.

VM Image kopieren

Nun per ssh auf den Quellserver einloggen oder direkt am Server das ist egal.
nun einen neuen Screenauf machen

Parameter
screen -S <namedersession>

Beispiel
screen -S migrate

Nun sind wir in einer Screensitzung, damit wir zum Beispiel unseren Laptop auch ausschalten dürfen.
Denn der Kopierbefehl läuft auf dem Quellsystem jetzt in einer eigenen Session.

Jetzt den Kopierbefehl ausführen für LVM
Parameter
ssh root@<zielsystem> "rbd import --image-format 2 - <ceph_rbd_pool>/vm-<NEUE_VMIDAUF_Zielsystem>-disk-<DISKNUMMER>" < /dev/<volumegroup_von_quellsystem>/<locicalvolume_von_quellsystem>

ssh root@192.168.178.240 "rbd import --image-format 2 - rbd/vm-111-disk-0" < /dev/datenpool/vm-100-disk-1

Hinweis:
--image-format 2 ist das RAW Format
Jetzt den Kopiervorgang ausführen für qcow2
Parameter
ssh root@<zielsystem> 'rbd import --dest-pool  <ceph_rbd_pool> --image-format 2 - vm-<NEUE_VMIDAUF_Zielsystem>-disk-<DISKNUMMER>' < </pfad/zur/image.qcow2>


ssh root@192.168.178.240 'rbd import --dest-pool rbd_hdd --image-format 2 - vm-116-disk-2' < /mnt/backup/images/105/vm-105-disk-0.qcow2



WICHTIG!!!!!! Hierzu auf dem Zielserver einloggen, denn wir holen uns dann vom quellsystem das image. 
Einfach aus dem screen heraus!
WICHTIG!!!!!

Parameter
ssh root@<quellsystem>  'cat </pfad/zur/image.qcow2>' | rbd import - <ceph_rbd_pool>/vm-<NEUE_VMIDAUF_Zielsystem>-disk-<DISKNUMMER> --image-feature layering
Beispiel
ssh root@192.168.178.2 'cat /mnt/backup/images/105/vm-105-disk-0.qcow2' | rbd import - rbd_hdd/vm-116-disk-2 --image-feature layering

Nun läuft der kopiervorgang und wir können uns nun mit STRG+A gedrückt halten und dann +D von der Sitzung trennen

Ausgabe:

detached from 7763.migrate]
root@vmserv:~#

Um uns wieder mit der Sitzung zu verbinden. Wenn wir noch keine neue Promt sehen für den nächsten Befehl, kopiert er noch.

screen -r migrate

Augabe:
root@192.168.178.240's password:

Nun wieder trennen. (STRG+A gedrückt halten dann +D) zum trennen.
Ab un zu mal schauen wie weit er ist.

Ist der Vorgang abgeschlossen, gibt es diese Fertig Meldung.

Importing image: 100% complete...done.

Sollte die VM mehrere Disks haben. Den vorgang wiederholen für die nächste DISK.
Im unseren Beispiel hat die VM aber nur eine DISK.

Die VM Config Datei übertragen

per scp kann die VM Config übertragen werden.
Die Dateien werden so benannt<VMID>.conf
Egal ob es KVM VMs sind oder LXC Conateiner

 Die conf Dateien für KVM VMs in das Verzeichnis

/etc/pve/qemu-server/

und für LXC Conateiner in

/etc/pve/lxc/

Hat man ein Cluster kopiert man diese Datei auf den jeweiligen node, wo die VM dann hin soll.
Auf dem Quellsystem einloggen.
Nun der Befehl zum kopieren. In unserem Beispiel ist die vm 100 eine KVM VM

Parameter
scp /etc/pve/qemu-server/<altevmid>.conf root@<zielsystem:/etc/pve/qemu-server/<neue_vmid>.conf

Beispiel:
scp /etc/pve/qemu-server/100.conf root@<zielsystem:/etc/pve/qemu-server/111.conf

VM Conf bearbeiten

Nun ausloggen und auf dem Zielsystem einloggen und die Conf Datei bearbeiten. In unserem Beispiel die VM 111

nano /etc/pve/qemu-server/111.conf

Ausgabe:

111.conf

#IP%3A192.168.2.112
boot: cdn
bootdisk: virtio0
cores: 16
memory: 32768
name: Terminal
net0: e1000=12:4E:C7:A9:77:DD,bridge=vmbr0
numa: 0
onboot: 0
ostype: win7
sata2: local:iso/Windows10_x64_1909.iso,media=cdrom,size=4091M
sata3: local:iso/virtio-win-0.1.149.iso,media=cdrom,size=316634K
scsihw: virtio-scsi-pci
sockets: 1
virtio0: vms:vm-112-disk-1,cache=writeback,size=500G
virtio1: vms:vm-112-disk-2,cache=writeback,size=1000G

Nun den Abschnitt mit den Festplatten

...
virtio0: vms:vm-112-disk-1,cache=writeback,size=500G
...

auf unseren neuen Datastore abändern. Wir ändern hier den alten Datastore vms zu unserem neuen Datastore rbd ab

Parameter
virtio0: <neuer_datastore>:vm-<neuevmid>-disk-<disknummer>,cache=writeback,size=500G

...
virtio0: rbd:vm-111-disk-0,cache=writeback,size=500G
...

Sollten mehrere Disks vorhanden sein, dann dieses natürlich für alle Disk wiederholen. Nicht vergessen auch die Disk Nummer am ende ggf anzupassen

Den Abschnitt mit den ISOs äbaändern so das keine mher drin sind.

Vorher

...
sata2: local:iso/Windows10_x64_1909.iso,media=cdrom,size=4091M
...

Nachher

...
sata2: none,media=cdrom
...

Falls die Netzwerkbrücke noch geändert werden muss einfach die vmbr Nummer eingeben. Muss noch ein VLAN hinzugefügt werden. dann sieht das so aus, ansonsten nur die vmbr-ID ändern

Von

...
net0: e1000=12:4E:C7:A9:77:DD,bridge=vmbr0
...

Nach

Parameter
net0: e1000=12:4E:C7:A9:77:DD,bridge=vmbr<ID>,tag=<VLAN_TAG>

...
net0: e1000=12:4E:C7:A9:77:DD,bridge=vmbr0,tag=102
...

Fertig

VM Starten glücklich sein.

qm start 111










Proxmox - Migrationen

VM vom RBD auf anderen Host in ein RBD migrieren ohne zwischenspeicher via SSH

Beschreibung

Es gibt Situationen, da möchte man eine VM auf eine andere umziehen lassen. Hat aber kein USB Datenträger bzw. dieser ist zu langsam, bzw man muss vorgänge ausführen, draufkopieren wieder runterkoiperen. Auch doppelte Zeit, oder oder oder...

Es gibt die Möglichtkeit mit screen und ssh dieses zu bewältigen.

Vorraussetzungen:

Das die zu kopierende VM natürlich NICHT läuft
Auf dem Zielsystem ist das Ceph soweit vorhanden und auch eingerichtet.
Auf dem Quellsystem ist screen installiert. Befehl dazu

apt install screen

Quellsystem kann sich per ssh auf dem Zielsystem einloggen.

Vorgang

Auf dem Quellsystem Infos holen

Auf den Quellsystem die pool(s) auflisten lassen

ceph osd pool ls

Ausgabe, in userem Beispiel nehmen wir den rbd pool

.mgr
rbd
rbd_hdd
cephfs_data
cephfs_metadata

Auf dem Quellsystem herausfinden wo VM Image liegen im rbd.
Dazu den Befehl.

rbd ls -p <pool-name>

rbd ls -p rbd

verwenden

Ausgabe:

rbd ls -p rbd
vm-100-disk-0
vm-107-disk-0
vm-109-disk-0
vm-110-disk-0
vm-115-disk-0
vm-117-disk-0
vm-118-disk-0
vm-147-disk-0

Uns interessiert die vm-100-disk-0 .
Diese Disk nehmen wir auch für unserer Beispiel.
Wenn man möchte kann man sich noch weitere informationen vom image holen.
ist hier aber optional

rbd info -p <pool-name> <image-name>

Beispiel:

rbd info -p rbd vm-100-disk-0

Ausgabe:

rbd image 'vm-100-disk-0':
	size 8 GiB in 2048 objects
	order 22 (4 MiB objects)
	snapshot_count: 0
	id: 2e3255c546ee1
	block_name_prefix: rbd_data.2e3255c546ee1
	format: 2
	features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
	op_features: 
	flags: 
	create_timestamp: Thu Sep  2 14:46:13 2021
	access_timestamp: Thu Sep  2 14:46:13 2021
	modify_timestamp: Thu Sep  2 14:46:13 2021

Nun wissen wir das das Ding 8 GB groß ist und können so ne Zeitschätzung fürs kopieren machen.

Auf dem Zielsystem Infos holen

Nun auf dem Zielserver den Pool heruasfinden wo die Images hinsollen.
Dazu auf den Zielserver einloggen und den Befehl eingeben:

ceph osd pool ls

Ausgabe, in userem Beispiel nehmen wir den rbd pool

.mgr
rbd
rbd_hdd
cephfs_data
cephfs_metadata

Auf dem Zielsystem die nächste freie VMID ermitteln, mittels

pvesh get /cluster/nextid

Ausgabe:
111

Somit wird die 111 die neue VM ID auf dem Zielsystem.

VM Image kopieren

Nun per ssh auf den Quellserver einloggen oder direkt am Server das ist egal.
nun einen neuen Screenauf machen

Parameter
screen -S <namedersession>

Beispiel
screen -S migrate

Nun sind wir in einer Screensitzung, damit wir zum Beispiel unseren Laptop auch ausschalten dürfen.
Denn der Kopierbefehl läuft auf dem Quellsystem jetzt in einer eigenen Session.

Jetzt den Kopierbefehl ausführen
Parameter
rbd export rbd_hdd/vm-<QUELL_VMID>-disk-<DISKNUMMER> - | pv | ssh -C root@<zielsystem> "rbd import --image-format 2 - <ceph_rbd_pool>/vm-NEUE_VMIDAUF_Zielsystem-disk-<DISKNUMMER>"

Beispiel:
rbd export rbd_hdd/vm-100-disk-0 - | pv | ssh -C root@192.168.178.5 "rbd import --image-format 2 - rbd/vm-111-disk-0"


Hinweis:
--image-format 2 ist das RAW Format
pv -zeigt den fortschritt an
-C steht für Compression an.

Nun läuft der kopiervorgang und wir können uns nun mit STRG+A gedrückt halten und dann +D von der Sitzung trennen

Ausgabe:

detached from 7763.migrate]
root@vmserv:~#

Um uns wieder mit der Sitzung zu verbinden. Wenn wir noch keine neue Promt sehen für den nächsten Befehl, kopiert er noch.

screen -r migrate

Augabe:
root@192.168.178.240's password:

Nun wieder trennen. (STRG+A gedrückt halten dann +D) zum trennen.
Ab un zu mal schauen wie weit er ist.

Ist der Vorgang abgeschlossen, gibt es diese Fertig Meldung.

Importing image: 100% complete...done.

Sollte die VM mehrere Disks haben. Den vorgang wiederholen für die nächste DISK.
Im unseren Beispiel hat die VM aber nur eine DISK.

Die VM Config Datei übertragen

per scp kann die VM Config übertragen werden.
Die Dateien werden so benannt<VMID>.conf
Egal ob es KVM VMs sind oder LXC Conateiner

 Die conf Dateien für KVM VMs in das Verzeichnis

/etc/pve/qemu-server/

und für LXC Conateiner in

/etc/pve/lxc/

Hat man ein Cluster kopiert man diese Datei auf den jeweiligen node, wo die VM dann hin soll.
Auf dem Quellsystem einloggen.
Nun der Befehl zum kopieren. In unserem Beispiel ist die vm 100 eine KVM VM

Parameter
scp /etc/pve/qemu-server/<altevmid>.conf root@<zielsystem:/etc/pve/qemu-server/<neue_vmid>.conf

Beispiel:
scp /etc/pve/qemu-server/100.conf root@<zielsystem:/etc/pve/qemu-server/111.conf

VM Conf bearbeiten

Nun ausloggen und auf dem Zielsystem einloggen und die Conf Datei bearbeiten. In unserem Beispiel die VM 111

nano /etc/pve/qemu-server/111.conf

Ausgabe:

111.conf

#IP%3A192.168.2.112
boot: cdn
bootdisk: virtio0
cores: 16
memory: 32768
name: Terminal
net0: e1000=12:4E:C7:A9:77:DD,bridge=vmbr0
numa: 0
onboot: 0
ostype: win7
sata2: local:iso/Windows10_x64_1909.iso,media=cdrom,size=4091M
sata3: local:iso/virtio-win-0.1.149.iso,media=cdrom,size=316634K
scsihw: virtio-scsi-pci
sockets: 1
virtio0: vms:vm-100-disk-0,cache=writeback,size=500G

Nun den Abschnitt mit den Festplatten

...
virtio0: rbd:vm-100-disk-0,cache=writeback,size=500G
...

auf unseren neuen Datastore abändern. Wir ändern hier den alten Datastore vms zu unserem neuen Datastore rbd ab

Parameter
virtio0: <neuer_datastore>:vm-<neuevmid>-disk-<disknummer>,cache=writeback,size=500G

...
virtio0: rbd:vm-111-disk-0,cache=writeback,size=500G
...

Sollten mehrere Disks vorhanden sein, dann dieses natürlich für alle Disk wiederholen. Nicht vergessen auch die Disk Nummer am ende ggf anzupassen

Den Abschnitt mit den ISOs äbaändern so das keine mher drin sind.

Vorher

...
sata2: local:iso/Windows10_x64_1909.iso,media=cdrom,size=4091M
...

Nachher

...
sata2: none,media=cdrom
...

Falls die Netzwerkbrücke noch geändert werden muss einfach die vmbr Nummer eingeben. Muss noch ein VLAN hinzugefügt werden. dann sieht das so aus, ansonsten nur die vmbr-ID ändern

Von

...
net0: e1000=12:4E:C7:A9:77:DD,bridge=vmbr0
...

Nach

Parameter
net0: e1000=12:4E:C7:A9:77:DD,bridge=vmbr<ID>,tag=<VLAN_TAG>

...
net0: e1000=12:4E:C7:A9:77:DD,bridge=vmbr0,tag=102
...

Fertig

VM Starten glücklich sein.

qm start 111










Proxmox - Migrationen

P2V - Laufenden Windows per SSH in Proxmox rbd import

Beschreibung:

Migration, einen P2V Windows Machine.
Das Windows muss laufen und eine Verbindung zum Proxmox Server muss bestehen / bzw erreichbar sein per ssh.

Vorrausetzung:

Installiere Cygwin. DD ist schon drin enthalten: https://www.cygwin.com/ für Alle Benutzer installieren.
Einfach einen Mirror auswählen und weiter weiter. Alle Basis Pakete so lassen und weiter klicken.
Dort in den Paketen zusätzlich das programm pv für den Fortschritt anzeigen lassen, nachinstallieren bzw mit auswählen.

Transferrieren

Cygwin als Administrator starten

Unter /dev/disk/by-id werden die Fetsplatten aufgelistet mit den Partitionen

Mittels DD kann die Festplatte per SSH kopiert werden

dd if=/dev/disk/by-id/nvme-Samsung_SSD_980_PRO_with_Heatsink_1TB_0025_38B2_3140_4F13. bs=4M | pv | ssh -C root@192.168.178.9 "rbd import --image-format 2 --image-feature layering - data/vm-804-disk-0"

Nun wenn das Image kopiert ist eine Neue VM mit der gleichen ID erstellen und eine Festplatte als dummy.
Diese bekommt dann automatisch die disk-1 am ende.
Nun kann man in die Conf datei gehen

nano /etc/pve/qemuserver/<vmid>.conf

Den Festplatten eintrag verdoppeln.
Aus der zeiten Festplatte scsi0 dann eine 1
Und bei Festplatte scsi0 (also die erste dann aus disk-1 eine disk-0
Schon hat man zwei Laufwerke drin.

Dann in der gui die disk-1 wieder löschen so das disk-0 übrig bleibt.
nun eventuell mit einer Live CD die virtio Treiber impfen zum Beispiel mit Paragon.






Proxmox - Migrationen

P2V - Festplatte direkt am Host angeschlossen in Proxmox rbd import

Beschreibung:

Migration, einer P2V Windows Machine.
Installiert vorher noch die virtio Treiber und die Spcie Geust Tools.

Die Festplatte wird aus dem Computer / Server ausgebaut und direkt an den Server gehängt.

Dann wird die Festplatte als RBD Image ins Ceph kopiert .

Vorrausetzung:

Installiere Paket pv falls nicht vorhanden

apt install pv

Transferrieren

eine Neue VM mit der gleichen ID oder neuen ID erstellen und eine Festplatte als dummy.
Diese bekommt dann automatisch die disk-0 am ende.
Diese Festplatte wieder löschen.

Festplatte ermitteln die per USB oder direktreingehängt  wurde ermitteln.

mit 

lsblk

Festplatten auflisten lassen

Unter /dev/disk/by-id werden die Fetsplatten aufgelistet mit den Partitionen

Mittels DD kann die Festplatte per SSH kopiert werden

Die VM id anpassen und die disk nummer.

Tipp: in einer Screen Sitzung arbeiten.

dd if=/dev/disk/by-id/nvme-Samsung_SSD_980_PRO_with_Heatsink_1TB_0025_38B2_3140_4F13. bs=4M | pv | rbd import --image-format 2 --image-feature layering - data/vm-804-disk-0

Nun wenn das Image kopiert ist eine Neue VM mit der gleichen ID erstellen und eine Festplatte als dummy.
Sollten es mehrer disks sein, Eintrag kopieren die disk-1 am ende abändern.
So kommt man in die  kann man in die Conf datei

nano /etc/pve/qemuserver/<vmid>.conf

nun eventuell mit einer Live CD die virtio Treiber impfen zum Beispiel mit Paragon.






Proxmox - Migrationen

Cluster Netzwerk wechseln

Beschreibung:

Man möchte in einem Proxmox Cluster das corosync Cluster wechseln, weil man zusätzliche Netzwerkkarten verwenden möchte oder ein VXNetLan gebaut hat oder oder oder...
Auf jeden Fall möchte man neue IP-Adressen setzten.

Durchführung:

nano /etc/pve/corosync.conf

Dort die IP-Adressen bei allen Nodes austauschen

...
node {
    name: pvetest01
    nodeid: 1
    quorum_votes: 1
    ring0_addr: 10.30.0.10
  }
  node {
    name: pvetest02
    nodeid: 2
    quorum_votes: 1
    ring0_addr: 10.30.0.11
...

Wenn zwei Netzwerkkarten konfiguriert waren ist das zweite Ring Adress 1.
Also Ring Adress 0 wenn gewünscht und 1 austauschen

nodelist {
  node {
    name: vserv0005
    nodeid: 4
    quorum_votes: 1
    ring0_addr: 172.30.128.5
    ring1_addr: 172.31.128.5
  }
  node {
    name: vserv0006
    nodeid: 3
    quorum_votes: 1
    ring0_addr: 172.30.128.6
    ring1_addr: 172.31.128.6
  }
  node {
    name: vserv0007
    nodeid: 1
    quorum_votes: 1
    ring0_addr: 172.30.128.7
    ring1_addr: 172.31.128.7

und die Versionsnummer weiter unten um eine erhöhen
Versionsnummer erhöhen, alt war 4 neu ist dann eine weiter 5

totem {
  cluster_name: hackertest
  config_version: 5
  interface {
    linknumber: 0

Nun in der Hosts Datei den proxmox DNS Namen auf die neue Clusteradresse anpassen.
Alt 192.168.178.2 wurde zu 10.30.10.10. Danach die Hosts neustarten wichtig!

127.0.0.1 localhost.localdomain localhost
10.30.10.10 pvetest01.hacker.local pvetest01

Hier die Neue Ansicht, alle Quorate mit den neuen Adressen. In diese Beispiel gab es nur link 0 und kein Link 1 dazu

Auswahl_316.png

Proxmox - erweiterte Netzwerkeinstellungen

Proxmox - erweiterte Netzwerkeinstellungen

Infiniband

Beschreibung

Infiband Karten sind eine günstige Lösung um schnelles Ethernet zu bauen. Eigentlich sind die Karten urspürnglich dazu angedacht SANs bereitzustellen, aber wir können uns dieses auch als 40 GBit Netzwerk zu nutze machen.

Vorraussetzungen:

Infiniband Karten
Infiniband switch
Infiband Kabel

Installation

Insalltallation Infiniband Karte

Installieren der Tools
apt-get install infiniband-diags ibutils iperf ethtool

Nun laden wir die Module

modprobe ib_ipoib
modprobe ib_umad

Je nach System heißen die Adapter anders.
Um zu sehen ob die Treiber geladen wurden dann je nach System

ip a | grep ib0 
ip a | grep ib1

oder

ip a | grep ibp

Sieht die Ausgabe dann so aus (entweder mit ib0 oder ib1 oder halt diese...

ip a | grep ibp
13: ibp6s16: <BROADCAST,MULTICAST> mtu 4092 qdisc noop state DOWN group default qlen 256
14: ibp6s16d1: <BROADCAST,MULTICAST> mtu 4092 qdisc noop state DOWN group default qlen 256

!!!!Hinweis, sollte kine ib0 oder ipb aufgelistet sein laufen die Karten eventuell im Ethernet modus!!!

$ ip a
# InfiniBand Mode
4: ibp129s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 2044 qdisc mq state UP group default qlen 256
    link/infiniband ...
    inet 192.168.7.100/24 brd 192.168.7.255 scope global ibp129s0
       valid_lft forever preferred_lft forever

# Ethernet Mode
7: ens1f1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether ...
    inet 10.200.0.1/24 brd 10.200.0.255 scope global ens1f1
       valid_lft forever preferred_lft forever

Diese dann eben der modules Datei hinzufügen, so das diese dann auch beim Systemstart geladen werden.

echo ib_umad >> /etc/modules
echo ib_ipoib >> /etc/modules
Netzwerk Setup

Die Infinibandkarten werden genauso konfiguriert wie Netzwerkkarten
nur mit dem unterschied das wir noch den Mode angeben.

In meinem Beispiel heißen die Karten (Ports) so:

ibp6s16
ibp6s16d1

#/etc/network/interfaces
auto ibp6s16
iface ibp6s16 inet static 
  address 172.30.128.75 
  netmask 255.255.240.0 
  broadcast 172.30.143.255
  pre-up echo connected > /sys/class/net/ibp6s16/mode
  mtu 65520

auto ibp6s16d1 
iface ibp6s16d1 inet static 
 address 172.31.128.75 
 netmask 255.255.240.0 
 broadcast 172.31.143.255
 pre-up echo connected > /sys/class/net/ibp6s16d1/mode
 mtu 65520

Nun die Adapter starten

ifup ibp6s16
ifup ibp6s16d1 

Nun pingen wir unsere eigene Karte an.

ping 172.30.128.75

Ausgabe, wenn das klappt ist die Konfiguration abgeschlossen.

ING 172.30.128.75 (172.30.128.75) 56(84) bytes of data.
64 bytes from 172.30.128.75: icmp_seq=1 ttl=64 time=0.017 ms
64 bytes from 172.30.128.75: icmp_seq=2 ttl=64 time=0.021 ms
^C
--- 172.30.128.75 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 0.017/0.019/0.021/0.002 ms

mit dem Befehl ibstat sehen wir den Status der und Eigenschaften der Karte (Ports)

ibstat

Ausgabe:

ibstat
CA 'mlx4_0'
	CA type: MT4099
	Number of ports: 2
	Firmware version: 2.42.5000
	Hardware version: 1
	Node GUID: 0xf4521403009871a0
	System image GUID: 0xf4521403009871a3
	Port 1:
		State: Initializing
		Physical state: LinkUp
		Rate: 40
		Base lid: 0
		LMC: 0
		SM lid: 0
		Capability mask: 0x02514868
		Port GUID: 0xf4521403009871a1
		Link layer: InfiniBand
	Port 2:
		State: Initializing
		Physical state: LinkUp
		Rate: 40
		Base lid: 0
		LMC: 0
		SM lid: 0
		Capability mask: 0x02514868
		Port GUID: 0xf4521403009871a2
		Link layer: InfiniBand
root@vserv0003:~# 

Wie man sieht bleibt der Status auf initilazing stehen, das liegt daran weil wir noch keinen Subnetmanager haben.
Einige Switche bringen auch einen SM Manager mit.
Ich empfehle aber, diesen zu deaktivieren und auf den Hosts einen SM Manager zu installieren, mit Prioritäten

Installation OPENSM Manager (Ein Manager für Subnetze)

Pakete installieren

apt-get install opensm

Nachdem der Manager installiert ist, ist der Status der Karten aktiv.

Ausgabe ibstat

ibstat
CA 'mlx4_0'
	CA type: MT4099
	Number of ports: 2
	Firmware version: 2.42.5000
	Hardware version: 1
	Node GUID: 0xf4521403009871a0
	System image GUID: 0xf4521403009871a3
	Port 1:
		State: Active
		Physical state: LinkUp
		Rate: 40
		Base lid: 1
		LMC: 0
		SM lid: 1
		Capability mask: 0x0251486a
		Port GUID: 0xf4521403009871a1
		Link layer: InfiniBand
	Port 2:
		State: Active
		Physical state: LinkUp
		Rate: 40
		Base lid: 3
		LMC: 0
		SM lid: 1
		Capability mask: 0x0251486a
		Port GUID: 0xf4521403009871a2
		Link layer: InfiniBand

Mit dem tool ethtool sehen wir dann auch die Ethernetgeschwindigkeit.

erhtool ibp6s16

Ausgabe:

Settings for ibp6s16:
	Supported ports: [  ]
	Supported link modes:   Not reported
	Supported pause frame use: No
	Supports auto-negotiation: No
	Supported FEC modes: Not reported
	Advertised link modes:  Not reported
	Advertised pause frame use: No
	Advertised auto-negotiation: No
	Advertised FEC modes: Not reported
	Speed: 40000Mb/s
	Duplex: Full
	Auto-negotiation: on
	Port: Other
	PHYAD: 255
	Transceiver: internal
	Link detected: yes

Wenn man als Manager redunanz haben möchte, sollte auf jedem Node der Infiniband nutzt, opensm installiert sein.
Denn startet ein Host neu, ist das Netzwerk ohne Subnetmanager.
Selbst wenn man nur einen Host hat, kann man diesen schon konfigurieren.

Bei jedem Server muss die Priorität geandert werden.

Die Prioritäten gehen von 0-15
Die höchste übernimmt.
Das heißt den ersten Server konfigurieren wir mit 15 dann 14 usw. Das heit es können maximal 16 Manager in einem Netz sein.
Eine Redunandanz von MAx 16 sollte eigentlich reichen.

Nun die Konfig erstellen auf der ersten Node

opensm --create-config /etc/opensm/opensm.conf

Ausgabe:

-------------------------------------------------
OpenSM 3.3.23
Command Line Arguments:
 Creating config file template '/etc/opensm/opensm.conf'.
 Log File: /var/log/opensm.log
-------------------------------------------------

Priorität in der config ändern. Bei Server 1 der Wert 15. Bei Server 2 = 14 und bei Server 3 = 13

nano /etc/opensm/opensm.conf

Dort in der nähne von Zeile 258 die Prio ändern.

# SM priority used for deciding who is the master
# Range goes from 0 (lowest priority) to 15 (highest).
sm_priority 15

Nun den Manager neustarten

service opensm restart

Möchte man unbedingt die ausgabe sehen dann folgenden Befehl verwenden
opensm -B

Ausgabe:

-------------------------------------------------
OpenSM 3.3.23
 Reading Cached Option File: /etc/opensm/opensm.conf
 Loading Cached Option:sm_priority = 15
Command Line Arguments:
 Daemon mode
 Log File: /var/log/opensm.log
-------------------------------------------------

Mit dem Befehl sehen wir folgende.

ibdiagnet

Ausgabe:

oading IBDIAGNET from: /usr/lib/x86_64-linux-gnu/ibdiagnet1.5.7
-W- Topology file is not specified.
    Reports regarding cluster links will use direct routes.
Loading IBDM from: /usr/lib/x86_64-linux-gnu/ibdm1.5.7
-W- A few ports of local device are up.
    Since port-num was not specified (-p option), port 1 of device 1 will be
    used as the local port.
-I- Discovering ... 3 nodes (1 Switches & 2 CA-s) discovered.


-I---------------------------------------------------
-I- Bad Guids/LIDs Info
-I---------------------------------------------------
-I- No bad Guids were found

-I---------------------------------------------------
-I- Links With Logical State = INIT
-I---------------------------------------------------
-I- No bad Links (with logical state = INIT) were found

-I---------------------------------------------------
-I- General Device Info
-I---------------------------------------------------

-I---------------------------------------------------
-I- PM Counters Info
-I---------------------------------------------------
-I- No illegal PM counters values were found

-I---------------------------------------------------
-I- Fabric Partitions Report (see ibdiagnet.pkey for a full hosts list)
-I---------------------------------------------------
-I-    PKey:0x7fff Hosts:4 full:4 limited:0

-I---------------------------------------------------
-I- IPoIB Subnets Check
-I---------------------------------------------------
-I- Subnet: IPv4 PKey:0x7fff QKey:0x00000b1b MTU:2048Byte rate:10Gbps SL:0x00
-W- Suboptimal rate for group. Lowest member rate:40Gbps > group-rate:10Gbps

-I---------------------------------------------------
-I- Bad Links Info
-I- No bad link were found
-I---------------------------------------------------
----------------------------------------------------------------
-I- Stages Status Report:
    STAGE                                    Errors Warnings
    Bad GUIDs/LIDs Check                     0      0     
    Link State Active Check                  0      0     
    General Devices Info Report              0      0     
    Performance Counters Report              0      0     
    Partitions Check                         0      0     
    IPoIB Subnets Check                      0      1     

Please see /var/cache/ibutils/ibdiagnet.log for complete log
----------------------------------------------------------------
 
-I- Done. Run time was 0 seconds.

Um den IPoB Subnets Check zu beheben erstellen / editieren wir folgende Datei

nano /etc/opensm/partitions.conf

Und fügen folgende Zeile ein :

 Default=0x7fff, ipoib, mtu=5, rate=7, defmember=full : ALL=full, ALL_SWITCHES=full,SELF=full;

Nun sieht die Ausgabe von ibdiagnet so aus

Loading IBDIAGNET from: /usr/lib/x86_64-linux-gnu/ibdiagnet1.5.7
-W- Topology file is not specified.
    Reports regarding cluster links will use direct routes.
Loading IBDM from: /usr/lib/x86_64-linux-gnu/ibdm1.5.7
-W- A few ports of local device are up.
    Since port-num was not specified (-p option), port 1 of device 1 will be
    used as the local port.
-I- Discovering ... 3 nodes (1 Switches & 2 CA-s) discovered.


-I---------------------------------------------------
-I- Bad Guids/LIDs Info
-I---------------------------------------------------
-I- No bad Guids were found

-I---------------------------------------------------
-I- Links With Logical State = INIT
-I---------------------------------------------------
-I- No bad Links (with logical state = INIT) were found

-I---------------------------------------------------
-I- General Device Info
-I---------------------------------------------------

-I---------------------------------------------------
-I- PM Counters Info
-I---------------------------------------------------
-I- No illegal PM counters values were found

-I---------------------------------------------------
-I- Fabric Partitions Report (see ibdiagnet.pkey for a full hosts list)
-I---------------------------------------------------
-I-    PKey:0x7fff Hosts:4 full:4 limited:0

-I---------------------------------------------------
-I- IPoIB Subnets Check
-I---------------------------------------------------
-I- Subnet: IPv4 PKey:0x7fff QKey:0x00000b1b MTU:4096Byte rate:40Gbps SL:0x00

-I---------------------------------------------------
-I- Bad Links Info
-I- No bad link were found
-I---------------------------------------------------
----------------------------------------------------------------
-I- Stages Status Report:
    STAGE                                    Errors Warnings
    Bad GUIDs/LIDs Check                     0      0     
    Link State Active Check                  0      0     
    General Devices Info Report              0      0     
    Performance Counters Report              0      0     
    Partitions Check                         0      0     
    IPoIB Subnets Check                      0      0     

Please see /var/cache/ibutils/ibdiagnet.log for complete log
----------------------------------------------------------------
 
-I- Done. Run time was 0 seconds.

Fertig.


Test der Geschwindigkeit

Mittels iperf testen wir die Kopiergeschwindigkeit im Netzwerk

Wir haben hier in unserem beispiel zwei IP-Adressen

172.30.128.75
172.30.128.76

wir brauchen dazu zwei SSH Terminalsitzungen.
Einmal auf Server A  und auf Server B
in der einen starten wir den iperf Server (der mit der 75)

iperf -s

und in dem anderen (der mit 76) den client zum verbinden
Der Parameter -t geben an wie lange der Test laufen soll. Hier 20 Sekunden
Der Parameter -c gibt die IP Adressen des iperf Servers an

iperf -t 20 -c 172.30.128.75
------------------------------------------------------------
Client connecting to 172.30.128.75, TCP port 5001
TCP window size: 2.50 MByte (default)
------------------------------------------------------------
[  3] local 172.30.128.75 port 54800 connected with 172.30.128.75 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3] 0.0000-20.0000 sec   125 GBytes  53.5 Gbits/sec















Proxmox - erweiterte Netzwerkeinstellungen

Infiniband Mode IB/EN ändern

Beschreibung:

Infiniband Karten haben zwei Modi IB und EN.
Diese können mit den Originaltreibern, also nicht out of the box Treibern geändert werden.
Wir installieren hier eine KVM VM mit Debian, schleifen die Karte durch und ändern dann den mode.

Vorraussetzung:

Eeine Umgebung die Hardware in eine VM durchschleifen kann und eine Debian VM.
Sollte das nicht möglich sein, dann Bare Metal auf einer einzelnen kleinen Festplatte Debian installieren.

Für Mellanox Karten 4 Debian Bullseye
Für Mellanox Karten 3 Debian Buster

Installation der Treiber

Per SSH Einloggen mit root.

Treiber gibts hier: https://network.nvidia.com/products/infiniband-drivers/linux/mlnx_ofed/

Installation Mellanox 3 Karten Debian Buster

Auswahl_126.png

Dann die EULA Akzeptieren , downloaden.
Dann im Firefox Downloadfentser die URL kopieren und dann per wget einfügen.
Ich habe den link schon mal gepostet. Ist dann alerrdings die Version zur Erstellung des Artikels.

Dann per wget die Treiber downloaden und entpacken im Home Verzeichnis

wget https://content.mellanox.com/ofed/MLNX_OFED-4.9-6.0.6.0/MLNX_OFED_LINUX-4.9-6.0.6.0-debian10.0-x86_64.tgz
tar -xf MLNX_OFED_LINUX-4.9-6.0.6.0-debian10.0-x86_64.tgz

Da die Treiber für Bullsee 10.0 sind, müssen wir in der Textdatei die Debian Datei anpassen

nano /etc/debian_version

Dort dann auf Debian 10.0 abändern

cd MLNX_OFED_LINUX-4.9-6.0.6.0-debian10.0-x86_64/
./mlnxofedinstall

Ausgabe, mi Y bestätigen und Dann wird eine Batterie an Paketen installiert

Do you want to continue?[y/N]:y

Checking SW Requirements...
One or more required packages for installing MLNX_OFED_LINUX are missing.
/lib/modules/5.10.0-23-amd64/build/scripts is required for the Installation.
Attempting to install the following missing packages:
libgfortran5 graphviz autoconf pkg-config linux-headers-5.10.0-23-amd64 flex automake ethtool make swig libnuma1 autotools-dev libnl-route-3-200 libltdl-dev libnl-3-200 quilt python3-distutils tcl m4 chrpath libc6-dev libnl-3-dev libnl-route-3-dev debhelper dkms dpatch gfortran bison gcc tk
Removing old packages...
Installing new packages
Installing ofed-scripts-5.8...
Installing mlnx-tools-5.2.0...
Installing mlnx-ofed-kernel-utils-5.8...
Installing mlnx-ofed-kernel-dkms-5.8...
Installing iser-dkms-5.8...
Installing isert-dkms-5.8...
Installing srp-dkms-5.8...
Installing rdma-core-58mlnx43...
Installing libibverbs1-58mlnx43...
Installing ibverbs-utils-58mlnx43...
Installing ibverbs-providers-58mlnx43...
Installing libibverbs-dev-58mlnx43...
Installing libibverbs1-dbg-58mlnx43...
Installing libibumad3-58mlnx43...
Installing libibumad-dev-58mlnx43...
Installing ibacm-58mlnx43...
Installing librdmacm1-58mlnx43...
Installing rdmacm-utils-58mlnx43...
Installing librdmacm-dev-58mlnx43...
Installing mstflint-4.16.1...
Installing ibdump-6.0.0...
Installing libibmad5-58mlnx43...
Installing libibmad-dev-58mlnx43...
Installing libopensm-5.13.0.MLNX20221016.10d3954...
Installing opensm-5.13.0.MLNX20221016.10d3954...
Installing opensm-doc-5.13.0.MLNX20221016.10d3954...
Installing libopensm-devel-5.13.0.MLNX20221016.10d3954...
Installing libibnetdisc5-58mlnx43...
...

Ausgabe Installation beendet.
Falls wir eine Firmware flashen müssen, sollten wir uns die PSID notieren

Initializing...
Attempting to perform Firmware update...
Querying Mellanox devices firmware ...

Device #1:
----------

  Device Type:      ConnectX3
  Part Number:      MCX354A-FCB_A2-A5
  Description:      ConnectX-3 VPI adapter card; dual-port QSFP; FDR IB (56Gb/s) and 40GigE; PCIe3.0 x8 8GT/s; RoHS R6
  PSID:             MT_1090120019
  PCI Device Name:  00:10.0
  Port1 MAC:        f45214990bb1
  Port2 MAC:        f45214990bb2
  Versions:         Current        Available     
     FW             2.11.1308      2.42.5000     
     PXE            N/A            3.4.0752      

  Status:           Update required

---------
Found 1 device(s) requiring firmware update...

Device #1: Updating FW ...     
Done

Restart needed for updates to take effect.
Log File: /tmp/cL0XrUvJzc
Real log file: /tmp/MLNX_OFED_LINUX.515.logs/fw_update.log
Device (00:10.0):
	00:10.0 Network controller: Mellanox Technologies MT27500 Family [ConnectX-3]
	Link Width: x8
	PCI Link Speed: 8GT/s

Installation passed successfully
To load the new driver, run:
/etc/init.d/openibd restart

Installation Mellanox 4 Karten Debian Bullseye

Dann die EULA Akzeptieren , downloaden.
Dann im Firefox Downloadfentser die URL kopieren und dann per wget einfügen.
Ich habe den link schon mal gepostet. Ist dann alerrdings die Version zur Erstellung des Artikels.

Dann per wget die Treiber downloaden und entpacken im Home Verzeichnis

wget https://content.mellanox.com/ofed/MLNX_OFED-5.8-2.0.3.0/MLNX_OFED_LINUX-5.8-2.0.3.0-debian11.3-x86_64.tgz
tar -xf MLNX_OFED_LINUX-5.8-2.0.3.0-debian11.3-x86_64.tgz

Da die Treiber für Bullsee 11.3 sind, müssen wir in der Textdatei die Debian Datei anpassen

nano /etc/debian_version

Dort dann auf Debian 11.3 abändern

Nun in das Verzeichnis gehen und Treiber installieren

cd MLNX_OFED_LINUX-5.8-2.0.3.0-debian11.3-x86_64/
./mlnxofedinstall --skip-unsupported-devices-check

Ausgabe, mi Y bestätigen und Dann wird eine Batterie an Paketen installiert

Do you want to continue?[y/N]:y

Checking SW Requirements...
One or more required packages for installing MLNX_OFED_LINUX are missing.
/lib/modules/5.10.0-23-amd64/build/scripts is required for the Installation.
Attempting to install the following missing packages:
libgfortran5 graphviz autoconf pkg-config linux-headers-5.10.0-23-amd64 flex automake ethtool make swig libnuma1 autotools-dev libnl-route-3-200 libltdl-dev libnl-3-200 quilt python3-distutils tcl m4 chrpath libc6-dev libnl-3-dev libnl-route-3-dev debhelper dkms dpatch gfortran bison gcc tk
Removing old packages...
Installing new packages
Installing ofed-scripts-5.8...
Installing mlnx-tools-5.2.0...
Installing mlnx-ofed-kernel-utils-5.8...
Installing mlnx-ofed-kernel-dkms-5.8...
Installing iser-dkms-5.8...
Installing isert-dkms-5.8...
Installing srp-dkms-5.8...
Installing rdma-core-58mlnx43...
Installing libibverbs1-58mlnx43...
Installing ibverbs-utils-58mlnx43...
Installing ibverbs-providers-58mlnx43...
Installing libibverbs-dev-58mlnx43...
Installing libibverbs1-dbg-58mlnx43...
Installing libibumad3-58mlnx43...
Installing libibumad-dev-58mlnx43...
Installing ibacm-58mlnx43...
Installing librdmacm1-58mlnx43...
Installing rdmacm-utils-58mlnx43...
Installing librdmacm-dev-58mlnx43...
Installing mstflint-4.16.1...
Installing ibdump-6.0.0...
Installing libibmad5-58mlnx43...
Installing libibmad-dev-58mlnx43...
Installing libopensm-5.13.0.MLNX20221016.10d3954...
Installing opensm-5.13.0.MLNX20221016.10d3954...
Installing opensm-doc-5.13.0.MLNX20221016.10d3954...
Installing libopensm-devel-5.13.0.MLNX20221016.10d3954...
Installing libibnetdisc5-58mlnx43...
...

Ändern des Modes IB/EN

Karte anzeigen lassen

mst start
mst status

Ausgabe:

ST modules:
------------
    MST PCI module loaded
    MST PCI configuration module loaded

MST devices:
------------
/dev/mst/mt4099_pciconf0         - PCI configuration cycles access.
                                   domain:bus:dev.fn=0000:00:10.0 addr.reg=88 data.reg=92 cr_bar.gw_offset=-1
                                   Chip revision is: 01
/dev/mst/mt4099_pci_cr0          - PCI direct access.
                                   domain:bus:dev.fn=0000:00:10.0 bar=0xfea00000 size=0x100000
                                   Chip revision is: 01

Unsere karte ist die /dev/mst/mt4099_pciconf0

Nun den aktuellen Modi ausgeben

mlxburn -d /dev/mst/mt4099_pciconf0 -query

Ausgabe:


Modi Ändern:

Ersetzen Sie mt4099_pciconf0 mit dem Namen Ihres Geräts. Der Wert 2 setzt den Modus auf InfiniBand. Der Wert 1 würde den Modus auf Ethernet setzen.

mlxconfig -d /dev/mst/mt4099_pciconf0 set LINK_TYPE_P1=2 LINK_TYPE_P2=2

Sollte folgender Fehler kommen, dann muss ide Karte mit einer neuen Firmware versehen werden.

-E- Device doesn't support LINK_TYPE_P1 configuration 


Firmware Update

Dazu auf https://network.nvidia.com/support/firmware/firmware-downloads/

Dort seine Karte raussuchen und dort dann drauf klicken, ob Infiband oder Entehrnetfirmware.
In unserem Beispiel nehem Ich Infiniband, da ich ein Infinibandswitch habe.

Auswahl_127.png



Dann auf eure Karte mit-FCBT klicken. Ich habe eine MCX354A-Karte
Denn die Karten haben verschiedene Geschwindigkiten, wir wollen volle Pulle.

MCX354A-QCBT = 10 Gbit Ethernet // 40 Gbit Infiniband
MCX354A-FCBT = 40 Gbit Ethernet // 56 Gbit Infiniband


Dann die Datei herunterladen

Auswahl_128.png

Und dann wieder die URL in die zwischenablage kopieren für WGET
Vorher aber noch unzip installieren

apt install unzip
wget https://content.mellanox.com/firmware/fw-ConnectX3-rel-2_42_5000-MCX354A-FCB_A2-A5-FlexBoot-3.4.752.bin.zip

Die Karte herausbekommen,

mst start
mst status

Ausgabe

MST modules:
------------
    MST PCI module loaded
    MST PCI configuration module loaded

MST devices:
------------
/dev/mst/mt4099_pciconf0         - PCI configuration cycles access.
                                   domain:bus:dev.fn=0000:00:10.0 addr.reg=88 data.reg=92 cr_bar.gw_offset=-1
                                   Chip revision is: 01
/dev/mst/mt4099_pci_cr0          - PCI direct access.
                                   domain:bus:dev.fn=0000:00:10.0 bar=0xfea00000 size=0x100000
                                   Chip revision is: 01

Nun haben wir das Gerät /dev/mst/mt4099_pciconf0  und /dev/mst/mt4099_pci_cr0

nun die Firmware ermitteln

flint -d /dev/mst/mt4099_pciconf0 query

Ausgabe:

Image type:            FS2
FW Version:            2.42.5000
FW Version(Running):   2.11.1308
FW Release Date:       5.9.2017
Product Version:       02.42.50.00
Rom Info:              type=PXE version=3.4.752
Device ID:             4099
Description:           Node             Port1            Port2            Sys image
GUIDs:                 f45214030098ff20 f45214030098ff21 f45214030098ff22 f45214030098ff23 
MACs:                                       f4521498ff21     f4521498ff22
VSD:                   
PSID:                  MT_1090120019
root@mellanoxflash:~/MLNX_OFED_LINUX-4.

Nun die eigentliche Firmware flashen dazu das device /dev/mst/mt4099_pci_cr0 angeben.
-allow_psid_change ändert die PSID falls Eure Karte nicht die gleiche wie die Firmware hat.

flint  -d /dev/mst/mt4099_pci_cr0 -i fw-ConnectX3-rel-2_42_5000-MCX354A-FCB_A2-A5-FlexBoot-3.4.752.bin -allow_psid_change burn








Proxmox - Upgrade Fehler

Proxmox - Upgrade Fehler

Fehler :  pve-firmware : Kollidiert mit: firmware-linux-free aber 20200122-1 soll installiert werden

Beschreibung:

Beim

apt get upgrade

  erhalten wir folgenden Fehler:

Die folgenden Pakete haben unerfüllte Abhängigkeiten:
 pve-firmware : Kollidiert mit: firmware-linux-free aber 20200122-1 soll installiert werden
E: Beschädigte Pakete

 

Lösung:

Es sieht danach aus als wenn noch ein Stock Kernel image installiert ist.
Mit folgendem Befehl lassen sich alle installierten Kernel auflisten

dpkg --list | grep linux-image

Ausgabe:

rc  linux-image-4.19.0-10-amd64          4.19.132-1                     amd64        Linux 4.19 for 64-bit PCs (signed)
rc  linux-image-4.19.0-12-amd64          4.19.152-1                     amd64        Linux 4.19 for 64-bit PCs (signed)
rc  linux-image-4.19.0-13-amd64          4.19.160-2                     amd64        Linux 4.19 for 64-bit PCs (signed)
ii  linux-image-4.19.0-14-amd64          4.19.171-2                     amd64        Linux 4.19 for 64-bit PCs (signed)
ii  linux-image-4.19.0-21-amd64          4.19.249-2                     amd64        Linux 4.19 for 64-bit PCs (signed)
ii  linux-image-5.10.0-18-amd64          5.10.140-1                     amd64        Linux 5.10 for 64-bit PCs (signed)
ii  linux-image-5.10.0-20-amd64          5.10.158-2                     amd64        Linux 5.10 for 64-bit PCs (signed)
ii  linux-image-amd64                    5.10.158-2                     amd64        Linux for 64-bit PCs (meta-package)

Alle die im am Anfang ii stehen haben deinstallieren.

apt remove linux-image-4.19.0-14-amd64 linux-image-4.19.0-21-amd64 linux-image-5.10.0-18-amd64 linux-image-5.10.0-20-amd64 linux-image-amd64  

Dann das upgrade noch mal starten und läuft

 

 

 

 

VDI mit Spice

VDI mit Spice

Vorebereitung in Proxmox

Beschreibung:

Damit VDI in Proxmox funktioniert müssen dem entsprechend die VM und User angelegt werden.
Denn jeder darf ja nur seine VDI benutzen.

Proxmox User; Gruppen Rollen:

Als Erstes legen wir eine Rolle  an mit dem Namen VDIClients

Dazu melden wir uns am proxmox an, gehen unter Datacenter -> Permission -> Roles und klciken dort auf Create

Auswahl_385.png

Nun vergeben wir den Namen und wählen die Rollen aus:
Name: VDIClients
Rollen: VM.Console, VM.PowerMgmt, VM.Audit
und klicken auf Create

Auswahl_387.png

Nun kann man sich überlegen ob man eine Gruppe erstellen will, wo die Benutzer rein kommen, oder Einzelne Benutzer.
Sollen mehrere Benutzer eine oder mehrer VMS Benutzen, macht ne Gruppe Sinn.
Soll jeder nur seine eigene Maschine benutzen, machen tatsächlich nur Benutzer Sinn.
Das verfahren ist bei allen Gleich entweder an die Maschine wird gleich nur ein Benutzer oder eine Gruppe Hin zugewiesen.

Gruppen werden unter Permission Gruppen angelgt und dort die Benutzer hinzugewiesen und Benutzer werden unter Permissions Users hinzugefügt

Wenn Gruppen gewünscht sind, erst die Gruppe erstellen dann die Benutzer.

Einen Benutzer hinzufügen:

Unter Datacenter -> Permission -> Users auf Create klicken.

Wichtig das als Realm Proxmox VE ausgewählt und NICHT PAM.

Dann Benutzername ausfüllen Passwort,
Gruppe nur auswählen, wenn auch eine genutzt werden soll die vorher erstellt wurde, sonst leer lassen.
Ein Kommentar reinschreiben z.b Vorname Nachname.
Dann den Vornamen, Nachname Emailadresse ausfüllen und Auf create klicken.

Auswahl_388.png

Nun haben wir den Benutzer in unserer Liste.

Die VM Vorbereiten

Wir haben unsere VM schon fertig installiert, wenn noch nicht dann eine aufsetzten.
Nachdem diese aufgesetzt ist muss ide Grafikkarte auf Spice umgestellt werden.

Dort wählen wir spice aus und wie viele Monitore am Client dranhängen wenn Multimonitor gewünscht ist.
bei einem Monitor einfach Spice auswählen, ansonsten mit der Anzahl der Monitore.
Es können bis  zu 4 Monitore angesprochen werden.
Den Speicher stellen wir auf 128MB ein.
Da ich zwei Monitore betreibe hab ich zwei ausgewählt.
Danach muss die Maschine gestoppt und neu gestartet werden(soft neustart reicht nicht, also Kalt start)
Sollet man noch an den Spice Erweiterungen im nächsten schritt was ändern kann man sich das Stoppen sparen, denn da muss die Maschine auch gestoptt gestartet werden.

Auswahl_389.png

Unter optionen der VM kann man noch Spice erweiterungen Einstellen z.b Verzeichnis Teilen (wie bei Vritualbox oder RDP) und welcher filter eingestellt werden soll, falls Video Streaming betrieben wird.
Den filter hab ich auf all gestellt.
Auch hier muss die Maschine gestoppt und neu gestartet werden(soft neustart reicht nicht, also Kalt start)

Auswahl_390.png

Falls Folder Sharing eingeschaltet ist, stelle sicher, dass der WebDAV-Dienst in deinem Gastsystem aktiviert und in Betrieb ist. Unter Windows wird er als Spice WebDAV-Proxy bezeichnet. Unter Linux heißt er spice-webdavd, kann aber je nach Distribution unterschiedlich sein.

Wenn der Dienst läuft, überprüfe den WebDAV-Server, indem du http://localhost:9843 in einem Browser in deinem Gastsystem öffnest. Die installation dazu findest u in diesem Kapitel.

Nun zum Schluss weisen wir den Benutzer der VM zu

Menü_010.png

Nun wählen wir unseren User aus und die VDIClients Role klicken auf add, fertig.

Auswahl_391.png

Proxmox vorbereitung ist damit abgeschlossen.

 

VDI mit Spice

VDI Client unter Windows einrichten

Beschreibung:

Spice ist eingerichtet, die Benutzer sind angelegt, Jetzt kann der VDI CLient auf dem Client installiert werden.
Hier für Windows

Installation:

Den Spice wird Manager installieren.
Dazu auf : https://virt-manager.org/download.html gehen Dort unter Virt Viewer sind die Downloads ein bisschen versteckt.
Für x86 Windows und x64 Windows, da wir Windows 10 als Client haben nehmen wir Winx64

Auswahl_392.png

Nach dem wir den virt-viewer installiert haben. brauchen wir den VDI Client, den bekommen wir unter 

https://github.com/joshpatten/PVE-VDIClient/releases 

Dort die MSI Downloaden und installieren.
Google Chrome blockt die Datei. Mit Edge runterladen

2024-05-05 16_14_41-Releases · joshpatten_PVE-VDIClient.png

Nun Einfach den Wizzard durchklicken

01.png

Akzeptieren und weiter

02.png

Alles bei Standard lassen und weiter

03.png

Auf installieren und dann ja anklciken

04.png

Fertig

05.png

Die Client INI anpassen.

Der PVE VDI Client benötigt eine vdiclient.ini. Er sucht automatisch nach der Datei in:

c:\users\<deinbenutzername>\AppData\Roaming\VDIClient\vdiclient.ini

oder mann kann diese in der Verknüpfung auch als Paramter übergeben mit --config

"C:\Program Files\VDIClient\vdiclient.exe" --config .\vdiclient.ini     # ini im aktuellen Verzeichnis


Hier gibts ein Beispiel was alles eingestellt werden kann:

https://github.com/joshpatten/PVE-VDIClient/blob/main/vdiclient.ini.example

Hier eine Minimalistische Config:

[General]
#Hier kann man einen Title einstellen
title = VDI Login
#Das Theme wählen
theme = LightBlue
#icons und Logo lass ich besi standard
icon = vdiicon.ico
logo = vdiclient.png
kiosk = False
inidebug = False
[Authentication]
#das backend ist pve nicht pam
auth_backend = pve
#wer zwei wege auth hat muss das aktivieren also auf treu stellen
auth_totp = false
#da ich kein lets encrypt zert habe, auf false, wer ein richtig gültiges Cert hat, also nicht selbsigniert auf treu stellen
tls_verify = false
#der PVE host mit port
[Hosts]
192.168.178.x = 8006
[AdditionalParameters]
#ich möchte USB Geräte drin nhaben, deshalb usb sharing
# Enable USB passthrough
enable-usbredir = true
# Enable auto USB device sharing
enable-usb-autoshare = true

 Einloggen:

Die Verknüpfung starten

06.png

Benutzername Kennwort eingeben

07.png

Bei der Virtellen Machine die man haben möchte (Hier haben wir nur eine) auf connect klicken

08.png

Nun Auf Connect klicken, verbunden