Hi, I am trying to setup ISCSI Initiator on Jetson Orin NX 16GB. However, when i attempt to start/restart the services, the following error shows:
ubu@ubu-desktop:~$ systemctl status open-iscsi
● open-iscsi.service - Login to default iSCSI targets
Loaded: loaded (/lib/systemd/system/open-iscsi.service; enabled; vendor preset: enabled)
Active: inactive (dead)
Condition: start condition failed at Thu 2023-08-17 12:32:01 +08; 29min ago
├─ ConditionDirectoryNotEmpty=|/etc/iscsi/nodes was not met
└─ ConditionDirectoryNotEmpty=|/sys/class/iscsi_session was not met
Docs: man:iscsiadm(8)
man:iscsid(8)
Aug 17 12:32:01 ubu-desktop systemd[1]: Condition check resulted in Login to default iSCSI targets being skipped.
ubu@ubu-desktop:~$ systemctl status iscsid
● iscsid.service - iSCSI initiator daemon (iscsid)
Loaded: loaded (/lib/systemd/system/iscsid.service; disabled; vendor preset: enabled)
Active: failed (Result: timeout) since Thu 2023-08-17 12:32:01 +08; 29min ago
TriggeredBy: ● iscsid.socket
Docs: man:iscsid(8)
Process: 20496 ExecStartPre=/lib/open-iscsi/startup-checks.sh (code=exited, status=0/SUCCESS)
Process: 20499 ExecStart=/sbin/iscsid (code=exited, status=0/SUCCESS)
Aug 17 12:30:31 ubu-desktop systemd[1]: Starting iSCSI initiator daemon (iscsid)...
Aug 17 12:30:31 ubu-desktop iscsid[20499]: iSCSI logger with pid=20500 started!
Aug 17 12:30:31 ubu-desktop systemd[1]: iscsid.service: Failed to parse PID from file /run/iscsid.pid: Invalid argument
Aug 17 12:30:31 ubu-desktop iscsid[20500]: iSCSI daemon with pid=20501 started!
Aug 17 12:30:31 ubu-desktop iscsid[20500]: can not create NETLINK_ISCSI socket
Aug 17 12:32:01 ubu-desktop systemd[1]: iscsid.service: start operation timed out. Terminating.
Aug 17 12:32:01 ubu-desktop systemd[1]: iscsid.service: Failed with result 'timeout'.
Aug 17 12:32:01 ubu-desktop systemd[1]: Failed to start iSCSI initiator daemon (iscsid).
Upon attempts to reinstall:
ubu@ubu-desktop:~$ sudo apt install --reinstall open-iscsi
[sudo] password for ubu:
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages were automatically installed and are no longer required:
apt-clone archdetect-deb bogl-bterm busybox-static cryptsetup-bin dctrl-tools dpkg-repack gir1.2-timezonemap-1.0 gir1.2-xkl-1.0
grub-common libdebian-installer4 libtimezonemap-data libtimezonemap1 os-prober python3-icu python3-pam rdate tasksel
tasksel-data
Use 'sudo apt autoremove' to remove them.
The following packages will be upgraded:
open-iscsi
1 upgraded, 0 newly installed, 0 to remove and 293 not upgraded.
Need to get 277 kB of archives.
After this operation, 6,144 B of additional disk space will be used.
Get:1 http://ports.ubuntu.com/ubuntu-ports focal-updates/main arm64 open-iscsi arm64 2.0.874-7.1ubuntu6.4 [277 kB]
Fetched 277 kB in 2s (141 kB/s)
debconf: delaying package configuration, since apt-utils is not installed
(Reading database ... 146517 files and directories currently installed.)
Preparing to unpack .../open-iscsi_2.0.874-7.1ubuntu6.4_arm64.deb ...
Unpacking open-iscsi (2.0.874-7.1ubuntu6.4) over (2.0.874-7.1ubuntu6) ...
Setting up open-iscsi (2.0.874-7.1ubuntu6.4) ...
Installing new version of config file /etc/iscsi/iscsid.conf ...
grep: /lib/modules-load.d/open-iscsi.conf: No such file or directory
Processing triggers for systemd (245.4-4ubuntu3.19) ...
Processing triggers for man-db (2.9.1-1) ...
Processing triggers for initramfs-tools (0.136ubuntu6.7) ...
update-initramfs: Generating /boot/initrd.img-5.10.104-tegra
W: Couldn't identify type of root file system for fsck hook
I am only guessing, but the above implies the kernel is either refusing this (unlikely with the particular log message), or else it is missing that feature. On your Orin, what do you see from: zcat /proc/config.gz | egrep -i '(netlink|iscsi)'
kernel/kernel-5.10$ zcat /proc/config.gz | egrep -i '(netlink|iscsi)'
# CONFIG_ISCSI_IBFT is not set
CONFIG_COMPAT_NETLINK_MESSAGES=y
CONFIG_NETFILTER_NETLINK=m
CONFIG_NETFILTER_NETLINK_ACCT=m
CONFIG_NETFILTER_NETLINK_QUEUE=m
CONFIG_NETFILTER_NETLINK_LOG=m
# CONFIG_NETFILTER_NETLINK_OSF is not set
CONFIG_NF_CT_NETLINK=m
# CONFIG_NETFILTER_NETLINK_GLUE_CT is not set
# CONFIG_NETLINK_DIAG is not set
CONFIG_ETHTOOL_NETLINK=y
# CONFIG_SCSI_ISCSI_ATTRS is not set
# CONFIG_ISCSI_TCP is not set
# CONFIG_ISCSI_BOOT_SYSFS is not set
# CONFIG_SCSI_CXGB3_ISCSI is not set
# CONFIG_SCSI_CXGB4_ISCSI is not set
# CONFIG_SCSI_BNX2_ISCSI is not set
# CONFIG_BE2ISCSI is not set
# CONFIG_SCSI_QLA_ISCSI is not set
# CONFIG_THERMAL_NETLINK is not set
CONFIG_QUOTA_NETLINK_INTERFACE=y
I see that it needs to be set. If so what to what values?
Kernel update and install will differ on Orin versus a desktop PC running Ubuntu 20, but the actual kernel requirements are the same. I see one article saying “sudo apt install linux-modules-extra-raspi” on one platform, but the extra modules are not available as a package on Jetsons. It is a case of manual kernel update.
I do not know if all of the iSCSI features can be a module. If they can, then life is much easier since you can just build modules against a matching existing configuration (same source code, same base config, same CONFIG_LOCALVERSION, and then use a config editor which understands dependencies to enable features as a module…and simple file copy). If any of those features are not available as a module, then build is similar, but you’d have to install the base Image and all modules using a new CONFIG_LOCALVERSION (preferably keeping the original boot content in place as a backup and picking the new kernel via a boot option; this could be made default if it works).
I will not guarantee this, but it appears that you need iscsi_tcp (which can be a module). I don’t know if that is the only module, and I don’t know if it enables other modules (remember that the config editor knows dependencies and might mention it is enabling other features when you enable that…in which case you have more modules to copy, or if it edits the base integrated features, then you need to install everything).
The feature which probably provides iscsi_tcp looks to be “CONFIG_ISCSI_TCP”. If you build this correctly against the existing kernel and its config and its CONFIG_LOCALVERSION, then you just have to copy it in place (and perhaps reboot or run “sudo depmod -a” or both). If it isn’t enough, then you won’t have risked boot issues and can try the next module. I cannot say what other features you need, but I don’t think you are network booting to an iSCSI drive, so it should be much simpler.
Hi, I am planning to use ISCSI target as a boot drive. Meanwhile upon rebuilding kernel using the following modules options in make nconfig
This allows me to connect to ISCSI target. I would like to know what are the prerequisites to boot from ; is there other alternatives from booting from Network @DaneLLL . My ultimate goal is to allow ease of converting NVME from EXT4 to LVM remotely since it needs to be done on >50 devices and inserting USB to temporarily boot from it is inefficient.
CONFIG_CRYPTO=y DEFAULT=y
CONFIG_ARM64_CRYPTO=y DEFAULT=y
CONFIG_CRYPTO_CRC32C=y DEFAULT=y
CONFIG_ISCSI_TCP=m DEFAULT is not set
CONFIG_SCSI_ISCSI_ATTRS=m DEFAULT=m
CONFIG_SCSI_LOWLEVEL=y DEFAULT=y
CONFIG_BLK_DEV=y DEFAULT=y
CONFIG_INET=y DEFAULT=y
ubu@ubu-desktop:~$ sudo systemctl status iscsi.service
● open-iscsi.service - Login to default iSCSI targets
Loaded: loaded (/lib/systemd/system/open-iscsi.service; enabled; vendor preset: enabled)
Active: inactive (dead)
Condition: start condition failed at Mon 2023-08-28 15:59:53 +08; 9min ago
├─ ConditionDirectoryNotEmpty=|/etc/iscsi/nodes was not met
└─ ConditionDirectoryNotEmpty=|/sys/class/iscsi_session was not met
Docs: man:iscsiadm(8)
man:iscsid(8)
Aug 28 15:59:53 ubu-desktop systemd[1]: Condition check resulted in Login to default iSCSI target>
lines 1-10/10 (END)
● iscsid.service - iSCSI initiator daemon (iscsid)
Loaded: loaded (/lib/systemd/system/iscsid.service; disabled; vendor preset: enabled)
Active: active (running) since Mon 2023-08-28 16:10:25 +08; 30s ago
TriggeredBy: ● iscsid.socket
Docs: man:iscsid(8)
Process: 3458 ExecStartPre=/lib/open-iscsi/startup-checks.sh (code=exited, status=0/SUCCESS)
Process: 3461 ExecStart=/sbin/iscsid (code=exited, status=0/SUCCESS)
Main PID: 3463 (iscsid)
Tasks: 2 (limit: 18144)
Memory: 2.6M
CGroup: /system.slice/iscsid.service
├─3462 /sbin/iscsid
└─3463 /sbin/iscsid
Aug 28 16:10:24 ubu-desktop systemd[1]: Starting iSCSI initiator daemon (iscsid)...
Aug 28 16:10:25 ubu-desktop iscsid[3461]: iSCSI logger with pid=3462 started!
Aug 28 16:10:25 ubu-desktop systemd[1]: iscsid.service: Failed to parse PID from file /run/iscsid.pid: Invalid argument
Aug 28 16:10:25 ubu-desktop systemd[1]: Started iSCSI initiator daemon (iscsid).
Aug 28 16:10:26 ubu-desktop iscsid[3462]: iSCSI daemon with pid=3463 started!
I’ve used iSCSI on a couple of Jetsons, though not Orin. It works well once you get past the complexities. However, booting would be a different story.
For boot, all of those abilities provided by the symbols you enable in the Linux kernel would also need to exist within the bootloader. This is not the same as the Linux kernel, although bootloaders could be considered a miniature operating system with a kernel (but it isn’t the Linux kernel). By default I’m sure none of the Jetsons of any model or release to date have iSCSI available in the boot stages. With UEFI it might be possible and reasonable to do this, and that is what Orins have migrated to.
On the other hand, I could not tell you what is needed to add iSCSI to the UEFI boot capability. Someone else would need to comment on that. Once that is finished, then completing boot to Linux over iSCSI should be a reasonable thing to get work (but there might be some additional requirements if you use any iSCSI, other than as a target to pivot to, e.g., running the UEFI itself on the iSCSI rather than pointing the new Linux kernel to it, would make things much more difficult).