Ostatnio Na Forum
Logowanie

Polityka prywatno?ci

Portal openrouter.info stosuje pliki cookies ("ciasteczka") pozwalające na dostosowanie zawartości portalu do indywidualnych potrzeb. Korzystanie z portalu bez zmiany ustawień dotyczących ciasteczek oznacza akceptację umieszczenia ich na urządzenia użytkownika. Zmianę ustawień pliku ciasteczek można wykonać zmieniając opcję w ustawieniach przeglądarki internetowej. Więcej informacji można znaleźć w Polityce prywatności.

Macierze RAID w OpenWrt

Email Drukuj

Co to jest RAID, jakie s? jego typy i na czym to polega doskonale opisane jest w wikipedii: http://pl.wikipedia.org/wiki/RAID.

W OpenWrt jak w ka?dym systemie linuksowym mamy mo?liwo?? utworzenia macierzy programowej. Ma ona jedn? mia?d??c? przewag? - w przypadku awarii sprz?tu nie musimy szuka? identycznego (sprz?towo kontrolery RAID bardzo rzadko s? kompatybilne ze sob?), wystarczy tylko dowolny linux ?eby mc odtworzy? macierz. Rodzi si? pytanie: do czego mo?na wykorzysta? to w OpenWrt? Chocia? by do stworzenia jednolitej ci?g?ej przestrzeni z kilku no?nikw lub zapewnienia ochrony przechowywanych danych. Nale?y nadmieni?, ?e w popularnych urz?dzeniach NAS typu Synology czy QNAP tworzona macierz te? jest programowa.

Do testw wykorzystano TP-Linka TL-WR1043ND z hubem USB, do ktrego zosta?y do??czone dwa czytniki z kartami microSD - po 1GB pojemno?ci ka?dy, jedna karta produkcji Samsunga, druga PQI. Testy wydajno?ci przeprowadzono przy pomocy programu hdparm - zwyk?y odczyt bez cache. Poradnik ma na celu zobrazowanie sposobu tworzenia macierzy; interfejsy USB w routerach nie pozwalaj? jeszcze na wykonywanie gigantycznych transferw, wi?c konkretne wyniki mog? si? r?ni? w zale?no?ci od zastosowanego routera i no?nikw. Nale?y rwnie? pami?ta? ?e s? to wyniki tylko odczytu z dysku - w praktyce dochodz? jeszcze narzuty zwi?zane z obci??eniem CPU, obs?ug? systemu plikw i samej magistrali USB.

Oto wyniki wydajno?ci w testowanym ?rodowisku.

root@OpenWrt:~# hdparm -t /dev/sda /dev/sdb

/dev/sda:
Timing buffered disk reads: 46 MB in 3.03 seconds = 15.19 MB/sec

/dev/sdb:
Timing buffered disk reads: 40 MB in 3.02 seconds = 13.25 MB/sec

Jedna karta pozwala?a na odczyt na poziomie 15MB/s, druga niewiele ponad 13MB/s.

Przed wykonaniem operacji nale?y upewni? si? ?e no?niki s? odmontowane:

root@OpenWrt:~# umount /dev/sda1
root@OpenWrt:~# umount /dev/sdb1

Do tworzenia i obs?ugi macierzy niezb?dny jest program mdadm oraz odpowiednie modu?y z kernela. Dost?pne s? one m.in. w moim (obsy, eko.one.pl) repozytorium.

root@OpenWrt:~t# opkg update
root@OpenWrt:~t# opkg install kmod-md-mod kmod-md-raid0 kmod-md-raid1 mdadm

RAID0, czyli ??czenie przestrzeni no?nikw.

1. Tworzymy now? macierz z?o?on? z dwch partycji:

root@OpenWrt:~# mdadm --create --level=0 --raid-devices=2 /dev/md0 /dev/sda1 /dev/sdb1
mdadm: /dev/sda1 appears to contain an ext2fs file system
size=994688K mtime=Thu Jan 1 01:00:29 1970
mdadm: /dev/sdb1 appears to contain an ext2fs file system
size=991104K mtime=Thu Jan 1 01:00:29 1970
Continue creating array? y
mdadm: array /dev/md0 started.

Po tej operacji powsta?o urz?dzenie /dev/md0, ktre jest w?a?nie oczekiwan? macierz?. W logach mo?e pojawi? si? odpowiednia informacja:

