So many things have changed in the FCS of Solaris 11. Some needed
changing because they’ve been the same way for twenty years and they got
too creaky and/or complicated, but others seem to have changed for the
sake of change. Filesystem sharing and exporting is the main issue,
because other than
share and the
dfstab, it was all new in Solaris
10 (I’m thinking of the way the
sharesmb property worked), some of it
new in Solaris Nevada (
sharemgr). We were just getting familiar with
that stuff, and it’s all changed again. As I found when I tried to share
an iSCSI LUN in the way you always have on Solaris.
# zfs set shareiscsi=on space/iscsi cannot set property for ‘space/iscsi’: invalid property ‘shareiscsi’
It seems the commands we need now are
stmfadm. Wow, how many
*adm commands do Oracle think we need?
$ uname -r 5.11 $ ls /usr/sbin/*adm | wc -l 52
$ uname -r 5.9 $ ls /usr/sbin/*adm | wc -l 18
That’s a lot of new commands to learn, especially given how complex some
of them are. Still, I suppose it’s all for the best. Move with the times
eh? If you don’t have them, these two are in the
Let’s make a volume to export.
# zfs create -V 10g space/iscsi/vol01
I used the
-V flag so I’d get a raw device file in
That’s because, just like creating VDISKs for an LDOM, you want Solaris
to treat an area of disk as if it were a physical block device.
sbdadm is for managing SCSI block disks within something called the
SCSI Target Mode Framework (STMF). This, like most things in Solaris 11,
has its own service.
$ svcs "*stmf*" STATE STIME FMRI disabled Jan_29 svc:/system/stmf:default
Hmm. Looks like we’d better enable that.
# svcadm enable stmf
I honestly don’t know what that does. It doesn’t start any new
processes, so I guess it’s flipped a switch somewhere in the kernel. The
start/exec program is a binary, so I can’t even look at that. I
dtrace I suppose, but I don’t know what I’m looking for, and
we’re getting well off-topic already.
Now we know such a thing as the STMF exists, we surmise that we want to add a logical unit to it, using that raw device file I just talked about.
# sbdadm create-lu /dev/zvol/rdsk/space/iscsi/vol01
-s option to the
create-lu subcommand that lets you
specify the size of the logical unit to create (if you don’t use it,
sbdadm uses all of the “disk” is is given.) It goes from kilobytes to
exabytes: rather a frightening thought for those of us old enough to
still think of an Exabyte as an 8mm tape.
So now you’ve got a proper logical unit with a bona-fide GUID, and it’s
in the STMF. Now we need to make it into an iSCSI target. Unsurprisinly,
STMF has its own
adm program, called
stmfadm, with a ton of
It seems that the
sbdadm command largely a subset of
could also have added the lu with
# stmfadm create-lu /dev/zvol/rdsk/space/iscsi/vol01 Logical unit created: 600144F04348CF0000004F281B1C0002
getting the same results. Anyway, next we need to make the LUN visible. This is done through “views”. You can make a LUN visible to one, many, or all, hosts. The simplest way is to let everything see it:
# stmfadm add-view 600144f04348cf0000004f281b1c0002 # stmfadm list-view -l 600144f04348cf0000004f281b1c0002 View Entry: 0 Host group : All Target group : All LUN : 0
But that’s only the LUN we’ve taken care of. We don’t yet have an iSCSI
target. We used to use the sensibly-monikered
iscsitadm for this, but
that’s gone, so now we use
itadm. This is an altogether more capable,
more grown-up command that handles various authentication types and
portal groups. First job is to enable the iSCSI target service.
# svcadm enable iscsi/target
Then you can make the machine an iSCSI target. I’m not using any authentication.
# itadm create-target Target iqn.1986-03.com.sun:02:d1c080de-d123-67fb-c880-96a7712d9928 successfully created
Job done. Setting up an initiator hasn’t changed since Solaris 10.