This is G o o g l e's cache of http://www.gods-inc.de/barbie/solaris/sds_mirroring_howto.txt as retrieved on Jul 15, 2004 02:53:23 GMT.
G o o g l e's cache is the snapshot that we took of the page as we crawled the web.
The page may have changed since that time. Click here for the current page without highlighting.
This cached page may reference images which are no longer available. Click here for the cached text only.
To link to or bookmark this page, use the following url: http://www.google.com/search?q=cache:6cfTPrblA5YJ:www.gods-inc.de/barbie/solaris/sds_mirroring_howto.txt+Barbie+LeVile+svm+howto&hl=en&start=4


Google is not affiliated with the authors of this page nor responsible for its content.
These search terms have been highlighted: barbie levile svm howto 

Simple Solaris SDS/SVM Boot Disk Mirroring Howto.

Version 0.2 - Barbie LeVile - 14.12.2003

What we want to do:

1)   We want to create a mirrored systemdisk environment that can
     be booted from and survives a disk failure.
     In out example case we have 2 drives we want to use for that.
     A three way mirror can be done in much the similar way.


2) Some background on SDS concepts
 
     
     Metadbs:
     
       A metadb stores state informations of the metadevices, they are critical to SDS
       operation.
       In SDS metadbs must follow this rules to work:
       To be able to boot a SDS system, at least 2 and 50%+1 metadbs of all existing metadbs
       need to be in a ok state. Yes, both statements mut be true.
       For that reason metadbs are normaly placed on their own small slice on each drive.
       Less change for accidently deleting them.
       As a rule of thumb, 3 are placed on each drive in a 2 drive setup, and 2 in a 3 drive setup.
       However, a SDs system with only 2 disks can NEVER fullfill the minium requierments in case of diskfailure.
       There are two choices for such situations, 1) set the kernel to ignore the problem and keep booting.
       Or 2) fix the problem prior to getting back up manualy.
       
       In this example we will set the kernel to ignore it, since in most cases its the prefered mode
       of operation. On should however not forget to fix the problem ASAP.
       
       man metadb for details
       
       
     Metadevices:
     
       Metadevices are the building blocks of SDS.
       First one creats a metadevice out of a logical disk device like a slice, then assembles
       those into another metadevices.
       
       Example: We have 2 disks, each as 5 slices, each slice becomes a metadevice.
       In a mirror those are called submirrors, and then one from each disk gets assembled into
       actual mirror.
       Metadevices are manipulated via metainit.
       
       man metainit for details
       
       
     Metaroot:
     
       The metaroot command sets up a) the kernel to be able to handle a sds mirror boot device
       and b) creates a metadevice entry for the root filesystem in the /etc/vfstab.
       It can be used to revert the root device back to non metadevice mode too.
       
       man metaroot for details
       
     
     Hints:
   
       SDS likes to have drives of the same geometry.
       If thats not possible, make sure that the drive that holds your data has the smaller slices.
       You can always mirror a smaller slice to a bigger one, but not the other way.   


3) The example disklayout:
   
     We have 2 drives, c0t0d0 and c1t0d0, drive 1 is sliced as follows:
   
     c0t0d0s0	swap
     c0t0d0s1	/
     c0t0d0s2	backup (whole disk)
     c0t0d0s3	/var
     c0t0d0s4	/opt
     c0t0d0s5	/export/home
     c0t0d0s6	unused
     c0t0d0s7	here we place out metadbs
   
     We have no seperate /usr in this example, add it yourself if you want it.
     But generaly its not needed anymore.
     s7 should be around 50mb, more is not needed, even with 10s of metadbs.
   
     Now we plan how to name out metadevices.
   
     I usualy name my metadevices in the following sheme:
   
     d Slice 0 for the mirror, 1 for the submirror on disk 1, 2 for disk 2, 3 for disk 3,
     except for swap which lays on s0, there it just gets ommited
     Which gives us the following:
     
     Disk 1		Disk 2			Metadevices
     c0t0d0s0 -> d1	c1t0d0s0 -> d2		d1  + d2  -> d0
     c0t0d0s1 -> d11	c1t0d0s3 -> d12		d11 + d12 -> d10
     c0t0d0s3 -> d31	c1t0d0s3 -> d32		d31 + d32 -> d30
     c0t0d0s4 -> d41	c1t0d0s4 -> d42		d41 + d42 -> d40
     c0t0d0s5 -> d51	c1t0d0s5 -> d52		d51 + d52 -> d50
   

4) Time to get our hands dirty!

     The following steps should be done while in single usermode idealy.
     

4.1) Making both drives the same.
     
     We start with slicing the second drive in the same way as our first drive, the
     master.
     
     # prtvtoc /dev/rdsk/c0t0d0s2 | fmthard -s - /dev/rdsk/c1t0d0s2
     
     No need to newfs the second drive slices here, that will automaticaly done
     by the mirror syncing later.

     
