3

I have a strange situation here, in which I am unable to import an ZFS pool that I brought from another OS UNLESS I fdisk the disk of the pool. I am puzzled as to why this is happening and hoping to get an answer or an advice.

The flow: An ZFS pool containing a single 3TB disk is created on a "NAS4Free 9.3.0.2" system (FreeBSD). I export the pool and attach it to a "NexentaStor 4.0.4" system (OpenSolaris). zpool import then shows

root@nexenta:/volumes# zpool import
   pool: tank1
     id: 17717822833491017053
  state: UNAVAIL
 status: One or more devices are missing from the system.
 action: The pool cannot be imported. Attach the missing
        devices and try again.
   see: http://illumos.org/msg/ZFS-8000-3C
 config:

        tank1                      UNAVAIL  insufficient replicas
          c2t50014EE2B5B23B15d0p0  UNAVAIL  cannot open

zdb -l on the disk shows label0 and label1 as expected but

--------------------------------------------
LABEL 2
--------------------------------------------
failed to read label 2
--------------------------------------------
LABEL 3
--------------------------------------------
failed to read label 3

I then run fdisk c2t50014EE2B5B23B15d0p0. It says the disk is not initialized and offers to initialize and create 1 Linux partition. I let it do it. Then optionally delete the new partition and save. At this point an MBR is created on the first sector of the disk. The disk as a whole is still a device of the zpool. With the MBR on the disk, I am able to import the pool and as expected.

Important details: Same process with a 256GB disk works as expected without fdisk involvement. I suspect this issue is related to disks over 2TB.

What I have tried: See if disk size is detected correctly and the same on the different systems. It seems that disk geometry is different for fdisk on NexentaStor than for other systems. I am not certain how to verify.

Why does the creation of the MBR on such a disk allows for proper read of the ZFS labels on the end of the disk?

0

If ZFS uses a whole disk, it writes an EFI label to the disk.

Did you check whether there is an EFI label present on the disk?

I know that FreeBSD does things different than Solaris. IIRC, the recommendation is to manually write an EFI label first before initializing ZFS on FreeBSD.

Note that based on 512 byte sector size, the maximum disk size with fdisk labels is 2 TB.

  • schily, thanks for pointing me in this direction. It does seem there are differences between FreeBSD and Solaris ZFS behavior. The disk I was working with didn't have any partitioning or labeling on it. No GPT/EFI or MBR. It was just a zeroed disk with ZFS on the whole disk (not a partition). This is how NAS4Free creates the ZFS volumes by default. Once I created an MBR sector with fdisk (not a GPT) it was enough for Solaris to detect the volume on Solaris. Strangely it didn't matter for the smaller disk. I experimented with using GPT partitions for ZFS and it was ok as well. – Arik Yavilevich Oct 1 '15 at 5:17

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.