Raspberry Pi Kernel für Proxmox optimieren: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
KKeine Bearbeitungszusammenfassung |
||
(3 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 14: | Zeile 14: | ||
KERNEL=kernel8 | KERNEL=kernel8 | ||
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- bcm2711_defconfig | make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- bcm2711_defconfig | ||
</syntaxhighlight>Die | </syntaxhighlight>Die erstellte .config Datei mit dem Editor öffnen:<syntaxhighlight lang="bash"> | ||
vi .config | vi .config | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== RBD-Modul (Container auf RBD-Storage speichern) == | |||
== Module aktivieren == | |||
=== RBD-Modul (Container auf RBD-Storage speichern) === | |||
Den Eintrag für das RBD-Modul finden:<syntaxhighlight lang="bash"> | Den Eintrag für das RBD-Modul finden:<syntaxhighlight lang="bash"> | ||
# CONFIG_BLK_DEV_RBD is not set | # CONFIG_BLK_DEV_RBD is not set | ||
Zeile 23: | Zeile 27: | ||
CONFIG_BLK_DEV_RBD=m | CONFIG_BLK_DEV_RBD=m | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== VLAN-Filtering aktivieren (Linux Bridge mit VLAN awareness) == | |||
=== VLAN-Filtering aktivieren (Linux Bridge mit VLAN awareness) === | |||
Den Eintrag für das VLAN-Filtering finden:<syntaxhighlight lang="bash"> | Den Eintrag für das VLAN-Filtering finden:<syntaxhighlight lang="bash"> | ||
# CONFIG_BRIDGE_VLAN_FILTERING is not set | # CONFIG_BRIDGE_VLAN_FILTERING is not set | ||
Zeile 30: | Zeile 36: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
=== KSM-Sharing aktivieren (RAM bei mehreren VMs sparen) === | |||
== KSM-Sharing aktivieren (RAM bei mehreren VMs sparen) == | |||
KSM (Kernel Samepage Merging) führt identische Teile des RAMs von mehreren VMs zusammen. | KSM (Kernel Samepage Merging) führt identische Teile des RAMs von mehreren VMs zusammen. | ||
Zeile 50: | Zeile 55: | ||
== Kernel bauen == | == Kernel bauen == | ||
<syntaxhighlight lang="bash"> | Mit folgendem Befehl den Build-Prozess starten:<syntaxhighlight lang="bash"> | ||
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- Image modules dtbs | make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- Image modules dtbs | ||
</syntaxhighlight>''Tipp: Mit dem Parameter'' <code>-j$(nproc)</code> ''führt der make-Befehl mehrere Jobs parallel aus (Soviele wie die CPU Kerne hat).'' | </syntaxhighlight>''Tipp: Mit dem Parameter'' <code>-j$(nproc)</code> ''führt der make-Befehl mehrere Jobs parallel aus (Soviele wie die CPU Kerne hat).'' | ||
Zeile 59: | Zeile 64: | ||
Lange warten... | Lange warten... | ||
Als nächstes muss die SD Karte des Raspberry | Als nächstes muss die SD Karte des Raspberry eingebunden werden. | ||
Bei Ubuntu 20.04 mit Desktop geschieht dies automatisch sobald Ihr die SD Karte einlegt. | Bei Ubuntu 20.04 mit Desktop geschieht dies automatisch sobald Ihr die SD Karte einlegt. | ||
Ansonsten müsst | Ansonsten müsst ihr sie manuell einbinden:<syntaxhighlight lang="bash" line="1"> | ||
cd /mnt | |||
mkdir mnt/fat32 | mkdir mnt/fat32 | ||
mkdir mnt/ext4 | mkdir mnt/ext4 |
Aktuelle Version vom 28. Mai 2024, 18:04 Uhr
Um auf einem Raspberry Proxmox Cluster, Container in einem RBD Storage zu speichern oder auf einer Linux Bridge VLAN awareness zu aktivieren, muss der Raspberry Kernel leicht modifiziert werden.
Diese Anleitung zeigt wie man den Raspberry Pi Kernel optimiert für Proxmox baut.
Vorbereitungen
Getestet auf Ubuntu 20.04.2 (64 Bit)
Abhängigkeiten und 64Bit Toolchain installieren:
apt install git bc bison flex libssl-dev make libc6-dev libncurses5-dev crossbuild-essential-arm64
Ins /home/<user>/
Verzeichnis wechseln und Git-Repo klonen:
git clone --depth=1 https://github.com/raspberrypi/linux
Konfiguration für den Raspberry Pi 4 64 Bit erstellen:
cd linux
KERNEL=kernel8
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- bcm2711_defconfig
Die erstellte .config Datei mit dem Editor öffnen:
vi .config
Module aktivieren
RBD-Modul (Container auf RBD-Storage speichern)
Den Eintrag für das RBD-Modul finden:
# CONFIG_BLK_DEV_RBD is not set
Kommentar entfernen und als Modul einbinden:
CONFIG_BLK_DEV_RBD=m
VLAN-Filtering aktivieren (Linux Bridge mit VLAN awareness)
Den Eintrag für das VLAN-Filtering finden:
# CONFIG_BRIDGE_VLAN_FILTERING is not set
Die Funktion aktivieren:
CONFIG_BRIDGE_VLAN_FILTERING=y
KSM-Sharing aktivieren (RAM bei mehreren VMs sparen)
KSM (Kernel Samepage Merging) führt identische Teile des RAMs von mehreren VMs zusammen.
Bei Proxmox tritt dieser Effekt erst ein wenn der Host >=80% RAM-Auslastung hat.[1]
Den Eintrag für das KSM-Sharing finden:
# CONFIG_KSM is not set
Die Funktion aktivieren:
CONFIG_KSM=y
Zur Funktionskontrolle kann in der Übersicht eines Proxmox Nodes der Wert "KSM sharing" beobachtet werden.
Alternativ kann folgender Befehl in der Shell ausgeführt werden:
watch cat /sys/kernel/mm/ksm/pages_sharing
Kernel bauen
Mit folgendem Befehl den Build-Prozess starten:
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- Image modules dtbs
Tipp: Mit dem Parameter -j$(nproc)
führt der make-Befehl mehrere Jobs parallel aus (Soviele wie die CPU Kerne hat).
Alle Abfragen mit ENTER bestätigen
Lange warten...
Als nächstes muss die SD Karte des Raspberry eingebunden werden.
Bei Ubuntu 20.04 mit Desktop geschieht dies automatisch sobald Ihr die SD Karte einlegt.
Ansonsten müsst ihr sie manuell einbinden:
cd /mnt
mkdir mnt/fat32
mkdir mnt/ext4
sudo mount /dev/sdb6 mnt/fat32
sudo mount /dev/sdb7 mnt/ext4
Der Pfad zu den Partitionen (sdb6, sdb7) muss ggf. angepasst werden.
Bei der automatischen Einbindung unter Ubuntu heißen die Verzeichnisse eventuell anders:
- /mnt/fat32
→ /media/<user>/boot
- /mnt/ext4
→ /media/<user>/rootfs
Kernel Module auf SD Karte installieren
Bei manueller Einbindung:
sudo env PATH=$PATH make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- INSTALL_MOD_PATH=/mnt/ext4 modules_install
Bei automatischer Einbindung:
sudo env PATH=$PATH make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- INSTALL_MOD_PATH=/media/<user>/rootfs modules_install
Kernel auf SD Karte kopieren
Bei manueller Einbindung:
sudo cp /mnt/fat32/$KERNEL.img /mnt/fat32/$KERNEL-backup.img
sudo cp arch/arm64/boot/Image /mnt/fat32/$KERNEL.img
sudo cp arch/arm64/boot/dts/broadcom/*.dtb /mnt/fat32/
sudo cp arch/arm64/boot/dts/overlays/*.dtb* /mnt/fat32/overlays/
sudo cp arch/arm64/boot/dts/overlays/README /mnt/fat32/overlays/
sudo umount mnt/fat32
sudo umount mnt/ext4
Bei automatischer Einbindung:
sudo cp /media/<user>/boot/$KERNEL.img /media/<user>/boot/$KERNEL-backup.img
sudo cp arch/arm64/boot/Image /media/<user>/boot/$KERNEL.img
sudo cp arch/arm64/boot/dts/broadcom/*.dtb /media/<user>/boot/
sudo cp arch/arm64/boot/dts/overlays/*.dtb* /media/<user>/boot/overlays/
sudo cp arch/arm64/boot/dts/overlays/README /media/<user>/boot/overlays/
sudo umount /media/<user>/boot
sudo umount /media/<user>/rootfs
Kernel Update blockieren
Damit beim nächsten apt update/upgrade
der Kernel nicht durch die offizielle Version ersetzt wird, blockieren wir die Updates:
sudo apt-mark hold raspberrypi-bootloader raspberrypi-kernel raspberrypi-kernel-headers
Quellen
https://www.raspberrypi.org/documentation/linux/kernel/building.md