4.2) Metadbs

     We can now setup our metadbs.
     
     # metadb -a -f -c3 c0t0d0s7 c1t0d0s7
     
     Since its the initial creation of the metadbs, we need to force it with -f
     -a adds the metadbs, and -c tells it how many to create.
     
     You can see the results with metadb -i.
     metadb -i is a very handy tool to determine the state of your metadb states.

     
4.3) Initializing the devices

     Now we go to setup the initial metadevices.
     
     # metainit -f d1 1 1 c0t0d0s0
     # metainit -f d11 1 1 c0t0d0s1 
     # metainit -f d31 1 1 c0t0d0s3    
     # metainit -f d41 1 1 c0t0d0s4 
     # metainit -f d51 1 1 c0t0d0s5 

     # metainit -f d2 1 1 c1t0d0s0  
     # metainit -f d12 1 1 c1t0d0s1    
     # metainit -f d32 1 1 c1t0d0s3     
     # metainit -f d42 1 1 c1t0d0s4     
     # metainit -f d52 1 1 c1t0d0s5     
     
     Like metadb metainit must be forced with -f, but this time not because its the initial creation, but
     because we work on mounted filesystems.
     So, here we create a 1 way concatenation of our actual slices and form the needed submirrors.
      
      
4.3) Mirroring fun part 1!

     # metainit d0 -m d1
     # metainit d10 -m d11     
     # metainit d30 -m d31     
     # metainit d40 -m d41     
     # metainit d50 -m d51 

     Here are the actualy mirroing intialized, the -m tells SDS that we want to build a mirror with the name
     in the first colum and consiting of the submirror in the third colum.
     We now have a one way mirror of our system drive, but its not active yet.
    

4.4) Setting the root device


     # cp /etc/vfstab /etc/vfstab_pre_sds
     # cp /etc/system /etc/system_pre_sds
     # metaroot d10
    
    
4.5) Setting up /etc/vfstab


     #device         	device          	mount           FS      fsck    mount   mount
     #to mount       	to fsck         	point           type    pass    at boot options
     #
     fd     		-			/dev/fd fd      -       no      -
     /proc   		-       		/proc   	proc    -       no      -
     #
     # sds drives
     #
     /dev/md/dsk/d0 	-       		-       	swap    -       no      -
     /dev/md/dsk/d10 /dev/md/rdsk/d10		/		ufs     1       no      logging
     /dev/md/dsk/d30 /dev/md/rdsk/d30		/var		ufs	1	no	logging,noatime
     /dev/md/dsk/d40 /dev/md/rdsk/d40		/opt    	ufs     2       yes     logging
     /dev/md/dsk/d50 /dev/md/rdsk/d50 		/export/home    ufs     2       yes     logging
     #
     # non sds drives
     #
     #/dev/dsk/c1t0d0s0	-       		-       	swap    -       no      -
     #/dev/dsk/c1t0d0s1	/dev/rdsk/c1t0d0s1	/       	ufs     1       no      logging
     #/dev/dsk/c1t0d0s3	/dev/rdsk/c1t0d0s2      /var		ufs     1       no      logging,noatime
     #/dev/dsk/c1t0d0s4	/dev/rdsk/c1t0d0s4      /opt		ufs     2       yes     logging
     #/dev/dsk/c1t0d0s5	/dev/rdsk/c1t0d0s5      /export/home    ufs     2       yes     logging
     #
     # swap slices
     #
     swap    		-       		/tmp		tmpfs   -       yes     -


4.5.1) Optional: Making sure we can boot in case of disk failure.

     USE ONLY WHERE DATA INTEGRETY IS LESS IMPORTANT THEN SERVICE AVILABILITY.
     THIS CAN LEAD TO FILE CORUPTION.

     To make sure we can boot in case a disk fails, we need to tell the kernel to ignore the
     quota on metadbs, otherwise we can't boot in a two disk setup, because we can't never
     fullfill the requirments.
     
     For that we add the following to /etc/system set md:mirrored_root_flag=1

     # echo "set md:mirrored_root_flag=1" >> /etc/system
    

4.6) Our first reboot!

     Bring down the system to the OBP, don't reboot yet fully.
     We need to setup the boot devices now.
     
     OK setenv boot device disk0:b disk1:b
     
     Make sure the devaliases of disk0 and disk1 are actualy pointing to the correct hardware decives.
     
     Now we boot our system up for the first time on the mirror.
     
     If all went well we are up and running in a few seconds.
        
     
4.7) Mirroring fun part 2!

     Now its time to hook up the second drive so we have actualy mirrored slices.
     
     # metattach d0 d2
     # metattach d10 d12     
     # metattach d30 d32     
     # metattach d40 d42     
     # metattach d50 d52     
          
     This will take considereble amount of time.
     Use metastat to check on the progress of the syncing         
     
     Example metastat d30     

     
5) All done, enjoy

6) Performance Tips

7) Troubleshooting