Programinis RAID

Įvadas

Testavimas

  • Išbandyta su OpenBSD 3.6, 3.7, 3.8 versijomis

PASTABOS

  • Vietoj 3.x arba 3x įrašykite tikslią distribucijos versiją!!! (jei nežinote, komanda uname -r padės sužinoti). PVZ: Jūsų versija 3.8 tai vietoj 3.x rašome 3.8, o vietoj 3x rašome 38

Atsakomybė

  • Šio straipsnio autorius visiškai nėra atsakingas už jokią tiesioginę ar netiesioginę žalą patirtą naudojantis šia informacija.

Kompiliuojame RAID branduolį

  • Instaliuokite normalią OpenBSD versiją, vėliau mes ją panaikinsim, nes ji mums reikalinga tik perkompiliuoti branduolį su RAID palaikymų. Taip pat reikės papildomos saugios vietos tam kad laikinai patalpinti naujai sukompiliuotą branduolį, kurį vėliau ir naudosime. Taip kad papildomas diskas arba tinklo resursas labai praverstu.
  • Prisijungiame prie sistemos ir parsisiunčiame branduolio kodą. Išarchyvuojame į /usr/src. Jei sistemą diegėte iš CD tai siūstis nebūtina. Branduolį rasite CD.
  • Parsisiunčiame branduolio kodą iš interneto:

PASTABA: Pagal nutylėjimą wget paketo gali nebūti sistemoje, tad reikės papildomai įdiegti wget arba galite pasinaudoti standartine ftp komanda.

pkg_add -v ftp://ftp.openbsd.lt/pub/OpenBSD/3.x/packages/i386/wget-1.8.2.tgz
  • Siunčiame ir išpakuojame branduolį:
/bin/ksh
cd /tmp
wget ftp://ftp.openbsd.lt/pub/OpenBSD/3.x/sys.tar.gz
cd /usr/src
tar xvzfp /tmp/sys.tar.gz
  • Jei turite CD, išpakuojame iš CD:
/bin/ksh
mount /dev/cd0a /mnt
cd /usr/src
tar xvzfp /mnt/3.x/sys.tar.gz
  • redaguojame branduolio konfiguravimo bylą GENERIC ir pridedame RAID opciją:
cd sys/arch/i386/conf
vi GENERIC
  • Panaikinkite groteles šiai eilutej
#pseudo-device raid 4 # RAIDframe disk driver

ir papildomai prirašome automatinės konfiguracijos opciją… Štait aip turi atrodyti:

pseudo-device raid 4 # RAIDframe disk driver
option RAID_AUTOCONFIG # Enable RAID autoconfiguration
  • Konfiguruojame ir kompiliuojame naują branduolį:
config GENERIC
cd ../compile/GENERIC
make depend
make
  • Instaliuojame ir testuojame naują branduolį:
    • Išsaugome seną branduolį
mv /bsd /bsd.old
  • Instaluojame naują branduolį
mv bsd /
  • Perkrauname sistemą ir tikimes kad pasikraus tvarkingai :)
reboot
  • Po sėkmingo pasikrovimo patikriname ar tikrai naujasis branduolys yra aktivaves RAID palaikymą!

Peržiurime pasikrovimo pranešimus

dmesg | less
  • Suraskite šią eilutę:
Kernelized RAIDframe activated
  • Radote? Gerai! Dabar patalpinkite naują branduolį kur nors saugioje vietoje. Siūlyčiau iškepti CD su nauju branduoliu ir kartu su OpenBSD instaliaciniais failais. Tokiu atveju bus papraščiau tolimesniame diegime. jei nuterėte išsikelti CD tai turinys turėtu atrodyti štai taip.
