See 2.1.1 below for Hipster (GPT) partitions.
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.