Raspberry Pi Kernel für Proxmox optimieren

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 erstelle .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
 
KSM sharing / Proxmox Node mit drei VMs

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

Einzelnachweise

Kommentare

Loading comments...