forked from torvalds/linux
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Documentation/target: add an example script to configure an iSCSI target
The script illustrates how to interact with configfs to create a very simple LIO iSCSI target with a file or block device backstore. The script can serve as a starting point for people that cannot use targetcli because Python is not available on their machine. Signed-off-by: Christophe Vu-Brugier <[email protected]> Signed-off-by: Vincent Donnefort <[email protected]> Signed-off-by: Nicholas Bellinger <[email protected]>
- Loading branch information
1 parent
df6751f
commit 38d454f
Showing
1 changed file
with
80 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,80 @@ | ||
#!/bin/sh | ||
# | ||
# This script illustrates the sequence of operations in configfs to | ||
# create a very simple LIO iSCSI target with a file or block device | ||
# backstore. | ||
# | ||
# (C) Copyright 2014 Christophe Vu-Brugier <[email protected]> | ||
# | ||
|
||
print_usage() { | ||
cat <<EOF | ||
Usage: $(basename $0) [-p PORTAL] DEVICE|FILE | ||
Export a block device or a file as an iSCSI target with a single LUN | ||
EOF | ||
} | ||
|
||
die() { | ||
echo $1 | ||
exit 1 | ||
} | ||
|
||
while getopts "hp:" arg; do | ||
case $arg in | ||
h) print_usage; exit 0;; | ||
p) PORTAL=${OPTARG};; | ||
esac | ||
done | ||
shift $(($OPTIND - 1)) | ||
|
||
DEVICE=$1 | ||
[ -n "$DEVICE" ] || die "Missing device or file argument" | ||
[ -b $DEVICE -o -f $DEVICE ] || die "Invalid device or file: ${DEVICE}" | ||
IQN="iqn.2003-01.org.linux-iscsi.$(hostname):$(basename $DEVICE)" | ||
[ -n "$PORTAL" ] || PORTAL="0.0.0.0:3260" | ||
|
||
CONFIGFS=/sys/kernel/config | ||
CORE_DIR=$CONFIGFS/target/core | ||
ISCSI_DIR=$CONFIGFS/target/iscsi | ||
|
||
# Load the target modules and mount the config file system | ||
lsmod | grep -q configfs || modprobe configfs | ||
lsmod | grep -q target_core_mod || modprobe target_core_mod | ||
mount | grep -q ^configfs || mount -t configfs none $CONFIGFS | ||
mkdir -p $ISCSI_DIR | ||
|
||
# Create a backstore | ||
if [ -b $DEVICE ]; then | ||
BACKSTORE_DIR=$CORE_DIR/iblock_0/data | ||
mkdir -p $BACKSTORE_DIR | ||
echo "udev_path=${DEVICE}" > $BACKSTORE_DIR/control | ||
else | ||
BACKSTORE_DIR=$CORE_DIR/fileio_0/data | ||
mkdir -p $BACKSTORE_DIR | ||
DEVICE_SIZE=$(du -b $DEVICE | cut -f1) | ||
echo "fd_dev_name=${DEVICE}" > $BACKSTORE_DIR/control | ||
echo "fd_dev_size=${DEVICE_SIZE}" > $BACKSTORE_DIR/control | ||
echo 1 > $BACKSTORE_DIR/attrib/emulate_write_cache | ||
fi | ||
echo 1 > $BACKSTORE_DIR/enable | ||
|
||
# Create an iSCSI target and a target portal group (TPG) | ||
mkdir $ISCSI_DIR/$IQN | ||
mkdir $ISCSI_DIR/$IQN/tpgt_1/ | ||
|
||
# Create a LUN | ||
mkdir $ISCSI_DIR/$IQN/tpgt_1/lun/lun_0 | ||
ln -s $BACKSTORE_DIR $ISCSI_DIR/$IQN/tpgt_1/lun/lun_0/data | ||
echo 1 > $ISCSI_DIR/$IQN/tpgt_1/enable | ||
|
||
# Create a network portal | ||
mkdir $ISCSI_DIR/$IQN/tpgt_1/np/$PORTAL | ||
|
||
# Disable authentication | ||
echo 0 > $ISCSI_DIR/$IQN/tpgt_1/attrib/authentication | ||
echo 1 > $ISCSI_DIR/$IQN/tpgt_1/attrib/generate_node_acls | ||
|
||
# Allow write access for non authenticated initiators | ||
echo 0 > $ISCSI_DIR/$IQN/tpgt_1/attrib/demo_mode_write_protect | ||
|
||
echo "Target ${IQN}, portal ${PORTAL} has been created" |