NetBSD + CCD = dużo miejsca z małych dysków

In: Job / Praca|NetBSD

9 sty 2009

Dzięki za regularne odwiedziny na moim blogu! Jeśli uważasz, że jest on godny polecenia to śmiało wyślij link do niego lub link do kanału RSS albo subskrypcje przez e-mail znajomym. Dzięki !

Dzisiaj zajmiemy się fajną funkcją kernela NetBSD jaką jest CCD czyli Concatenated Disk Device (Powiązane Urządzenie Dyskowe). Służy ona do łączenia kilku fizycznych dysków (wd,sd) w jeden logiczny wolumen (ccd). Całość opiszę na przykładzie własnym wykonanym na serwerze IBM x346 z kontrolerem SCSI AIC-7902. Serwer ten jest dość mocno wykorzystywany ponieważ działa na nim IDS SNORT i niestety bardzo szybko kończy mu się miejsce na /var gdzie przechowywane są alerty. Co nam będzie potrzebne. Oprócz serwera i dysków, CCD w kernelu. Jeśli używasz GENERIC to CCD jest już tam domyślnie. Przed modyfikacją posiadał on dwa dyski SCSI po 70 GB:

1
2
3
4
5
6
sd0 at scsibus1 target 0 lun 0: <ibm -ESXS, PYH073C3-ETS10FN, RXQN> disk fixed
sd0: 70006 MB, 65494 cyl, 3 head, 729 sec, 512 bytes/sect x 143374000 sectors
sd0: sync (6.25ns offset 80), 16-bit (320.000MB/s) transfers, tagged queueing
sd1 at scsibus1 target 1 lun 0: </ibm><ibm -ESXS, PYH073C3-ETS10FN, RXQN> disk fixed
sd1: 70006 MB, 65494 cyl, 3 head, 729 sec, 512 bytes/sect x 143374000 sectors
sd1: sync (6.25ns offset 80), 16-bit (320.000MB/s) transfers, tagged queueing </ibm>

i wyglądał tak:

Serwer z dwoma dyskami 70 GB

Serwer z dwoma dyskami 70 GB

Dołożyłem 4 dyski (po uprzednim dokupieniu ramek co nie jest takie proste w przypadku dwuletniego serwera) 17 GB, które od jakiegoś czasu leżakowały po wyjęciu z AS400 (lub eserver iseries, a nawet ostatnio i5, IBM i te jego zmiany nazw…). Tutaj drobny offtopic. Akurat to, że dyski uprzednio były w ASie jest dość istotne ponieważ przysparza to trochę kłopotów. Po przygotowaniu i włożeniu dysków:

Nowe dyski, tylko jeszcze "klik" i już działają

kernel zaraportował tylko:

Komunikaty po włożeniu dysków

Komunikaty po włożeniu dysków

Po restarcie dyski niby zostały wykryte, ale przy normalnych komunikatach kernela pojawiło się coś jeszcze:

1
2
3
4
5
6
7
8
9
10
11
12
13
sd2 at scsibus1 target 2 lun 0: <ibmas400 , DRVS18D, 1606> disk fixed
sd2(ahd1:0:2:0): preposterous sector size: 0x20a.  Defaulting to 512 bytes.
sd2: 16742 MB, 29550 cyl, 2 head, 580 sec, 512 bytes/sect x 34287616 sectors
sd2: sync (12.50ns offset 63), 16-bit (160.000MB/s) transfers, tagged queueing
ses0 at scsibus1 target 8 lun 0: <ibm , 40K6480a S320  0, 1> processor fixed
ses0: SAF-TE Compliant Device
ses0: async, 8-bit transfers
sd2(ahd1:0:2:0): preposterous sector size: 0x20a.  Defaulting to 512 bytes.
sd2(ahd1:0:2:0): generic HBA error
sd2: dos partition I/O error
sd2(ahd1:0:2:0): generic HBA error
findroot: unable to read block 64
sd2(ahd1:0:2:0): generic HBA error</ibm></ibmas400>

