Solaris 11.1 ZFS Root rpool shows one disk unavailable and online, how to detach

solariszfszpool

This is an x86 Solaris 11.1 installation. I have two zfs pools R500 and rpool

I wanted to upgrade R500 from 500GB disks to 2TB which I've done then use the 500GB disks as root rpool disks to replace 320GB ones.

I detached one of the rpool disks and attached a 500GB one after sorting our the SMI label and partitions since it thought it was in use on R500 pool. It resilvered ok but wouldn't boot off it hanging at Verifying SMI pool in BIOS. Grub loaded off the remaining 320Gb disk but hung on SunOS banner, thinking the bootblocks are missing on the 500GB but some corruption on the 320GB.
So I removed both disks and inserted the detached (and unchanged 320GB disk) which booted fine. I have attached the 500GB disk again which is resilvering but on a "zfs status rpool"

it shows the the 320GB disk is both unavailable and online, I guess it refers to the old 320GB that was removed from the same port. But how do I now detach this unavailable disk?

It way sort itself out after a reboot which I can't do for a few hours until the rpool resilvered and boot blocks installed.

root@opensolaris:~# zpool list
NAME   SIZE  ALLOC   FREE  CAP  DEDUP    HEALTH  ALTROOT
R500   464G   402G  61.8G  86%  1.00x  DEGRADED  -
rpool  298G   213G  85.2G  71%  1.00x  DEGRADED  -

root@opensolaris:~# zpool status rpool

  pool: rpool
 state: DEGRADED
status: One or more devices is currently being resilvered.  The pool will
        continue to function in a degraded state.
action: Wait for the resilver to complete.
        Run 'zpool status -v' to see device specific details.
  scan: resilver in progress since Thu Mar  7 12:39:22 2013
    29.0G scanned out of 213G at 22.1M/s, 2h21m to go
    29.0G resilvered, 13.64% done
config:

        NAME          STATE     READ WRITE CKSUM
        rpool         DEGRADED     0     0     0
          mirror-0    DEGRADED     0     0     0
   -->      c5t3d0s0  UNAVAIL      0     0     0
   -->      c5t3d0s0  ONLINE       0     0     0
            c3t1d0s0  DEGRADED     0     0     0  (resilvering)



root@opensolaris:~# cfgadm
Ap_Id                          Type         Receptacle   Occupant     Condition
sata4/0                        sata-port    empty        unconfigured ok
sata4/1::dsk/c5t1d0            disk         connected    configured   ok
sata4/2::dsk/c5t2d0            disk         connected    configured   ok
sata4/3::dsk/c5t3d0            disk         connected    configured   ok
sata5/0::dsk/c3t0d0            disk         connected    configured   ok
sata5/1::dsk/c3t1d0            disk         connected    configured   ok

I can't run zpool detach rpool c5t3d0s0 how will it know which I mean?

Best Answer

You could run zdb -C rpool to get the GUID of each device, then use that in the detach command.

Of course you'll see 2 devices with the same phys_path and it doesn't show the current status so you can't be 100% certain which is the UNAVAIL disk and which is the ONLINE one. You can hope that zdb shows the disks in the same order as zpool status (which it does on my 2 way FreeBSD mirror - /dev/ada2 then /dev/ada1) or that it'll stop you if you try to remove the last remaining ONLINE disk.