Raspberry Pi SSD boot
Hier mal ein kurze Anleitung wie ihr euren Raspberry Pi von einer SSD mit LVM starten könnt.
Die MicroSD Karte werden wir für den Boot weiter benutzen und auch als Rescue System benutzen können.
Als erstes die SD Card ganz normal mit Noobs betanken. Und dann die Installation von raspbian auf die SD Karte installieren.
Somit haben wir unser lauffähiges System und später auch gleich ein Rescue System.
Nach der Installation einloggen. Standard User: pi Password: raspberry
Bei meiner Installation musste ich den SSH Server erstmal deinstallieren und dann wieder installieren da er sich nicht per Systemctl starten lies.
sudo apt-get purge openssh-server
sudo apt-get install openssh-server
Anschließend kann man sich per SSH (Putty) am System anmelden.
Als erstes werden wir das System auf den Aktuellen Stand bringen und anschließend neu starten.
sudo apt-get update
sudo apt-get full-upgrade
sudo apt-get install initramfs-tools-core
Da ich persönlich gerne mit LVM arbeite, werden wir jetzt die
sudo apt-get install lvm2
Als nächstes weisen wir den Pi an vom initramfs zu starten.
Das fügt die Zeile „initramfs initramfs.gz followkernel“ in die /boot/config.txt ganz oben ein
sudo sed -i '1i initramfs initramfs.gz followkernel' /boot/config.txt
Jetzt erstellen wir das initramfs.
sudo mkinitramfs -o /boot/initramfs.gz
Damit initramfs Automatisch aktualisiert wird, wenn ein Kernel Upgrade installiert wird oder unattended-upgrads installiert wird. Sollte man dieses kleine Script noch erstellen. Da ansonsten der Pi bei einem Reboot nicht mehr Startet und mann erst über das Resque System den das Initramfs neu bauen muss.
Dazu erstellen wir das File /etc/kernel/postinst.d/local-mkinitramfs und füge folgenden Code hinzu
#!/bin/sh -e
version="$1"
mkinitramfs -o "/boot/initramfs-${version}.gz" "${version}" >&2
version_suffix=$(echo "$version" | sed -e 's/^[0-9.]*-//')
current_suffix=$(uname -r | sed -e 's/^[0-9.]*-//')
if [ "$version_suffix" = "$current_suffix" ]; then
cp -v "/boot/initramfs-${version}.gz" /boot/initramfs.gz >&2
fi
Jetz wird automatisch nach einem Kernel Upgrade auch das Initramfs neu gebaut.
Anschließend starten wir noch mal neu und prüfen ob vom initramfs gestartet wurde
journalctl -b | grep initr
Feb 29 14:52:05 raspberrypi kernel: Trying to unpack rootfs image as initramfs…
Feb 29 14:52:05 raspberrypi kernel: Freeing initrd memory: 11956K
Root Partition auf die SSD verschieben
Als nächstes bereiten wir die SSD mit LVM vor, und kopieren / auf die entsprechenden LVs
cat /proc/partitions && df -h
major minor #blocks name 1 0 4096 ram0 1 1 4096 ram1 1 2 4096 ram2 1 3 4096 ram3 1 4 4096 ram4 1 5 4096 ram5 1 6 4096 ram6 1 7 4096 ram7 1 8 4096 ram8 1 9 4096 ram9 1 10 4096 ram10 1 11 4096 ram11 1 12 4096 ram12 1 13 4096 ram13 1 14 4096 ram14 1 15 4096 ram15 179 0 31260672 mmcblk0 179 1 2491021 mmcblk0p1 179 2 1 mmcblk0p2 179 5 32767 mmcblk0p5 179 6 262143 mmcblk0p6 179 7 28467200 mmcblk0p7 8 0 244198584 sda Filesystem Size Used Avail Use% Mounted on udev 1.8G 0 1.8G 0% /dev tmpfs 391M 11M 381M 3% /run /dev/mmcblk0p7 27G 1.3G 24G 6% / tmpfs 2.0G 0 2.0G 0% /dev/shm tmpfs 5.0M 4.0K 5.0M 1% /run/lock tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup /dev/mmcblk0p6 253M 64M 189M 26% /boot tmpfs 391M 0 391M 0% /run/user/0
Da ich persönlich keine Partitionen auf meiner SSD haben will installiere ich das PV Direkt auf die SDA
sudo pvcreate /dev/sda
Physical volume "/dev/sda" successfully created.
Volumen Gruppe erstellen
sudo vgcreate vg1 /dev/sda
Volume group "vg1" successfully created
Root / Log / Swap LV erstellen
sudo lvcreate -L 4G -n swap /dev/vg1 -y
sudo lvcreate -L 10G -n root /dev/vg1 -y
sudo lvcreate -L 5G -n varlog /dev/vg1 -y
Die Locical Volumes
sudo lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert root vg1 -wi-a----- 10.00g swap vg1 -wi-a----- 4.00g varlog vg1 -wi-a----- 5.00g
anschließend formatieren
sudo mkswap /dev/vg1/swap
sudo mkfs.ext4 /dev/vg1/root
sudo mkfs.ext4 /dev/vg1/varlog
Jetzt mounten wir das SSD root LV nach /mnt und erstellen für log ein Verzeichnis wo wir dann das log LV mounten.
sudo mount /dev/vg1/root /mnt/
sudo mkdir -p /mnt/var/log
sudo mount /dev/vg1/varlog /mnt/var/log
Dann sollte das ganze so ausschauen
df -h
Filesystem Size Used Avail Use% Mounted on udev 1.8G 0 1.8G 0% /dev tmpfs 391M 11M 381M 3% /run /dev/mmcblk0p7 27G 1.3G 24G 6% / tmpfs 2.0G 0 2.0G 0% /dev/shm tmpfs 5.0M 4.0K 5.0M 1% /run/lock tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup /dev/mmcblk0p6 253M 64M 189M 26% /boot tmpfs 391M 0 391M 0% /run/user/0 /dev/mapper/vg1-root 9.8G 37M 9.3G 1% /mnt /dev/mapper/vg1-varlog 4.9G 20M 4.6G 1% /mnt/var/log
Jetzt kopieren wir alles von / nach /mnt
sudo rsync -avxhP / /mnt/
Das kann jetzt ein klein wenig dauern. Danach sollte das so ausschauen
df -h
Filesystem Size Used Avail Use% Mounted on udev 1.8G 0 1.8G 0% /dev tmpfs 391M 11M 381M 3% /run /dev/mmcblk0p7 27G 1.3G 24G 6% / tmpfs 2.0G 0 2.0G 0% /dev/shm tmpfs 5.0M 4.0K 5.0M 1% /run/lock tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup /dev/mmcblk0p6 253M 64M 189M 26% /boot tmpfs 391M 0 391M 0% /run/user/0 /dev/mapper/vg1-root 9.8G 1.3G 8.0G 14% /mnt /dev/mapper/vg1-varlog 4.9G 22M 4.6G 1% /mnt/var/log
System boot anpassen
Jetzt passen wir das die /mnt/fstab an (im zukünftigen root)
sudo nano /mnt/etc/fstab
proc /proc proc defaults 0 0 /dev/mmcblk0p6 /boot vfat defaults 0 2 /dev/vg1/swap none swap sw,discard 0 0 /dev/vg1/root / ext4 defaults,noatime,nodiratime,discard 0 1 /dev/vg1/varlog /var/log ext4 defaults,noatime,nodiratime,discard 0 1
Anschließend die Boot config anpassen. Ich behalte hier die Original Boot config noch um später einfacher per NOOBS umschalten zu können.
Einfach /dev/mmcblk0p7 durch /dev/mapper/vg1-root ersetzen oder wie hier auskommentieren und eine neu ziele mit der Anpassung machen. (Zeilenumbrüche ignorieren das kommt vom Responsive design)
sudo nano /boot/cmdline.txt
console=serial0,115200 console=tty1 root=/dev/mapper/vg1-root rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait #console=serial0,115200 console=tty1 root=/dev/mmcblk0p7 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
Anschließend neu starten
sudo reboot
Der Systemstart startet von der SD und bootet den Kernel. Dann startet das system von der SSD.
Willkommen auf der SSD
Nach erfolgreichen boot und login sollte das nun so ausschauen.
df -h
Filesystem Size Used Avail Use% Mounted on udev 1.8G 0 1.8G 0% /dev tmpfs 391M 5.4M 386M 2% /run /dev/mapper/vg1-root 9.8G 1.3G 8.0G 14% / tmpfs 2.0G 0 2.0G 0% /dev/shm tmpfs 5.0M 4.0K 5.0M 1% /run/lock tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup /dev/mmcblk0p6 253M 64M 189M 26% /boot /dev/mapper/vg1-varlog 4.9G 22M 4.6G 1% /var/log tmpfs 391M 0 391M 0% /run/user/0
Wie wir jetzt sehen können ist / jetzt /dev/mapper/vg1-root und boot nach wie for auf der SD Karte.
Als letztes löschen wird jetzt das Swap File da wir ja eine Swap Partition haben.
Das spart 100MB und wird nicht mehr benötigt.
sudo dphys-swapfile swapoff
sudo dphys-swapfile uninstall
sudo rm /etc/init.d/dphys-swapfile
sudo systemctl disable dphys-swapfile.service
df -h
Filesystem Size Used Avail Use% Mounted on udev 1.8G 0 1.8G 0% /dev tmpfs 391M 5.4M 386M 2% /run /dev/mapper/vg1-root 9.8G 1.2G 8.1G 13% / tmpfs 2.0G 0 2.0G 0% /dev/shm tmpfs 5.0M 4.0K 5.0M 1% /run/lock tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup /dev/mmcblk0p6 253M 64M 189M 26% /boot /dev/mapper/vg1-varlog 4.9G 22M 4.6G 1% /var/log tmpfs 391M 0 391M 0% /run/user/0
Booten ins Rescue System
Wenn man ins Rescue System booten will hat man zwei möglichkeiten.
Erste möglichkeit ist man editiert die /boot/cmdline.txt und kommentiert die erste Zeile aus und die untere ein, und startet neu.
#console=serial0,115200 console=tty1 root=/dev/mapper/vg1-root rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait console=serial0,115200 console=tty1 root=/dev/mmcblk0p7 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
Zweite mögichkeit ist man drückt beim Booten die SHIFT Taste und geht ins NOOBs Boot menü.
Dann klickt man auf das Installierte Rasbian und oben auf Edit Config.
Dann im neuen Fenster auf cmdline.txt und kommentiert die erste zeile aus und die zweite zeile ein.
Anschliesend auf OK und Exit.
Damit bootet man wieder von SD und startet das System das auf der SD liegt.
Schreibe einen Kommentar