Schlagwort-Archive: Ubuntu

Hetzner Cloud VM zu Proxmox migrieren: Komplette Schritt-für-Schritt Anleitung 2025

Du möchtest deine virtuelle Maschine von der Hetzner Cloud auf deinen eigenen Proxmox Server migrieren? Diese ausführliche Anleitung zeigt dir, wie du eine 1:1 Migration durchführst – ohne Datenverlust und mit minimaler Downtime.

Warum von Hetzner Cloud zu Proxmox wechseln?

Die Migration von Hetzner Cloud zu einem eigenen Proxmox Server bietet mehrere Vorteile:

  • Kosteneinsparung: Langfristig günstiger als Cloud-Hosting
  • Vollständige Kontrolle: Eigene Hardware und Konfiguration
  • Bessere Performance: Dedizierte Ressourcen ohne Sharing
  • Datenschutz: Deine Daten bleiben auf eigener Hardware

Voraussetzungen für die Migration

Bevor du beginnst, stelle sicher, dass du folgende Komponenten bereit hast:

  • Funktionierenden Proxmox Server
  • Hetzner Storage Box oder ausreichend Speicherplatz
  • SSH-Zugang zu beiden Systemen
  • Backup deiner wichtigen Daten (Sicherheit geht vor!)

Schritt 1: Hetzner Cloud Instanz vorbereiten

Zuerst musst du deine VM ordnungsgemäß herunterfahren, um Dateninkonsistenzen zu vermeiden.

# VM sauber herunterfahren (vor dem Rescue-Modus)
sudo shutdown -h now

Wichtig: Starte anschließend das Rescue-System über die Hetzner Cloud Console. Dies gibt dir vollständigen Zugriff auf die VM-Hardware.


Schritt 2: Festplatte im Hetzner Rescue System klonen

Storage Box mounten

# Verzeichnis für Storage Box erstellen
mkdir -p /mnt/storagebox

# Mount über SMB/CIFS (ersetze username und password)
mount -t cifs //username.your-storagebox.de/backup /mnt/storagebox -o username=username,password=yourpassword

# SSH-Schlüssel-basierte Verbindung (Alternative)
# mkdir -p ~/.ssh
# echo "your-storage-box-ssh-key" >> ~/.ssh/authorized_keys
# sshfs username@username.your-storagebox.de:/ /mnt/storagebox

Festplatte identifizieren und sichern

# Verfügbare Festplatten anzeigen
lsblk
fdisk -l

# Festplatte klonen mit Kompression (spart Zeit und Speicher)
# WICHTIG: /dev/sda durch die korrekte Festplatte ersetzen
dd if=/dev/sda bs=64M status=progress | gzip > /mnt/storagebox/hetzner-vm-backup.img.gz

Pro-Tipp: Die Kompression mit gzip reduziert die Dateigröße erheblich und beschleunigt die Übertragung.


Schritt 3: Image auf Proxmox Server übertragen

Storage Box auf Proxmox mounten

# Storage Box auf Proxmox Server mounten
mkdir -p /mnt/storagebox
mount -t cifs //username.your-storagebox.de/backup /mnt/storagebox -o username=username,password=yourpassword

# Komprimiertes Image entpacken und lokal speichern
gunzip -c /mnt/storagebox/hetzner-vm-backup.img.gz > /var/lib/vz/images/hetzner-vm-backup.img

Virtuelle Maschine in Proxmox erstellen

# VM mit passenden Spezifikationen erstellen
qm create 100 \
  --name migrated-vm \
  --memory 2048 \
  --cores 2 \
  --net0 virtio,bridge=vmbr0 \
  --ostype l26 \
  --cpu host \
  --bios seabios

# Disk-Image importieren
qm importdisk 100 /var/lib/vz/images/hetzner-vm-backup.img local-lvm

# Importierte Festplatte zur VM hinzufügen
qm set 100 --scsi0 local-lvm:vm-100-disk-0

# Boot-Konfiguration setzen
qm set 100 --boot c --bootdisk scsi0

Wichtig: Passe RAM, CPU-Kerne und Netzwerk-Bridge entsprechend deiner ursprünglichen VM-Konfiguration an.


Schritt 4: Erste Konfiguration nach dem Boot

VM starten und Zugang herstellen

Starte nun die VM über die Proxmox Web-Konsole. Der erste Boot kann länger dauern, da das System die neue Hardware erkennt.

Hinweis: Standardmäßig ist eine englische Tastatur konfiguriert!

