It happens fairly often that you need to create a software mirror using SVM on Solaris. A smaller percentage of the time, you need to create a SVM mirror of your root partition. It doesn’t happen very often at all, but there are cases where you want to unmirror your root partition on Solaris. I’ll get into the why later, follow the jump for the howto. First, we need to define the disk setup of our server. The following table shows the current SVM setup.
Mount Point Mirror Device c1t0d0 Slice/Submirror c1t1d0 Slice/Submirror
/
d1
slice 0/d10
slice 0/d11
/usr/local
d2
slice 3/d20
slice 3/d21
/export/home
d3
slice 4/d30
slice 4/d31
/apps
d4
slice 5/d40
slice 5/d41
swap
d5
slice 1/d50
slice 1/d51
- MetaDB Slices
slice 6
slice 6
As you can see, we have 5 individual mirrors, one of which is for swap. I don’t recommend mirroring swap, but I include it here because there is an important caveat you need to catch if you do have mirrored swap. We have two disks: c1t0d0, and c1t1d0. We have the metadb’s stored on slice 6 of each disk. Our end goal is to boot from c1t0d0, and have c1t1d0 available for whatever we like.
Disclaimer
I used these instructions, and they worked great for me. I’ve used them on both Solaris 9 and Solaris 10. If you embark on such a task, make sure to have a complete, full backup before you proceed!
Step One: Detach Submirrors
First, we need to “break” the mirror, by removing all of the submirrors that are contained on c1t1d0. In our case, we have mirrors 1-5, and the submirror contained on c1t1d0 is always the same as the mirror device with a trailing 1. This makes for a nice one liner:
for i in 1 2 3 4 5; do metadetach d${i} d${i}1; done
This code removes submirror 11 from mirror 1, submirror 21 from mirror 2, and so on.
Step Two: de-metaroot
The proper way to create a mirrored root volume is to use the metaroot tool to modify /etc/vfstab and /etc/system for you. The good thing about this is that you can use the same tool to to de-configure it too. Keeping in mind that we want our root slice to be c1t0d0s0, we run:
metaroot /dev/dsk/c1t0d0s0
Step Three: Update vfstab
Now, we need to edit /etc/vfstab and replace all of the mirror device mounts with their c1t0d0 counterparts. If your original vfstab looked like this:
...
/dev/md/dsk/d5 - - swap - no -
/dev/dsk/c1t0d0s0 /dev/rdsk/c1t0d0s0 / ufs 1 no -
/dev/md/dsk/d4 /dev/md/rdsk/d4 /apps ufs 2 yes -
/dev/md/dsk/d3 /dev/md/rdsk/d3 /export/home ufs 2 yes -
/dev/md/dsk/d2 /dev/md/rdsk/d2 /usr/local ufs 2 yes -
...
Then your new vfstab should look something like this:
...
/dev/dsk/c1t0d0s1 - - swap - no -
/dev/dsk/c1t0d0s0 /dev/rdsk/c1t0d0s0 / ufs 1 no -
/dev/dsk/c1t0d0s5 /dev/rdsk/c1t0d0s5 /apps ufs 2 yes -
/dev/dsk/c1t0d0s4 /dev/rdsk/c1t0d0s4 /export/home ufs 2 yes -
/dev/dsk/c1t0d0s3 /dev/rdsk/c1t0d0s3 /usr/local ufs 2 yes -
...
Step Four: Configure your Dump Device
Here’s the caveat for mirrored swap - you’re probably using /dev/md/dsk/d5 for your dump device. Let’s fix that now. First run
dumpadm | grep '/md/'
If that returns any output, then run this (using your single-disk slice for swap):
dumpadm -s /var/crash/`hostname` -d /dev/dsk/c0t0d0s1
Step Five: Reboot and Verify
Cross your fingers, and do a
init 6
Once you’re back up, look at the output of
df -h && swap -l
and make sure there’s no references to any ‘md’ devices.
Step Six: Remove the Mirrors, Remaining Submirrors, and MetaDB’s
Now that we are running in a single disk environment, we need to remove the mirrors and submirrors. Again, ripe for a one-liner:
for i in 1 2 3 4 5; do metaclear -r d${i}; done
At this point, ‘metastat’ should return no mirrors. Now, we can remove the metadb’s from slice 6 on both disks. Only do this if you’re not using SVM for anything else!
metadb -df /dev/dsk/c1t1d0s6
metadb -df /dev/dsk/c1t0d0s6
Summary
Well, that covers the entire process. You should now have a free disk that you can use for whatever you like!