NOTE: This is Part 1 in a series on booting Ubuntu from an iSCSI disk. View all of the sections here.
The bulk of the instructions in this post were unabashedly “borrowed” from howtoforge.com.
The first thing we need in our quest to boot Ubuntu from an iSCSI disk is an iSCSI target disk. This is a real or virtual disk on your existing Ubuntu server that will be shared on the network. The Ubuntu Server OS is not actually required. Any desktop version of Ubuntu will work fine. However, I’ll continue to reference this computer as the server since it will be serving the disk to the client machine. Since I’m using XBMCbuntu Eden as my client OS, I chose to create a 20GB virtual disk in the /mnt/media folder on my server as follows:
sudo su root@server:~$ mkdir /mnt/media/iscsi root@server:~$ dd if=/dev/zero of=/mnt/media/iscsi/xbmc.img bs=1M count=20000
That last command will write 1 Megabyte worth of zeroes to xbmc.img 20,000 times resulting in a ~20GB image file. Now that we have a virtual disk we need to share it. To install the iSCSI target software type:
root@server:~$ apt-get install iscsitarget
UPDATE: after upgrading to 12.04, iscsitarget failed to start with the messageFATAL: Module iscsi_trgt not found.
To fix we also install iscsitarget-dkms:root@server:~$ apt-get install iscsitarget-dkms
The software is disabled by default, so we need to open the configuration file /etc/default/iscsitarget in your favorite text editor and set ISCSITARGET_ENABLE=true
Next we define our share. The letters iet stand for iSCSI Enterprise Target.
root@server:~$ nano /etc/iet/ietd.conf
Comment out everything in this file and add this stanza which defines how we will share our virtual disk. The standard naming convention for an iSCSI target is the letters “iqn” followed by the year and month the disk was created, followed by the domain name of the server in reverse order and lastly a unique identifier for this share. Substitute your own authentication values for <username> and <password> or remove them to allow anyone to connect to the disk.
Target iqn.2012-03.com.example:xbmc-server IncomingUser <username> <password> OutgoingUser Lun 0 Path=/mnt/media/iscsi/xbmc.img,Type=fileio Alias xbmc-server
Note: RFC 3720 requires <password> to be 12 characters long.
The share definition should be mostly self-explanatory:
- The first line defines the name of the target. This is the name that our initiator will later use to find and connect to the disk.
- The second line defines the user credentials for connecting to the disk. You can omit <username> and <password> if your middle name is Danger.
- OutgoingUser defines the username and password to authenticate the target to the initiators during the discovery process, although we’ve shown that these credentials can also be omitted.
- Line 4 sets up the image file we created above to be the source of our shared disk.
- Lastly we provide an optional alias for the target disk.
By default the disk is shared with the entire network. If you’d like to lock that down, edit the following file
root@server:~$ nano /etc/iet/initiators.allow
Comment out everything in this file and add this stanza which limits the share to your local network.
Lastly, start the service
root@server:~$ /etc/init.d/iscsitarget start