Solaris Recreate Failed iSCSI Target Backed by Directory

Wednesday, August 22, 2012

Upon rebooting an Oracle Thumper 4500 at build SunOS 5.10 Generic_139556-08 i86pc i386 i86pc Solaris 10 5/09 s10x_u7wos_08 X86, the LUN information shown when running iscsitadm list target -v $TARGET was unknown and the Target name was truncated. The iSCSI initiator could connect to the iSCSI target but the disk would never mount. This particular Oracle server had not been patched in a while, and there was probably a patch available to fix this problem, but I wanted to detail the steps I took to recover the data.

How the Failed iSCSI Target was Created

The failed iSCSI target was created using a directory as its backing store with the following commands:

zfs create pool1/iscsi

iscsitadm modify admin --base-directory /export/pool1/iscsi

iscsitadm create target --size 1T server.matrix.example.com

iSCSI Target Before Reboot

Before rebooting the server, running iscsitadm list target -v server.matrix.example.com displayed the following output:

Target: server.matrix.example.com
    iSCSI Name: iqn.1986-03.com.sun:02:213a95cd-3ffd-431a-fa8d-fa774b7075da.server
    Alias: server
    Connections: 1
        Initiator:
            iSCSI Name: iqn.1991-05.com.microsoft:server.matrix.example.com
            Alias: unknown
    ACL list:
        Initiator: server
    TPGT list:
    LUN information:
        LUN: 0
            GUID: 600144f04cd2b7d40000144f20f16400
            VID: SUN
            PID: SOLARIS
            Type: disk
            Size: 1.0T
            Status: unknown

iSCSI Target After Reboot

After rebooting the server, running iscsitadm list target -v server.matrix.example.com displayed the following output:

Target: server.matrix.examp
    iSCSI Name: iqn.1986-03.com.sun:02:213a95cd-3ffd-431a-fa8d-fa774b7075da.server
    Alias: server
    Connections: 0
    ACL list:
        Initiator: server.matrix.example.com
    TPGT list:
    LUN information:
        LUN: 0
            GUID: unknown
            VID: unknown
            PID: unknown
            Type: unknown
            Size: unknown
            Status: unknown

As mentioned, the Target name is truncated and all of the LUN information is unknown.

Solution

I was not sure if patching the server would fix the problem, and I was not able to patch the server at that time, so I decided to create another ZFS iSCSI target and copy the data bit-for-bit.

Create New ZFS Volume

zfs create -V 1T pool1/iscsi_server

Share the ZFS Volume Over iSCSI

zfs shareiscsi=on pool1/iscsi_server

Obtain the New ZFS Backing Store Location

iscsitadm list target -v pool1/iscsi_server | grep 'Backing store'

    # Output
    Backing store: /dev/zvol/rdsk/pool1/iscsi_server

Obtain the Old Directory Backing Store Location

Because the failed iSCSI target is not backed by a ZFS volume, the above step will not work to find the Backing store for the failed iSCSI target. The data for the failed iSCSI target is located in the Base Directory found using the command below. Change to that directory and follow the path until you find the lun.# file.

iscsitadm show admin

    # Output
    /export/pool1/iscsi/iqn.1900.fakeiqn.target/lun.0

Use dd to Copy All of the Data

The following command took about two days to finish:

dd if=/export/pool1/iscsi/iqn.1986-03.com.sun:02:213a95cd-3ffd-431a-fa8d-fa774b7075da.server/lun.0 of=/dev/zvol/rdsk/pool1/iscsi_server bs=8k

After the command completed, I was able to mount the new ZFS iSCSI target and access the data.

References

Solaris: Clone/Recreate iSCSI target not backed by a ZFS Volume

Setup OpenSolaris ISCSI server for Solaris and Linux Client



comments powered by Disqus