Droboshare Dashboard for Mac includes free Xtend SAN iSCSI Initiator (kind of)

Rather than not writing about it at all just some quick notes:

  • The Droboshare Dashboard software includes the Xtend SAN iSCSI Initiator.
  • If you want to use the initiator with non-Drobo iSCSI targets you will have to use the command line interface to configure the target and connect to it. The tool is called xtendsancli. This command line interface (cli) is written in Java and using RMI to talk to some backend which could open up some DIY GUI options.
  • The only limitation of the included Xtend initiator (besides the missing GUI) is that it checks if the target name begins with “iqn.2005-06.com.drobo:”. If you can configure the server side there is no difficulty or downside in just using that name and making your iSCSI target look like a Drobo.

Disk Utility with iSCSI target

That way I was able to make the Drobo iSCSI initiator talk to a Ubuntu 13.10 ‘iscsitarget’ (thats the name of the package) on OS X Mavericks.

40 thoughts on “Droboshare Dashboard for Mac includes free Xtend SAN iSCSI Initiator (kind of)

  1. Can you provide a quick how to pls

    I have a mac and configured synology to use the configured target name as above, but im not that proficient with executing the correct commands, I think the community might benefit a lot if you can share yr experience

    thank you

  2. @elRadix:
    This is a basic script to connect to your iSCSI-targets:

    #!/bin/bash

    serverAddress=x.x.x.x

    if [ -f /usr/sbin/xtendsancli ] ; then
    target=$(/usr/sbin/xtendsancli discoverTargets -address $serverAddress -verbose | head -1)
    /usr/sbin/xtendsancli addTargets -address $serverAddress “$target” -autoLogin Yes
    /usr/sbin/xtendsancli loginTargets -address $serverAddress “$target” -autoLogin Yes -security CHAP,TargetUserName=username,TargetSecret=password
    else
    echo “no file”
    fi

  3. @fsfikke
    thanks for the script; however, for it to work, some slight modifications are needed:
    1) you need R/W access to /tmp folder; you could also run the script using sudo
    2) the quotation marks must be removed from the target, i.e. $target instead of “$target”

  4. If you delete the hidden file .iqn.filter in the xtendsan folder then you can use any target name, so no limitations.

  5. this is what I did; I deleted .iqn.filter as well; works fine (but this is regardless the modifications to the script).

  6. Thankyou, I searched for some like this for long time!
    I confirm it works.
    Better to remove quotation marks.

  7. HI !
    Thank’s for tip !
    But over maverics i have poor transfer 30-40MB/s R/W (ISCS Target Synology 212J DSM 5.0) 🙁

  8. read/write speed is similar to AFP file sharing but the iSCSI is a different thing (think of a virtual disk). The Synology 212j is slow compared, e.g. to my Synology 412+; where I get around 70MB/s over WiFi (ac connection) and goes up to 100-120MB/s when connecting my computer to the Diskstation using the Thunderbolt-Ethernet adapter

  9. Hello,

    Does this still works? when I tried I got:

    $ sudo xtendsancli discoverTargets -address 20.0.0.50 -verbose | head -1
    SEVERE 05/20/2014 20:06:11 Unable to contact the iSCSI daemon.
    SEVERE 05/20/2014 20:06:11 Unable to retrieve the iSCSI configuration.

  10. Add the same problem, rebooted, now works perfectly. Mavericks 10.9.3 / Synology DS414slim.
    Thanks for sharing this great information…
    Danke 🙂
    Jean-David

  11. Getting following error

    sudo /usr/sbin/xtendsancli loginTargets -address x.x.x.x iqn.1986-03.com.sun:02:6040e5f7-ab65-482f-a4ae-8cccea3eb372

    WARNING 08/10/2014 21:55:12 An error occurred logging into “iqn.1986-03.com.sun:02:6040e5f7-ab65-482f-a4ae-8cccea3eb372”: Driver failed login (0x5000001)

  12. Confirmed!!! 🙂 works with Yosemite 🙂
    Just elete or change .iqn.filter file in /usr/sbin/xtendsan directory

  13. Works excellent with Yosemite and DSM 5! Thanx! finally my Iphoto Library at my Synology. For me no need to sudo; root disabled

  14. @fsfikke

    Thank you very helpful. With a bit trail and error I finally managed to connect to my Synology ISCSI.

    I only have one thing. I have 2 LUNs running and if the other one is running I got an error.
    Does someone how i can change the script so I connect to the target by name instead of search for the first one?
    I replaced $target for $Drobo but that doesn’t work.

    #!/bin/bash

    serverAddress=x.x.x.x.x.x

    if [ -f /usr/sbin/xtendsancli ] ; then

    target=$(/usr/sbin/xtendsancli discoverTargets -address $serverAddress -verbose | head -1)

    /usr/sbin/xtendsancli addTargets -address $serverAddress $target -autoLogin Yes

    /usr/sbin/xtendsancli loginTargets -address $serverAddress $target -autoLogin Yes -security NONE

    else

    echo “no file”

    fi

  15. Thank you for your help! It works!!!
    I have the same question!
    How can i connect a target-lun (A) with one mac (1) and another target-lun (B) with another mac (2)?

  16. I’ve tried using the cli on 3 macs now running 10.9.x and 10.8.x
    The first time I run something like /usr/sbin/xtendsancli discoverTargets -address 10.8.10.2 -verbose | head -1
    I get a response with the right target info. After that the command never works again. It just hangs even after reboots. I haven’t found any console logs and /tmp/xtendsancli.log only updates with
    FINE 11/18/2014 09:25:20 The IQN filter rules file does not exist.
    FINE 11/18/2014 09:25:20 Unable to initialize the IQN filter – the IQN filtering mechanism will be disabled for this session.

    more /tmp/iscsid.log
    Nov 18, 2014 8:37:19 AM com.attotech.iscsid.Daemon start
    INFO: Starting daemon
    –>> registry is: RegistryImpl[UnicastServerRef2 [liveRef: [endpoint:[127.0.0.1:1099,com.attotech.iscsid.internal.RMIProperties$ServerFactory@4f,com.attotech.iscsid.internal.RMIProperties$ClientFactory@48](local),objID:[0:0:0, 0]]]]
    WARNING: There is no link for lo0
    WARNING: There is no link for gif0
    WARNING: There is no link for stf0
    Unable to get global IPv4 key! (0x0)
    — IPv4 change —
    WARNING: 10.8.10.2 is not reachable from 10.30.40.105/22
    Nov 18, 2014 8:37:24 AM com.attotech.iscsid.login.LoginManager$LoginHandler connect
    FINE: Connecting to /10.8.10.2:3260
    Nov 18, 2014 8:37:24 AM com.attotech.iscsid.login.LoginManager$LoginHandler connect
    FINE: Established connection {/10.30.40.105:49159, /10.8.10.2:3260}
    Nov 18, 2014 8:37:24 AM com.attotech.iscsid.login.LoginManager$LoginHandler write
    FINE: Out to {/10.30.40.105:49159, /10.8.10.2:3260}
    00000000 43 87 00 00 00 00 01 19 00 10 86 00 00 01 00 00 |C……………|
    00000010 ab ad ba be 00 00 00 00 00 00 00 00 00 00 00 00 |…………….|
    00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |…………….|
    00000030 53 65 73 73 69 6f 6e 54 79 70 65 3d 44 69 73 63 |SessionType=Disc|
    00000040 6f 76 65 72 79 00 49 6e 69 74 69 61 74 6f 72 4e |overy.InitiatorN|
    00000050 61 6d 65 3d 69 71 6e 2e 31 39 39 35 2d 31 32 2e |ame=iqn.1995-12.|
    00000060 63 6f 6d 2e 61 74 74 6f 74 65 63 68 3a 78 74 65 |com.attotech:xte|
    00000070 6e 64 73 61 6e 3a 73 65 72 2e 66 35 6b 6d 78 30 |ndsan:ser.f5kmx0|
    00000080 6b 32 66 39 76 6d 00 49 6e 69 74 69 61 74 6f 72 |k2f9vm.Initiator|
    00000090 41 6c 69 61 73 3d 61 68 73 31 36 33 6d 30 31 2e |Alias=xxxxxxxxxx|
    000000a0 63 61 6d 70 75 73 2e 6e 65 74 77 6f 72 6b 2e 62 |xxxxxx.xxxxxxx.x|
    000000b0 63 63 00 44 65 66 61 75 6c 74 54 69 6d 65 32 57 |xx.DefaultTime2W|
    000000c0 61 69 74 3d 32 00 44 65 66 61 75 6c 74 54 69 6d |ait=2.DefaultTim|
    000000d0 65 32 52 65 74 61 69 6e 3d 32 30 00 45 72 72 6f |e2Retain=20.Erro|
    000000e0 72 52 65 63 6f 76 65 72 79 4c 65 76 65 6c 3d 30 |rRecoveryLevel=0|
    000000f0 00 4d 61 78 52 65 63 76 44 61 74 61 53 65 67 6d |.MaxRecvDataSegm|
    00000100 65 6e 74 4c 65 6e 67 74 68 3d 38 31 39 32 00 48 |entLength=8192.H|
    00000110 65 61 64 65 72 44 69 67 65 73 74 3d 4e 6f 6e 65 |eaderDigest=None|
    00000120 00 44 61 74 61 44 69 67 65 73 74 3d 4e 6f 6e 65 |.DataDigest=None|
    00000130 00 4f 46 4d 61 72 6b 65 72 3d 4e 6f 00 49 46 4d |.OFMarker=No.IFM|
    00000140 61 72 6b 65 72 3d 4e 6f 00 00 00 00 |arker=No…. |

    Nov 18, 2014 8:37:24 AM com.attotech.iscsid.login.LoginManager$LoginHandler read
    FINE: In from {/10.30.40.105:49159, /10.8.10.2:3260}
    00000000 23 87 00 00 00 00 00 97 00 10 86 00 00 01 00 03 |#……………|
    00000010 ab ad ba be 00 00 00 00 00 00 00 01 00 00 00 00 |…………….|
    00000020 00 00 00 fd 00 00 00 00 00 00 00 00 00 00 00 00 |…………….|
    00000030 4d 61 78 52 65 63 76 44 61 74 61 53 65 67 6d 65 |MaxRecvDataSegme|
    00000040 6e 74 4c 65 6e 67 74 68 3d 36 35 35 33 36 00 44 |ntLength=65536.D|
    00000050 61 74 61 44 69 67 65 73 74 3d 4e 6f 6e 65 00 44 |ataDigest=None.D|
    00000060 65 66 61 75 6c 74 54 69 6d 65 32 52 65 74 61 69 |efaultTime2Retai|
    00000070 6e 3d 32 30 00 44 65 66 61 75 6c 74 54 69 6d 65 |n=20.DefaultTime|
    00000080 32 57 61 69 74 3d 32 00 45 72 72 6f 72 52 65 63 |2Wait=2.ErrorRec|
    00000090 6f 76 65 72 79 4c 65 76 65 6c 3d 30 00 48 65 61 |overyLevel=0.Hea|
    000000a0 64 65 72 44 69 67 65 73 74 3d 4e 6f 6e 65 00 49 |derDigest=None.I|
    000000b0 46 4d 61 72 6b 65 72 3d 4e 6f 00 4f 46 4d 61 72 |FMarker=No.OFMar|
    000000c0 6b 65 72 3d 4e 6f 00 00 |ker=No.. |

    Nov 18, 2014 8:37:24 AM com.attotech.iscsid.login.LoginManager$LoginHandler write
    FINE: Out to {/10.30.40.105:49159, /10.8.10.2:3260}
    00000000 44 80 00 00 00 00 00 10 00 00 00 00 00 00 00 00 |D……………|
    00000010 ab ad ba be ff ff ff ff 00 00 00 00 00 00 00 02 |…………….|
    00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |…………….|
    00000030 53 65 6e 64 54 61 72 67 65 74 73 3d 41 6c 6c 00 |SendTargets=All.|

    Nov 18, 2014 8:37:24 AM com.attotech.iscsid.login.LoginManager$LoginHandler read
    FINE: In from {/10.30.40.105:49159, /10.8.10.2:3260}
    00000000 24 80 00 00 00 00 00 5c 00 00 00 00 00 00 00 00 |$……\……..|
    00000010 ab ad ba be ff ff ff ff 00 00 00 02 00 00 00 00 |…………….|
    00000020 00 00 00 fd 00 00 00 00 00 00 00 00 00 00 00 00 |…………….|
    00000030 54 61 72 67 65 74 4e 61 6d 65 3d 69 71 6e 2e 32 |TargetName=iqn.2|
    00000040 30 30 35 2d 30 36 2e 63 6f 6d 2e 64 72 6f 62 6f |005-06.com.drobo|
    00000050 3a 77 69 6e 31 32 63 6f 72 65 74 65 73 74 2d 73 |:win12scsitest-s|
    00000060 63 73 69 31 2d 74 61 72 67 65 74 00 54 61 72 67 |csi1-target.Targ|
    00000070 65 74 41 64 64 72 65 73 73 3d 31 30 2e 35 39 2e |etAddress=10.59.|
    00000080 35 32 2e 31 3a 33 32 36 30 2c 31 00 |52.1:3260,1. |

    Nov 18, 2014 8:37:24 AM com.attotech.iscsid.login.LoginManager$LoginHandler write
    FINE: Out to {/10.30.40.105:49159, /10.8.10.2:3260}
    00000000 46 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |F……………|
    00000010 ab ad ba be 00 00 00 00 00 00 00 00 00 00 00 03 |…………….|
    00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |…………….|

    Nov 18, 2014 8:37:24 AM com.attotech.iscsid.login.LoginManager$LoginHandler read
    FINE: In from {/10.30.40.105:49159, /10.8.10.2:3260}
    00000000 26 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |&……………|
    00000010 ab ad ba be 00 00 00 00 00 00 00 03 00 00 00 00 |…………….|
    00000020 00 00 00 fd 00 00 00 00 00 00 00 00 00 00 00 00 |…………….|

    Nov 18, 2014 8:37:24 AM com.attotech.iscsid.login.LoginManager$LoginHandler close
    FINE: Closing connection {/10.30.40.105:49159, /10.8.10.2:3260}
    Nov 18, 2014 8:37:24 AM com.attotech.iscsid.login.LoginManager$LoginHandler connect
    FINE: Connecting to /10.8.10.2:3260
    Nov 18, 2014 8:37:24 AM com.attotech.iscsid.login.LoginManager$LoginHandler connect
    FINE: Established connection {/10.30.40.105:49160, /10.8.10.2:3260}
    Nov 18, 2014 8:37:24 AM com.attotech.iscsid.login.LoginManager$LoginHandler write
    FINE: Out to {/10.30.40.105:49160, /10.8.10.2:3260}
    00000000 43 87 00 00 00 00 01 f5 00 10 86 00 00 02 00 00 |C……………|
    00000010 ab ad ba be 00 00 00 00 00 00 00 00 00 00 00 00 |…………….|
    00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |…………….|
    00000030 53 65 73 73 69 6f 6e 54 79 70 65 3d 4e 6f 72 6d |SessionType=Norm|
    00000040 61 6c 00 49 6e 69 74 69 61 74 6f 72 4e 61 6d 65 |al.InitiatorName|
    00000050 3d 69 71 6e 2e 31 39 39 35 2d 31 32 2e 63 6f 6d |=iqn.1995-12.com|
    00000060 2e 61 74 74 6f 74 65 63 68 3a 78 74 65 6e 64 73 |.attotech:xtends|
    00000070 61 6e 3a 73 65 72 2e 66 35 6b 6d 78 30 6b 32 66 |an:ser.f5kmx0k2f|
    00000080 39 76 6d 00 54 61 72 67 65 74 4e 61 6d 65 3d 69 |9vm.TargetName=i|
    00000090 71 6e 2e 32 30 30 35 2d 30 36 2e 63 6f 6d 2e 64 |qn.2005-06.com.d|
    000000a0 72 6f 62 6f 3a 77 69 6e 31 32 63 6f 72 65 74 65 |robo:win12scsite|
    000000b0 73 74 2d 73 63 73 69 31 2d 74 61 72 67 65 74 00 |st-scsi1-target.|
    000000c0 49 6e 69 74 69 61 74 6f 72 41 6c 69 61 73 3d 61 |InitiatorAlias=x|
    000000d0 68 73 31 36 33 6d 30 31 2e 63 61 6d 70 75 73 2e |xxxxxxxx.xxxxxx.|
    000000e0 6e 65 74 77 6f 72 6b 2e 62 63 63 00 4d 61 78 43 |xxxxxxx.xxx.MaxC|
    000000f0 6f 6e 6e 65 63 74 69 6f 6e 73 3d 31 00 49 6e 69 |onnections=1.Ini|
    00000100 74 69 61 6c 52 32 54 3d 4e 6f 00 49 6d 6d 65 64 |tialR2T=No.Immed|
    00000110 69 61 74 65 44 61 74 61 3d 59 65 73 00 4d 61 78 |iateData=Yes.Max|
    00000120 42 75 72 73 74 4c 65 6e 67 74 68 3d 31 30 34 38 |BurstLength=1048|
    00000130 35 37 36 00 46 69 72 73 74 42 75 72 73 74 4c 65 |576.FirstBurstLe|
    00000140 6e 67 74 68 3d 31 30 34 38 35 37 36 00 44 65 66 |ngth=1048576.Def|
    00000150 61 75 6c 74 54 69 6d 65 32 57 61 69 74 3d 32 00 |aultTime2Wait=2.|
    00000160 44 65 66 61 75 6c 74 54 69 6d 65 32 52 65 74 61 |DefaultTime2Reta|
    00000170 69 6e 3d 32 30 00 4d 61 78 4f 75 74 73 74 61 6e |in=20.MaxOutstan|
    00000180 64 69 6e 67 52 32 54 3d 31 00 44 61 74 61 50 44 |dingR2T=1.DataPD|
    00000190 55 49 6e 4f 72 64 65 72 3d 59 65 73 00 44 61 74 |UInOrder=Yes.Dat|
    000001a0 61 53 65 71 75 65 6e 63 65 49 6e 4f 72 64 65 72 |aSequenceInOrder|
    000001b0 3d 59 65 73 00 45 72 72 6f 72 52 65 63 6f 76 65 |=Yes.ErrorRecove|
    000001c0 72 79 4c 65 76 65 6c 3d 30 00 4d 61 78 52 65 63 |ryLevel=0.MaxRec|
    000001d0 76 44 61 74 61 53 65 67 6d 65 6e 74 4c 65 6e 67 |vDataSegmentLeng|
    000001e0 74 68 3d 31 30 34 38 35 37 36 00 48 65 61 64 65 |th=1048576.Heade|
    000001f0 72 44 69 67 65 73 74 3d 4e 6f 6e 65 00 44 61 74 |rDigest=None.Dat|
    00000200 61 44 69 67 65 73 74 3d 4e 6f 6e 65 00 4f 46 4d |aDigest=None.OFM|
    00000210 61 72 6b 65 72 3d 4e 6f 00 49 46 4d 61 72 6b 65 |arker=No.IFMarke|
    00000220 72 3d 4e 6f 00 00 00 00 |r=No…. |

    Nov 18, 2014 8:37:24 AM com.attotech.iscsid.login.LoginManager$LoginHandler read
    FINE: In from {/10.30.40.105:49160, /10.8.10.2:3260}
    00000000 23 87 00 00 00 00 01 4b 00 10 86 00 00 02 00 02 |#……K……..|
    00000010 ab ad ba be 00 00 00 00 00 00 00 01 00 00 00 00 |…………….|
    00000020 00 00 00 fd 00 00 00 00 00 00 00 00 00 00 00 00 |…………….|
    00000030 54 61 72 67 65 74 50 6f 72 74 61 6c 47 72 6f 75 |TargetPortalGrou|
    00000040 70 54 61 67 3d 31 00 4d 61 78 52 65 63 76 44 61 |pTag=1.MaxRecvDa|
    00000050 74 61 53 65 67 6d 65 6e 74 4c 65 6e 67 74 68 3d |taSegmentLength=|
    00000060 36 35 35 33 36 00 44 61 74 61 44 69 67 65 73 74 |65536.DataDigest|
    00000070 3d 4e 6f 6e 65 00 44 61 74 61 50 44 55 49 6e 4f |=None.DataPDUInO|
    00000080 72 64 65 72 3d 59 65 73 00 44 61 74 61 53 65 71 |rder=Yes.DataSeq|
    00000090 75 65 6e 63 65 49 6e 4f 72 64 65 72 3d 59 65 73 |uenceInOrder=Yes|
    000000a0 00 44 65 66 61 75 6c 74 54 69 6d 65 32 52 65 74 |.DefaultTime2Ret|
    000000b0 61 69 6e 3d 32 30 00 44 65 66 61 75 6c 74 54 69 |ain=20.DefaultTi|
    000000c0 6d 65 32 57 61 69 74 3d 32 00 45 72 72 6f 72 52 |me2Wait=2.ErrorR|
    000000d0 65 63 6f 76 65 72 79 4c 65 76 65 6c 3d 30 00 46 |ecoveryLevel=0.F|
    000000e0 69 72 73 74 42 75 72 73 74 4c 65 6e 67 74 68 3d |irstBurstLength=|
    000000f0 36 35 35 33 36 00 48 65 61 64 65 72 44 69 67 65 |65536.HeaderDige|
    00000100 73 74 3d 4e 6f 6e 65 00 49 46 4d 61 72 6b 65 72 |st=None.IFMarker|
    00000110 3d 4e 6f 00 49 6d 6d 65 64 69 61 74 65 44 61 74 |=No.ImmediateDat|
    00000120 61 3d 59 65 73 00 49 6e 69 74 69 61 6c 52 32 54 |a=Yes.InitialR2T|
    00000130 3d 4e 6f 00 4d 61 78 42 75 72 73 74 4c 65 6e 67 |=No.MaxBurstLeng|
    00000140 74 68 3d 32 36 32 31 34 34 00 4d 61 78 43 6f 6e |th=262144.MaxCon|
    00000150 6e 65 63 74 69 6f 6e 73 3d 31 00 4d 61 78 4f 75 |nections=1.MaxOu|
    00000160 74 73 74 61 6e 64 69 6e 67 52 32 54 3d 31 00 4f |tstandingR2T=1.O|
    00000170 46 4d 61 72 6b 65 72 3d 4e 6f 00 00 |FMarker=No.. |

    WARNING: Using toString on object
    WARNING: Using toString on object
    WARNING: Using toString on object
    WARNING: State change already picked up for State:/Network/Global/IPv4
    WARNING: State change already picked up for State:/Network/Interface/en0/IPv6
    — IPv4 change —
    WARNING: State change already picked up for State:/Network/Global/IPv4
    *** The interface list has changed! ***

    Exception dispatching call to [0:0:0, 0] in thread “RMI TCP Connection(33)-127.0.0.1” at Tue Nov 18 09:30:43 PST 2014:
    java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
    java.lang.ClassNotFoundException: com.attotech.iscsid.rmi.impl.PrivateServer
    at sun.rmi.registry.RegistryImpl_Skel.dispatch(Unknown Source)
    at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:390)
    at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:248)
    at sun.rmi.transport.Transport$1.run(Transport.java:159)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.rmi.transport.Transport.serviceCall(Transport.java:155)
    at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
    at java.lang.Thread.run(Thread.java:695)
    Caused by: java.lang.ClassNotFoundException: com.attotech.iscsid.rmi.impl.PrivateServer
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.rmi.server.LoaderHandler$Loader.loadClass(LoaderHandler.java:1185)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:249)
    at sun.rmi.server.LoaderHandler.loadClassForName(LoaderHandler.java:1198)
    at sun.rmi.server.LoaderHandler.loadProxyInterfaces(LoaderHandler.java:710)
    at sun.rmi.server.LoaderHandler.loadProxyClass(LoaderHandler.java:654)
    at sun.rmi.server.LoaderHandler.loadProxyClass(LoaderHandler.java:591)
    at java.rmi.server.RMIClassLoader$2.loadProxyClass(RMIClassLoader.java:628)
    at com.attotech.iscsid.Daemon$RMILoaderSPI.loadProxyClass(Daemon.java:2010)
    at java.rmi.server.RMIClassLoader.loadProxyClass(RMIClassLoader.java:294)
    at sun.rmi.server.MarshalInputStream.resolveProxyClass(MarshalInputStream.java:242)
    at java.io.ObjectInputStream.readProxyDesc(ObjectInputStream.java:1537)
    at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1493)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1750)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:349)
    … 12 more

    Exception dispatching call to [0:0:0, 0] in thread “RMI TCP Connection(36)-127.0.0.1” at Tue Nov 18 09:35:07 PST 2014:
    java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
    java.lang.ClassNotFoundException: com.attotech.iscsid.rmi.impl.PrivateServer
    at sun.rmi.registry.RegistryImpl_Skel.dispatch(Unknown Source)
    at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:390)
    at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:248)
    at sun.rmi.transport.Transport$1.run(Transport.java:159)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.rmi.transport.Transport.serviceCall(Transport.java:155)
    at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
    at java.lang.Thread.run(Thread.java:695)
    Caused by: java.lang.ClassNotFoundException: com.attotech.iscsid.rmi.impl.PrivateServer
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.rmi.server.LoaderHandler$Loader.loadClass(LoaderHandler.java:1185)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:249)
    at sun.rmi.server.LoaderHandler.loadClassForName(LoaderHandler.java:1198)
    at sun.rmi.server.LoaderHandler.loadProxyInterfaces(LoaderHandler.java:710)
    at sun.rmi.server.LoaderHandler.loadProxyClass(LoaderHandler.java:654)
    at sun.rmi.server.LoaderHandler.loadProxyClass(LoaderHandler.java:591)
    at java.rmi.server.RMIClassLoader$2.loadProxyClass(RMIClassLoader.java:628)
    at com.attotech.iscsid.Daemon$RMILoaderSPI.loadProxyClass(Daemon.java:2010)
    at java.rmi.server.RMIClassLoader.loadProxyClass(RMIClassLoader.java:294)
    at sun.rmi.server.MarshalInputStream.resolveProxyClass(MarshalInputStream.java:242)
    at java.io.ObjectInputStream.readProxyDesc(ObjectInputStream.java:1537)
    at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1493)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1750)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:349)
    … 12 more

    Nov 18, 2014 9:45:50 AM com.attotech.iscsid.login.LoginManager$LoginHandler close
    FINE: Closing connection {/10.30.40.105:51828, /10.8.10.2:3260}
    Nov 18, 2014 9:45:50 AM com.attotech.iscsid.login.LoginManager$LoginHandler redirect
    WARNING: Exhausted list of redirection portals for iqn.2005-06.com.drobo:win12scsitest-scsi1-target
    Nov 18, 2014 9:45:50 AM com.attotech.iscsid.TargetMonitor$TargetMonitorImpl$TargetHandler$SessionHandler$1 done
    WARNING: Unable to auto login to /10.8.10.2:3260 on iqn.2005-06.com.drobo:win12scsitest-scsi1-target
    java.util.concurrent.ExecutionException: com.attotech.iscsi.LoginException: Login failure (Out of resources)
    at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:222)
    at java.util.concurrent.FutureTask.get(FutureTask.java:83)
    at com.attotech.iscsid.internal.DaemonFutureTask.get(DaemonFutureTask.java:106)
    at com.attotech.iscsid.TargetMonitor$TargetMonitorImpl$TargetHandler$SessionHandler$1.done(TargetMonitor.java:1089)
    at com.attotech.iscsid.internal.DaemonFutureTask.notifyDone(DaemonFutureTask.java:246)
    at com.attotech.iscsid.internal.DaemonFutureTask.done(DaemonFutureTask.java:232)
    at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
    at java.util.concurrent.FutureTask.setException(FutureTask.java:125)
    at com.attotech.iscsid.login.LoginManager$LoginHandler$LoginFuture.setException(LoginManager.java:1417)
    at com.attotech.iscsid.login.LoginManager$LoginHandler.failed(LoginManager.java:943)
    at com.attotech.iscsid.ChannelManager$Handler.run(ChannelManager.java:491)
    at java.lang.Thread.run(Thread.java:695)
    Caused by: com.attotech.iscsi.LoginException: Login failure (Out of resources)
    at com.attotech.iscsid.login.LoginRequest.appendResponse(LoginRequest.java:532)
    at com.attotech.iscsid.login.LoginManager$LoginHandler.read(LoginManager.java:833)
    at com.attotech.iscsid.ChannelManager$Handler.run(ChannelManager.java:460)
    … 1 more

    Found useful command here: https://discussions.apple.com/thread/3207498?start=240&tstart=0

    sudo /usr/sbin/xtendsan/iscsid -d -J-Djava.security.policy=/usr/sbin/xtendsan/iscsid.sec -J-Dcom.attotech.iscsid.discovery.verbose=true –J-Dcom.attotech.iscsid.logLevel=DEBUG –J-Dcom.attotech.iscsid.discovery.MaxRecvDataSegmentLength=512 –J-Dcom.attotech.iscsid.discovery.AllowPaddedDSL=true

    bash-3.2# java -version
    java version “1.6.0_65”
    Java(TM) SE Runtime Environment (build 1.6.0_65-b14-466.1-11M4716)
    Java HotSpot(TM) 64-Bit Server VM (build 20.65-b04-466.1, mixed mode)

    Also it appears that even if I try to connect to a different ip, the com.attotech.iscsid.login.LoginManager always shows it’s trying to connect to the original ip. I think it’s getting hard coded into /etc/iscsid.conf which is a binary.

    Any tips would be greatly appreciated.

  17. I’m in Love…but at the moment, I’m not getting any.

    Drobo Dashboard installer 2.6.3 (2014-10-16 (Build 70504)) doesn’t seem to have those hidden files (where I can find them anyway).

    In fact, after my Yosemite installation, I didn’t even FIND a “/usr/sbin/xtendsancli” at all, not even a directory.

    Did I skip a groove and miss something?

  18. Hi, thanks for the info!

    I installed the trial of globalsan which works fine.
    Also I installed Drobo 2.6.4 on OSX 10.9.5, however no folder xtendsancli in /usr/bin exists, but

    -rwxr-xr-x 1 root wheel 37888 12 Jan 2014 xsanadmin
    lrwxr-xr-x 1 root wheel 56 12 Jan 2014 xsanctl -> /System/Library/Filesystems/acfs.fs/Contents/bin/xsanctl
    -rwxr-xr-x 1 root wheel 89216 12 Jan 2014 xscertadmin

    in /System/Library/Filesystems/acfs.fs/Contents/bin/ there is

    -rwxr-xr-x 1 root wheel 38752 1 Jul 2014 xsanctl
    -rwxr-xr-x 1 root wheel 654304 1 Jul 2014 xsand
    -rwxr-xr-x 1 root wheel 254464 1 Jul 2014 xsandaily.

    Any suggestions in what to change within the script?

    Cheers

  19. To one of the earlier commenters (Dax): if you mask out any sensitive text in a hex dump, remember to mask out the corresponding hex values for each character.

    Otherwise, someone more curious than I could come along and easily determine that it refers to a host on the Butte College internal campus network.

    (I was just curious what it’d decode to, not curious enough to do anything — just a heads up.)

  20. El Capitan DP7 Xtend SAN iSCSI Initiator not woek:
    SEVERE 08/22/2015 16:26:08 Unable to contact the iSCSI daemon.
    SEVERE 08/22/2015 16:26:08 Unable to retrieve the iSCSI configuration.
    Java 1.6 instaled:
    java version “1.6.0_65”
    Java(TM) SE Runtime Environment (build 1.6.0_65-b14-468-11M4828a)
    Java HotSpot(TM) 64-Bit Server VM (build 20.65-b04-468, mixed mode)
    I don’t know, where is problem….

  21. Now work, but got error -36 from Finder: unable write/read some data from iscsi disk.
    Propably is El Capitan bug or last version of xtend not work in El Cap 🙁 ( permision problem ?; I/O operation problem ? I don’t know 🙁 )
    Reg.

  22. Drobo Dashboard stopped detecting my Drobo FS800 iSCSI after upgrading to OSX El Capitan. To fix it I had to disable System Integrity Protection (SIP) and then reinstall the JAVA OSX & Drobo Dashboard 2.6.2.

    These are the steps you need to get it going again…
    1. Download Drobo Dashboard 2.6.2 from here http://iusethis.luo.ma/drobodashboard/Drobo-Dashboard-2.6.2.dmg
    2. Download JAVA for OSX from here https://support.apple.com/kb/DL1572
    3. Restart OSX and go into Recovery mode by pressing Cmd + R.
    4. Launch Terminal and type: csrutil disable [ to make 100% sure that its disabled, execute ” csrutil status ” (no quotes) and make sure it reads disabled. ]
    5. Reboot into normal OSX
    6. Install JAVA for OSX (downloaded earlier)
    7. Install Drobo Dashboard 2.6.2 (downloaded earlier)

    I hope this helps others out there.

  23. Yes, now write operation works with tuxtera ntfs ( my iscsi disk is formated in ntfs fs ).
    El Capitan 10.11.1 Beta.

  24. @Tom, would be great it you could describe how you got it to work so that others can replicate it 🙂

  25. Ok got it to work on El Capitan now. You need the xtendsancli file and xtendsan folder in de /usr/sbin/. In El Capitan, you’re now allowed to do that, so first you’ll need to disable the ‘System Integrity Protection’.
    This can be done by:
    Booting in the recovery mode: cmd+R during boot.
    Then disabling it using the terminal and ‘csrutil disable’.
    Reboot, move the files to /usr/sbin/ or install Drobo again.
    Make sure it works (you still need Java Run-Time)
    Reboot into recovery mode and enable SIP with ‘csrutil enable’.

    You will prob. get an error about missing write access to /tmp/, but that’s just for the log files, it still works.

  26. confirmed, above solution work on El Capitan, dont’ forget to remove the .iqn.filter file in the /usr/sbin/xtendsan directory in order to connect your synology nas iscsi drives

  27. OK, I’m simply trying to use this information to get my drobo B800i working, but cannot. Ridiculously frustrating for a “pro” device to have such poor software support. I am trying the instruction to install Java 6 and then drobo dashboard 2.6.2 on a clean load of Yosemite, but I keep getting “Unable to contact the iSCSI daemon. “. Any thoughts or suggestions would be appreciated.

  28. Of course, right after I post, I try the same steps one more time, and this time it works. Thank you!

  29. Hello,

    many thanks to everyone who contributed in this thread. I’m finally enjoying a free scsi initiator in my Mac OS and my QNAP NAS! Hats off! 🙂

    I have a question for which I would very much appreciate your help. What do you guys do when you want to disconnect the iscsi target? I dragged the target into the trash bin, and it did disappear (suggesting I had successfully unmounted and removed the drive likewise you would do with any other mounted drive). When attempting to remount the iscsi target however, I got a message suggesting the remote volume was still mounted, and so seemed to suggest my QNAP NAS.

    Any thoughts? the parameter logoutTargets looks interesting for logging out from targets, but before going any further I would like to know your thoughts.

    Thanks

  30. I answer my own question. I’ve read up some documentation on ATTO Xtend SAN, and I’ve tailored the script a little bit, and also created my own script for disconnecting the remote targets

    $./drobo_iscsi.sh hostname

    being drobo_iscsi.sh:
    #!/bin/bash

    serverAddress=$1

    if [ -f /usr/sbin/xtendsancli ] ; then

    target=$(/usr/sbin/xtendsancli discoverTargets -address $serverAddress -verbose | head -1)

    /usr/sbin/xtendsancli addTargets -address $serverAddress $target -autoLogin

    /usr/sbin/xtendsancli loginTargets -address $serverAddress $target -autoLogin Yes -security NONE

    else

    echo “no file”

    fi

    and
    $./disconnect_drobo_iscsi.sh hostname

    being disconnect_drobo_iscsi.sh:
    #!/bin/bash

    serverAddress=$1

    if [ -f /usr/sbin/xtendsancli ] ; then

    /usr/sbin/xtendsancli logoutTargets -address $serverAddress All

    /usr/sbin/xtendsancli removeTargets -address $serverAddress All

    else

    echo “no file”

    fi

    Very very happy with my solution 🙂

  31. Out of the blue error messages “Unable to contact the iSCSI daemon” and “Unable to retrieve the iSCSI configuration” are showing up on my side. Can anybody comment? I’ve already re-installed Java from Apple official website.

  32. … and I answer to my self. If CSRUTIL is disabled, it all works. I would swear that a month ago I managed to run the scripts I published earlier, once csrutil had been re-enabled. Comments would be very welcome.

  33. Under El Capitan Beta 3 command line version of atto iscsi initiator stopping work.
    But I find solution, but it is not easy:
    – remove all installed components from iscsi part of drobo dashboard
    – replace it new versions of this files exstracted from Xtand AN 3.5 v2 installator ( this version work under El Capitan – you must register on Atto web site to enable download this file ).

    You must replace this files:
    iScsiCLi.jar
    iscsicli.sec
    iscsid
    iscsi.jar
    iscsi.sec
    iScsilmpl.jar
    ATTOiSCSI.kext
    com.attotech.iscsi.plist
    in respective installation places.

    Caution !!
    New version xsand has change installation folder – from /usr/sbin/xtendsancli ( old )
    to /usr/local/libexec/xtendsan ( new ).

    Now iscsi initiator work, only missing original “iscsi atto ” icons mounted disk ( replace to “standard” icon 🙂

    Best reg. 🙂

  34. Tweaked “the script” for my environment/preferences:

    #!/bin/bash

    serverAddress=”nas.fqdn.example.com”
    if [ -f /usr/local/libexec/xtendsancli ] ; then
    target=$(/usr/local/libexec/xtendsancli discoverTargets -address $serverAddress -verbose | grep iqn\\S*uniqeString1\\S*uniqeString2)
    targetAdded=$(/usr/local/libexec/xtendsancli listTargetsSetup -address $serverAddress -verbose $target | grep ^SEVERE)
    if [ “SEVERE” == “$targetAdded” ] ; then
    /usr/local/libexec/xtendsancli addTargets -address $serverAddress $target -autoLogin Yes
    fi
    /usr/local/libexec/xtendsancli loginTargets -address $serverAddress $target -autoLogin Yes -security CHAP,TargetUserName=chapuser,TargetSecret=supersecret
    else
    echo “no file”
    fi

    As you may deduce from my xtendsancli path, I downloaded the 3.5 v2 update tom references above.

    IMO, using a FQDN for the -address argument is preferred in the event we change the dhcp-assigned (reservation) IP address for the NAS target. Yes, the -address argument accepts an IP address or FQDN.

    Instead of capturing the first iqn target string in the discoverTargets output (head -1), I capture a specific iqn target string (grep iqn\\S*…). \S* matches zero or more non-whitespace characters. But the \ needs to be escaped with another \, so it ends up as \\S*. My QNAP NAS target names contain uniquely identifiable strings in the middle (uniqueString1) and at the end (uniqueString2).

    Instead of blindly adding targets (addTargets) I call listTargetsSetup for the specific target I want to add/login. If the listTargetsSetup call returns something beginning with SEVERE, I assume the target hasn’t been added and proceed to add it. The original script always tries to add the target and addTargets complains if the target was already added.

    So I think I’m fairly close, but haven’t been able to get past: An error occurred logging into “targetname”: Login failure (Authentication failure)

    Actual target name in error replaced with targetname. I’ve tried with/without quotes around “$target”, triple-checked that $target is in fact set to the correct iqn target name, and tried enclosing the CHAP parameter string in single quotes (even though both username and password are alphanumeric), per the help text for xtendsancli:

    Additional Notes:
    -The CHAP parameter string MUST ALWAYS be enclosed with
    the single quote character (‘) in order to prevent the
    shell from removing any characters.

    Any suggestions? Running El Cap 10.11.5

  35. Forgot to mention that we have multiple LUNs / targets on our NAS. Quakie (above) seemed to think this is a problem, but perhaps the problem Quakie experienced was with the original script (head -1) grabbing the first target…

Leave a Reply

Your email address will not be published. Required fields are marked *