Rasberry PI von einem ISCSI-Laufwerk booten!

 

CentOS 7


iscsi-utils installieren:

yum install -y epel-release
yum install -y scsi-target-utils

Ordner für Image erstellen:

mkdir -p /mnt/disk_a/iscsi_disk

Image erstellen:

dd if=/dev/zero of=/mnt/disk_a/iscsi_disk/disk01.img count=0 bs=1 seek=8G

tgtd konfigurieren:

vi /etc/tgt/tgtd.conf

<target iqn.2017-12.net.mynet.intern.lx-server:target00>
backing-store /mnt/disk_a/iscsi_disk/disk01.img
</target>

tgtd starten:

systemctl start tgtd.service
systemctl enable tgtd.service

ISCSI-Ziel abfragen:

iscsiadm –mode discovery –type sendtargets –portal 192.168.1.123:3260

Mit ISCSI-Ziel verbinden:

iscsiadm –mode node –login –loginall all

Partitiontabelle erstellen:

fdisk /dev/sdX

Partition formatieren:

mkfs.ext4 /dev/sdX

Neue Partition suchen:

fdisk -l


Disk /dev/sdi: 8589 MB, 8589934592 bytes, 16777216 sectors
Units = Sektoren of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk label type: dos
Disk identifier: 0x0006a04c


Anpassungen bei einer bestehenden RPI-Installation mit Raspbian:


uname -r > 4.4.21+
apt-get install open-iscsi
touch /etc/iscsi/iscsi.initramfs
update-initramfs -v -k `uname -r` -c
cd /boot
ls > initrd.img-4.4.21+

vi config.txt :

initramfs initrd.img-4.4.21+ followkernel

vi cmdline.txt:

dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty10 elevator=deadline root=UUID=18de8be8-aa98-4245-a001-6cf34a250c47 rootfstype=ext4 ISCSI_INITIATOR=iqn.2017-12.net.mynet.intern.lx-server:dgpi ISCSI_TARGET_NAME=iqn.2017-12.net.mynet.intern.lx-server:target00 ISCSI_TARGET_IP=192.168.1.123 ISCSI_TARGET_PORT=3260 fsck.repair=yes rootwait

vi /etc/iscsi/initiatorname.iscsi :

InitiatorName=iqn.2017-12.net.mynet.intern.lx-server:dgpi

blkid:

/dev/sda1: UUID=“18de8be8-aa98-4245-a001-6cf34a250c47″

vi /etc/fstab:

/dev/mmcblk0p1 /boot vfat defaults,ro 0 2
UUID=18de8be8-aa98-4245-a001-6cf34a250c47 / ext4 defaults 1 1

RPI sd-karte am Server mounten und rootfs kopieren:

mkdir /OLD
mkdir /NEW

mount /dev/mmcblk0p2 /OLD
mount /dev/sdi1 /NEW

cd /OLD

tar -cSp –numeric-owner –atime-preserve -f – . | ( cd /NEW && tar -xSpv –atime-preserve -f – )

reboot

Auszug aus syslog:


Dec 16 20:44:10 pi kernel: [ 9.127900] iscsi: registered transport (tcp)
Dec 16 20:44:10 pi kernel: [ 10.432443] scsi host0: iSCSI Initiator over TCP/IP
Dec 16 20:44:10 pi kernel: [ 10.753011] scsi 0:0:0:0: RAID IET Controller 0001 PQ: 0 ANSI: 5
Dec 16 20:44:10 pi kernel: [ 10.802849] scsi 0:0:0:1: Direct-Access IET VIRTUAL-DISK 0001 PQ: 0 ANSI: 5
Dec 16 20:44:10 pi kernel: [ 10.846182] sd 0:0:0:1: [sda] 16777216 512-byte logical blocks: (8.59 GB/8.00 GiB)
Dec 16 20:44:10 pi kernel: [ 10.864030] sd 0:0:0:1: [sda] 4096-byte physical blocks
Dec 16 20:44:10 pi kernel: [ 10.937352] sd 0:0:0:1: [sda] Write Protect is off
Dec 16 20:44:10 pi kernel: [ 10.952641] sd 0:0:0:1: [sda] Mode Sense: 69 00 10 08
Dec 16 20:44:10 pi kernel: [ 10.974148] scsi 0:0:0:0: Attached scsi generic sg0 type 12
Dec 16 20:44:10 pi kernel: [ 10.990948] sd 0:0:0:1: [sda] Write cache: enabled, read cache: enabled, supports DPO and FUA
Dec 16 20:44:10 pi kernel: [ 11.014910] sd 0:0:0:1: Attached scsi generic sg1 type 0
Dec 16 20:44:10 pi kernel: [ 11.091095] sda: sda1
Dec 16 20:44:10 pi kernel: [ 11.191183] sd 0:0:0:1: [sda] Attached SCSI disk
Dec 16 20:44:10 pi kernel: [ 12.774408] EXT4-fs (sda1): mounted filesystem with ordered data mode. Opts: (null)


Fazit:

Im Prinzip funktioniert der allgemeine Betrieb gut, solange das target zur Verfügung steht.
Nach einem reboot oder einem wegbrechen der Netzwerkverbindung steht der RPI und kann nur durch trennen und wieder verbinden der Stromzufuhr zum Leben erweckt werden.
Ein sauberer shutdown bzw. ein reboot ist auch nicht möglich.

Nur ein „poweroff -f“ bzw. ein „reboot -f“ ist möglich.