# Proxmox VE

# 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 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

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

### <span style="text-decoration: underline;">Cronjob erstellen</span>

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

```shell
nano /etc/cron.d/deletepbslog
```

und folgenden Inhalt einfügen.

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

# 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 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](https://wiki.hacker-net.de/uploads/images/gallery/2023-12/scaled-1680-/9zxwl3PhM25t4CH8-auswahl-1131.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-12/9zxwl3PhM25t4CH8-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](https://wiki.hacker-net.de/uploads/images/gallery/2023-12/scaled-1680-/JGywhX3Wt5xoAKBU-auswahl-1132.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-12/JGywhX3Wt5xoAKBU-auswahl-1132.png)

Die Task Log Ausgabe:

[![Auswahl_1133.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-12/scaled-1680-/3TUDFjfYIzXp6pNE-auswahl-1133.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-12/3TUDFjfYIzXp6pNE-auswahl-1133.png)

Er sichert wieder.  
Fertig

# 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](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/scaled-1680-/syrauG7AngNlQi5N-auswahl-733.png)](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/syrauG7AngNlQi5N-auswahl-733.png)  
    Sprache wählen, Ich bevorzuge Deutsch  
    [![Auswahl_734.png](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/scaled-1680-/pfSUzm90hS6c2m1G-auswahl-734.png)](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/pfSUzm90hS6c2m1G-auswahl-734.png)  
    Sprache auswählen, ich wähle hier Deutsch:  
    [![Auswahl_735.png](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/scaled-1680-/GOOv9X3KNNSOkw0i-auswahl-735.png)](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/GOOv9X3KNNSOkw0i-auswahl-735.png)  
    Tastatursprache wählen  
    [![Auswahl_736.png](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/scaled-1680-/yIrYKmkvgRp7wtbz-auswahl-736.png)](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/yIrYKmkvgRp7wtbz-auswahl-736.png)  
    Rechner / Hostname vergeben  
    [![Auswahl_737.png](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/scaled-1680-/1NSFpqmesh9ITxod-auswahl-737.png)](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/1NSFpqmesh9ITxod-auswahl-737.png)  
    Domainnamen festlegen  
    [![Auswahl_738.png](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/scaled-1680-/ORfueHmjNVPJTKAO-auswahl-738.png)](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/ORfueHmjNVPJTKAO-auswahl-738.png)  
    Root Passwort festlegen und wiederholen  
    [![Auswahl_739.png](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/scaled-1680-/I28jjOROFAVqVyDO-auswahl-739.png)](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/I28jjOROFAVqVyDO-auswahl-739.png)  
    neuen Admin Benutzer erstellen z.b administrator  
    [![Auswahl_740.png](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/scaled-1680-/imrGDWEIFbtkZmwD-auswahl-740.png)](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/imrGDWEIFbtkZmwD-auswahl-740.png)  
    Benutzername angeben z.b administrator, wird auch vorgeschalgen  
    [![Auswahl_741.png](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/scaled-1680-/5p2It18I9oQ4uZl8-auswahl-741.png)](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/5p2It18I9oQ4uZl8-auswahl-741.png)  
    Passwort vergeben und wiederholen  
    [![Auswahl_742.png](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/scaled-1680-/EZpB36saQiFz5zmp-auswahl-742.png)](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/EZpB36saQiFz5zmp-auswahl-742.png)

# 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](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/scaled-1680-/VFllxx8yzxTHLSdi-auswahl-744.png)](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/VFllxx8yzxTHLSdi-auswahl-744.png)  
    Festplatte auswählen  
    [![Auswahl_745.png](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/scaled-1680-/PVFjwfoyLo6WrZth-auswahl-745.png)](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/PVFjwfoyLo6WrZth-auswahl-745.png)  
    Alle Dateien auf eine Partition auswählen.   
    [![Auswahl_746.png](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/scaled-1680-/3nEXIejza9Lu4787-auswahl-746.png)](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/3nEXIejza9Lu4787-auswahl-746.png)  
    Änderungen speichern und schreiben  
    [![Auswahl_747.png](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/scaled-1680-/adxtXBAIYCe2PJ8P-auswahl-747.png)](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/adxtXBAIYCe2PJ8P-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](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/scaled-1680-/S4GTop7W3X9vfS7O-auswahl-749.png)](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/S4GTop7W3X9vfS7O-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](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/scaled-1680-/xCCu969EsdccqYKx-auswahl-751.png)](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/xCCu969EsdccqYKx-auswahl-751.png)  
    und noch einmal  
    [![Auswahl_752.png](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/scaled-1680-/0AW7khz5HeDuxwcw-auswahl-752.png)](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/0AW7khz5HeDuxwcw-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](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/scaled-1680-/ctJTSlU5dnxJjRuM-auswahl-753.png)](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/ctJTSlU5dnxJjRuM-auswahl-753.png)  
    mit dem Wert max die gesamten Speicher für die Volumegroup nehmen  
    [![Auswahl_754.png](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/scaled-1680-/AqzKhlwg2IQZMbP8-auswahl-754.png)](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/AqzKhlwg2IQZMbP8-auswahl-754.png)  
    Partionierung durchführen und Anderungen speichern  
    [![Auswahl_755.png](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/scaled-1680-/ozYkTCjlkF9zv4tp-auswahl-755.png)](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/ozYkTCjlkF9zv4tp-auswahl-755.png)  
    Änderungen auf Festplatten schreiben Ja  
    [![Auswahl_756.png](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/scaled-1680-/OyZDOFidfWEfoabs-auswahl-756.png)](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/OyZDOFidfWEfoabs-auswahl-756.png)  
    Festplatte wird formatiert und Installation Grundsystem  
    [![Auswahl_757.png](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/scaled-1680-/yFMEp3gRdvhrICZh-auswahl-757.png)](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/yFMEp3gRdvhrICZh-auswahl-757.png)  
    [![Auswahl_758.png](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/scaled-1680-/Ys3Z3fd6uAvcy9x2-auswahl-758.png)](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/Ys3Z3fd6uAvcy9x2-auswahl-758.png)  
    Weiteres installationsmedium verwenden? Nein  
    [![Auswahl_760.png](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/scaled-1680-/0ln3vJy0SJ9MgKrQ-auswahl-760.png)](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/0ln3vJy0SJ9MgKrQ-auswahl-760.png)  
    Sprache Paketmanager, hier Deutsch  
    [![Auswahl_761.png](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/scaled-1680-/VYU6nMcEjLsRsZTT-auswahl-761.png)](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/VYU6nMcEjLsRsZTT-auswahl-761.png)  
    Archiv Server auswählen, debian.org  
    [![Auswahl_762.png](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/scaled-1680-/oCgvtFG0m1kNboQI-auswahl-762.png)](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/oCgvtFG0m1kNboQI-auswahl-762.png)  
    Proxy angeben, wenn vorhanden, hier haben wir keinen Proxy  
    [![Auswahl_763.png](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/scaled-1680-/tDtqiwYMS8aZ9bEQ-auswahl-763.png)](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/tDtqiwYMS8aZ9bEQ-auswahl-763.png)  
    APT wird konfiguriert und software auswählen und installieren, simply wait  
    [![Auswahl_764.png](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/scaled-1680-/jHuRK26bhWLH7U5a-auswahl-764.png)](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/jHuRK26bhWLH7U5a-auswahl-764.png)  
    [![Auswahl_765.png](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/scaled-1680-/3tYaSpf1jL6bXJAN-auswahl-765.png)](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/3tYaSpf1jL6bXJAN-auswahl-765.png)  
    Paketverwendungserfassungteilnehmen. ich sag hier nein muss aber jeder selbst wissen  
    [![Auswahl_766.png](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/scaled-1680-/nrBn9FUK21QYCiF4-auswahl-766.png)](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/nrBn9FUK21QYCiF4-auswahl-766.png)  
    Sofware auswählen  
    ssh-Server und Standardsystemwerkzeuge  
    alles andere abhaken  
    [![Auswahl_767.png](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/scaled-1680-/i1LvaqPsJVRtbd8f-auswahl-767.png)](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/i1LvaqPsJVRtbd8f-auswahl-767.png)  
    Installation läuft...  
    [![Auswahl_768.png](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/scaled-1680-/6Im8wmdQAymZQyfc-auswahl-768.png)](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/6Im8wmdQAymZQyfc-auswahl-768.png)  
    Grubloader auf auf Ihrem primären Laufwerk installieren? Ja auswählen  
    [![Auswahl_769.png](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/scaled-1680-/E2DZoFpti2ufwdc4-auswahl-769.png)](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/E2DZoFpti2ufwdc4-auswahl-769.png)  
    Festplatte auswählen.  
    [![Auswahl_770.png](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/scaled-1680-/kZ34aP1j0LtVcbTK-auswahl-770.png)](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/kZ34aP1j0LtVcbTK-auswahl-770.png)  
    Installation abgeschlossen system wird neu gestartet  
    [![Auswahl_771.png](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/scaled-1680-/USc3pCCyer6hr7lH-auswahl-771.png)](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/USc3pCCyer6hr7lH-auswahl-771.png)  
    Nach dem neustart steht der Bildschirm zum Passphrase eingeben  
    [![Auswahl_772.png](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/scaled-1680-/ooptjfck11ZQIJNy-auswahl-772.png)](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/ooptjfck11ZQIJNy-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](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/scaled-1680-/oIUJA3dGugdP52tF-auswahl-773.png)](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/oIUJA3dGugdP52tF-auswahl-773.png)  
    Drin  
    [![Auswahl_774.png](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/scaled-1680-/LGAuZo16UFHLBo5w-auswahl-774.png)](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/LGAuZo16UFHLBo5w-auswahl-774.png)

