HomeFreeBSD

Add erratum for issue #2094

Description

Add erratum for issue #2094

ZoL commit 1421c89 unintentionally changed the disk format in a forward-
compatible, but not backward compatible way. This was accomplished by
adding an entry to zbookmark_t, which is included in a couple of
on-disk structures. That lead to the creation of pools with incorrect
dsl_scan_phys_t objects that could only be imported by versions of ZoL
containing that commit. Such pools cannot be imported by other versions
of ZFS or past versions of ZoL.

The additional field has been removed by the previous commit. However,
affected pools must be imported and scrubbed using a version of ZoL with
this commit applied. This will return the pools to a state in which they
may be imported by other implementations.

The 'zpool import' or 'zpool status' command can be used to determine if
a pool is impacted. A message similar to one of the following means your
pool must be scrubbed to restore compatibility.

$ zpool import

 pool: zol-0.6.2-173
   id: 1165955789558693437
state: ONLINE

status: Errata #1 detected.
action: The pool can be imported using its name or numeric identifier,

     however there is a compatibility issue which should be corrected
     by running 'zpool scrub'
see: http://zfsonlinux.org/msg/ZFS-8000-ER

config:
...

$ zpool status

pool: zol-0.6.2-173

state: ONLINE

scan: pool compatibility issue detected.
 see: https://github.com/zfsonlinux/zfs/issues/2094

action: To correct the issue run 'zpool scrub'.
config:
...

If there was an async destroy in progress 'zpool import' will prevent
the pool from being imported. Further advice on how to proceed will be
provided by the error message as follows.

$ zpool import

 pool: zol-0.6.2-173
   id: 1165955789558693437
state: ONLINE

status: Errata #2 detected.
action: The pool can not be imported with this version of ZFS due to an

active asynchronous destroy.  Revert to an earlier version and
allow the destroy to complete before updating.
see: http://zfsonlinux.org/msg/ZFS-8000-ER

config:
...

Pools affected by the damaged dsl_scan_phys_t can be detected prior to
an upgrade by running the following command as root:

zdb -dddd poolname 1 | grep -P '^\t\tscan = ' | sed -e 's;scan = ;;' | wc -w

Note that poolname must be replaced with the name of the pool you wish
to check. A value of 25 indicates the dsl_scan_phys_t has been damaged.
A value of 24 indicates that the dsl_scan_phys_t is normal. A value of 0
indicates that there has never been a scrub run on the pool.

The regression caused by the change to zbookmark_t never made it into a
tagged release, Gentoo backports, Ubuntu, Debian, Fedora, or EPEL
stable respositorys. Only those using the HEAD version directly from
Github after the 0.6.2 but before the 0.6.3 tag are affected.

This patch does have one limitation that should be mentioned. It will not
detect errata #2 on a pool unless errata #1 is also present. It expected
this will not be a significant problem because pools impacted by errata #2
have a high probably of being impacted by errata #1.

End users can ensure they do no hit this unlikely case by waiting for all
asynchronous destroy operations to complete before updating ZoL. The
presence of any background destroys on any imported pools can be checked
by running zpool get freeing as root. This will display a non-zero
value for any pool with an active asynchronous destroy.

Lastly, it is expected that no user data has been lost as a result of
this erratum.

Original-patch-by: Tim Chase <tim@chase2k.com>
Reworked-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Tim Chase <tim@chase2k.com>
Signed-off-by: Richard Yao <ryao@gentoo.org>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Issue #2094

Details

Provenance
Richard Yao <ryao@gentoo.org>Authored on Feb 21 2014, 4:28 AM
Brian Behlendorf <behlendorf1@llnl.gov>Committed on Feb 21 2014, 8:10 PM
Parents
rGffe9d38275f6: Add generic errata infrastructure
Branches
Unknown
Tags
Unknown

Event Timeline

Brian Behlendorf <behlendorf1@llnl.gov> committed rG4f2dcb3eee0e: Add erratum for issue #2094 (authored by Richard Yao <ryao@gentoo.org>).Feb 21 2014, 8:10 PM