./3.x
./3.x/i386
./3.x/i386/CKSUM
./3.x/i386/INSTALL.i386
./3.x/i386/INSTALL.linux
./3.x/i386/MD5
./3.x/i386/base3x.tgz
./3.x/i386/bsd      <-- Standartinis OpenBSD branduolys
./3.x/i386/bsd.mp
./3.x/i386/bsd.rd
./3.x/i386/cd3x.iso
./3.x/i386/cdboot
./3.x/i386/cdbr
./3.x/i386/cdemu3x.iso
./3.x/i386/cdrom3x.fs
./3.x/i386/comp3x.tgz
./3.x/i386/etc3x.tgz
./3.x/i386/floppy3x.fs
./3.x/i386/floppyB3x.fs
./3.x/i386/floppyC3x.fs
./3.x/i386/game3x.tgz
./3.x/i386/index.txt
./3.x/i386/man3x.tgz
./3.x/i386/misc3x.tgz
./3.x/i386/pxeboot
./3.x/i386/xbase3x.tgz
./3.x/i386/xetc3x.tgz
./3.x/i386/xfont3x.tgz
./3.x/i386/xserv3x.tgz
./3.x/i386/xshare3x.tgz
./3.x/ports.tar.gz
./3.x/ANNOUNCEMENT
./3.x/HARDWARE
./3.x/PACKAGES
./3.x/PORTS
./3.x/README
./3.x/SIZES
./3.x/sys.tar.gz
./3.x/src.tar.gz
./bsd  <-- Branduolys su RAID palaikymu

Instaliuojame minimalia OpenBSD sistemą

  • Sekite standartines instaliacijos instrukcijas iki kol pateksite į disklabel procedūrą.
  • Inicializuokite pirmą diską (mano pirmas diskas sd0, antras sd1):
# z
# a a
offset: [63]
size: [4226662] 50m
Rounding to nearest cylinder: 102627
FS type: [4.2BSD]
mount point: [none] /
# a b
offset: [102690]
size: [4124035] 32m
Rounding to nearest cylinder: 65520
FS type: [swap]
# a d
offset: [168210]
size: [4058515]
FS type: [4.2BSD] RAID
mount point: [none]
# p
device: /dev/rsd0c
type: SCSI
disk: SCSI disk
label: DORS-32160
bytes/sector: 512
sectors/track: 126
tracks/cylinder: 5
sectors/cylinder: 630
cylinders: 6703
total sectors: 4226725
free sectors: 0
rpm: 3600

16 partitions:
# size offset fstype [fsize bsize cpg]
a: 102627 63 4.2BSD 1024 8192 16 # (Cyl. 0*- 162)
b: 65520 102690 swap # (Cyl. 163 - 266)
c: 4226725 0 unused 0 0 # (Cyl. 0 - 6709*)
d: 4058525 168210 RAID # (Cyl. 267 - 1098)
# w
# q
  • Tęskite instaliaciją iki kol turėsite pasirinkti instaliuojamus paketus:
Where are the install sets? (or **done**)
  • Paspauskite CTRL+Z tam kad patekti į konsolę
  • Dabar įdėkite savo iškeptą OpenBSD CD ir išarchyvuokite kelias bylas:
  • Primontuokite CD-ROM prie /mnt2 katalogo ir pereikite į jo turinį
mount /dev/cd0a /mnt2/
cd /mnt/
  • Nukopijuokite branduolius su RAID palaikymu ir standartinį į šakninį katalogą:
  • PASTABA: Standartinį branduolį pervadinsime į bsd.old
cp /mnt2/bsd .
cp /mnt2/3.x/i386/bsd bsd.old
  • Išarchyvuokite ir nukopijuokite tik reikaligus failus.

tar xvzfp /mnt2/3.x/i386/etc3x.tgz ./etc/*

tar xvzfp /mnt2/3.x/i386/base3x.tgz ./usr/bin/ex ./usr/bin/vi* ./usr/bin/reset ./usr/bin/tset ./usr/sbin/mtree 
tar xvzfp /mnt2/3.x/i386/base3x.tgz */ld.so */libcurses.so* */libc.so* */libterm* */termcap*
tar xvzfp /mnt2/3.x/i386/base3x.tgz */cat */chroot */encrypt */pwd_mkdb */MAKEDEV *zoneinfo* */raidc* */find ./var/db*

