From: Richard Yao Date: Sat, 17 May 2014 13:35:10 +0000 (-0400) Subject: Handle ZPOOL_STATUS_HOSTID_MISMATCH in zpool status X-Git-Tag: zfs-0.6.3~25 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=1cbae971c5ef215d1036b65511a839879e446c4c;p=zfs Handle ZPOOL_STATUS_HOSTID_MISMATCH in zpool status Verbatim imports can cause hostid mismatches, but things otherwise work. `zpool status` does not handle this and will fail when assertions are enabled: ``` zpool: ../../cmd/zpool/zpool_main.c:4418: status_callback: Assertion `reason == ZPOOL_STATUS_OK' failed. Program received signal SIGABRT, Aborted. ``` Lets instead add a case to display an informative message such as this: ``` pool: rpool state: ONLINE status: Mismatch between pool hostid and system hostid on imported pool. This pool was previously imported into a system with a different hostid, and then was verbatim imported into this system. action: Export this pool on all systems on which it is imported. Then import it to correct the mismatch. see: http://zfsonlinux.org/msg/ZFS-8000-EY scan: scrub repaired 0 in 0h8m with 0 errors on Thu Apr 17 19:43:57 2014 config: NAME STATE READ WRITE CKSUM rpool ONLINE 0 0 0 sda ONLINE 0 0 0 errors: No known data errors ``` Signed-off-by: Richard Yao Signed-off-by: Brian Behlendorf Closes #2342 --- diff --git a/cmd/zpool/zpool_main.c b/cmd/zpool/zpool_main.c index e38213c85..aa166a9c0 100644 --- a/cmd/zpool/zpool_main.c +++ b/cmd/zpool/zpool_main.c @@ -4389,6 +4389,17 @@ status_callback(zpool_handle_t *zhp, void *data) "'zpool clear'.\n")); break; + case ZPOOL_STATUS_HOSTID_MISMATCH: + (void) printf(gettext("status: Mismatch between pool hostid " + "and system hostid on imported pool.\n\tThis pool was " + "previously imported into a system with a different " + "hostid,\n\tand then was verbatim imported into this " + "system.\n")); + (void) printf(gettext("action: Export this pool on all systems " + "on which it is imported.\n" + "\tThen import it to correct the mismatch.\n")); + break; + case ZPOOL_STATUS_ERRATA: (void) printf(gettext("status: Errata #%d detected.\n"), errata);