I tak x4 dyski. Oczywiście o disklabelowaniu i stworzeniu działającego CCD nie było mowy. Kilka osób sugerowało:

20:10 lama_: mhm, albo jakos specjalnei je trzeba przygotowac, albo netbsd ich nie lubi/tego kontroloera/ cos jeszcze trzeba tam ustawic itp.
15:08 lama_: kontrolera moze? ale watpie, to raczej kwestia firmware lub pogrzebania z nimi w AS ?
13:20 lama_: to jest cos na lini sprzet/kernel z urzadzeniami wedlug mnie, a nie z disklabel
13:17 lama_: to popatrz jeszcze po tasmach itp
13:12 lama_: jest to zdecydowanie problem na innym poziomie niz disklabel

20:08 < @emet> po wnikliwej analizie stwierdzam że coś jest spierdolone.

20:13 < @gavroche> cancer^, MAsz napisane.
20:13 < @gavroche> sd2(ahd1:0:2:0): generic HBA error
20:13 < @gavroche> :)
20:13 < @gavroche> Pewnie kontroler masz spierdolony.
20:14 < @lama_> to by dyski 1-2 nie dzialaly ok
20:14 < @gavroche> Może być jeden kanał spierdolony.
20:14 < @gavroche> Na przykład.
20:15 < @gavroche> Wtedy by działały.

20:18 < @lama_> host bus adapter
20:19 < @lama_> poszukaj jeszcze jakis firmware/bios updatow
20:20 < @lama_> i kable badaj/polaczenia/zworki/ustawienia itp. pierwsze co musisz wlasnie wyeliminowac to na 100% ze to nie jest jakis sprzetowy problem

20:28 < @gavroche> No, chyba, że masz za nowy sprzęt żeby na nim NetBSD uruchomić.
20:28 < @gavroche> To wtedy gorzej. :< 20:33 <@majkel> re
20:44 < @cancer^> gavroche: x346 ibm
20:44 < @cancer^> 2 latek
20:47 < @gavroche> No niestety. Przyjdzie Ci zaczekać na NetBSD 7.0. ;/
20:47 < @gavroche> Nie rozumiem Was, że używacie NetBSD do celów innych niż edukacyjne.

Na szczęście mimo czarnowidztwa kolegów, nic nie okazało się spierdolone, nie musiałem szukać biosów ani firmware do dysków i kontrolera, oszczędzone zostało mi także oczekiwanie na NetBSD 7.0 zwłaszcza, że mój zakład o NetBSD 5.0 vs Windows 7 nadal trwa :) NetBSD oprócz swoich walorów edukacyjnych będzie pełnił także dotychczasową rolę jako IDS oraz kilka innych zadań :)

A wszystko dlatego, że po wywiadzie na grupach dotyczących AS’a400 okazało się, ze IFS (system plików ASowy) modyfikuje dysk na tyle, że NetBSD nie umie sobie z nim poradzić – z tąd też komunikat: sd2(ahd1:0:2:0): preposterous sector size: 0x20a. preposterous = absurdalny :)

Lekarstwem na tą „absurdalną” wielkość sektora był lowlevel format wykonany z poziomu BIOS’a kontrolera. Po kilkunastu minutach i milionie potwierdzeń, dyski odzyskały nie tak absurdalną wielkość sektora jaką jest 512 bajtów zamiast 522 :)

Czy na pewno, na 100% jesteś pewny że chcesz lowlevel format zrobić? Tak! A czy aby na pewno?...

Czy na pewno, na 100% jesteś pewny że chcesz lowlevel format zrobić? Tak! A czy aby na pewno?...

Czy na pewno, na 100% jesteś pewny że chcesz lowlevel format zrobić? Tak! A czy aby na pewno?...

Czy na pewno, na 100% jesteś pewny że chcesz lowlevel format zrobić? Tak! A czy aby na pewno?...

Wracając do sedna postu. Mamy działające dyski i kernel już sobie z nimi radzi. Wszystko pozapinane (literalnie ;) na ostatni zatrzask więc do dzieła :)

Całość pozapinana

Całość pozapinana

