Předcházející verze nástroje Solaris Volume Manager se jmenovaly různě. Nejznámější název je zřejmě v Solaris 8 obsažený Solstice DiskSuite. V Solaris 10 je již tento manager součástí systému a jmenuje se Solaris Volume Manager (SVM). Máme tak možnost přímo nástroji systému vytvářet z připojených disků RAID, aniž bychom museli použít například Veritas VxVM.
Co je k tomu pořeba?
Základem jsou samozřejmě nainstalované alespoň základní packages SVM – SUNWmdr a SUNWmdu. Ty nám do systému mj. nainstalují příkazy meta*, které slouží pro manipulaci s metadevices.
Solaris Volume Manager si informace o jednotlivých zařízení ukladá do takzvaných metadatabazí. Jsou to malé (cca 4MB) části partišny, ve kterých se udržují informace o aktuální konfiguraci SVM. Těchto metadb je dobré mít dostatečný počet na různých discích, abychom při havárii disku nepřišli i informace o strukuře a tím i o všechna data. Rozložení může být například takovéto:
# metadb -i flags first blk block count a m p luo 16 8192 /dev/dsk/c0t0d0s4 a p luo 16 8192 /dev/dsk/c0t1d0s4 a p luo 16 8192 /dev/dsk/c0t1d0s6 a p luo 16 8192 /dev/dsk/c0t1d0s7 a p luo 16 8192 /dev/dsk/c0t0d0s7 a p luo 16 8192 /dev/dsk/c0t0d0s6
Vidíme, že na discích c0t0d0 a c0t1d0 jsou metadatabáze na 4., 6. a 7. partition, a že jsou up to date. Prozradím vám, že velikost 4. partišny na obou discích je pouze 1 cylindr a neobsahuje nic jiného, než metadb a partišny 6 a 7 jsou fs, které na začátku obsahují také kopii metadb.
Ale popořadě.
Layout
Nejprve je třeba rozhodnout o layoutu disku. Pro naše účely budeme dále uvažovat o RAID-1 (tj. mirror disku). Z různých důvodů je třeba, aby na jednom disku byly alespoň 2 kopie metadb. Budeme tedy potřebovat alespoň jednu neobsazenou a nenamountovanou partišnu. Ostatní mohou být v systému použity. Znamená to, že jsme schopni nasadit SVM a zmirrorovat disk i na plně funkčním a běžícím systému. Samozřejmě, pokud budeme mít alespoň jednu partišnu s cca 8MB (velikost jedné kopie metadb je něco kolem 4MB).
Takže dejme tomu, že máme funkční systém na disku c0t0d0 s tímto layoutem:
partition mount point c0t0d0s0 / c0t0d0s1 swap c0t0d0s2 backup c0t0s0s3 - neobsazeno - c0t0s0s4 - zatím neobsazeno - jen 1 cylinder - bude soužit jen pro metadb c0t0s0s5 /var c0t0s0s6 - neobsazeno - bude použito pro /var/crash c0t0s0s7 - neobsazeno - bude použito pro /var/audit
K dispozici máme ještě druhý nepoužitý disk c0t1d0, který naformátujeme naprosto shodně:
# prtvtoc /dev/rdsk/c0t0d0s2 | fmthard -s - /dev/rdsk/c0t1d0s2
Metadb
Vytvoříme tedy základní (master) metadb a zkontrolujeme vytvoření:
# metadb -a -f c0t0d0s4
# metadb -i
Kopie metadb vytvoříme i na zatím nepoužitých partišnách s6 a s7 obou discích a samozřejmě i na s4 na druhém disku:
# medadb -a c0t1d0s4 c0t0d0s6 c0t1d0s6 c0t0d0s7 c0t1d0s7
Pozor: Nevytvářejte metadb na partišnách, na kterých máte data! Příkaz metadb přepíše prvních cca 4MB.
Čistý mirror (bez dat)
Nyní máme zajištěn dostatečný počet metadb na obou discích a můžeme přejít k vytváření metadevices. Na c0t0d0s7 a c0t0d0s6 vytváříme nové mirrory, takže nás zatím netrápí data na disku:
# metainit d17 1 1 c0t0d0s7
# metainit d27 1 1 c0t1d0s7
# metainit d7 -m d17 d27
# newfs /dev/md/dsk/d7
Tímto jsme vytvořili filesystém na mirroru d7, který se skládá ze dvou submirrorů d17 (c0t0d0s7) a d27 (c0t1d0s7)
Stejně budeme postupovat i pro mirror d6:
# metainit d16 1 1 c0t0d0s6
# metainit d26 1 1 c0t1d0s6
# metainit d6 -m d16 d26
# newf /dev/md/dsk/d6
A mirrory jsou hotové:
# metastat d6: Mirror Submirror 0: d16 State: Okay Submirror 0: d26 State: Okay Pass: 1 Read option: roundrobin (default) Write option: parallel (default) Size: 16770048 blocks (8.0 GB) d16: Submirror of d6 State: Okay Size: 16770048 blocks (8.0 GB) Stripe 0: Device Start Block Dbase State Reloc Hot Spare c0t0d0s6 10176 Yes Okay Yes d26: Submirror of d6 State: Okay Size: 16770048 blocks (8.0 GB) Stripe 0: Device Start Block Dbase State Reloc Hot Spare c0t1d0s6 10176 Yes Okay Yes d7: Mirror Submirror 0: d17 State: Okay Submirror 0: d27 State: Okay Pass: 1 Read option: roundrobin (default) Write option: parallel (default) Size: 8385024 blocks (4.0 GB) d17: Submirror of d7 State: Okay Size: 8385024 blocks (4.0 GB) Stripe 0: Device Start Block Dbase State Reloc Hot Spare c0t0d0s7 10176 Yes Okay Yes d27: Submirror of d7 State: Okay Size: 8385024 blocks (4.0 GB) Stripe 0: Device Start Block Dbase State Reloc Hot Spare c0t1d0s7 10176 Yes Okay Yes
Za povšimnutí stojí údaj Start Block u metastat , který říká, že systém nezačíná hned na začátku partition, ale až od bloku 10176. Je to tím, že na začátku partišny máme umístěnou metadb a vlastní data tak začínají o něco dál.
Můžeme je nyní přimountovat a zapsat do /etc/vfstab.
# df -k Filesystem kbytes used avail capacity Mounted on /dev/dsk/c0t0d0s0 8262869 5396800 2783441 66% / /dev/dsk/c0t0d0s5 4133598 541020 3551243 14% /var /dev/md/dsk/d6 8257781 8211 8166993 1% /var/crash /dev/md/dsk/d7 4128750 4150 4083313 1% /var/audit
(zkráceno)
Mirror s daty
U FS /var je to už něco jiného. Tento FS je přimountovaný a jsou na něm data. Musíme proto postupovat opatrně. Z “živé” partišny c0t0d0s5 uděláme submirror d15 a z něho mirror d5:
# metainit -f d15 1 1 c0t0d0s5 # metainit d5 -m d15 # # metastat d5 d5: Mirror Submirror 0: d15 State: Okay Pass: 1 Read option: roundrobin (default) Write option: parallel (default) Size: 8395200 blocks (4.0 GB) d15: Submirror of d5 State: Okay Size: 8395200 blocks (4.0 GB) Stripe 0: Device Start Block Dbase State Reloc Hot Spare c0t0d0s5 0 No Okay Yes
Nyní máme vytvořen mirror d5, sestávající zatím pouze z jediného submirroru d15 (c0t0d0s5). Tento mirror je již funkční, ale než k němu připojíme druhý submirror (d25), musíme přemountovat /var na tento nový mirror. Uděláme to tak, že změníme v /etc/vfstab záznam pro /var například na:
/dev/md/dsk/d5 /dev/md/rdsk/d5 /var ufs 1 no nologging
POZOR: Druhý submirror můžeme připojit až po přemountování systému!
Mirror swapu
Pokud budeme mirrorovat i swap, nesmíme zapomenout nastavit /etc/dumpadm.conf
. Nikdy needitujeme rucne, ale pomocí:
# dumpadm -d /dev/md/dsk/d1
Mirror root FS
Podobný “úkon” provedeme i s root filesystemem. Opět vytvoříme zatím jen mirror (d0) s jedním submirrorem (d10) a druhý submirror (d20) přidáme až pro přemountování:
# metainit -f d10 1 1 c0t0d0s0
# metainit d0 -m d10
Jelikož se root FS mountuje při bootu ještě před tím, než si systém přečte /etc/vfstab, musíme mu dát vědět, že má rovnou mountovat mirror. Lze to upravit ručně v /etc/system (direktiva rootdev), ale SVM to umí vše udělat za nás příkazem metaroot:
# metaroot d0
Můžeme se přesvědčit, že byla provedena změna v /etc/vfstab a /etc/system. Po tomto příkazu je třeba restartovat systém, aby se již přimountovaly nové mirrory. Před tím se pro jistotu podíváme na cesty k diskům a flushneme zápisy na disk:
# ls -l /dev/dsk/c0t0d0s0
lrwxrwxrwx 1 root root 41 Jun 16 12:50 /dev/dsk/c0t0d0s0 ->
../../devices/pci@1f,4000/scsi@3/sd@0,0:a
# ls -l /dev/dsk/c0t1d0s0
lrwxrwxrwx 1 root root 41 Jun 16 12:50 /dev/dsk/c0t1d0s0 ->
../../devices/pci@1f,4000/scsi@3/sd@1,0:a
# lockfs -fa
Pokud jsme nahodou na discich meli nejaky jiny volume manager a boot block muze korupnuty, doporucuji provest prikaz:
# installboot /usr/platform/`uname -i`/lib/fs/ufs/bootblk /dev/rdsk/c0t0d0s0
Tim se nestane, ze dostaneme pri bootu error hlaseni “The file just loaded does not appear to be executable.”
A nakonec restartujeme:
# init 0
Init 0 jsme použili proto, abychom si v ok promptu rovnou zapsali alternativní boot cesty (to pro případ, že nám odejde disk c0t0d0, z kterého normálně bootujeme):
ok nvalias backup_root /pci@1f,4000/scsi@3/sd@1,0:a
ok setenv boot-device disk backup_root
ok nvstore
ok boot
Nyní přijde na řadu dokončení mirrorů d0 a d5. Vytvoříme druhé submirrory a připojíme je ke stávajícím mirrorům:
# metainit d25 1 1 c0t1d0s5
# metainit d20 1 1 c0t1d0s0
# metattach d5 d25
# metattach d0 d20
Pomocí příkazu metastat se můžeme přesvědčit, že se tyto mirrory začaly synchronizovat:
# metastat d5 d5: Mirror Submirror 0: d15 State: Okay Submirror 1: d25 State: Resyncing Resync in progress: 7 % done Pass: 1 Read option: roundrobin (default) Write option: parallel (default) Size: 8395200 blocks (4.0 GB) d15: Submirror of d5 State: Okay Size: 8395200 blocks (4.0 GB) Stripe 0: Device Start Block Dbase State Reloc Hot Spare c0t0d0s5 0 No Okay Yes d25: Submirror of d5 State: Resyncing Size: 8395200 blocks (4.0 GB) Stripe 0: Device Start Block Dbase State Reloc Hot Spare c0t1d0s5 0 No Okay Yes
Během synchronizace si přečteme Solaris Volume Manager dokumentaci, nebo alespoň manuálové stránky pro příkazy metaclear, metadevadm, metainit, metaparam, metareplace, metastat, metadb, metahs, metaoffline, metarecover, metaroot, metasync, metadetach, metaimport, metaonline, metarename, metaset a metattach a po dokončení synchronizace máme celý systém na mirrorovaných filesystémech a havárie disku nás už nevyvede z míry :-)
Dík moc, ušetřils´ mi několik kilogramů manuálů… o:)))
Ahoj, akorat bych k tomu dodal, ze k nastaveni alternativnich bootu nemusime jit do OK promptu, ale staci puzit “eeprom” command. Jinak pekny zaklad SVMka.
Pekny zaklad do SVM. Urcite se hodi. Jedine co bych poradil je to, ze k nastaveni alternativnich bootu neni potreba jit do OK promptu, ale staci vyuzit prikazu *”eeprom”* primo v systemu