Rootfilesystem Alternativen

iSCSI auf Client-Seite

iSCSI ist die Möglichkeit ein SCSI-System über TCP/IP abzuwickeln. Auf der Client-Seite ist als Initiator der "Open-iSCSI"-Daemon zuständig, der üblicherweise mittels Runlevel-Skript gestartet wird. Durch dieses Skript werden zudem die benötigten Kernel-Module geladen. Innerhalb des Initialramfs ist daher folgendes notwendig:

  • Bestücken von /etc/initiatorname.iscsi aus Kernel Commandline als Teil der "rootfs" URI (evtl. auch via "discovery")
  • Einrichten von /etc/iscsid.conf
  • Starten von iscsid
  • Einrichtung mittels iscsiadm
#/etc/iscsid.conf
node.startup = automatic # dann müssen u.U. noch die Passwörter gesetzt sein und 
                         # ein sinnvoller Eintrag in initiatorname.iscsi existieren
...

Eine klassische Festplatte bietet sich nicht an, da diese sich nicht schreibschützen lässt. Hingegen ist es inzwischen überhaupt kein Problem ein CD-ROM als Target anzubieten, was damit automatisch nur read-only ist. Das geht beispielsweise mit dem "tgt" iSCSI-Target, welches bei den meisten Distros dabei ist (--device-type=cd). Das Dateisystem spielt dabei keine Rolle, sowohl iso9660 als auch squashfs liessen sich ohne Probleme auf diese Weise importieren.

c1:~ # modprobe iscsi_tcp
c1:~ # iscsiadm -m discovery -t st -p 10.8.4.241 # unabhängig von initiatorname.iscsi
[591ef3] 10.8.4.241:3260,1 iqn.2001-04.com.example:storage.disk2.sys1.xyz
c1:~ # iscsiadm -m node -r 591ef3 # zeigt Einstellungen an (die man via /etc/iscsid.conf definiert)
c1:~ # iscsiadm -m node -r 591ef3 -l # entscheidender Schritt - hier wird verbunden
c1:~ # dmesg
iscsi: registered transport (tcp)
scsi0 : iSCSI Initiator over TCP/IP, v1.0-595
  Vendor: IET       Model: VIRTUAL-DISK      Rev: 0
  Type:   Direct-Access                      ANSI SCSI revision: 04
SCSI device sda: 4522992 512-byte hdwr sectors (2316 MB)
sda: Write Protect is off
sda: Mode Sense: 77 00 00 08
SCSI device sda: drive cache: write through
SCSI device sda: 4522992 512-byte hdwr sectors (2316 MB)
sda: Write Protect is off
sda: Mode Sense: 77 00 00 08
SCSI device sda: drive cache: write through
 sda: unknown partition table
sd 0:0:0:0: Attached scsi disk sda
sd 0:0:0:0: Attached scsi generic sg0 type 0
c1:~ # mount -t squashfs /dev/sr0 /mnt

iSCSI auf Linux / OpenSLX Server

Verwendung des "iSCSI Enterprise Targets", Konfiguration in der /etc/ietd.conf

#/etc/ietd.conf
Target iqn.2001-04.com.example:storage.disk2.sys1.xyz
Lun 0 Path=/export/10.1-squashfs,Type=fileio
Alias Test
        # various iSCSI parameters
        # (not all are used right now, see also iSCSI spec for details)
        #MaxConnections         1
        #InitialR2T             Yes
        #ImmediateData          No
        #MaxRecvDataSegmentLength 8192
        #MaxXmitDataSegmentLength 8192
        #MaxBurstLength         262144
        #FirstBurstLength       65536
        #DefaultTime2Wait       2
        #DefaultTime2Retain     20
        #MaxOutstandingR2T      8
        #DataPDUInOrder         Yes
        #DataSequenceInOrder    Yes
        #ErrorRecoveryLevel     0
        #HeaderDigest           CRC32C,None
        #DataDigest             CRC32C,None
        # various target parameters
        #Wthreads               8

Im Beispiel wird einfach eine SquashFS-Datei herausgereicht. Damit hat man dann zwar keine Partitionierung, was aber auch kein Problem zu sein scheint. Start des Dienstes mit /etc/init.d/iscsitarget, welches auch die notwendigen Kernel-Module (iscsi_trgt, crc32c) lädt und den ietd startet. Im Normalfall wird ein Target immer im schreibbaren Modus angeboten, was aber für den Zugriff von vielen Clients auf genau ein gemeinsames Target keinen Sinn macht.