]> granicus.if.org Git - zfs/commitdiff
Handle ZPOOL_STATUS_HOSTID_MISMATCH in zpool status
authorRichard Yao <ryao@gentoo.org>
Sat, 17 May 2014 13:35:10 +0000 (09:35 -0400)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Mon, 19 May 2014 17:16:29 +0000 (10:16 -0700)
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

cmd/zpool/zpool_main.c

index e38213c8520e71d2b2d49a8e7b730e58009a0f32..aa166a9c03fe4f7694d8790c0c9bbd834f48528b 100644 (file)
@@ -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);