Job / Praca

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

    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:

    sd0 at scsibus1 target 0 lun 0: 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:
    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

    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:

    sd2 at scsibus1 target 2 lun 0: 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: 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

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

    sd0 at scsibus1 target 0 lun 0: 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:
    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: 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:
    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:
    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:
    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

    Po pierwsze patrzymy na disklabel:

    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

    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

    bc
    35843670-1212
    35842458

    disklabel dla pierwszego dysku u?ytego w ccd b?dzie wygl?da? tak:

    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

    4 partitions:
    # size offset fstype [fsize bsize cpg/sgs]
    c: 35842458 1212 ccd # (Cyl. 1 - 29573*)

    Do edycji disklabela u?ywamy komendy disklabel z opcj? -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:

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

    oraz inicjujemy ccd:

    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:

    ./MAKEDEV sd5

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

    ccdconfig -C -f /etc/ccd.conf

    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:

    # 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

    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:

    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:

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

    Sprawdzamy czy wszystko gra:

    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:

    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:

    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:

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




    Related Posts with Thumbnails

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

    Comments

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

    Leave a Reply

    Add your widget here