# 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   
      
    ```shell
     nano /etc/ssh/sshd_config 
    ```
    
    auf yes ändern und dann den dienst neustarten
    
    ```shell
     PermitRootLogin yes 
    ```
    
    ```shell
    service ssh restart
    ```
    
    Nun kann ein login per ssh stattfinden. Jetzt kopieren wir mit
    
    ```shell
    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.
    
    ```shell
    service ssh restart
    ```
3. Dropbear initramfs  
    ```shell
    apt update && apt install dropbear-initramfs
    update-initramfs -u
    ```
    
    Mit y bestätigen  
      
    Nun bekommen wir die Meldung invalid authorized file  
    [![Auswahl_775.png](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/scaled-1680-/9onNQi0bpEQEQI9O-auswahl-775.png)](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/9onNQi0bpEQEQI9O-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`  
      
    ```shell
    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
    
    ```shell
    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
    
    ```shell
    /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
    
    ```shell
    reboot
    ```
    
    Nun steht beim starten die IP Adresse von drop-bear (DCHP-Server vorrausgesetzt)  
    in unserem Falle. 192.168.178.212  
    [![Auswahl_777.png](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/scaled-1680-/DE8HAqiO4H7g9cYz-auswahl-777.png)](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/DE8HAqiO4H7g9cYz-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
    
    ```shell
    cryptroot-unlock
    ```
    
    Nun das Passwort über die Zwischenablage oder Keepass einfügen  
    Danach wird man ausgeloggt und der Server startet.  
    [![Auswahl_779.png](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/scaled-1680-/O2f9c4suI5gEMG0M-auswahl-779.png)](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/O2f9c4suI5gEMG0M-auswahl-779.png)
    
    Die VNC Konsole oder Echter Bildschirm mit dem Login Fenster  
    [![Auswahl_780.png](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/scaled-1680-/kpEIHlhtSyqOariK-auswahl-780.png)](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/kpEIHlhtSyqOariK-auswahl-780.png)

# 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  
    ```shell
    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
    
    ```shell
    service networking restart
    ```
    
    ausführen.
2. Nun die Pakete installieren und nicht benötigte entfernen  
    Repo hinzufügen  
    ```shell
    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.
    
    ```shell
    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](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](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/scaled-1680-/HwjTbPliTEIdboVg-auswahl-781.png)](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/HwjTbPliTEIdboVg-auswahl-781.png)  
    Wieder unlock fertig.  
    [![Auswahl_782.png](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/scaled-1680-/6DwdIdsj1lsz4aOb-auswahl-782.png)](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/6DwdIdsj1lsz4aOb-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](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/scaled-1680-/zz8IYJISmDyvW3hX-auswahl-783.png)](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/zz8IYJISmDyvW3hX-auswahl-783.png)
