Každý server by měl mít systémové disky v mirroru, protože jestli něco v počítačích odchází rádo, tak jsou to disky. Pokud není server vybaven HW mirrorem, máte v Solarisu možnost použít mirror softwarový. Firma Sun dodává tento sw spolu se Solarisem. Je znám pod názvem Solstice Disk Suite, nebo Solaris Volume Manager.
Jak na to?
Nejdříve si zjistěte si které slice budete mirrorovat. Celý příklad, který je zde udělá mirror na slice 0,1,5 tj /(root), swap, /var. Vzhledem k tomu, že SDS využívá databázi, kterou nemá na filesystému, ale na zvláštní slice, je nutné tuto slice vytvořit. Většinou se pro tyto účely používá slice 7. Velikost s7 => 256 MB => dostatečně velká rezerva.
Jaké disky budeme mirrorovat
root@pokusnykralik # format
Searching for disks...done
AVAILABLE DISK SELECTIONS:
0. c1t1d0
/pci@8,600000/SUNW,qlc@4/fp@0,0/ssd@w2100002037f30f3b,0
1. c1t2d0
/pci@8,600000/SUNW,qlc@4/fp@0,0/ssd@w2100002037f3f003,0
takže v tomto případě se jedná o disky c1t1d0 a c1t2d0.
Rozdělení mého disku c1t1d0.
Part Tag Flag Cylinders Size Blocks 0 root wm 2870 - 8609 7.91GB (5740/0/0) 16582860 1 swap wu 0 - 2869 3.95GB (2870/0/0) 8291430 2 backup wm 0 - 24619 33.92GB (24620/0/0) 71127180 3 unassigned wm 0 0 (0/0/0) 0 4 unassigned wm 0 0 (0/0/0) 0 5 var wm 8610 - 10061 2.00GB (1452/0/0) 4194828 6 unassigned wm 0 0 (0/0/0) 0 7 unassigned wm 10062 - 10243 256.74MB (182/0/0) 525798
Celý proces mirroru je rozdělěn na 2 části
ad část 1:
Vytvoříme malý script, který pomocí prtvtoc sejme rozdělení prvního disku, programem fmthard rozdělí druhý, pak vytvoří databáze, vytvoří první a druhou část zrcadla a připojí první část zrcadla do metazařízení.
BDISK=c1t1d0
MDISK=c1t2d0
set -x
prtvtoc /dev/rdsk/${BDISK}s2 > /tmp/firstdisk
fmthard -s /tmp/firstdisk /dev/rdsk/${MDISK}s2
metadb -a -c3 -f ${BDISK}s7
metadb -a -c3 ${MDISK}s7
metainit -f d10 1 1 ${BDISK}s0
metainit -f d11 1 1 ${BDISK}s1
metainit -f d15 1 1 ${BDISK}s5
metainit -f d20 1 1 ${MDISK}s0
metainit -f d21 1 1 ${MDISK}s1
metainit -f d25 1 1 ${MDISK}s5
metainit d0 -m d10
metainit d1 -m d11
metainit d5 -m d15
metaroot d0
set +x
Výpis spuštěného scriptu:
root@pokusnykralik # ./start.sh ++ prtvtoc /dev/rdsk/c1t1d0s2 ++ fmthard -s /tmp/firstdisk /dev/rdsk/c1t2d0s2 fmthard: New volume table of contents now in place. ++ metadb -a -c3 -f c1t1d0s7 ++ metadb -a -c3 c1t2d0s7 metadb: waiting on /etc/lvm/lock ++ metainit -f d10 1 1 c1t1d0s0 d10: Concat/Stripe is setup ++ metainit -f d11 1 1 c1t1d0s1 d11: Concat/Stripe is setup ++ metainit -f d15 1 1 c1t1d0s5 d15: Concat/Stripe is setup ++ metainit -f d20 1 1 c1t2d0s0 d20: Concat/Stripe is setup ++ metainit -f d21 1 1 c1t2d0s1 d21: Concat/Stripe is setup ++ metainit -f d25 1 1 c1t2d0s5 d25: Concat/Stripe is setup ++ metainit d0 -m d10 d0: Mirror is setup ++ metainit d1 -m d11 d1: Mirror is setup ++ metainit d5 -m d15 d5: Mirror is setup ++ metaroot d0 ++ set +x
Tak po spuštění je třeba upravit /etc/vfstab a to z následujícího stavu:
... /dev/dsk/c1t1d0s1 - - swap - no - /dev/dsk/c1t1d0s0 /dev/rdsk/c1t1d0s0 / ufs 1 no logging /dev/dsk/c1t1d0s5 /dev/rdsk/c1t1d0s5 /var ufs 1 no logging ...
do stavu kdy se nesahá přímo na zařízení, ale jde se přes metazařízení, které má na starosti mirror:
... /dev/md/dsk/d1 - - swap - no - /dev/md/dsk/d0 /dev/md/rdsk/d0 / ufs 1 no logging /dev/md/dsk/d5 /dev/md/rdsk/d5 /var ufs 1 no logging ...
Pak následuje REBOOT!
ad část 2:
Nyní je třeba připojit druhou část zrcadla scriptem:
for slice in 0 1 5
do
echo "attaching d2$slice to d$slice"
metattach d$slice d2$slice
done
spustníme script:
root@pokusnykralik # ./finish.sh attaching d20 to d0 d0: submirror d20 is attached attaching d21 to d1 d1: submirror d21 is attached attaching d25 to d5 d5: submirror d25 is attached
Pomocí příkazu metastat se můžete podívat co se děje:
d5: Mirror
Submirror 0: d15
State: Okay
Submirror 1: d25
State: Resyncing
Resync in progress: 4 % done
Pass: 1
Read option: roundrobin (default)
Write option: parallel (default)
Size: 4194828 blocks (2.0 GB)
d15: Submirror of d5
State: Okay
Size: 4194828 blocks (2.0 GB)
Stripe 0:
Device Start Block Dbase State Reloc Hot Spare
c1t1d0s5 0 No Okay Yes
d25: Submirror of d5
State: Resyncing
Size: 4194828 blocks (2.0 GB)
Stripe 0:
Device Start Block Dbase State Reloc Hot Spare
c1t2d0s5 0 No Okay Yes
d1: Mirror
Submirror 0: d11
State: Okay
Submirror 1: d21
State: Resyncing
Resync in progress: 1 % done
Pass: 1
Read option: roundrobin (default)
Write option: parallel (default)
Size: 8291430 blocks (4.0 GB)
d11: Submirror of d1
State: Okay
Size: 8291430 blocks (4.0 GB)
Stripe 0:
Device Start Block Dbase State Reloc Hot Spare
c1t1d0s1 0 No Okay Yes
d21: Submirror of d1
State: Resyncing
Size: 8291430 blocks (4.0 GB)
Stripe 0:
Device Start Block Dbase State Reloc Hot Spare
c1t2d0s1 0 No Okay Yes
d0: Mirror
Submirror 0: d10
State: Okay
Submirror 1: d20
State: Resyncing
Resync in progress: 0 % done
Pass: 1
Read option: roundrobin (default)
Write option: parallel (default)
Size: 16582860 blocks (7.9 GB)
d10: Submirror of d0
Write option: parallel (default)
Size: 16582860 blocks (7.9 GB)
d10: Submirror of d0
State: Okay
Size: 16582860 blocks (7.9 GB)
Stripe 0:
Device Start Block Dbase State Reloc Hot Spare
c1t1d0s0 0 No Okay Yes
d20: Submirror of d0
State: Resyncing
Size: 16582860 blocks (7.9 GB)
Stripe 0:
Device Start Block Dbase State Reloc Hot Spare
c1t2d0s0 0 No Okay Yes
Device Relocation Information:
Device Reloc Device ID
c1t2d0 Yes id1,ssd@n2000002037f3f003
c1t1d0 Yes id1,ssd@n2000002037f30f3b
Průběh resynchronizace můžete jednoduše sledovat:
root@pokusnykralik # metastat | grep %
Resync in progress: 2 % done
Resync in progress: 1 % done
Resync in progress: 0 % done
Jakmile je synchnizace hotová, je dobré vyzkoušet, jestli stroj bootuje z jednoho i druhého disku.