Deutsches Tastaturlayout aktivieren

# Sofortige Umstellung auf deutsches Layout
sudo loadkeys de

# Permanente Konfiguration
sudo dpkg-reconfigure keyboard-configuration
# Wähle: Generic 105-key PC → German → German

# Alternative: Über localectl
sudo localectl set-keymap de


Schritt 5: Cloud-Init deaktivieren

Cloud-Init kann in der Proxmox-Umgebung Probleme verursachen und sollte deaktiviert werden:

# Cloud-Init Services deaktivieren
sudo systemctl disable cloud-init
sudo systemctl disable cloud-init-local
sudo systemctl disable cloud-config
sudo systemctl disable cloud-final

# Cloud-Init Netzwerk-Konfiguration dauerhaft deaktivieren
sudo mkdir -p /etc/cloud/cloud.cfg.d/
echo 'network: {config: disabled}' | sudo tee /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg

# Cloud-Init komplett deaktivieren
sudo touch /etc/cloud/cloud-init.disabled


Schritt 6: Netzwerk-Konfiguration korrigieren

Das größte Problem nach der Migration ist meist die Netzwerk-Konfiguration. Hetzner Cloud und Proxmox verwenden unterschiedliche Interface-Namen und Konfigurationsmethoden.

Konkurrierende Netzwerk-Systeme identifizieren

# Aktive Netzwerk-Services prüfen
systemctl status networking
systemctl status systemd-networkd
systemctl status NetworkManager

Lösung: Netplan verwenden (empfohlen für Ubuntu 18.04+)

# Classic networking deaktivieren
sudo systemctl disable networking

