Network‑Boot Volumio on an Old PC Using iSCSI: Step‑by‑Step Guide
This article walks through turning an old 2009 laptop into a disk‑less Volumio player by configuring iSCSI network boot, covering BIOS/UEFI basics, PXE/iPXE workflow, MBR vs GPT partitioning, bootloader setup, initrd customization, and troubleshooting tips.
Story Start – Goal and Plan
After buying a new audio system, the author needed a digital player and chose Volumio, a Debian‑based Hi‑Fi OS that can run on x86 or Raspberry Pi. Instead of using a USB stick, the goal became to boot Volumio without any local disk and to explore Linux boot principles.
Linux Boot Process Overview
The typical boot sequence is:
BIOS/UEFI power‑on self‑test (POST)
Read MBR (or GPT) to locate the bootloader
Load GRUB or Syslinux and display a menu
Load the Linux kernel into memory
Execute the init program
Enter the user interface
When booting from the network, additional PXE steps are required to mount an iSCSI disk before the kernel is loaded.
Preparing iSCSI Storage
iSCSI provides block‑level storage over TCP/IP, making a remote disk appear as a local device. The required parameters are:
iSCSI server address (e.g., 192.168.3.5)
Target name (e.g., iqn.2005-10.org.freenas.ctl:yong-pc.volumio)
Initiator name (client identifier)
BIOS vs. UEFI
BIOS, originating in the 1970s, performs POST and then follows a boot order to hand control to the next stage. UEFI, standardized in 2006, replaces BIOS, supports mouse input, and can load boot programs via network, but the old 2009 laptop uses BIOS, so the article focuses on BIOS.
PXE and iPXE
When no local boot device is found, the firmware falls back to PXE. PXE works by:
Client requests an IP address from DHCP, receiving the location of a boot file (e.g., pxelinux.0)
Client downloads the boot file via TFTP
Client obtains a configuration file and executes further actions
Standard PXE only supports TFTP. The author uses iPXE, an enhanced open‑source PXE firmware that can fetch files via HTTP, iSCSI, Fibre Channel, AoE, and can embed custom scripts.
Compiling iPXE
git clone git://git.ipxe.org/ipxe.git
cd ipxe/src
make bin-i386-pcbios/ipxe.pxe EMBED=menu.ipxeSupported platforms include various BIOS/EFI and CPU combinations (e.g., bin-i386-pcbios, bin-x86_64-efi, bin-arm64-efi).
DHCP and TFTP Configuration
The author uses a LEDE router with built‑in DHCP/TFTP services. The TFTP root directory holds the iPXE binary and the menu script. The network boot image is set to ipxe.pxe.
Disk Partitioning: MBR vs. GPT
MBR stores a 512‑byte boot record, a partition table (four entries), and a magic number. It supports up to four primary partitions and a maximum disk size of ~2.2 TB. GPT, part of the UEFI spec, uses a protective MBR, a primary GPT header, a partition array with GUIDs, and a backup header, allowing many partitions and larger disks.
Bootloader Installation
Volumio uses Syslinux to load the kernel and initrd. The Syslinux configuration specifies the kernel file ( vmlinuz‑3.18.5), the initrd ( volumio.initrd), and kernel parameters (e.g., imgpart, bootpart, imgfile, loglevel, USE_KMSG).
Kernel and Initrd Details
vmlinuz is the compressed Linux kernel. initrd (initial RAM disk) provides a temporary root filesystem that runs before the real root is mounted. Volumio’s initrd performs tasks such as reading Syslinux variables, loading drivers, mounting the boot partition, adjusting partition sizes with fdisk, mounting the volumio_current.sqsh image, and finally switching to the real root.
Editing initrd for iSCSI
Because the iPXE environment exits before the kernel starts, the initrd must re‑mount the iSCSI disk. The required steps are:
Load the network driver
Bring up the network
Start the iSCSI client and mount the remote disk
mount -o loop,offset=1048576 ./wrt/Build/Volumio2.799-2020-09-29-x86.img ./vboot/
cp ../vboot/volumio.initrd volumio.initrd.gz
gunzip volumio.initrd.gz
cpio -ivmd < volumio.initrd
vim init # edit init script
find . | cpio -c -o > ../volumio.initrd.img
gzip volumio.initrd.img
mv volumio.initrd.img.gz volumio.initrdAlternatively, the Volumio build scripts on GitHub can be modified to include the iSCSI client during image creation:
git clone https://github.com/volumio/Build.git
# edit x86config.sh to add iSCSI packages (lines 193‑195)
# edit scripts/initramfs/init-x86 to load driver, start network, start iSCSI before mountingInit Process
After the kernel hands control to /sbin/init, the system determines the runlevel (0‑6) from /etc/inittab and executes the corresponding scripts in /etc/rcN.d. Modern systems typically use systemd instead of the traditional SysV init.
Problems Encountered and Solutions
Syslinux freeze : caused by using a 64‑bit iPXE firmware with a 32‑bit Syslinux binary; switching to a 32‑bit iPXE fixed it.
Cannot shut down : network shutdown broke iSCSI, leaving the root partition mounted; removing the networking shutdown script ( K06networking) solved the issue.
AirPlay service not found : shairport-sync could not detect the network interface because it was brought up in the initrd; using a wireless adapter that is initialized later restored functionality.
Conclusion
The author succeeded in booting Volumio without a USB stick by using iSCSI network boot, gaining a deeper understanding of BIOS/UEFI, PXE, partition tables, bootloaders, and initrd customization. Various alternative approaches (e.g., HTTP‑based iPXE boot) exist, but the iSCSI + ibft method proved the simplest for this setup.
Liangxu Linux
Liangxu, a self‑taught IT professional now working as a Linux development engineer at a Fortune 500 multinational, shares extensive Linux knowledge—fundamentals, applications, tools, plus Git, databases, Raspberry Pi, etc. (Reply “Linux” to receive essential resources.)
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.
