Raspberry Pi setup to avoid SD Card failures; IScsi boot from Syno NAS.
At this point, most home automation and IoT enthusiasts have multiple rpi boxes lying around, and I'm no exception. I've considered moving my home automation projects to rpi/ubuntu, and in the past, I've always worried about SD card failure. As a solution, I'm documenting a solution to network boot the rpi over iscsi (target hosted on a synology nas).
This setup has largely been documented elsewhere - so this post is mostly links included for posterity. This post is based on Ubuntu 20.04 LTS
- Use RPI Imager to install ubuntu server on an rpi with an SD card. I am choosing an LTS server image for this install (20.04 LTS).
- Since this is ubuntu - you can simply insert the card, boot up and login into the rpi; Remeber to update the rpi after install
sudo apt-get update && sudo apt-get upgrade
- iSCSI initiator uses TCP port 860 and 3260 - ensure that your rpi is on the same LAN/VLAN as the target or open the needed ports on your firewall. Remember that the client can connect from any port i.e. the firewall rule needs to allow iSCSI Client (Any ports) -> ISCSI Target (ports 860, 3260)
- 20.04 LTS has iscsi initiator (client) installed by default. You can check/install the client using below
sudo apt install open-iscsi
- Create the Target and LUN on the iSCSI server; copy the IQN; in my case it is
- Follow this guide to setup iscsi initiator; detail steps below.
- Query the target and connect to it; depending on the number of targets you have setup, and if you are using IPv4 and IPv6, you'll see multiple lines of discovery results; be sure to pick the right one
$ sudo iscsiadm --mode discoverydb --type sendtargets --portal <target-ip> --discover 192.168.200.5:3260,1 iqn.2000-01.com.synology:nas.Target-rpiboot
$ sudo iscsiadm --mode node --targetname iqn.2000-01.com.synology:nas.Target-rpiboot --portal <target-ip> --login Logging in to [iface: default, target: iqn.2000-01.com.synology:nas.Target-rpiboot, portal: <ip>,3260] (multiple)
- Use fdisk to partition the new device, create a new primary partition (use defaults); remember to write the partition info with "w"
sudo fdisk /dev/sda
- Now comes the interesting part - Follow this guide to move the bootdisk to the iSCSI target so that you can boot directly from the iscsi disk (i.e. no writes/ issues on the SDHC card).
- Find the UUID of the disk (/dev/sda1 in my case)
sudo blkid /dev/sda1 /dev/sda1: UUID="12a0cab2-6e1d-41ba-aa46-2d11f6d848ca" TYPE="ext4" PARTUUID="efbf8b02-01"
- Follow this article to move the root folder to the iscsi drive and boot from the network.
- Once you reboot; check the mounts; it should show the mounted boot drive /dev/sdaX
$ df -k . Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda1 515009792 3153136 485625924 1% /
All done... ! The next post in this topic will cover setting up home-assistant on this ubuntu server (Step 2: Install Home Assistant Supervised).