kern/166566: [zfs] zfs split renders 2 disk (MBR based) mirror unbootable

Andriy Gapon avg at FreeBSD.org
Tue Jun 26 10:50:13 UTC 2012


The following reply was made to PR kern/166566; it has been noted by GNATS.

From: Andriy Gapon <avg at FreeBSD.org>
To: hartzell at alerce.com, bug-followup at FreeBSD.org
Cc:  
Subject: Re: kern/166566: [zfs] zfs split renders 2 disk (MBR based) mirror
 unbootable
Date: Tue, 26 Jun 2012 13:47:50 +0300

 [restoring bug-followup]
 
 on 25/06/2012 19:48 George Hartzell said the following:
 > Here are two images (more than one screen full) of the lsdev -v output
 > from the loader that *actually loads the system* (when it's
 > working...).
 
 I have a theory of what's going on.
 
 I believe that after zpool split the following items get updated with new
 information:
 - vdev label on the disk that remains in the main pool (ada3 + zroot)
 - vdev label on the disk that goes to the new pool (ada1 + zsplitroot)
 - zpool.cache file in the main/active/remaining pool (zroot)
 
 The following item still has outdated information:
 - zpool.cache file in the new pool (zsplitroot)
 
 This happens because the new pool gets the contents of the original pool at
 split start time (before any new ids are generated).  The file can not be
 updated automatically because the new pool remains "un-imported" (exported)
 after the split.  If it is desired that the zsplitroot's zpool.cache is updated
 it has to be done manually - by importing the pool, etc.
 
 I believe that what you see is a result of you always booting in such a way that
 the zfs boot code and zfsloader find zsplitroot pool before zroot pool.  This is
 confirmed by the screenshot which shows that zsplitroot is listed before zroot.
 Because of that the stale zpool.cache file is used and as a result the ZFS code
 in kernel can not find disks/pools based on the stale IDs.
 
 I think that you have to change the boot order using BIOS, so that you boot from
 ada3 disk.  You should verify at the loader prompt that that is indeed the case
 and zroot is found first and is used as a boot pool.
 
 If your BIOS either doesn't allow to change boot order, or lies about it or
 doesn't change bios disk numbering such that a boot disk is the first drive
 (disk0 / "BIOS drive C"), then I recommend thatyou set 'currdev' loader variable
 to point to zroot pool.  Depending on your zfsloader version it should be done
 in one of the following ways:
 set currdev=zfs:zroot:
 set currdev=zfs1
 You can examine default value of the variable (with 'show' command) to see which
 scheme should be used.
 
 Please test this.
 
 -- 
 Andriy Gapon
 
 


More information about the freebsd-fs mailing list