mkdir -p root mnt mnt2 tmp usr/local var/tmp
echo "export HOME=/root" > .profile
echo "export TERM=vt220" >> .profile
echo "umask 022" >> .profile
cd /
pax -r -w -p e -v bin usr sbin mnt/
  • OpenBSD instaliacinis CD daugiau nebereikalingas.
umount /mnt2
  • Grįžtame į instalacijos eigą:
fg
/install
  • Užklausoje įrašome „Done
  • OpenBSD 3.8 versijoje papildomai klausiama
Location of sets? (cd disk ftp http or **'done**') [cd] **Done**
  • Dabar atsakykite į kelis užduotus klausimus:
Are you *SURE* your install is complete without **bsd**? [no] **yes**
Are you *SURE* your install is complete without **base3x.tgz**? [no] **yes**
Start sshd(8) by default? [yes] **no**
Start ntpd(8) by default? [no] **no**
Do you expect to run the X Window System? [yes] **no**
Change the default console to com0? [no] **no**
  • Užbaikite instaliacija įprastiniu būdu.
  • Išimkite instaliacinį CD ir perkraukite sistemą.

Konfiguruojame antrą diską

  • Perjunkite failinę sistemą į r/w režimą (skaitymui/rašymui):
mount -a
  • Jei reikia priejimo prie tinklo, įjunkite tinklo įrangą (vien tik ftp ir wget, nėra ssh, telnet, lynx):
  • arba su DHCP
dhclient
  • … arba rankiniu būdu (pavyzdžiui ifconfig)
ifconfig fxp0 inet 192.168.1.10 netmask 255.255.255.0
  • Nukopijuokite particijos lentelę į antrą diską (sd1):
disklabel sd0 > /root/disklabel.sd0
cp /root/disklabel.sd0 /root/disklabel.sd1

vi /root/disklabel.sd1
# /dev/rsd1c:

disklabel -R -r sd1 /root/disklabel.sd1
newfs /dev/sd1a
  • Instaliuojame boot particiją ant antro disko:
mount /dev/sd1a /mnt
cd /
pax -r -w -p e -v .profile bin boot bsd bsd.old dev etc root sbin tmp usr var /mnt/
/usr/mdec/installboot -v /mnt/boot /usr/mdec/biosboot sd1
  • Koreguojame fstab:
vi /mnt/etc/fstab
/dev/sd1a / ffs rw 1 1
  • Išjungiame sistemą:
halt -p
  • Dabar kai jūsų kompiuteris išjungtas, fiziškai atjunkite pirma kietajį nuo sistemos, tam kad isitikinti ar galime pasikrausi sistemą iš antrojo disko. Tam kad patikrinti ar tikrai sistema pasikrovė iš antrojo disko, galite pažiūrėti /etc/fstab byloje
cat /etc/fstab

* Turėtumete matyti /dev/sd1a

  • Jei pasikrovimas iš antro disko sėkmingas (patikėkit tikrai turite būti isitikinę tuom kad galita pasikrauti sistemą iš antro disko), vėl išjunkite sistema, prijunkite pirmą diską ir pabandykite pasikrauti sistemą su prijungtu pirmuoju disku. Tai galima padaryti įrašius komanda boot pasikrovimo konsolėje:
boot# boot hd1a:/bsd

* Jei viskas veikia tvarkingai, perkraukite sistema ir tęsiame toliau.

Sukuriame RAID masyvą

  • Perjunkite failinę sistemą į r/w režimą (skaitymui/rašymui):
mount -a
  • Inicializuojame RAID particiją. Jei pamatysite raidctl ignoruojant klaidas, jus taip pat jas ignuoruokite. Ir nesijaudinkite dėl pranešimo no disk label, mes ją vėliau sukursime.
# Particija: /
vi /root/raid0.conf.new
  • Turinys tu atrodyti taip:
START array
# numRow numCol numSpare
1 2 0

START disks
/dev/sd0d
/dev/sd1d

START layout
# sectPerSU SUsPerParityUnit SUsPerReconUnit RAID_level_1
128 1 1 1

