Solaris Volume Manager – mirror disků

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 :-)

3 Comments

  1. 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.

  2. 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

Leave a Reply

Your email address will not be published. Required fields are marked *