First, we list the connected disks in the system. You can replace type(disk) with other options for different types of hardware configurations also. Try running cfgadm -al
So c3t0d0 is disk 0 in rpool and c3t1d0 is disk 1, the disk we want to use as a mirror.
Now (on x86 only) we need to apply a default Solaris fdisk partition to a disk:
# pfexec format (choose disk 1, then run fdisk (here, choose Y to select the 100% Solaris partition))
Alternatively, this applies the same configuration automatically:
# pfexec fdisk -B c3t1d0p0 (p0 is the whole disk starting from the MBR)
Now we set up an SMI label with same partitioning as disk 0 on disk 1.
# pfexec prtvtoc /dev/rdsk/c3t0d0s2 | pfexec fmthard -s - /dev/rdsk/c3t1d0s2
Now we add the 2nd drive to our rpool by issuing:
# pfexec zpool attach -f rpool c3t0d0s0 c3t1d0s0
Now we wait for the resilver to finish on the 2nd drive (check with zpool status -v rpool).
Now it's time to make the second mirror half bootable.
# pfexec installgrub /boot/grub/stage1 /boot/grub/stage2 /dev/rdsk/c3t1d0s0
Only thing left to do on an x86 system is add disk 1 to the BIOS' list of bootable devices!
ZFS handles mirroring rpools automagically (see: /etc/sysevent/config/SUNW,EC_zfs,ESC_ZFS_bootfs_vdev_attach,sysevent.conf) It will install grub onto the new attached disk.
Be sure to configure your hardware to boot from both devices in case of failure.