Szybka kontrola, wszystko tym razem według oczekiwań, żadnych HBA error, żadnych absurdalnych sektorów (to naprawdę mi się podoba :), oraz żadnych I/O errorów w dosowych partycjach (a to już było wogóle od czapy :).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
sd0 at scsibus1 target 0 lun 0: <ibm -ESXS, PYH073C3-ETS10FN, RXQN> disk fixed
sd0: 70006 MB, 65494 cyl, 3 head, 729 sec, 512 bytes/sect x 143374000 sectors
sd0: sync (6.25ns offset 80), 16-bit (320.000MB/s) transfers, tagged queueing
sd1 at scsibus1 target 1 lun 0: </ibm><ibm -ESXS, PYH073C3-ETS10FN, RXQN> disk fixed
sd1: 70006 MB, 65494 cyl, 3 head, 729 sec, 512 bytes/sect x 143374000 sectors
sd1: sync (6.25ns offset 80), 16-bit (320.000MB/s) transfers, tagged queueing
sd2 at scsibus1 target 2 lun 0: <ibmas400 , DRVS18D, 1606> disk fixed
sd2: 17501 MB, 29550 cyl, 2 head, 606 sec, 512 bytes/sect x 35843670 sectors
sd2: sync (12.50ns offset 63), 16-bit (160.000MB/s) transfers, tagged queueing
sd3 at scsibus1 target 3 lun 0: </ibmas400><ibmas400 , DRVS18D, 1606> disk fixed
sd3: 17501 MB, 29550 cyl, 2 head, 606 sec, 512 bytes/sect x 35843670 sectors
sd3: sync (12.50ns offset 63), 16-bit (160.000MB/s) transfers, tagged queueing
sd4 at scsibus1 target 4 lun 0: </ibmas400><ibmas400 , DRVS18D, 1606> disk fixed
sd4: 17501 MB, 29550 cyl, 2 head, 606 sec, 512 bytes/sect x 35843670 sectors
sd4: sync (12.50ns offset 63), 16-bit (160.000MB/s) transfers, tagged queueing
sd5 at scsibus1 target 5 lun 0: </ibmas400><ibmas400 , DRVS18D, 1606> disk fixed
sd5: 17501 MB, 29550 cyl, 2 head, 606 sec, 512 bytes/sect x 35843670 sectors
sd5: sync (12.50ns offset 63), 16-bit (160.000MB/s) transfers, tagged queueing </ibmas400></ibm>

Po pierwsze patrzymy na disklabel:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
disklabel sd2
# /dev/rsd2d:
type: SCSI
disk: DRVS18D
label: fictitious
flags:
bytes/sector: 512
sectors/track: 606
tracks/cylinder: 2
sectors/cylinder: 1212
cylinders: 29550
total sectors: 35843670
rpm: 10040
interleave: 1
trackskew: 0
cylinderskew: 0
headswitch: 0           # microseconds
track-to-track seek: 0  # microseconds
drivedata: 0
1
2
3
4
5
6
4 partitions:
#        size    offset     fstype [fsize bsize cpg/sgs]
 a:  35843670         0     4.2BSD      0     0     0  # (Cyl.      0 -  29573*)
 d:  35843670         0     unused      0     0        # (Cyl.      0 -  29573*)
disklabel: boot block size 0
disklabel: super block size 0

Tak wygląda standardowy disklabel czystego dysku, modyfikujemy go do użycia przez CCD. Potrzebujemy jeden cały slice c (d w nomenklautrze NetBSD to cały dysk, a c to wszystkie slice NetBSD) minus 1x sectors/cylinder oraz typ systemu ccd. Czyli po szybkim przeliczeniu

1
2
3
bc
35843670-1212
35842458