3. Nun mit dem Webbrowser per [https://192.168.178.222:8006](https://192.168.178.222:8006) aufrufen, selbsigniertes Zertifikat zur Ausnahme hinzufügen  
    [![Auswahl_784.png](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/scaled-1680-/6zhI02HpZ9VvWrsR-auswahl-784.png)](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/6zhI02HpZ9VvWrsR-auswahl-784.png)  
    und mit dem root Benutzer und Kennwort Anmelden. Fertig.  
    [![Auswahl_785.png](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/scaled-1680-/T1mr9LEBG6BVRaM4-auswahl-785.png)](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/T1mr9LEBG6BVRaM4-auswahl-785.png)  
    [![Auswahl_786.png](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/scaled-1680-/iOu5LEM1B5JDgaa6-auswahl-786.png)](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/iOu5LEM1B5JDgaa6-auswahl-786.png)

# 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/](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](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/scaled-1680-/EMAEG9iy1XZylrh8-auswahl-074.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/EMAEG9iy1XZylrh8-auswahl-074.png)

Dann im Menü ISO Images auswählen

[![Auswahl_075.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/scaled-1680-/cVlehayWPh8PFrSW-auswahl-075.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/cVlehayWPh8PFrSW-auswahl-075.png)

Nun oben auf Download from URL klicken

[![Auswahl_076.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/scaled-1680-/YNckw0MoI31qdwRc-auswahl-076.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/YNckw0MoI31qdwRc-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](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](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/scaled-1680-/srMjAN6BVlm1cNvR-auswahl-077.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/srMjAN6BVlm1cNvR-auswahl-077.png)

Nun wird der Name ermittelt und dann auf Download klicken

[![Auswahl_078.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/scaled-1680-/G96igvBGQaqYQufL-auswahl-078.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/G96igvBGQaqYQufL-auswahl-078.png)

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

[![Auswahl_079.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/scaled-1680-/16xtIPakgHwkq2ra-auswahl-079.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/16xtIPakgHwkq2ra-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](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](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/scaled-1680-/k238zH0LQWWj5GaQ-auswahl-072.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/k238zH0LQWWj5GaQ-auswahl-072.png)

Nun dem Kind einen Namen geben und auf weiter klicken.

[![Auswahl_073.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/scaled-1680-/xcrawec4QhKtOQrn-auswahl-073.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/xcrawec4QhKtOQrn-auswahl-073.png)

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

[![Auswahl_080.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/scaled-1680-/U2UzE6KYKwEnRcGM-auswahl-080.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/U2UzE6KYKwEnRcGM-auswahl-080.png)

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

Auf weiter klicken

[![Auswahl_081.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/scaled-1680-/wQF2DFJqnZc6Wprf-auswahl-081.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/wQF2DFJqnZc6Wprf-auswahl-081.png)

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

[![Auswahl_082.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/scaled-1680-/dggdSwbbcf6IyGnm-auswahl-082.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/dggdSwbbcf6IyGnm-auswahl-082.png)

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

[![Auswahl_083.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/scaled-1680-/fWr4iLhVC1x2sZto-auswahl-083.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/fWr4iLhVC1x2sZto-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](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/scaled-1680-/N7ssKdFVNSsRbuqt-auswahl-084.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/N7ssKdFVNSsRbuqt-auswahl-084.png)

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

[![Auswahl_085.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/scaled-1680-/p2PrXMrYHWAfLjmu-auswahl-085.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/p2PrXMrYHWAfLjmu-auswahl-085.png)

Nun auf Finish klicken

[![Auswahl_086.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/scaled-1680-/0jMWQK4mw6inzabA-auswahl-086.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/0jMWQK4mw6inzabA-auswahl-086.png)

Virtuelle machine bearbeiten

Nun Im Menü die Virtuelle Machine auswählen

[![Auswahl_087.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/scaled-1680-/pIw0LLFXu1ruCasi-auswahl-087.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/pIw0LLFXu1ruCasi-auswahl-087.png)

Nun Auf den Menüpunkt Hardware klicken

[![Auswahl_088.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/scaled-1680-/5vERHsmhmpPaWYZ5-auswahl-088.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/5vERHsmhmpPaWYZ5-auswahl-088.png)

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

[![Auswahl_089.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/scaled-1680-/3dOQAiG8f9aVdyjQ-auswahl-089.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/3dOQAiG8f9aVdyjQ-auswahl-089.png)

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

[![Auswahl_090.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/scaled-1680-/L4sAF6cwx4cYCCum-auswahl-090.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/L4sAF6cwx4cYCCum-auswahl-090.png)

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

[![Menü_006.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/scaled-1680-/1SwPXKOwfO64CmcI-menu-006.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/1SwPXKOwfO64CmcI-menu-006.png)

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

[![Auswahl_091.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/scaled-1680-/8ygKlthb9DVSgodm-auswahl-091.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/8ygKlthb9DVSgodm-auswahl-091.png)

Nun wieder auf Add und CD/DVD auswählen

[![Menü_007.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/scaled-1680-/4bY6Ltem1nbObjii-menu-007.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/4bY6Ltem1nbObjii-menu-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](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/scaled-1680-/Z5ShqmaXPQz6VZnF-auswahl-092.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/Z5ShqmaXPQz6VZnF-auswahl-092.png)

Nun doppelklick auf Display

[![Auswahl_093.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/scaled-1680-/bz3ctemurjhuQL6W-auswahl-093.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/bz3ctemurjhuQL6W-auswahl-093.png)

Bei Graphiccard : Serial terminal 0 auswählen und ok

[![Auswahl_094.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/scaled-1680-/driSzWpACKDpsoE6-auswahl-094.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/driSzWpACKDpsoE6-auswahl-094.png)

Nun doppelklick auf die Festplatte

[![Auswahl_101.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/scaled-1680-/TZgyF8RLcbdxcXNP-auswahl-101.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/TZgyF8RLcbdxcXNP-auswahl-101.png)

Dort dann den haken bei iothread raus und auf ok

[![Auswahl_102.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/scaled-1680-/S1KEYcz5N6Wt8Pjv-auswahl-102.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/S1KEYcz5N6Wt8Pjv-auswahl-102.png)

Nun doppelklick auf SCSI Controller

[![Auswahl_103.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/scaled-1680-/M3uD96egk79djiYc-auswahl-103.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/M3uD96egk79djiYc-auswahl-103.png)

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

[![Auswahl_104.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/scaled-1680-/mshv9sSPSxb0Vg9W-auswahl-104.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/mshv9sSPSxb0Vg9W-auswahl-104.png)

Nun im Menü auf options klicken

[![Auswahl_095.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/scaled-1680-/beZGSoOUpMP4zEj5-auswahl-095.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/beZGSoOUpMP4zEj5-auswahl-095.png)

Dann doppelklcik auf Boot Order

[![Auswahl_096.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/scaled-1680-/2ecuHKk0Sovu0jpm-auswahl-096.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/2ecuHKk0Sovu0jpm-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](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/scaled-1680-/pOxa5533H9qsWlPn-auswahl-097.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/pOxa5533H9qsWlPn-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
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;

```

### 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 &lt;vmid&gt;.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
...
```

# 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](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/scaled-1680-/pIw0LLFXu1ruCasi-auswahl-087.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/pIw0LLFXu1ruCasi-auswahl-087.png)

Und oben recht im Menü auf start klicken

[![Auswahl_098.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/scaled-1680-/u9qMIdU53ka4nGmZ-auswahl-098.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/u9qMIdU53ka4nGmZ-auswahl-098.png)

Nun einen Moment warten und dann auf den Buton Console klicken

[![Auswahl_105.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/scaled-1680-/WYjHUHYu2sKN1AHL-auswahl-105.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/WYjHUHYu2sKN1AHL-auswahl-105.png)

Nun öffnet sich eine neue Console

[![Auswahl_109.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/scaled-1680-/mkYyX7L6iJPcBtL2-auswahl-109.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/mkYyX7L6iJPcBtL2-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](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/scaled-1680-/mAY5vlAFNkcE4bV6-auswahl-110.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/mAY5vlAFNkcE4bV6-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](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/scaled-1680-/S3SlIknqY97fq4qO-auswahl-111.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/S3SlIknqY97fq4qO-auswahl-111.png)

Bei Land other

[![Auswahl_112.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/scaled-1680-/la60cY8pIhDSYDUj-auswahl-112.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/la60cY8pIhDSYDUj-auswahl-112.png)

Hier bei location nun Europe auswählen

[![Auswahl_113.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/scaled-1680-/HcvPFAOXczsTYC30-auswahl-113.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/HcvPFAOXczsTYC30-auswahl-113.png)

Nun Germany auswählen

[![Auswahl_114.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/scaled-1680-/ifL48ARlohTS4yew-auswahl-114.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/ifL48ARlohTS4yew-auswahl-114.png)Nun United States auswählen.

[![Auswahl_115.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/scaled-1680-/YtcRmxXej096fKrn-auswahl-115.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/YtcRmxXej096fKrn-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](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/scaled-1680-/iw5GfY6hZnt7kdBb-auswahl-116.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/iw5GfY6hZnt7kdBb-auswahl-116.png)

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

[![Auswahl_117.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/scaled-1680-/SaDorb9dGvn81Ibm-auswahl-117.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/SaDorb9dGvn81Ibm-auswahl-117.png)

Root Password vergeben

[![Auswahl_118.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/scaled-1680-/o5jXWMPmSbhrItgM-auswahl-118.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/o5jXWMPmSbhrItgM-auswahl-118.png)

Root Passwort bestätigen

[![Auswahl_119.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/scaled-1680-/vX0k7EfajYyezYCl-auswahl-119.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/vX0k7EfajYyezYCl-auswahl-119.png)

Nun einen Anzeige Namen vergeben, ich nehme Administrator

[![Auswahl_120.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/scaled-1680-/FdRLXHS6xpOvyqUt-auswahl-120.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/FdRLXHS6xpOvyqUt-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](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/scaled-1680-/uZoD9O4s1tiJVdSQ-auswahl-121.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/uZoD9O4s1tiJVdSQ-auswahl-121.png)

Nun auch für diesen Benutzer ein Kennwort vergeben

[![Auswahl_122.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/scaled-1680-/y6TO6ucRmUPKD9Fa-auswahl-122.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/y6TO6ucRmUPKD9Fa-auswahl-122.png)

Dieses Kennwort bestätigen

[![Auswahl_123.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/scaled-1680-/pAghOS57D8ouhpCF-auswahl-123.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/pAghOS57D8ouhpCF-auswahl-123.png)

Nun hier die gesamte Disk auswählen.

[![Auswahl_124.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/scaled-1680-/mXAZZFKpbIT5dNb6-auswahl-124.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/mXAZZFKpbIT5dNb6-auswahl-124.png)

Nun die Festplatte auswählen

[![Auswahl_125.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/scaled-1680-/huCDLs3aXPNSHuYN-auswahl-125.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/huCDLs3aXPNSHuYN-auswahl-125.png)

Alle Dateien in eine Partition

[![Auswahl_126.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/scaled-1680-/kZQI9Zel8Vh4fwT4-auswahl-126.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/kZQI9Zel8Vh4fwT4-auswahl-126.png)

Nun auf Finish Partioning and write changes to disk

[![Auswahl_127.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/scaled-1680-/VSzVAli8WyDwCYTe-auswahl-127.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/VSzVAli8WyDwCYTe-auswahl-127.png)

Nun auf Ja

[![Auswahl_128.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/scaled-1680-/IkiERgoQnYkaqtpI-auswahl-128.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/IkiERgoQnYkaqtpI-auswahl-128.png)

und wieder warten kann bis zu 5 min dauern.

Nun die Frage nach extra medium mit nein beantworten

[![Auswahl_129.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/scaled-1680-/VmUX33kDgWZQ0znA-auswahl-129.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/VmUX33kDgWZQ0znA-auswahl-129.png)

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

[![Auswahl_130.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/scaled-1680-/6nCbgeSZfOqKbBKM-auswahl-130.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/6nCbgeSZfOqKbBKM-auswahl-130.png)

Mirror auswählen, in debian.org

[![Auswahl_131.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/scaled-1680-/WMezBAjxKh22sXOq-auswahl-131.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/WMezBAjxKh22sXOq-auswahl-131.png)

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

[![Auswahl_132.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/scaled-1680-/npKeDtDG5DiQzCp9-auswahl-132.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/npKeDtDG5DiQzCp9-auswahl-132.png)

Nun wird wieder installiert. Abwarten.

An der Paketanalyse teilnehmen : nein

[![Auswahl_133.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/scaled-1680-/3XmWSwhdmIve2Wkf-auswahl-133.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/3XmWSwhdmIve2Wkf-auswahl-133.png)

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

[![Auswahl_134.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/scaled-1680-/JYQ9X4xo8cQZV8pE-auswahl-134.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/JYQ9X4xo8cQZV8pE-auswahl-134.png)

[![Auswahl_135.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/scaled-1680-/KSHvI2CbmayJRvVE-auswahl-135.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/KSHvI2CbmayJRvVE-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 -&gt; Stop

[![Menü_009.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/scaled-1680-/sHW50LCIC54OTKlr-menu-009.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/sHW50LCIC54OTKlr-menu-009.png)

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

# 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](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/scaled-1680-/H992zIOL345EGevo-efi-disk-add.png)](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/H992zIOL345EGevo-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 -&gt; Boot options - &gt;  
    [![BootMaintenance.png](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/scaled-1680-/LVdep49f3R7PRtwx-bootmaintenance.png)](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/LVdep49f3R7PRtwx-bootmaintenance.png)  
    Nun Add Boot option auswählen  
    [![add boot option.png](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/scaled-1680-/l4iXGkY5vHwzAiUm-add-boot-option.png)](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/l4iXGkY5vHwzAiUm-add-boot-option.png)  
      
    Festplatte auswählen  
    [![festplatte auswählen.png](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/scaled-1680-/sLTajYdD9aoIfbUv-festplatte-auswahlen.png)](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/sLTajYdD9aoIfbUv-festplatte-auswahlen.png)  
    nun durch Daitsystem hangelb bis zur Efi file  
    [![verzeichnis hangeln bis zur efi.png](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/scaled-1680-/gJQ4Hu7ePfXhVo3j-verzeichnis-hangeln-bis-zur-efi.png)](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/gJQ4Hu7ePfXhVo3j-verzeichnis-hangeln-bis-zur-efi.png)  
    Nun die EFI File auswählen  
    [![efi file auswählen.png](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/scaled-1680-/htHV900raxNBC2Pb-efi-file-auswahlen.png)](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/htHV900raxNBC2Pb-efi-file-auswahlen.png)  
    Nun eine Beschreibung angeben durch drücken von enter  
    [![beschreibung boot option.png](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/scaled-1680-/DefioQUdO7Da6fX0-beschreibung-boot-option.png)](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/DefioQUdO7Da6fX0-beschreibung-boot-option.png)  
    Nun die Beschreibung eingeben zum Beispiel debian und mit enter bestätigen dann auf commit changes and exit  
    [![beschreibung2.png](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/scaled-1680-/dRPM2NZd9jn48tzS-beschreibung2.png)](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/dRPM2NZd9jn48tzS-beschreibung2.png)  
      
    Zurück im Menü Change Boot order auswählen  
    [![boot order.png](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/scaled-1680-/7RG5E3iaobdk8Bi1-boot-order.png)](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/7RG5E3iaobdk8Bi1-boot-order.png)  
    Nun enter drücken und mittels enter um die liste zu verändern.   
    [![liste boot order.png](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/scaled-1680-/GegJKqIh08O5Ace1-liste-boot-order.png)](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/GegJKqIh08O5Ace1-liste-boot-order.png)  
    Debian auswählen und mittels +/- Taste den eintrag nach oben schieben  
    [![debian_unten.png](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/scaled-1680-/1DpvzFvnZnpCOPqT-debian-unten.png)](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/1DpvzFvnZnpCOPqT-debian-unten.png)  
    Nun oben vor CDROm falls man doch nochmals von CD starten möchte  
    [![liste_oben.png](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/scaled-1680-/5Li5CBXLmgTeE03l-liste-oben.png)](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/5Li5CBXLmgTeE03l-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](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/scaled-1680-/1jxXep0sj5YKZmmq-mainetenacne-menu.png)](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/1jxXep0sj5YKZmmq-mainetenacne-menu.png)  
      
    Nun esc drücken  
    [![Bildschirmfoto vom 2022-07-22 19-54-53.png](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/scaled-1680-/ZsXp98iW1io3LBwr-bildschirmfoto-vom-2022-07-22-19-54-53.png)](https://wiki.hacker-net.de/uploads/images/gallery/2022-07/ZsXp98iW1io3LBwr-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

# 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 -&gt; Stop

[![Menü_009.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/scaled-1680-/sHW50LCIC54OTKlr-menu-009.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/sHW50LCIC54OTKlr-menu-009.png)

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

[![Menü_010.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/scaled-1680-/ktqJz8nCQITyXimo-menu-010.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/ktqJz8nCQITyXimo-menu-010.png)

Die Frage mit ja beantworten

[![Auswahl_136.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/scaled-1680-/6re5ricRVdNMt25Q-auswahl-136.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/6re5ricRVdNMt25Q-auswahl-136.png)

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

[![Auswahl_137.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/scaled-1680-/MjUXaxwae0M6kJtU-auswahl-137.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/MjUXaxwae0M6kJtU-auswahl-137.png)

### Eine VM aus dem Template erstellen  


Rechtsklick auf das Template und clone auswählen

[![Menü_011.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/scaled-1680-/BPzhKHdYb30UbX5e-menu-011.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/BPzhKHdYb30UbX5e-menu-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](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/scaled-1680-/hrv8WbSTyWKMFSID-menu-012.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/hrv8WbSTyWKMFSID-menu-012.png)

Fertig.

# Proxmox - Benutzerverwaltung

# Benutzer und Gruppe im Terminal anlegen

1. Gruppe anlegen mit Admin Rechten  
    ```shell
    pveum group add admin -comment "System Administrators"
    ```
    
    Gruppe eine Rolle zuweisen
    
    ```shell
    pveum acl modify / -group admin -role Administrator
    ```
2. Nun einen Benutzeranlegen auf dem Realm PVE Server (PVE)   
    Realm PAM wäre ein Linux Benutzer
    
    ```shell
    pveum user add <username>r@pve --password <password>
    ```
    
    Möchte man im nach hinein nochmals das Kennwort ändern dann mittels Befehl
    
    ```shell
    pveum passwd <username>@pve
    ```
    
    Nun dem User die Gruppe admin zuweisen
    
    ```shell
    pveum user modify stefanhacker@pve -group admin
    ```
    
    \-

# Proxmox - Hardware durchreichen in VM (KVM)

Um echte Hardware in die Virtuelle Machine durchzureichen (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

# 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)](https://wiki.hacker-net.de/books/proxmox-ve/page/einschalten-von-vt-d-fur-intel-cpus-iommu "Einschalten von vt-d  für Intel CPUs (iommu)")

Eine VM Erstellen:  
[![Bildschirmfoto vom 2022-10-20 13-13-35.png](https://wiki.hacker-net.de/uploads/images/gallery/2022-10/scaled-1680-/7ggpCYSJTVdyXe2U-bildschirmfoto-vom-2022-10-20-13-13-35.png)](https://wiki.hacker-net.de/uploads/images/gallery/2022-10/7ggpCYSJTVdyXe2U-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](https://wiki.hacker-net.de/uploads/images/gallery/2022-10/scaled-1680-/ejhY3WI7hduuGzWN-bildschirmfoto-vom-2022-10-20-13-17-11.png)](https://wiki.hacker-net.de/uploads/images/gallery/2022-10/ejhY3WI7hduuGzWN-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](https://wiki.hacker-net.de/uploads/images/gallery/2022-10/scaled-1680-/PhtBQTL8wLmiJN6g-bildschirmfoto-vom-2022-10-20-13-19-00.png)](https://wiki.hacker-net.de/uploads/images/gallery/2022-10/PhtBQTL8wLmiJN6g-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](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](https://wiki.hacker-net.de/uploads/images/gallery/2022-10/scaled-1680-/sDOQDh9TQXJNCTeF-bildschirmfoto-vom-2022-10-20-13-26-59.png)](https://wiki.hacker-net.de/uploads/images/gallery/2022-10/sDOQDh9TQXJNCTeF-bildschirmfoto-vom-2022-10-20-13-26-59.png)  
  
Memory Settings  
  
[![Bildschirmfoto vom 2022-10-20 13-28-05.png](https://wiki.hacker-net.de/uploads/images/gallery/2022-10/scaled-1680-/nae84vKL6w1GZwoV-bildschirmfoto-vom-2022-10-20-13-28-05.png)](https://wiki.hacker-net.de/uploads/images/gallery/2022-10/nae84vKL6w1GZwoV-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](https://wiki.hacker-net.de/uploads/images/gallery/2022-10/scaled-1680-/4yAKd5qFbPEF4Akn-bildschirmfoto-vom-2022-10-20-13-29-37.png)](https://wiki.hacker-net.de/uploads/images/gallery/2022-10/4yAKd5qFbPEF4Akn-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](https://wiki.hacker-net.de/uploads/images/gallery/2022-10/scaled-1680-/Ed5qW5k9ZPcMbNsw-bildschirmfoto-vom-2022-10-20-13-30-41.png)](https://wiki.hacker-net.de/uploads/images/gallery/2022-10/Ed5qW5k9ZPcMbNsw-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](https://wiki.hacker-net.de/uploads/images/gallery/2022-10/scaled-1680-/yebSztNlFLOGwh7Y-menu-001.png)](https://wiki.hacker-net.de/uploads/images/gallery/2022-10/yebSztNlFLOGwh7Y-menu-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](https://wiki.hacker-net.de/uploads/images/gallery/2022-10/scaled-1680-/GgPDIdGMqwJsmOSL-screenshot-2022-10-21-at-21-32-55-vservwohn-proxmox-virtual-environment.png)](https://wiki.hacker-net.de/uploads/images/gallery/2022-10/GgPDIdGMqwJsmOSL-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/](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](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/](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 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](https://wiki.hacker-net.de/uploads/images/gallery/2022-10/scaled-1680-/btKygyO5OigIcG0F-img-20221022-194808.jpg)](https://wiki.hacker-net.de/uploads/images/gallery/2022-10/btKygyO5OigIcG0F-img-20221022-194808.jpg)  
  
Abhilfe q35 auf version 5.1 umstellen.  
  
[![Screenshot 2022-10-22 at 19-58-06 vservwohn - Proxmox Virtual Environment.png](https://wiki.hacker-net.de/uploads/images/gallery/2022-10/scaled-1680-/6mE07lmlA4eC3tQY-screenshot-2022-10-22-at-19-58-06-vservwohn-proxmox-virtual-environment.png)](https://wiki.hacker-net.de/uploads/images/gallery/2022-10/6mE07lmlA4eC3tQY-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/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 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](https://wiki.hacker-net.de/uploads/images/gallery/2023-01/scaled-1680-/GBDagXuQIVfbPhdP-bildschirmfoto-vom-2023-01-03-08-09-59.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-01/GBDagXuQIVfbPhdP-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](https://wiki.hacker-net.de/uploads/images/gallery/2023-01/scaled-1680-/7cxfZaUednohpxtT-bildschirmfoto-vom-2023-01-03-08-16-16.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-01/7cxfZaUednohpxtT-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](https://wiki.hacker-net.de/uploads/images/gallery/2023-01/scaled-1680-/qKnZCYk4ZcP34HKw-bildschirmfoto-vom-2023-01-03-08-17-01.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-01/qKnZCYk4ZcP34HKw-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](https://wiki.hacker-net.de/uploads/images/gallery/2023-01/scaled-1680-/YcKJPTAa7uPzepGG-bildschirmfoto-vom-2023-01-03-08-18-06.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-01/YcKJPTAa7uPzepGG-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](https://wiki.hacker-net.de/uploads/images/gallery/2023-01/scaled-1680-/JOtwMev7ULecqdti-bildschirmfoto-vom-2023-01-03-08-21-06.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-01/JOtwMev7ULecqdti-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](https://wiki.hacker-net.de/uploads/images/gallery/2023-01/scaled-1680-/2Vs5oF0KYL90wEmh-bildschirmfoto-vom-2023-01-03-08-31-22.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-01/2Vs5oF0KYL90wEmh-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](https://wiki.hacker-net.de/uploads/images/gallery/2023-01/scaled-1680-/Sn6ykYHkXUIrzGll-bildschirmfoto-vom-2023-01-03-08-26-02.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-01/Sn6ykYHkXUIrzGll-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](https://wiki.hacker-net.de/uploads/images/gallery/2023-01/scaled-1680-/fNuQczzDo8TNUOxR-bildschirmfoto-vom-2023-01-03-08-27-44.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-01/fNuQczzDo8TNUOxR-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](https://wiki.hacker-net.de/uploads/images/gallery/2023-01/scaled-1680-/ztjo3e1aXCfJWc8u-bildschirmfoto-vom-2023-01-03-08-28-43.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-01/ztjo3e1aXCfJWc8u-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](https://wiki.hacker-net.de/uploads/images/gallery/2023-01/scaled-1680-/W9K8yFPsecOjXNyi-bildschirmfoto-vom-2023-01-03-08-29-26.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-01/W9K8yFPsecOjXNyi-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](https://wiki.hacker-net.de/uploads/images/gallery/2023-01/scaled-1680-/ZFO6VzsL3noLkh5D-bildschirmfoto-vom-2023-01-03-08-51-30.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-01/ZFO6VzsL3noLkh5D-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](https://wiki.hacker-net.de/uploads/images/gallery/2023-01/scaled-1680-/Zl4uFrTvUXOc15tx-bildschirmfoto-vom-2023-01-03-08-52-47.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-01/Zl4uFrTvUXOc15tx-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](https://wiki.hacker-net.de/uploads/images/gallery/2023-01/scaled-1680-/dgqJ3KCNfwCDLKwf-bildschirmfoto-vom-2023-01-03-08-54-53.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-01/dgqJ3KCNfwCDLKwf-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](https://wiki.hacker-net.de/uploads/images/gallery/2023-01/scaled-1680-/EqmRh09vDhm5FJhr-bildschirmfoto-vom-2023-01-03-08-59-03.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-01/EqmRh09vDhm5FJhr-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](https://wiki.hacker-net.de/uploads/images/gallery/2023-01/scaled-1680-/RDBa5UGHCunOU6jX-bildschirmfoto-vom-2023-01-03-09-02-10.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-01/RDBa5UGHCunOU6jX-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](https://wiki.hacker-net.de/uploads/images/gallery/2023-01/scaled-1680-/6j9WD3dRqjQv96yT-bildschirmfoto-vom-2023-01-03-09-05-59.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-01/6j9WD3dRqjQv96yT-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](https://wiki.hacker-net.de/uploads/images/gallery/2023-01/scaled-1680-/oz4xrHMymooz1ESo-bildschirmfoto-vom-2023-01-03-09-07-24.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-01/oz4xrHMymooz1ESo-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](https://wiki.hacker-net.de/uploads/images/gallery/2023-01/scaled-1680-/HTFYTCGR42Tkobww-bildschirmfoto-vom-2023-01-03-09-08-45.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-01/HTFYTCGR42Tkobww-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](https://wiki.hacker-net.de/uploads/images/gallery/2023-01/scaled-1680-/DASzArUXYgfyCxg4-bildschirmfoto-vom-2023-01-03-09-13-32.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-01/DASzArUXYgfyCxg4-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](https://wiki.hacker-net.de/uploads/images/gallery/2023-01/scaled-1680-/T0PSvrOIbvPRqfFC-bildschirmfoto-vom-2023-01-03-09-14-46.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-01/T0PSvrOIbvPRqfFC-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](https://wiki.hacker-net.de/uploads/images/gallery/2023-01/scaled-1680-/hApBYKdIbiWkq7tg-bildschirmfoto-vom-2023-01-03-09-17-41.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-01/hApBYKdIbiWkq7tg-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](https://wiki.hacker-net.de/uploads/images/gallery/2023-01/scaled-1680-/hLktZirsMcoRBlco-bildschirmfoto-vom-2023-01-03-09-19-02.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-01/hLktZirsMcoRBlco-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](https://wiki.hacker-net.de/uploads/images/gallery/2023-01/scaled-1680-/1n6V1YySXdMWQtgz-bildschirmfoto-vom-2023-01-03-09-20-04.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-01/1n6V1YySXdMWQtgz-bildschirmfoto-vom-2023-01-03-09-20-04.png)

  
Jetzt einloggen und nochmal neustarten.

[![Bildschirmfoto vom 2023-01-03 09-21-18.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-01/scaled-1680-/nk7JUMCe9zxIpOt3-bildschirmfoto-vom-2023-01-03-09-21-18.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-01/nk7JUMCe9zxIpOt3-bildschirmfoto-vom-2023-01-03-09-21-18.png)

Läuft so durch

[![Bildschirmfoto vom 2023-01-03 09-20-04.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-01/scaled-1680-/1n6V1YySXdMWQtgz-bildschirmfoto-vom-2023-01-03-09-20-04.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-01/1n6V1YySXdMWQtgz-bildschirmfoto-vom-2023-01-03-09-20-04.png)

fertig

# 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](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/scaled-1680-/EoiD2XWUmCMEP6q6-auswahl-001.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/EoiD2XWUmCMEP6q6-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](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/scaled-1680-/X6zxblA0Il2EXCsb-auswahl-002.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/X6zxblA0Il2EXCsb-auswahl-002.png)

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

[![Auswahl_003.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/scaled-1680-/kKOnYWZ3lBmlLUEU-auswahl-003.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/kKOnYWZ3lBmlLUEU-auswahl-003.png)

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

[![Auswahl_004.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/scaled-1680-/FeceIXQIxe5PFqOX-auswahl-004.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/FeceIXQIxe5PFqOX-auswahl-004.png)

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

[![Auswahl_005.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/scaled-1680-/b66bSPWE0d0YXLli-auswahl-005.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/b66bSPWE0d0YXLli-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 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 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](https://wiki.hacker-net.de/books/proxmox-ve/chapter/proxmox-qemu-agent-installation "Proxmox - Qemu Agent installation")

#### Proxmox aus einer Windows VM herunterfahren

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

Nun auf Download klicken

[![Bildschirmfoto vom 2023-02-25 08-42-48.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/scaled-1680-/7BGI6DAEOOWXwS65-bildschirmfoto-vom-2023-02-25-08-42-48.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/7BGI6DAEOOWXwS65-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](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/scaled-1680-/r7IoAlgR5XjQWqxu-bildschirmfoto-vom-2023-02-25-08-43-19.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/r7IoAlgR5XjQWqxu-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](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/scaled-1680-/gkc5nJwlxKfTCWtN-bildschirmfoto-vom-2023-02-25-08-44-50.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/gkc5nJwlxKfTCWtN-bildschirmfoto-vom-2023-02-25-08-44-50.png)  
Nun öffnet sich der Download Ordner

[![Bildschirmfoto vom 2023-02-25 08-47-23.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/scaled-1680-/2NEEfeRkKOUWMEwm-bildschirmfoto-vom-2023-02-25-08-47-23.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/2NEEfeRkKOUWMEwm-bildschirmfoto-vom-2023-02-25-08-47-23.png)

Wir schneiden die plink exe aus

[![Bildschirmfoto vom 2023-02-25 08-47-49.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/scaled-1680-/Gt0U5paIjmUGAfoG-bildschirmfoto-vom-2023-02-25-08-47-49.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/Gt0U5paIjmUGAfoG-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](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/scaled-1680-/5vtJROiVG6J3GPiF-bildschirmfoto-vom-2023-02-25-08-48-53.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/5vtJROiVG6J3GPiF-bildschirmfoto-vom-2023-02-25-08-48-53.png)

Drücken dann auf fortsetzen

[![Bildschirmfoto vom 2023-02-25 08-49-05.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/scaled-1680-/qQAagrE9nXMRdoia-bildschirmfoto-vom-2023-02-25-08-49-05.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/qQAagrE9nXMRdoia-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 -&gt; Neu -&gt; Verknüpfung

[![Bildschirmfoto vom 2023-02-25 08-50-51.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/scaled-1680-/GoLHJWV5tZRLA5aN-bildschirmfoto-vom-2023-02-25-08-50-51.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/GoLHJWV5tZRLA5aN-bildschirmfoto-vom-2023-02-25-08-50-51.png)

Nun auf den Durchsuchen button klicken

[![Bildschirmfoto vom 2023-02-25 08-51-02.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/scaled-1680-/yoZF199YoZvdXTQj-bildschirmfoto-vom-2023-02-25-08-51-02.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/yoZF199YoZvdXTQj-bildschirmfoto-vom-2023-02-25-08-51-02.png)

Nun AUf Dieser PC -&gt; Laufwerk C-&gt; Proragmme gehen

[![Bildschirmfoto vom 2023-02-25 08-51-45.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/scaled-1680-/Ss4edHhw9t4RP7Pk-bildschirmfoto-vom-2023-02-25-08-51-45.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/Ss4edHhw9t4RP7Pk-bildschirmfoto-vom-2023-02-25-08-51-45.png)

Nun runterscrollen bis plink.exe

[![Bildschirmfoto vom 2023-02-25 08-51-56.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/scaled-1680-/B5mbNWwGnYQUDyvf-bildschirmfoto-vom-2023-02-25-08-51-56.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/B5mbNWwGnYQUDyvf-bildschirmfoto-vom-2023-02-25-08-51-56.png)

Nun auf OK

[![Bildschirmfoto vom 2023-02-25 08-52-01.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/scaled-1680-/PhzPQ5zyx67jBQU2-bildschirmfoto-vom-2023-02-25-08-52-01.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/PhzPQ5zyx67jBQU2-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](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/scaled-1680-/6sk0oG7ayBBvVM8V-bildschirmfoto-vom-2023-02-25-08-54-15.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/6sk0oG7ayBBvVM8V-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](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/scaled-1680-/JqcheT2ZMm76R9Oh-bildschirmfoto-vom-2023-02-25-08-57-37.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/JqcheT2ZMm76R9Oh-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](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/scaled-1680-/tNX9pUN4z1wLbJe3-bildschirmfoto-vom-2023-02-25-08-59-30.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/tNX9pUN4z1wLbJe3-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](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/scaled-1680-/sqElrERw5FPTvhWr-bildschirmfoto-vom-2023-02-25-08-59-42.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/sqElrERw5FPTvhWr-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](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/scaled-1680-/FNPEkaP4ObD9PWwD-bildschirmfoto-vom-2023-02-25-09-04-00.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/FNPEkaP4ObD9PWwD-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](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/scaled-1680-/FG2ZOT7JlCbBu8fx-bildschirmfoto-vom-2023-02-25-09-04-31.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/FG2ZOT7JlCbBu8fx-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 - 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 :

<div class="x-box-target" data-ref="targetEl" id="bkmrk-" role="presentation" style="width: 1460px;"></div><div aria-disabled="false" aria-hidden="false" class="x-toolbar-separator x-toolbar-separator-horizontal x-box-item x-toolbar-item" id="bkmrk--0" role="separator" style="top: 5px; margin: 0px; left: 106px;"></div><div aria-disabled="false" aria-hidden="false" class="x-toolbar-separator x-toolbar-separator-horizontal x-box-item x-toolbar-item" id="bkmrk--1" role="separator" style="top: 5px; margin: 0px; left: 187px;"></div>The current guest configuration does not support taking new snapshots

[![Auswahl_129.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-06/scaled-1680-/dbX5JxgTbKFQeg1x-auswahl-129.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-06/dbX5JxgTbKFQeg1x-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 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](https://wiki.hacker-net.de/uploads/images/gallery/2023-06/scaled-1680-/one8hnWb1dLXZkeh-img-20230609-085444.jpg)](https://wiki.hacker-net.de/uploads/images/gallery/2023-06/one8hnWb1dLXZkeh-img-20230609-085444.jpg)

Was hab Ich probiert, sollte probiert werden:

  
Festplatte an Onboardcontroller gehängt -&gt; kein Erfolg  
Anderen Stick verwendet -&gt; kein Erfolg  
Proxmox 6.4 iso installtiert, dann inplace update durchgeführt -&gt; 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. -&gt; 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](https://wiki.hacker-net.de/uploads/images/gallery/2023-06/scaled-1680-/f440EeCRdr6NjW50-auswahl-154.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-06/f440EeCRdr6NjW50-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

# 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

# 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

# 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
```

# 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](https://wiki.hacker-net.de/uploads/images/gallery/2024-09/scaled-1680-/PE0tNOK6O5yqvSaU-screenshot-2024-09-16-at-17-41-27-backupsrv001-proxmox-virtual-environment.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-09/PE0tNOK6O5yqvSaU-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
```

# 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

# 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 Encyrpt Zertifikat über Webgui und DNS Challenge

#### Einrichtung Acme Account und DNS Plugin

Auf der Weboberfläche einloggen, Dann auf Datacenter -&gt; Acme gehen.

[![Auswahl_870.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-01/scaled-1680-/4D0Lc7JHtvvGr2bH-auswahl-870.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-01/4D0Lc7JHtvvGr2bH-auswahl-870.png)

Nun bei Accounts auf den Button Add klicken.

[![Auswahl_871.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-01/scaled-1680-/bdRmv5TIsEvvbqVE-auswahl-871.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-01/bdRmv5TIsEvvbqVE-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](https://wiki.hacker-net.de/uploads/images/gallery/2023-01/scaled-1680-/MRnRPLKIjh2DgzBH-auswahl-872.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-01/MRnRPLKIjh2DgzBH-auswahl-872.png)

Wenn alles geklappt hat,bekommt eine Medlung mit TASK OK

[![Auswahl_873.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-01/scaled-1680-/I5YaiC373Gz1ifCe-auswahl-873.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-01/I5YaiC373Gz1ifCe-auswahl-873.png)

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

[![Auswahl_874.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-01/scaled-1680-/CB8SVSpplVgX97YP-auswahl-874.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-01/CB8SVSpplVgX97YP-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](https://wiki.hacker-net.de/uploads/images/gallery/2023-01/scaled-1680-/HZPkWyLrCuXtBaDT-auswahl-875.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-01/HZPkWyLrCuXtBaDT-auswahl-875.png)

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

[![Auswahl_876.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-01/scaled-1680-/UGL4qMj0HxWRybFe-auswahl-876.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-01/UGL4qMj0HxWRybFe-auswahl-876.png)

Nun haben wir einen Account und ein Plugin konfiguriert

[![Auswahl_877.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-01/scaled-1680-/gIIWhaL23ekvHGjT-auswahl-877.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-01/gIIWhaL23ekvHGjT-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 -&gt; Certificates anklicken.  
Nun sieht man auch schon das er das Lets Encrypt Konto default verwendet. Nun bei Acme auf Add klicken

[![Auswahl_878.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-01/scaled-1680-/UtIpEoFTHKvR7fhp-auswahl-878.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-01/UtIpEoFTHKvR7fhp-auswahl-878.png)

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

[![Auswahl_879.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-01/scaled-1680-/HLY9j8gSwVJi61fd-auswahl-879.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-01/HLY9j8gSwVJi61fd-auswahl-879.png)

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

[![Auswahl_880.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-01/scaled-1680-/zcwJmVfMP3HmrdDZ-auswahl-880.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-01/zcwJmVfMP3HmrdDZ-auswahl-880.png)

# 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](https://wiki.hacker-net.de/uploads/images/gallery/2023-01/scaled-1680-/wPpcq4EFJYfTsnjm-whatsapp-image-2023-01-27-at-08-32-47.jpeg)](https://wiki.hacker-net.de/uploads/images/gallery/2023-01/wPpcq4EFJYfTsnjm-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](https://wiki.hacker-net.de/uploads/images/gallery/2023-01/scaled-1680-/O6aLGUMBADRGSTwY-backupvsrv0001-proxmox-virtual-environment-mozilla-firefox-001.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-01/O6aLGUMBADRGSTwY-backupvsrv0001-proxmox-virtual-environment-mozilla-firefox-001.png)

Fertig.

# 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.

# 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](https://wiki.hacker-net.de/books/proxmox-ve/page/kopieren-der-appliance-und-import-des-ovf-images "Kopieren der Appliance und Import des OVF Images")

# 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](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/scaled-1680-/lQgRE1OubwpFHFVq-auswahl-030.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/lQgRE1OubwpFHFVq-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](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/scaled-1680-/WOVzbTW7PyjDAjuV-auswahl-031.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/WOVzbTW7PyjDAjuV-auswahl-031.png)

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

[![Auswahl_032.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/scaled-1680-/yw2Vk3aS73No5zH5-auswahl-032.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/yw2Vk3aS73No5zH5-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](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/scaled-1680-/e5dFe3eBsehv6Dqz-auswahl-033.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/e5dFe3eBsehv6Dqz-auswahl-033.png)

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

```
lsblk
```

Ausgabe:

[![Auswahl_034.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/scaled-1680-/4XL5k8hYzNTd9x6j-auswahl-034.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/4XL5k8hYzNTd9x6j-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](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/scaled-1680-/fWyi0XsEFleeAj1E-auswahl-038.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/fWyi0XsEFleeAj1E-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](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/scaled-1680-/tM7kV0anQK9kDebC-auswahl-039.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/tM7kV0anQK9kDebC-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](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/scaled-1680-/ENmZpiXIRma3zPaA-auswahl-040.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/ENmZpiXIRma3zPaA-auswahl-040.png)

Also geben wir als Endsektor 629145599s

[![Auswahl_041.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/scaled-1680-/fTF14zKPbyCCkz6n-auswahl-041.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/fTF14zKPbyCCkz6n-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](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/scaled-1680-/AlEZG6LNJAmnyb9N-auswahl-042.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/AlEZG6LNJAmnyb9N-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](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/scaled-1680-/szaOW5v0yT284UMk-auswahl-043.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/szaOW5v0yT284UMk-auswahl-043.png)

Nun mit Befeh:

```
vgs
```

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

Ausgabe:

[![Auswahl_044.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/scaled-1680-/FKGhDhEVYhzt8KSd-auswahl-044.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/FKGhDhEVYhzt8KSd-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](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/scaled-1680-/pKjrNnEfVGsX4jA3-auswahl-045.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/pKjrNnEfVGsX4jA3-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](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/scaled-1680-/8bbG1EJuwEsx1rTi-auswahl-046.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/8bbG1EJuwEsx1rTi-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](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/scaled-1680-/OL0kNRtyvDITbP1D-auswahl-047.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/OL0kNRtyvDITbP1D-auswahl-047.png)

Fertig

# 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](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/scaled-1680-/4XL5k8hYzNTd9x6j-auswahl-034.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/4XL5k8hYzNTd9x6j-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](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/scaled-1680-/fWyi0XsEFleeAj1E-auswahl-038.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/fWyi0XsEFleeAj1E-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](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/scaled-1680-/tM7kV0anQK9kDebC-auswahl-039.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/tM7kV0anQK9kDebC-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](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/scaled-1680-/ENmZpiXIRma3zPaA-auswahl-040.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/ENmZpiXIRma3zPaA-auswahl-040.png)

Also geben wir als Endsektor 629145599s

[![Auswahl_041.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/scaled-1680-/fTF14zKPbyCCkz6n-auswahl-041.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/fTF14zKPbyCCkz6n-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](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/scaled-1680-/AlEZG6LNJAmnyb9N-auswahl-042.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/AlEZG6LNJAmnyb9N-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](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/scaled-1680-/szaOW5v0yT284UMk-auswahl-043.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/szaOW5v0yT284UMk-auswahl-043.png)

Nun mit Befeh:

```
vgs
```

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

Ausgabe:

[![Auswahl_044.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/scaled-1680-/FKGhDhEVYhzt8KSd-auswahl-044.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/FKGhDhEVYhzt8KSd-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](https://wiki.hacker-net.de/uploads/images/gallery/2024-08/scaled-1680-/rCHzVJ5wyaTbjL6X-auswahl-396.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-08/rCHzVJ5wyaTbjL6X-auswahl-396.png)

Fertig

# 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 -&gt; Doppelklick auf qemu Agent

[![Auswahl_069.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/scaled-1680-/YuSpm5Wpgj3nJZW3-auswahl-069.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/YuSpm5Wpgj3nJZW3-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](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/scaled-1680-/XCEGROfAn4uHh2gG-auswahl-070.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/XCEGROfAn4uHh2gG-auswahl-070.png)  
Nun wenn die Machine noch läuft einmal stoppen und wieder starten.  
Nun sollte das so aussehen.

[![Auswahl_071.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/scaled-1680-/VV14ZjX4YRnVkfcR-auswahl-071.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/VV14ZjX4YRnVkfcR-auswahl-071.png)

Fertig

# 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](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/scaled-1680-/P5ZrS60mTkFt7Gop-auswahl-068.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/P5ZrS60mTkFt7Gop-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](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/scaled-1680-/m1ewn0Or23oVCcTU-bildschirmfoto-vom-2023-02-25-10-01-21.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/m1ewn0Or23oVCcTU-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](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/scaled-1680-/FqLZG3ida44UeSEX-bildschirmfoto-vom-2023-02-25-10-02-17.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/FqLZG3ida44UeSEX-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](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/scaled-1680-/BSBCmyH5Vak2es8d-bildschirmfoto-vom-2023-02-25-10-01-32.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/BSBCmyH5Vak2es8d-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](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/scaled-1680-/GtMMpOJNJ6xyfJNE-bildschirmfoto-vom-2023-02-25-09-36-46.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/GtMMpOJNJ6xyfJNE-bildschirmfoto-vom-2023-02-25-09-36-46.png)

Nun auf Weiter

[![Bildschirmfoto vom 2023-02-25 09-36-55.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/scaled-1680-/L1aAaCIndGOBHHtN-bildschirmfoto-vom-2023-02-25-09-36-55.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/L1aAaCIndGOBHHtN-bildschirmfoto-vom-2023-02-25-09-36-55.png)

Nun auf Datenträger

[![Bildschirmfoto vom 2023-02-25 09-37-04.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/scaled-1680-/t0rOGOkOpoO4FWwE-bildschirmfoto-vom-2023-02-25-09-37-04.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/t0rOGOkOpoO4FWwE-bildschirmfoto-vom-2023-02-25-09-37-04.png)

Auf Durchsuchen

[![Bildschirmfoto vom 2023-02-25 09-37-13.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/scaled-1680-/tWM0nf56BbsZjpoU-bildschirmfoto-vom-2023-02-25-09-37-13.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/tWM0nf56BbsZjpoU-bildschirmfoto-vom-2023-02-25-09-37-13.png)

Nun auf die VirtCD -&gt; vioserial euer Bestriebsystem, bei mir Win10 dann die Architektur bei amd64

[![Bildschirmfoto vom 2023-02-25 09-37-44.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/scaled-1680-/70nNLPQtfl2mjXFB-bildschirmfoto-vom-2023-02-25-09-37-44.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/70nNLPQtfl2mjXFB-bildschirmfoto-vom-2023-02-25-09-37-44.png)

Dort die vioser.inf öffnen

[![Bildschirmfoto vom 2023-02-25 09-37-55.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/scaled-1680-/9asyvkZOU2Gi92e6-bildschirmfoto-vom-2023-02-25-09-37-55.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/9asyvkZOU2Gi92e6-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](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/scaled-1680-/GhB8UTQzf5QDTbPn-bildschirmfoto-vom-2023-02-25-09-38-24.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/GhB8UTQzf5QDTbPn-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](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/scaled-1680-/xJbVy0YCadC0SzTt-bildschirmfoto-vom-2023-02-25-10-02-01.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/xJbVy0YCadC0SzTt-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](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/scaled-1680-/FqLZG3ida44UeSEX-bildschirmfoto-vom-2023-02-25-10-02-17.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/FqLZG3ida44UeSEX-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](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/scaled-1680-/MPMfCR7II6qd8tfZ-bildschirmfoto-vom-2023-02-25-09-25-54.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-02/MPMfCR7II6qd8tfZ-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.

# 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.

# 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

<span style="caret-color: #303030; color: #303030; font-family: Monospace; font-size: 13.333333015441895px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-tap-highlight-color: rgba(0, 0, 0, 0.4); -webkit-text-stroke-width: 0px; background-color: #ffffff; text-decoration: none; display: inline !important; float: none;">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.  
</span>

##### <span style="caret-color: #303030; color: #303030; font-family: Monospace; font-size: 13.333333015441895px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-tap-highlight-color: rgba(0, 0, 0, 0.4); -webkit-text-stroke-width: 0px; background-color: #ffffff; text-decoration: none; display: inline !important; float: none;">Löschen</span>

```
ceph osd crush rm-device-class <osdnr>
ceph osd crush rm-device-class osd.12
Ausgabe:
done removing class of osd(s): 12
```

##### <span style="caret-color: #303030; color: #303030; font-family: Monospace; font-size: 13.333333015441895px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-tap-highlight-color: rgba(0, 0, 0, 0.4); -webkit-text-stroke-width: 0px; background-color: #ffffff; text-decoration: none; display: inline !important; float: none;">Setzen</span>

```
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'
```

<span style="caret-color: #303030; color: #303030; font-family: Monospace; font-size: 13.333333015441895px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-tap-highlight-color: rgba(0, 0, 0, 0.4); -webkit-text-stroke-width: 0px; background-color: #ffffff; text-decoration: none; display: inline !important; float: none;">  
</span>

### 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](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/scaled-1680-/eu2hkTq5XVDeNYmJ-auswahl-941.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/eu2hkTq5XVDeNYmJ-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](https://wiki.hacker-net.de/books/proxmox-ve/page/crushmap-dekompilieren-kompilieren "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](https://wiki.hacker-net.de/books/proxmox-ve/page/crushmap-dekompilieren-kompilieren "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](https://wiki.hacker-net.de/books/proxmox-ve/page/crushmap-dekompilieren-kompilieren "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

<table class="tableblock frame-none grid-none" id="bkmrk-%3Crule-name%3E-name-der" style="margin-left: 0px; margin-right: auto; width: 114.691%;"><tbody><tr><td class="tableblock halign-left valign-top" style="width: 16.0692%;">&lt;rule-name&gt;

</td><td class="tableblock halign-left valign-top" style="width: 83.9308%;">Name der Regel, um sie mit einem Pool zu verbinden (angezeigt in der GUI und CLI)

</td></tr><tr><td class="tableblock halign-left valign-top" style="width: 16.0692%;">&lt;root&gt;

</td><td class="tableblock halign-left valign-top" style="width: 83.9308%;">Zu welchem Crush-Root sie gehören sollte (Standard-Ceph-Root "default")

</td></tr><tr><td class="tableblock halign-left valign-top" style="width: 16.0692%;">&lt;failure-domain&gt;

</td><td class="tableblock halign-left valign-top" style="width: 83.9308%;">An welchem Fehlerbereich die Objekte verteilt werden sollten (normalerweise Host)   
(Bei one Node wäre das hier osd)

</td></tr><tr><td class="tableblock halign-left valign-top" style="width: 16.0692%;">&lt;class&gt;

</td><td class="tableblock halign-left valign-top" style="width: 83.9308%;">Welcher Typ von OSD-Backing-Store verwendet werden soll (e.g., nvme, ssd, hdd)

</td></tr></tbody></table>

```
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](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/scaled-1680-/6kIJo6BngwbG4LSX-auswahl-938.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/6kIJo6BngwbG4LSX-auswahl-938.png)

Dann auf Create klicken

[![Auswahl_939.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/scaled-1680-/JlJX5sErrP5nKul2-auswahl-939.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/JlJX5sErrP5nKul2-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](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/scaled-1680-/Yina9atDunV0RyXz-auswahl-940.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-03/Yina9atDunV0RyXz-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

# 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](https://wiki.hacker-net.de/uploads/images/gallery/2023-07/scaled-1680-/V8dZFv6vVSfsJmWo-auswahl-1024.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-07/V8dZFv6vVSfsJmWo-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](https://wiki.hacker-net.de/uploads/images/gallery/2023-07/scaled-1680-/hSZoQeXaDtLirfcL-auswahl-1026.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-07/hSZoQeXaDtLirfcL-auswahl-1026.png)

# 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](https://wiki.hacker-net.de/uploads/images/gallery/2023-07/scaled-1680-/AgPXIXi14ra7B8wI-auswahl-1025.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-07/AgPXIXi14ra7B8wI-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 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

```

# 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
```

<details id="bkmrk-ausgabe-root%40vmserv%3A"><summary>Ausgabe</summary>

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

</details>#### 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&lt;VMID&gt;.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:

<details id="bkmrk-111.conf-%23ip%253a192.1"><summary>111.conf</summary>

\#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

</details>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
```

# 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&lt;VMID&gt;.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:

<details id="bkmrk-111.conf-%23ip%253a192.1"><summary>111.conf</summary>

\#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

</details>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
```

# 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/](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.

# 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.

# 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](https://wiki.hacker-net.de/uploads/images/gallery/2024-11/scaled-1680-/JwzXYlrkA30mzakq-auswahl-316.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-11/JwzXYlrkA30mzakq-auswahl-316.png)

# 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
```

# 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/](https://network.nvidia.com/products/infiniband-drivers/linux/mlnx_ofed/)

### Installation Mellanox 3 Karten Debian Buster

[![Auswahl_126.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-05/scaled-1680-/FcJLLKYJVhcql1G7-auswahl-126.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-05/FcJLLKYJVhcql1G7-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/](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](https://wiki.hacker-net.de/uploads/images/gallery/2023-05/scaled-1680-/dhPq4vCJ6KPfgcOG-auswahl-127.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-05/dhPq4vCJ6KPfgcOG-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-**Q**CBT = **10 Gbit** Ethernet // **40 Gbit** Infiniband  
MCX354A-**F**CBT = **40 Gbit** Ethernet // **56 Gbit** Infiniband  
  
  
Dann die Datei herunterladen

[![Auswahl_128.png](https://wiki.hacker-net.de/uploads/images/gallery/2023-05/scaled-1680-/2PU9UNShA4rDZBdm-auswahl-128.png)](https://wiki.hacker-net.de/uploads/images/gallery/2023-05/2PU9UNShA4rDZBdm-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

# 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

# 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 -&gt; Permission -&gt; Roles und klciken dort auf Create

[![Auswahl_385.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-05/scaled-1680-/FDtiCYKupQgkmdqb-auswahl-385.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-05/FDtiCYKupQgkmdqb-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](https://wiki.hacker-net.de/uploads/images/gallery/2024-05/scaled-1680-/fkyhK3A9EhQqwLNx-auswahl-387.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-05/fkyhK3A9EhQqwLNx-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 -&gt; Permission -&gt; 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](https://wiki.hacker-net.de/uploads/images/gallery/2024-05/scaled-1680-/vexn6zKp8TpLKHOE-auswahl-388.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-05/vexn6zKp8TpLKHOE-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](https://wiki.hacker-net.de/uploads/images/gallery/2024-05/scaled-1680-/JlKptWcQXXRzmDSE-auswahl-389.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-05/JlKptWcQXXRzmDSE-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](https://wiki.hacker-net.de/uploads/images/gallery/2024-05/scaled-1680-/pNccuQdSSzXFl4Il-auswahl-390.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-05/pNccuQdSSzXFl4Il-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](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](https://wiki.hacker-net.de/uploads/images/gallery/2024-05/scaled-1680-/GfYbpMmsqsDR2rFr-menu-010.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-05/GfYbpMmsqsDR2rFr-menu-010.png)

Nun wählen wir unseren User aus und die VDIClients Role klicken auf add, fertig.

[![Auswahl_391.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-05/scaled-1680-/kqM7OCueDBJ1ieaJ-auswahl-391.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-05/kqM7OCueDBJ1ieaJ-auswahl-391.png)

Proxmox vorbereitung ist damit abgeschlossen.

# 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](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](https://wiki.hacker-net.de/uploads/images/gallery/2024-05/scaled-1680-/5cw9LQelEh8Q7rwp-auswahl-392.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-05/5cw9LQelEh8Q7rwp-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](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](https://wiki.hacker-net.de/uploads/images/gallery/2024-05/scaled-1680-/urVihOPlhRDgNyAo-2024-05-05-16-14-41-releases-joshpatten-pve-vdiclient.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-05/urVihOPlhRDgNyAo-2024-05-05-16-14-41-releases-joshpatten-pve-vdiclient.png)

Nun Einfach den Wizzard durchklicken

[![01.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-05/scaled-1680-/MzO6qtmjohW38HCT-01.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-05/MzO6qtmjohW38HCT-01.png)

Akzeptieren und weiter

[![02.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-05/scaled-1680-/cJnjavYZIBMHk2hn-02.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-05/cJnjavYZIBMHk2hn-02.png)

Alles bei Standard lassen und weiter

[![03.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-05/scaled-1680-/Mtg58jFDQi69Xxhw-03.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-05/Mtg58jFDQi69Xxhw-03.png)

Auf installieren und dann ja anklciken

[![04.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-05/scaled-1680-/tO85bFNhAiVkqEPt-04.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-05/tO85bFNhAiVkqEPt-04.png)

Fertig

[![05.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-05/scaled-1680-/pjgeRxs0yFSpX6Ob-05.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-05/pjgeRxs0yFSpX6Ob-05.png)

Die Client INI anpassen.

Der PVE VDI Client benötigt eine **vdiclient.ini**. Er sucht automatisch nach der Datei in:

c:\\users\\&lt;deinbenutzername&gt;\\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](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](https://wiki.hacker-net.de/uploads/images/gallery/2024-05/scaled-1680-/9NbkQEYcIfb5dDKD-06.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-05/9NbkQEYcIfb5dDKD-06.png)

Benutzername Kennwort eingeben

[![07.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-05/scaled-1680-/jh1lIb3pwPxGXU24-07.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-05/jh1lIb3pwPxGXU24-07.png)

Bei der Virtellen Machine die man haben möchte (Hier haben wir nur eine) auf connect klicken

[![08.png](https://wiki.hacker-net.de/uploads/images/gallery/2024-05/scaled-1680-/wJUqZ2stGt5kppdS-08.png)](https://wiki.hacker-net.de/uploads/images/gallery/2024-05/wJUqZ2stGt5kppdS-08.png)

Nun Auf Connect klicken, verbunden