# Alte Cloud-Init Netplan-Konfigurationen entfernen
sudo rm -f /etc/netplan/50-cloud-init.yaml
sudo rm -f /etc/netplan/*cloud*

# Neue Netplan-Konfiguration erstellen
sudo nano /etc/netplan/01-netcfg.yaml

Moderne Netplan-Konfiguration (für statische IP):

network:
  version: 2
  renderer: networkd
  ethernets:
    ens18:  # Interface-Name kann variieren (ens18, eth0, enp0s18)
      addresses:
        - 192.168.1.100/24  # Deine gewünschte IP-Adresse
      routes:
        - to: default
          via: 192.168.1.1   # Dein Gateway
      nameservers:
        addresses:
          - 192.168.1.1      # Dein DNS-Server
          - 8.8.8.8          # Backup-DNS
      dhcp4: false
      dhcp6: false

Für DHCP-Konfiguration:

network:
  version: 2
  renderer: networkd
  ethernets:
    ens18:
      dhcp4: true
      dhcp6: false

Konfiguration anwenden und testen

# Netplan-Konfiguration anwenden
sudo netplan apply

# Netzwerk-Status prüfen
ip a
ip route

# Verbindung testen
ping 8.8.8.8
ping google.com

# Persistenz durch Neustart testen
sudo reboot


Schritt 7: System-Optimierung nach der Migration

SSH-Host-Keys erneuern

Aus Sicherheitsgründen solltest du neue SSH-Host-Keys generieren:

# Alte SSH-Host-Keys entfernen
sudo rm /etc/ssh/ssh_host_*

# Neue Keys generieren
sudo dpkg-reconfigure openssh-server

# SSH-Service neustarten
sudo systemctl restart ssh

System-Updates durchführen

# Package-Listen aktualisieren
sudo apt update

# System vollständig aktualisieren
sudo apt upgrade -y

# Nicht benötigte Pakete entfernen
sudo apt autoremove -y

# System neustarten
sudo reboot

System-Status überprüfen

# Failed Services anzeigen
sudo systemctl --failed

# System-Informationen anzeigen
hostnamectl
free -h
df -h
lsblk

# Hardware-Erkennung prüfen
dmesg | grep -i error
sudo journalctl -b | grep -i error


Häufige Probleme und Lösungen

Problem: VM bootet nicht oder bleibt hängen

Lösung: Hardware-Kompatibilität anpassen

# VM stoppen
qm stop 100

# CPU-Typ auf 'host' setzen
qm set 100 --cpu host

# BIOS statt UEFI verwenden
qm set 100 --bios seabios

# IDE statt SCSI-Controller (bessere Kompatibilität)
qm set 100 --ide0 local-lvm:vm-100-disk-0
qm set 100 --boot order=ide0

# Serial Console für besseres Debugging
qm set 100 --serial0 socket

Problem: Netzwerk funktioniert nicht dauerhaft

Ursache: Mehrere Netzwerk-Management-Systeme konkurrieren

Lösung:

  1. Cloud-Init komplett deaktivieren
  2. Nur ein Netzwerk-System verwenden (Netplan ODER interfaces)
  3. Korrekte Interface-Namen verwenden

Problem: Interface-Name unbekannt

# Alle verfügbaren Interfaces anzeigen
ip link show
ls /sys/class/net/

# Typische Namen:
# - ens18 (moderne Ubuntu-Versionen)
# - eth0 (ältere Versionen)
# - enp0s18 (bestimmte Konfigurationen)


Fazit

Die Migration einer VM von Hetzner Cloud zu Proxmox ist durchaus machbar und bietet langfristig viele Vorteile. Die kritischen Schritte sind:

  1. Saubere Vorbereitung: VM ordnungsgemäß herunterfahren
  2. Vollständiges Backup: 1:1 Kopie der Festplatte erstellen
  3. Korrekte Hardware-Konfiguration: CPU, RAM und Storage anpassen
  4. Netzwerk-Bereinigung: Cloud-Init deaktivieren und Netplan konfigurieren
  5. System-Optimierung: Updates und Sicherheits-Anpassungen

Mit dieser Anleitung solltest du deine VM erfolgreich migrieren können. Bei Problemen ist es wichtig, die Logs zu analysieren und systematisch vorzugehen.

Hast du Fragen zur Migration oder sind Probleme aufgetreten? Teile deine Erfahrungen in den Kommentaren!

Erste Schritte mit ZFS auf Linux Ubuntu 20.04 LTS

Ich habe schon länger mit ZFS (an der Oberfläche) zu tun, da ich Privat ein FreeNAS einsetze. Jetzt wollte ich ZFS mal auf Linux einsetzen und testen und was soll ich sagen: Ich bin begeistert!

Dieser Blogeintrag soll einen ersten Einstieg bieten und für mich als Dokumentation dienen ;).

Warum ZFS? Ich habe mir in der Hetzner-Serverbörse einen kleinen Storage-Server für eine Nextcloud geklickt:

  • 2x SSD 512GB (Für Betriebssystem, Webserver und die Nextcloud-Daten)
  • 2x HDD 3TB (Für die abgelegten Daten der Nextcloud)

Installation Grundsystem

Das Grundsystem ist ein Standard Ubuntu 20.04 LTS, welches auf den SSDs (in einer RAID0 Konfiguration) installiert wurde.

Installation und Konfiguration ZFS

Erst mal ZFS installieren:

apt install zfsutils-linux

Nun möchte ich die zwei HDDs (/dev/sda und /dev/sdb) als zfs-mirror installieren:

zpool create storage mirror /dev/sda /dev/sdb

Fertig :). Ab jetzt kann man den Mirror unter /storage/ verwenden.

Da ich den Server zusammen mit ein paar Freunden verwende, möchte ich jedem sein eigenes Dataset. Dataset ist der generische Begriff für ein ZFS-Dateisystem, Volume, Snapshots oder Klone. Jedes Dataset besitzt einen eindeutigen Namen in der Form poolname/path@snapshot. Die Wurzel des Pools ist technisch gesehen auch ein Dataset (Weitere Infos: https://www.freebsd.org/doc/de_DE.ISO8859-1/books/handbook/zfs-term.html)

zfs create storage/[name]

Anstelle von [name] einfach den jeweiligen Namen des Datasets angeben. Jetzt kann optional noch die Kompression aktiviert werden:

zfs set compression=lz4 storage/[name]

lz4 Compression kann ohne größere Geschwindigkeitsverluste für Lesen/Schreiben (bei modernen CPUs) eingesetzt werden. Die Anzeige der Compression-Ratio kann über folgenden Befehl erreicht werden:

zfs get compression,compressratio storage/[name]

Jedes Dataset soll eine quota bekommen:

zfs set quota=1G storage/[name]

Fertig ist die Config. Weitere Informationen könnt ihr hier finden: https://www.42u.ca/2016/11/23/zfs-cheat-sheet/#:~:text=Dataset%20%E2%80%93%20This%20is%20the%20file,on%20top%20of%20the%20zpool.&text=If%20you%20were%20to%20think,you%20would%20use%20a%20zvol.

Automatischen Scrub aktivieren

Bei einem ZFS scrub werden die Festplatten auf Fehler geprüft und eventuelle defekte Dateien repariert. Man sollte den Scrub regelmäßig (etwa einmal im Monat durchführen). Dazu einfach einen einen Eintrag in die Crontab (crontab -e) schreiben:

0 2 1 * * /sbin/zpool scrub files

Der Status des letzten Scrub ist über den Befehl

zpool status

zu erhalten.

Wireguard Logo

Wireguard als Ersatz für openVPN auf Ubuntu 20.04 LTS und Arch Linux

Hallo Zusammen,

da mein openVPN in letzter Zeit performance-Probleme zeigt, habe ich mich dazu entschlossen mir mal Wireguard anzusehen.

Ich persönlich benötige openVPN um all meine Server und Maschinen zu erreichen. Manche davon befinden sich hinter Firewalls oder NAT und openVPN hat da eigentlich schon die perfekte Lösung parat. Da aber jeder von Wireguard schwärmt, wollte ich mir das mal ansehen und was soll ich sagen? Es ist wirklich wirklich einfach!

Das Setup

Was möchte ich erreichen?

+---------+
|         |
|   C01   +--------------------+
|         |                    |
+---------+                    |
                               |
+---------+               +----+----+
|         |               |         |
|   C02   +---------------+   S/C   |
|         |               |         |
+---------+               +----+----+
                               |
+---------+                    |
|         |                    |
|   C03   +--------------------+
|         |
+---------+

Mehrere Clients (C01-C0*) mit variablen oder festen IP-Adressen sollen mit einem Server (S/C) kommunizieren, der eine feste IP-Adresse hat. Der Server ist Server als auch Client, aber dazu komme ich später.

Die Installation

Dieser Schritt ist auf allen Clients als auch Server identisch:

#Ubuntu
apt install wireguard

#Arch
pacman -S wireguard-tools

Das war auch schon die installation. Tatsächlich ist wireguard sehr schlank.

Die initiale Konfiguration

Jeder Client oder Server bei Wiregard bekommt einen Public und Private-Key. Das Key-Paar muss für alle Clients un Server erstellt werden. Dazu auf jedem System mit root in das Verzeichnis /etc/wireguard/ wechseln und folgenden Befehl ausführen:

umask 077 $ wg genkey | tee private.key | wg pubkey > public.key

Bei diesem Befehl werden mit wireguard die keys generiert und die Dateien private.key und public.key geschrieben. Nur root sollte darauf Zugriff haben. Die Quelle für diesen Befehl: https://manpages.debian.org/unstable/wireguard-tools/wg.8.en.html

Die Server Konfiguration

Eine genauere Eklärung zur Konfiguration folgt weiter unten. Auf dem Server muss zunächst das Interface für den Server definiert werden (der [Interface]-Part). Dort wird die private IP-Adresse des Servers, der Private-Key des Servers und weitere Einstellungen wie Port, etc. definiert.

Anschließend muss für jeden Client, der jeweilige Public-Key dem Server bekannt gemacht werden und die IP-Adresse des Clients definiert werden.

ACHTUNG: Der wireguard-Dienst darf bei einer Konfigurations-Änderung nicht laufen und sollte vorher mit systemctl gestoppt werden. Wenn ihr die Anleitung das erste mal durcharbeitet, ist der Server nocht nicht gestartet. Das gilt nur für jede Änderung die ihr nach dem Starten durchführt.

Erstellt die Datei /etc/wireguard/wg0.conf (root:root) mit folgenden Einträgen (natürlich eure einstellungen anpassen:

# Einstellungen für Server S/C
[Interface]
# Private IP-Adresse des Servers
Address = 10.10.0.1
SaveConfig = true
ListenPort = 41194
# Private-Key des Servers (statt ... den PrivateKey-Eintagen)
PrivateKey = ...
# IP-Forwarding innerhalb des VPNs
PostUp = sysctl net/ipv4/conf/%i/forwarding=1

# Einstellunge für Client C01
[Peer]
# Public-Key des Clients, statt ... den Public-Key des Clients eingeben
PublicKey = ...
AllowedIPs = 10.10.0.2/32

# Einstellungen für Client C02
[Peer]
# Public-Key des Clients, statt ... den Public-Key des Clients eingeben
PublicKey = ...
AllowedIPs = 10.10.0.3/32

# Einstellungen für Client C03
[Peer]
# Public-Key des Clients, statt ... den Public-Key des Clients eingeben
PublicKey = ...
AllowedIPs = 10.10.0.4/32

Für jeden weiteren Client muss lediglich ein weiterer [Peer]-Block mit den entsprechenden Keys/IPs definiert werden.

Hinweis: Das erstellte Interface wird den Namen der Konfigdatei haben. In unserem Fall also wg0.

Nun den Server starten:

systemctl enable wg-quick@wg0
systemctl start wg-quick@wg0.service

Die Client Konfiguration

Die Client-Konfiguration ist ähnlich zur Server-Konfiguration und sogar noch etwas einfacher.

Beim [Interface]-Part muss der Private-Key des Client eingetragen werden und die zu verwendende IP-Addresse.

Beim [Peer]-Part muss jetzt die Konfiguration de Servers angegeben werden. Also Endpoint (kann die feste öffentliche IP des Servers sein, egal ob ipv4 oder ipv6 oder eine Domain).

Auf allen Clients mit root die Datei /etc/wireguard/wg0.conf mit folgendem (ähnlichen) Inhalt anlegen:

# Einstellungen für Client C02
[Interface]
# Private-Key des Clients, statt ... den Private-Key des Clients eingeben
PrivateKey = ...
Address = 10.10.0.3/32

[Peer]
# Public-Key des Servers, statt ... den Public-Key des Servers eintargen
PublicKey = ...
AllowedIPs = 10.10.0.0/24
# Die feste IP bzw. Domain des wireguard-Servers
Endpoint = vpn.deinedomain.de:41194
PersistentKeepalive = 15

Auch hier wieder den Service starten:

systemctl enable wg-quick@wg0
systemctl start wg-quick@wg0.service

Fertig!

Test der Verbindung

Wenn keine Fehler fallen, solltet sich jetzt alle Server und Clients gegenseitig pingen können. Das Interface wird nach einem Neustart automatisch gestartet.

Erklärung der Konfiguration

Nun zur genaueren Erklärung der Konfiguration.

Der PostUP-Part beim Server

Dieser ist nötig, damit sich die Clients und Server gegenseitig sehen. Es handelt sich hierbei um das standard IP forwarding von Linux. In diesem Fall nur für das Interface „%i“ (%i wird automatisch durch den Interface-Namen ergänzt) in unserem Fall wg0.

AllowedIPs

Euch ist sicher aufgefallen, dass sich das Subnet für AllowedIPs beim Server und beim Client unterscheiden. Dies liegt darn, dass AllowedIPs beim Server und beim Client leicht unterschiedlich verwendet wird.

Auf dem Server verhält sich AllowedIPs wie ein Router und gibt an, wohin traffic geroutet werden soll. Es reicht daher /32 (also genau eine IP).

Auf dem Client verhält sich AllowedIPs wie eine access controll Liste. Wenn das Netzwerk dort nicht gelistet ist, wird der ankommende traffic einfach ignoriert. Daher haben wir hier /24 definiert. Es wird also alles von 10.10.0.* akzeptiert.

Tableiste bei Thunderbird in die Titelleiste/Topleiste verschieben (Ubuntu Gnome)

Halli Leute,

gerade wer einen kleinen Bildschirm hat (Laptop) wird die Situation kennen. Einige Programme verwenden viel zu viel Platz. Besonders aufgefallen ist mir das bei Gnome mit Ubuntu. Ich habe mir seit langem mal wieder eine neue Version angetan und bin gerade dabei diese zu optimieren.

Problem

Bei Thunderbird wird die Tableiste platzverschwendend unter der Menübar angezeigt. Dies ist (zumindest in Windows und anderen Betriebssystemen) über die Einstellung (about:config) „mail.tabs.drawInTitlebar:true“ möglich. Leider wird diese Einstellung aber mit Gnome ignoriert.

Bildschirmfoto vom 2014-10-08 11:44:42

 

Lösung

Abhilfe schafft hier folgende Erweiterung: https://addons.mozilla.org/de/thunderbird/addon/htitle/

Einfach installieren und schon sieht es deutlich aufgeräumter aus:

Bildschirmfoto vom 2014-10-08 13:25:44

 

Zwar werden die Tabs nicht in die Titelbar verschoben, aber diese verschwindet einfach komplett. Ich bin mit dieser Lösung zufrieden und hoffe euch damit helfen zu können.

Übrigens: Wie es mit Chrome funktioniert habe ich hier geschrieben: Chromium Browser: Tabs in Titelleiste verschieben