Jan 1 01:05:00 OpenWrt user.info kernel: md: bind
Jan 1 01:05:00 OpenWrt user.info kernel: md: bind
Jan 1 01:05:00 OpenWrt user.info kernel: raid0: looking at sdb1
Jan 1 01:05:00 OpenWrt user.info kernel: raid0: comparing sdb1(1982080)
Jan 1 01:05:00 OpenWrt user.info kernel: with sdb1(1982080)
Jan 1 01:05:00 OpenWrt user.info kernel: raid0: END
Jan 1 01:05:00 OpenWrt user.info kernel: raid0: ==> UNIQUE
Jan 1 01:05:00 OpenWrt user.info kernel: raid0: 1 zones
Jan 1 01:05:00 OpenWrt user.info kernel: raid0: looking at sda1
Jan 1 01:05:00 OpenWrt user.info kernel: raid0: comparing sda1(1989248)
Jan 1 01:05:00 OpenWrt user.info kernel: with sdb1(1982080)
Jan 1 01:05:00 OpenWrt user.info kernel: raid0: NOT EQUAL
Jan 1 01:05:00 OpenWrt user.info kernel: raid0: comparing sda1(1989248)
Jan 1 01:05:00 OpenWrt user.info kernel: with sda1(1989248)
Jan 1 01:05:00 OpenWrt user.info kernel: raid0: END
Jan 1 01:05:00 OpenWrt user.info kernel: raid0: ==> UNIQUE
Jan 1 01:05:00 OpenWrt user.info kernel: raid0: 2 zones
Jan 1 01:05:00 OpenWrt user.info kernel: raid0: FINAL 2 zones
Jan 1 01:05:00 OpenWrt user.info kernel: raid0: zone 1
Jan 1 01:05:00 OpenWrt user.info kernel: raid0: checking sda1 ...
Jan 1 01:05:00 OpenWrt user.info kernel: contained as device 0
Jan 1 01:05:00 OpenWrt user.info kernel: (1989248) is smallest!.
Jan 1 01:05:00 OpenWrt user.info kernel: raid0: checking sdb1 ...
Jan 1 01:05:00 OpenWrt user.info kernel: nope.
Jan 1 01:05:00 OpenWrt user.info kernel: raid0: zone->nb_dev: 1, sectors: 7168
Jan 1 01:05:00 OpenWrt user.info kernel: raid0: current zone start: 1989248
Jan 1 01:05:00 OpenWrt user.info kernel: raid0: done.
Jan 1 01:05:00 OpenWrt user.info kernel: raid0 : md_size is 3971328 sectors.
Jan 1 01:05:00 OpenWrt user.info kernel: ******* md0 configuration *********
Jan 1 01:05:00 OpenWrt user.info kernel: zone0=[sda1/sdb1/]
Jan 1 01:05:00 OpenWrt user.info kernel: zone offset=0kb device offset=0kb size=1982080kb
Jan 1 01:05:00 OpenWrt user.info kernel: zone1=[sda1/]
Jan 1 01:05:00 OpenWrt user.info kernel: zone offset=1982080kb device offset=991040kb size=3584kb
Jan 1 01:05:00 OpenWrt user.info kernel: **********************************
Jan 1 01:05:00 OpenWrt user.info kernel: md0: detected capacity change from 0 to 2033319936

2. Tworzymy system plikw

W tym przypadku by? to ext2.

root@OpenWrt:~# mke2fs -m0 /dev/md0
mke2fs 1.41.11 (14-Mar-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
124160 inodes, 496416 blocks
0 blocks (0.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=511705088
16 block groups
32768 blocks per group, 32768 fragments per group
7760 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912

Writing inode tables: done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 22 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.

3. Montowanie

Macierz mo?na zamontowa? ju? normalnie jak ka?dy inny system pliw:

root@OpenWrt:/# mkdir -p /mnt/raid0
root@OpenWrt:/# mount -t ext2 /dev/md0 /mnt/raid0
root@OpenWrt:/# df -h
...
/dev/md0 1.9G 2.9M 1.9G 0% /mnt/raid0

Jak wida? powierzchnie zosta?y z??czone, i jest to suma no?nikw wchodz?cych w sk?ad macierzy (poniewa? by?y takiej samej pojemno?ci). Sprawdzamy wydajno??:

root@OpenWrt:~# hdparm -t /dev/md0

/dev/md0:
Timing buffered disk reads: 76 MB in 3.07 seconds = 24.79 MB/sec

Czyli o wiele wi?cej ni? pojedynczego no?nika. Mo?na jeszcze odczyta? stan macierzy z pliku /proc/mdstat

root@OpenWrt:~# cat /proc/mdstat
Personalities : [raid0] [raid1]
md0 : active raid0 sdb1[1] sda1[0]
1985664 blocks 64k chunks

unused devices:

Po restarcie systemu macierz nale?y ponownie "uruchomi?". Mo?na to wykona? poleceniem:

mdadm --assemble /dev/md0 --run /dev/sda1 /dev/sdb1

Ktre mo?na doda? np. do /etc/rc.local ?eby wykona?o si? przy starcie systemu.

RAID1 - czyli zdupliowanie zapisu na wiele no?nikw

Zasada jest podobna - nale?y utworzy? macierz odpowiedniego typu, utworzy? system plikw i go zamontowa?

root@OpenWrt:/# mdadm --create --level=1 --raid-devices=2 /dev/md0 /dev/sda1 /dev/sdb1
mdadm: /dev/sda1 appears to contain an ext2fs file system
size=1985664K mtime=Thu Jan 1 01:00:00 1970
mdadm: /dev/sda1 appears to be part of a raid array:
level=raid0 devices=2 ctime=Thu Jan 1 01:05:00 1970
mdadm: /dev/sdb1 appears to be part of a raid array:
level=raid0 devices=2 ctime=Thu Jan 1 01:05:00 1970
Continue creating array? y
mdadm: array /dev/md0 started.

root@OpenWrt:/# mke2fs -m0 /dev/md0
mke2fs 1.41.11 (14-Mar-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
61952 inodes, 247760 blocks
0 blocks (0.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=255852544
8 block groups
32768 blocks per group, 32768 fragments per group
7744 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376

Writing inode tables: done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 20 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.

root@OpenWrt:/# mkdir -p /mnt/raid1
root@OpenWrt:/# mount -t ext2 /dev/md0 /mnt/raid1

root@OpenWrt:/# df -h
...
/dev/md0 952.6M 1.2M 951.4M 0% /mnt/raid1

Testy wydajno?ci:

root@OpenWrt:/# hdparm -t /dev/md0

/dev/md0:
Timing buffered disk reads: 36 MB in 3.13 seconds = 11.52 MB/sec

Jak wida? wypadkowa szybko?? jest mniejsza nawet od najwolniejszego no?nika. Ale dzi?ki temu mamy jednoczesne przechowywanie danych na r?nych no?nikach.

 
Share
designed by digi-led.pl
góra
...Copyright © 2010-2013, Ekipa openrouter.info