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 <ryao@gentoo.org> Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> Closes #2342
This commit is contained in:
parent
bc25c9325b
commit
1cbae971c5
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user