1

I need to replace disk for a zfs root installed system.

Previously it was (before reinstalling OS for test purpose which is also I want to accomplish after install):

Created mirror with zpool attach rpool /dev/sda2 /dev/sdb

NAME        STATE     READ WRITE CKSUM
    rpool       ONLINE       0     0     0
   mirror-0  ONLINE       0     0     0
      sda2      ONLINE       0     0     0
       sdb      ONLINE       0     0     0

And I reinstalled OS:

NAME        STATE     READ WRITE CKSUM
    rpool       ONLINE       0     0     0
      sda2      ONLINE       0     0     0

sdb holds data...

    pool: rpool-12312656247996879599
     id: 12312656247996879599
    state: DEGRADED
 status: One or more devices contains corrupted data.
 action: The pool can be imported despite missing or damaged devices.  The
        fault tolerance of the pool may be compromised if imported.
   see: http://zfsonlinux.org/msg/ZFS-8000-4J
 config:
        rpool-12312656247996879599  DEGRADED
          mirror-0  DEGRADED
            sda2    FAULTED  corrupted data
            sdb     ONLINE

And I want to create mirror and sync data from sdb to current mirror after reinstalling OS. After reinstalling OS, I have one rpool and one sdb pool seperatly. I can send/recv data on two pools and destory sdb pool and attach to rpool and make mirror. But wondering is there any way without manually syncing files (send/recv) and attach sdb which is in pool to rpool without destroying it?

1

You have taken your disk sda2 out of the old pool, erased its content and installed a new pool (with your new system) on it. As this was a redundant vdev (mirror), you essentially have two different pools, each having one disk (meaning no fault tolerance). You still have both options - using the new one or restoring the old one:


If you want to discard your old pool and use your new install (sda2), follow these steps:

  • Format your disk sdb, deleting all data on it
  • Attach the formatted disk to your new pool: zpool attach rpool sda2 sdb
  • Wait for resilvering to complete, check with zpool status rpool
  • Copy over boot sector data so the system can boot from both disks (assuming you use GRUB): installgrub /boot/grub/stage1 /boot/grub/stage2 /dev/rdsk/sdb

If you want to discard your new pool and return to your (degraded) old pool (sdb):

  • Shut down the system and physically remove your disk sda2
  • Start the system, it should now recognize your old pool as a valid bootable root pool (only works if you have added the boot sector to this disk previously, similar to steps above, otherwise you will get a boot error)
  • Physically reconnect your disk sda2 to the system and format it
  • Attach your disk sda2 to your old pool: zpool attach rpool sdb sda2

If you have a Solaris/illumos system, you could (in the future, not in this case) also use beadm to perform upgrades, tests and recovery in-place (inside the same rpool, but on different snapshots). This way, you can revert without giving up redundancy temporarily.

  • Thank you very much. I am managing server remotely. So can not physically touch disks. Only remotely reinstall OS. So first desc is for me but I want to keep data on sdb and mirror it with new rpool. So by reinstalling OS, I have at the end two different pools. So only option I found is, I send/recv between two pools. And do what you wrote at first option. Is there any other option without needing to send/recv files? Like without destrying pool and attaching it to rpool and make mirror. – Ozgur Erdogan Dec 19 '17 at 12:20
  • @OzgurErdogan Instead of removing the disks, it could be enough to disconnect them virtually (on Solaris, use cfgadm -c unconfigure and cfgadm -c disconnect). For the rest of your question, could you edit your original question and explain in more detail what you want to do and what to avoid? Generally, send/recv is painless and fast, you might not save much time in avoiding it. – user121391 Dec 19 '17 at 12:30
  • I added more details. So to make it short; can I attach sdb to rpool after reinstall without destroying/formatting sdb? So I can keep data on sdb and after attaching it it can mirror data to rpool. – Ozgur Erdogan Dec 19 '17 at 14:25

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.