FreeBSD iSCSI How-To ==================== Author: Ralf S. Engelschall Created: 2010-01-30 Modified: 2010-01-31 0. Hints -------- FreeBSD 8 ships with a built-in iSCSI initiator (provided by the iscsi_initiator(4) driver and the iscontrol(8) command-line utility), but no built-in iSCSI target. For an iSCSI target there are two separate implementations available in the FreeBSD Ports Collection: first, "iscsi-target" (/usr/ports/net/iscsi-target), which is an older iSCSI target, originally ported from NetBSD. Second, "istgt" (/usr/ports/net/istgt/), which is a newer iSCSI target, originally written for FreeBSD and also used by FreeNAS, etc. I strongly recommend to use "istgt". 1. iSCSI Target (Server) ------------------------ o install istgt(8) server via FreeBSD Ports: $ cd /usr/ports/net/istgt/ $ make install o configure istgt(8) server authentication ------------------------------------------------------------------------------ ## ## /usr/local/etc/istgt/auth.conf ## [AuthGroup1] Comment "Unit Controller Users" Auth "user1" "secret123456" "mutualuser1" "secret123456" Auth "user2" "secret123456" [AuthGroup2] Comment "Initiator Users" Auth "user1" "secret123456" "mutualuser1" "secret123456" Auth "user2" "secret123456" ------------------------------------------------------------------------------ o configure istgt(8) server ------------------------------------------------------------------------------ ## ## /usr/local/etc/istgt/istgt.conf ## [Global] Comment "Global section" NodeBase "iqn.example.com" PidFile /var/run/istgt.pid AuthFile /usr/local/etc/istgt/auth.conf MediaDirectory /var/istgt LogFacility "local7" Timeout 30 NopInInterval 20 DiscoveryAuthMethod Auto MaxSessions 32 MaxConnections 8 FirstBurstLength 65536 MaxBurstLength 262144 MaxRecvDataSegmentLength 262144 [UnitControl] Comment "Unit Controller" AuthMethod CHAP Mutual AuthGroup AuthGroup1 Portal UC1 127.0.0.1:3261 Netmask 127.0.0.1 [PortalGroup1] Comment "Portal Group 1" Portal DA1 10.0.0.1:3260 [InitiatorGroup1] Comment "Initiator Group 1" InitiatorName "ALL" Netmask 10.1.0.0/24 [LogicalUnit1] Comment "Sample Disk (iqn.example.com:idisk1)" TargetName disk1 TargetAlias "Data Disk1" Mapping PortalGroup1 InitiatorGroup1 AuthMethod Auto AuthGroup AuthGroup2 UnitType Disk UnitInquiry "FreeBSD" "iSCSI Disk" "0123" "10000001" #QueueDepth 32 LUN0 Storage /var/iscsi/idisk1 100MB ------------------------------------------------------------------------------ o configure istgt(8) server control ------------------------------------------------------------------------------ ## ## /usr/local/etc/istgt/istgtcontrol.conf ## [Global] Comment "ISTGT control configuration" Timeout 60 AuthMethod CHAP Mutual Auth "user1" "secret123456" "mutualuser1" "secret123456" Host localhost Port 3261 TargetName "iqn.example.com:disk1" Lun 0 Flags "ro" Size "auto" ------------------------------------------------------------------------------ o enable istgt(8) on system startup $ echo 'istgt_enable="YES"' >>/etc/rc.conf o create a 100MB sample disk $ mkdir -p /var/iscsi $ dd if=/dev/zero of=/var/iscsi/idisk1 bs=`expr 1024 \* 1024` count=100 o start istgt(8) server $ /usr/local/etc/rc.d/istgt start 2. iSCSI Initiator (Client) --------------------------- o build iscsi_initiator(4) into FreeBSD kernel or load dynamically: # alternative 1 $ echo "device iscsi_initiator" >>/sys/`uname -m`/`hostname | tr 'a-z' 'A-Z'` # alternative 2 $ echo 'iscsi_initiator_load="YES"' >>/boot/loader.conf o rebuild kernel and reboot or initially load iscsi_initiator(4) kernel module # alternative 1 $ [...] # alternative 2 $ kldload /boot/kernel/iscsi_initiator.ko o discover the iSCSI target to ensure it can be found: $ iscontrol -v -d targetaddress=10.0.0.1 initiatorname=`hostname` o configure iSCSI initiator configuration ------------------------------------------------------------------------------ idisk1 { authmethod = CHAP chapIName = user1 chapSecret = secret123456 initiatorname = server.example.com TargetName = iqn.example.com:idisk1 TargetAddress = 10.0.0.1:3260,1 } ------------------------------------------------------------------------------ o run iSCSI initiator $ iscontrol -c /etc/iscsi.conf -n idisk1 o format the sample disk $ bsdlabel -w -B /dev/da1 $ newfs -U -L idisk1 /dev/da1a $ mount /dev/ufs/idisk1 /mnt $ df /mnt /dev/ufs/idisk1 97M 4.0K 89M 0% /mnt/tmp