disklabel dla pierwszego dysku użytego w ccd będzie wyglądał tak:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
disklabel sd2
# /dev/rsd2d:
type: SCSI
disk: DRVS18D
label: fictitious
flags:
bytes/sector: 512
sectors/track: 606
tracks/cylinder: 2
sectors/cylinder: 1212
cylinders: 29550
total sectors: 35843670
rpm: 10040
interleave: 1
trackskew: 0
cylinderskew: 0
headswitch: 0           # microseconds
track-to-track seek: 0  # microseconds
drivedata: 0
1
2
3
4 partitions:
#        size    offset     fstype [fsize bsize cpg/sgs]
 c:  35842458      1212        ccd                     # (Cyl.      1 -  29573*)

Do edycji disklabela używamy komendy

1
disklabel

z opcją

1
-e

. Całą operację powtarzamy tyle razy ile mamy dysków odpowiednio przeliczając offset (no chyba, że macie wszystkie dyski takie same).

Dopisujemy nasze slice do konfiga ccd:

1
2
3
cat /etc/ccd.conf
#ccd    ileave    flags   component    devices
ccd0  0  none /dev/sd2c /dev/sd3c /dev/sd4c /dev/sd5c

oraz inicjujemy ccd:

1
2
ccdconfig -C -f /etc/ccd.conf
ccdconfig: /dev/sd5c: No such file or directory

Tutaj jeszcze drobna poprawka, trzeba stworzyć urządzenia w /dev bo jakoś same się nie zrobiły:

Tworzymy i sprawdzamy czy jest ok:

1
./MAKEDEV sd5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
ll /dev/sd5*
brw-r-----  1 root  operator  4,     40 Jan  9 10:43 /dev/sd5a
brw-r-----  1 root  operator  4,     41 Jan  9 10:43 /dev/sd5b
brw-r-----  1 root  operator  4,     42 Jan  9 10:43 /dev/sd5c
brw-r-----  1 root  operator  4,     43 Jan  9 10:43 /dev/sd5d
brw-r-----  1 root  operator  4,     44 Jan  9 10:43 /dev/sd5e
brw-r-----  1 root  operator  4,     45 Jan  9 10:43 /dev/sd5f
brw-r-----  1 root  operator  4,     46 Jan  9 10:43 /dev/sd5g
brw-r-----  1 root  operator  4,     47 Jan  9 10:43 /dev/sd5h
brw-r-----  1 root  operator  4, 524328 Jan  9 10:43 /dev/sd5i
brw-r-----  1 root  operator  4, 524329 Jan  9 10:43 /dev/sd5j
brw-r-----  1 root  operator  4, 524330 Jan  9 10:43 /dev/sd5k
brw-r-----  1 root  operator  4, 524331 Jan  9 10:43 /dev/sd5l
brw-r-----  1 root  operator  4, 524332 Jan  9 10:43 /dev/sd5m
brw-r-----  1 root  operator  4, 524333 Jan  9 10:43 /dev/sd5n
brw-r-----  1 root  operator  4, 524334 Jan  9 10:43 /dev/sd5o
brw-r-----  1 root  operator  4, 524335 Jan  9 10:43 /dev/sd5p

Wygląda na ok. Inicjujemy ccd jeszcze raz. Po poprawnym zainicjowaniu nie dostajemy żadnego komunikatu, ale za to w /dev pojawiaja nam się urządzenia ccd :)

1
ccdconfig -C -f /etc/ccd.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
ls -la /dev/ccd*
brw-r-----  1 root  operator  16,      0 Feb 22  2008 /dev/ccd0a
brw-r-----  1 root  operator  16,      1 Feb 22  2008 /dev/ccd0b
brw-r-----  1 root  operator  16,      2 Feb 22  2008 /dev/ccd0c
brw-r-----  1 root  operator  16,      3 Feb 22  2008 /dev/ccd0d
brw-r-----  1 root  operator  16,      4 Feb 22  2008 /dev/ccd0e
brw-r-----  1 root  operator  16,      5 Feb 22  2008 /dev/ccd0f
brw-r-----  1 root  operator  16,      6 Feb 22  2008 /dev/ccd0g
brw-r-----  1 root  operator  16,      7 Feb 22  2008 /dev/ccd0h
brw-r-----  1 root  operator  16, 524288 Feb 22  2008 /dev/ccd0i
brw-r-----  1 root  operator  16, 524289 Feb 22  2008 /dev/ccd0j
brw-r-----  1 root  operator  16, 524290 Feb 22  2008 /dev/ccd0k
brw-r-----  1 root  operator  16, 524291 Feb 22  2008 /dev/ccd0l
brw-r-----  1 root  operator  16, 524292 Feb 22  2008 /dev/ccd0m
brw-r-----  1 root  operator  16, 524293 Feb 22  2008 /dev/ccd0n
brw-r-----  1 root  operator  16, 524294 Feb 22  2008 /dev/ccd0o
brw-r-----  1 root  operator  16, 524295 Feb 22  2008 /dev/ccd0p

