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

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

*