I have seen this setup documented a few places, but not for Ubuntu so here it goes.
I have used this many time to verify or diagnose Device Mapper Multipath (DM-MPIO) since it is rather easy to fail a path by switching off one of the network interfaces. Nowaday, I use two KVM virtual machines with two NIC each.
Those steps have been tested on Ubuntu 12.04 (Precise) and Ubuntu 14.04 (Trusty). The DM-MPIO section is mostly a cut and paste of the Ubuntu Server Guide
The virtual machine that will act as the iSCSI target provider is called PreciseS-iscsitarget. The VM that will connect to the target is called PreciseS-iscsi. Each one is configured with two network interfaces (NIC) that get their IP addresses from DHCP. Here is an example of the network configuration file :
$ cat /etc/network/interfaces
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet dhcp
#
auto eth1
iface eth1 inet dhcp
The second NIC resolves to the same hostname with a “2” appended (i.e. PreciseS-iscsitarget2 and PreciseS-iscsi2)
Setting up the iSCSI Target VM
This is done by installing the following packages :
$ sudo apt-get install iscsitarget iscsitarget-dkms
Edit /etc/default/iscsitarget and change the following line to enable the service :
ISCSITARGET_ENABLE=true
We now proceed to create an iSCSI target (aka disk). This is done by creating a 50 Gb sparse file that will act as our disk :
$ sudo dd if=/dev/zero of=/home/ubuntu/iscsi_disk.img count=0 obs=1 seek=50G
This container is used in the definition of the iSCSI target. Edit the file /etc/iet/ietd.conf. At the bottom, add :
Target iqn.2014-09.PreciseS-iscsitarget:storage.sys0 Lun 0 Path=/home/ubuntu/iscsi_disk.img,Type=fileio,ScsiId=lun0,ScsiSN=lun0
The iSCSI target service must be restarted for the new target to be accessible
$ sudo service iscsitarget restart
Setting up the iSCSI initiator
To be able to access the iSCSI target, only one package is required :
$ sudo apt-get install open-iscsi
Edit /etc/iscsi/iscsid.conf changing the following:
node.startup = automatic
This will ensure that the iSCSI targets that we discover are enabled automatically upon reboot.
Now we will proceed to discover and connect to the device that we setup in the previous section
$ sudo iscsiadm -m discovery -t st -p PreciseS-iscsitarget $ sudo iscsiadm -m node --login $ dmesg | tail [ 68.461405] iscsid (1458): /proc/1458/oom_adj is deprecated, please use /proc/1458/oom_score_adj instead. [ 189.989399] scsi2 : iSCSI Initiator over TCP/IP [ 190.245529] scsi 2:0:0:0: Direct-Access IET VIRTUAL-DISK 0 PQ: 0 ANSI: 4 [ 190.245785] sd 2:0:0:0: Attached scsi generic sg0 type 0 [ 190.249413] sd 2:0:0:0: [sda] 104857600 512-byte logical blocks: (53.6 GB/50.0 GiB) [ 190.250487] sd 2:0:0:0: [sda] Write Protect is off [ 190.250495] sd 2:0:0:0: [sda] Mode Sense: 77 00 00 08 [ 190.251998] sd 2:0:0:0: [sda] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA [ 190.257341] sda: unknown partition table [ 190.258535] sd 2:0:0:0: [sda] Attached SCSI disk
We can see in the dmesg output that the new device /dev/sda has been discovered. Format the new disk & create a file system. Then verify that everything is correct by mounting and unmounting the new file system.
$ fdisk /dev/sda n p 1 <ret> <ret> w $ mkfs -t ext4 /dev/sda1 $ mount /dev/sda1 /mnt $ umount /mnt
Setting up DM-MPIO
Since each of our virtual machines have been configured with two network interfaces, it is possible to reach the iSCSI target through the second interface :
$ iscsiadm -m discovery -t st -p 192.168.1.193:3260,1 iqn.2014-09.PreciseS-iscsitarget:storage.sys0 192.168.1.43:3260,1 iqn.2014-09.PreciseS-iscsitarget:storage.sys0 $ iscsiadm -m node -T iqn.2014-09.PreciseS-iscsitarget:storage.sys0 --login
Now that we have two paths toward our iSCSI target, we can proceed to setup DM-MPIO.
First of all, a /etc/multipath.conf file must exist. Then we install the needed package :
$ sudo -s # cat << EOF > /etc/multipath.conf defaults { user_friendly_names yes } EOF # exit $ sudo apt-get -y install multipath-tools
Two paths to the iSCSI device created previously need to exist for the multipath device to be seen.
# multipath -ll mpath0 (149455400000000006c756e30000000000000000000000000) dm-2 IET,VIRTUAL-DISK size=50G features='0' hwhandler='0' wp=rw |-+- policy='round-robin 0' prio=1 status=active | `- 4:0:0:0 sda 8:0 active ready running `-+- policy='round-robin 0' prio=1 status=enabled `- 5:0:0:0 sdb 8:16 active ready running
The two paths are indeed visible. We can move forward and verify that the partition table created previously is accessible :
$ sudo fdisk -l /dev/mapper/mpath0 Disk /dev/mapper/mpath0: 53.7 GB, 53687091200 bytes 64 heads, 32 sectors/track, 51200 cylinders, total 104857600 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x0e5e5db1 Device Boot Start End Blocks Id System /dev/mapper/mpath0p1 2048 104857599 52427776 83 Linux
All that is remaining is to add an entry to the /etc/fstab file so the file system that we created is mounted automatically at boot. Notice the _netdev entry : this is required otherwise the iSCSI device will not be mounted.
$ sudo -s # cat << EOF >> /etc/fstab /dev/mapper/mpath0-part1 /mnt ext4 defaults,_netdev 0 0 EOF exit
$ sudo mount -a $ df /mnt Filesystem 1K-blocks Used Available Use% Mounted on /dev/mapper/mpath0-part1 51605116 184136 48799592 1% /mnt