Skoro już mamy ccd jako urządzenie, sprawdzamy jego disklabel:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# rccd0d:
type: ccd
disk: ccd
label: fictitious
flags:
bytes/sector: 512
sectors/track: 2048
tracks/cylinder: 1
sectors/cylinder: 2048
cylinders: 70004
total sectors: 143369832
rpm: 3600
interleave: 1
trackskew: 0
cylinderskew: 0
headswitch: 0           # microseconds
track-to-track seek: 0  # microseconds
drivedata: 0
1
2
3
4
4 partitions:
#        size    offset     fstype [fsize bsize cpg/sgs]
 a: 143369832         0     4.2BSD      0     0     0  # (Cyl.      0 -  70004*)
 d: 143369832         0     unused      0     0        # (Cyl.      0 -  70004*)

Że tak powiem, automagicznie idealnie. Size jest sumą czterech dysków z ccd.conf. Po przeliczeniu mamy 67 GB do wykorzystania. Pozostało jeszcze tylko założyć system plików:

1
2
3
4
5
6
newfs /dev/rccd0a
/dev/rccd0a: 70004.8MB (143369832 sectors) block size 16384, fragment size 2048
        using 380 cylinder groups of 184.23MB, 11791 blks, 23296 inodes.
super-block backups (for fsck_ffs -b #) at:
32, 377344, 754656, 1131968, 1509280, 1886592, 2263904, 2641216, 3018528, 3395840, 3773152, 4150464, 4527776, 4905088,
......

i podmontować w wybranym miejscu:

1
2
mkdir /usr/home/storage
mount /dev/ccd0a /usr/home/storage/

Sprawdzamy czy wszystko gra:

1
2
3
4
5
6
7
8
9
10
11
df -h
Filesystem    Size      Used     Avail Capacity  Mounted on
/dev/sd0a     1.9G       37M      1.8G     1%    /
/dev/sd0f      29G       12G       15G    44%    /var
/dev/sd0e      19G       16G      2.0G    89%    /usr
/dev/sd0g      13G      3.6G      9.2G    27%    /usr/home
tmpfs         781M       48K      781M     0%    /tmp
kernfs        1.0K      1.0K        0B   100%    /kern
procfs        4.0K      4.0K        0B   100%    /usr/pkg/emul/linux/proc
/dev/sd1e      67G       49G       15G    76%    /backup
/dev/ccd0a     67G      2.0K       64G     0%    /usr/home/storage

Wygląda na to, że wszystko w jak najlepszym porządku, możemy przetestować wydajność naszego nowego ccd:

1
2
3
4
dd if=/dev/zero of=file_1GB bs=1m count=1k
1024+0 records in
1024+0 records out
1073741824 bytes transferred in 19.476 secs (55131537 bytes/sec)

Imponujące :)

Jeśli jesteś zadowolony ze swojego setupu, ostatnią rzeczą jest dopisanie ccd=YES do rc.conf oraz do fstaba punktu montowania:

1
2
echo ccd=YES >> /etc/rc.conf
echo "/dev/ccd0a              /usr/home/storage       ffs     rw,softdep      1 1" >> /etc/fstab

Ostatni restart, aby zobaczyć czy wszystko gra i jeśli po restarcie masz podmontowany ccd tam gdzie powinien być to gratulacje – ccd skonfigurowany i działa :)