START queue
fifo 100
  • Konfiguruojame masyvą
raidctl -C /root/raid0.conf.new raid0
  • Inicializuojame komponento žymes su ID 100
raidctl -I 100 raid0
  • Inicializuojame lygiavertiškumą (PASTABA: Teks šiek tiek palaukti kol abu diskai susinchronizuos)
raidctl -iv raid0
  • Sukuriame particijas. Nors instaliuoti viską į viena particiją nėra gerai, bet taip lengviau. Geriau jei sukursite atskiras particijas: /, /home, /tmp, /usr and /var.
  • Particijų kūrimas:
disklabel -E raid0
# z
# a b
offset: [0]
size: [4058368] 256m
FS type: [swap]
# a a
offset: [524288]
size: [3534080]
FS type: [4.2BSD]
# w
# q
  • Formatuojame
newfs raid0a
  • Įjungiame autokonfiguraciją raid0 particijai (vėliau padarysime ją „šaknine“)
raidctl -A yes raid0

Instaliuojame OpenBSD sistemą ant RAID masyvo

  • Montuojame RAID:
mount /dev/raid0a /mnt/
  • Idedame OpenBSD instaliacinį CD ir primontuojame jį:
mount /dev/cd0a /mnt2/
  • Išskleidžiame instaliacinius paketus į RAID particiją:
cd /mnt
tar xvzfp /mnt2/3.x/i386/etc3x.tgz
tar xvzfp /mnt2/3.x/i386/base3x.tgz
tar xvzfp /mnt2/3.x/i386/comp3x.tgz
tar xvzfp /mnt2/3.x/i386/man3x.tgz
  • nebūtina: game, misc and X11
tar xvzfp /mnt2/3.x/i386/game3x.tgz
tar xvzfp /mnt2/3.x/i386/misc3x.tgz
tar xvzfp /mnt2/3.x/i386/xbase3x.tgz
tar xvzfp /mnt2/3.x/i386/xfont3x.tgz
tar xvzfp /mnt2/3.x/i386/xserv3x.tgz
tar xvzfp /mnt2/3.x/i386/xshare3x.tgz
  • CD nebereikalingas
umount /mnt2
  • Ištraukite CD iš įrenginio.
  • Pataisome instaliaciją:
cd /
pax -r -w -p e -v dev boot bsd* /mnt/
cd /etc
cp -p fstab my* hostname.* hosts resolv.conf dhc* /mnt/etc/
vi /mnt/etc/fstab
/dev/raid0a / ffs rw 1 1
  • Pakeičiame root slaptažodį:
/mnt/usr/sbin/chroot /mnt
passwd
exit
  • Pakeičiame RAID masyvą kad sistema atpažintu ją kaip šakninę:
raidctl -A root raid0
  • Perkraukite sistema ir tikėkitės kad viskas veikia :)
reboot
  • Jei kartais nepavyktu pasikrauti iš RAID masyvo ir norėtume vėl pasikrauti iš minimalios particijos, išjunkite root reikšmę RAID masyvę, „rescue shell“ konsolėje ir perkraukite sistemą:
raidctl -A yes raid0
reboot
  • Pabaigai, vėl išjunkite sistemą, fiziškai atjunkite pirmajį diską ir patikrinkite ar vis dar galite pasikrauti sistemą iš RAID masyvo. Po sekmingo testo vėl pajunkite diską ir pasikraukite sistemą. Dabar privalote atstatyti diskų lygiavertiškumą:
  • tikriname ar pirmasis diskas nusimušė nuo masyvo (turėtumėt matyti “/dv/sd0d: failed“)
raidctl -s raid0
  • rekonstruojame RAID masyvą tiesiogai pirmajame diske
raidctl -R /dev/sd0d raid0
  • tikriname ar vyksta rekonstrukcija ir laukiame kol ji užbaigs savo darbą. Jokiu budu neišjunkite sistemos!
raidctl -s raid0

Baigta,

Sėkmės!

Arūnas Vaitekūnas 2006/08/17 16:38


Asmeniniai įrankiai