Jeszcze uwaga na koniec – FFS w NetBSD obsługuję partycję do wielkości 2 TB. Zatem jeśli chcesz połączyć dyski w więcej niż 2 TB, niestety trzeba zrobić kilka ccd, np, mój serwer backupowy dla userów posiada 4 TB w dwóch ccd:

1
2
/dev/ccd0a    1.8T      1.5T      189G    89%    /usr/home/bacula
/dev/ccd1a    1.8T      1.0T      683G    60%    /usr/home/bacula2




VN:F [1.9.3_1094]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.3_1094]
Rating: 0 (from 0 votes)
Related Posts with Thumbnails

Popularity: 71% [?]

Post trafił w Twoje gusta? Zajrzyj też tutaj

© odwiedź stronę http://maciejewski.org po więcej fajnych postów!

Dodaj post do:
  • Wykop
  • Gwar
  • OSnews.pl
  • Digg
  • del.icio.us
  • Reddit
  • Technorati
  • Blip
  • co-robie
  • email
  • Facebook
  • Flaker
  • Google Bookmarks
  • Google Buzz
  • LinkedIn
  • MySpace
  • PDF
  • Ping.fm
  • RSS
  • StumbleUpon
  • Twitter
  • Śledzik
If you enjoyed this post, make sure you subscribe to my RSS feed!

 Viewed 261 times by 57 viewers

Podobne posty

2 Komentarzy to NetBSD + CCD = dużo miejsca z małych dysków

Avatar

anonymous POLAND Windows NT Mozilla Firefox 3.6

Styczeń 28th, 2010 at 3:26 pm

A można na ccd postawić system, jest sens?
Mam dwa dyski 20G+40G i chce, żeby system zobaczył mi to jako jeden 60GB ;)

VA:F [1.9.3_1094]
Rating: 0.0/5 (0 votes cast)
VA:F [1.9.3_1094]
Rating: 0 (from 0 votes)

Avatar

NetBSD + CCD = dużo miejsca z małych dysków | News NetBSD.pl POLAND WordPress 2.9.2

Marzec 19th, 2010 at 3:52 pm

[...] Bartosz “cancer” Maciejewski zamieścił na swoim blogu ilustrowaną relację z uruchomienia ccd: http://maciejewski.org/2009/01/09/netbsd-ccd-duzo-miejsca-z-malych-dyskow/ [...]

Skomentuj

Co znajdziesz na tym blogu

Witaj czytelniku! Nazywam się Bartosz Maciejewski i jestem Administratorem sieci oraz systemów UNIX/Windows. Na moim blogu znajdziesz zatem wpisy dotyczące głównie tej tematyki. Od czasu do czasu pisuję też bardziej prywatnie zwłaszcza o mojej córce Tosi Miłego Czytania! EOF ;)

  • New NetBSD developer « Shinden’s Lair: [...] it’s official and couple of people already had mentioned this, I’ll write on my bl [...]
  • Tomek: Maniak to Ty jednak jesteś ;-) [...]
  • witnes: Noo, dużo lepszy ten theme :) wszystko bardziej przejrzyste. [...]
  • Marcin: 1 ) kable puszcza się w peszlach mrozoodpornych 2 ) mikrotiki się ekranuje puszkami eluminiowymi [...]
  • Krysti: Piękne produkcje! Gear of War... Grałem. Mnie osobiście bardzo się podobała. Aczkolwiek uważam [...]

Reklama

Postaw mi Piwo!


Komentujący:

Najwięcej napisali:
  1. Bartosz Maciejewski (4)
  2. blinkkin (2)
  3. anonymous (1)
  4. Krysti (1)
  5. Marcin (1)
  6. Michał (1)
  7. Prawo jazdy (1)
  8. Tomasz Kowalczyk (1)
  9. Tomek (1)
  10. Turosław (1)
  11. witnes (1)
  12. Zbigniew (1)

Flickr

www.flickr.com
This is a Flickr badge showing public items from bartosz.maciejewski tagged with mobile. Make your own badge here.
  • RSS
  • Blip
  • Twitter
  • Facebook
  • GoldenLine
  • LinkedIn
  • Flickr