Mirroring (RAID na půl cesty) - Adaptec 1420SA

Řadič Adaptec 1420SA je jednoduchý SATA RAID kontroler. Přesto, že je popisovaný v jedněch materiálech jako hardware, v jiných jako BIOS-based nebo také host-based, jedná se prostě jenom o software RAID. Sám jsem se také nechal nachytat, s hardware to má společný snad jenom název. Raději příště zůstanu věrný mým osvědčeným ARECA nebo LSI.
Instalace FreeBSD 7.2 před update z prosince 2009 přímo na tento řadič skončí neúspěchem, takže je nutné využít jiný disk. Na ten jsem provedl instalaci, na internetu popsanou úpravu kernelu a následně data zduplikoval (viz. Duplikace disků). Jestli máte k dispozici tento řadič je možné jednoduše zjistit pomocí:
# pciconf -lv
...
none0@pci0:5:10:0: class=0x010400 card=0x02419005 chip=0x02419005 rev=0x01 hdr=0x00
    vendor = 'Adaptec Inc'
    device = 'Serial ATA II RAID 1420SA'
    class = mass storage
    subclass = RAID
...
Postup pro instalaci ovladačů je jednoduchý:
# cd /sys/dev/ata
# wget http://people.freebsd.org/~scottl/ataraid-ddf.diff
# wget http://people.freebsd.org/~scottl/ata-raid-ddf.h
# patch < ataraid-ddf.diff


Dalším krokem může být patch, který jsem našel na webu. Dle informací "řeší jeden z dlouhého seznamu problému ATA ovladače" (viz. Nabble). Tato chyba posílá na diskové pole požadavky příliš velké pro jeho zpracování. V souboru /var/log/messages je pak vidět:
kernel: ata4: FAILURE - oversized DMA transfer attempt 65536 > 32768
kernel: ad8: setting up DMA failed
kernel: ar0: WARNING - mirror protection lost. RAID1 array in DEGRADED mode
kernel: ar0: writing of DDF metadata is NOT supported yet
kernel: ata2: FAILURE - oversized DMA transfer attempt 65536 > 32768
kernel: ad4: setting up DMA failed
kernel: ar0: FAILURE - RAID1 array broken
kernel: ar0: writing of DDF metadata is NOT supported yet
kernel: g_vfs_done():ar0s2d[READ(offset=65536, length=8192)]error = 5


Uvedená data jsem uložil do souboru atapatch.diff a následně vložil pomocí patch < atapatch.diff

--- ata-raid.c
+++ ata-raid.c
@@ -146,7 +146,7 @@
    rdp->disk->d_mediasize = (off_t)rdp->total_sectors * DEV_BSIZE;
    rdp->disk->d_fwsectors = rdp->sectors;
    rdp->disk->d_fwheads = rdp->heads;
-   rdp->disk->d_maxsize = 128 * DEV_BSIZE;
+   rdp->disk->d_maxsize = 32768;
    rdp->disk->d_drv1 = rdp;
    rdp->disk->d_unit = rdp->lun;
    /* we support flushing cache if all components support it */

Následuje už rekompilace kernelu (pouze pro svéprávné osoby):

# cd /usr/src
# make builkernel
# make installkernel


Poznámka:
Na některých systémech mi hlásí kompilace chybu:
In file included from /usr/src/sys/dev/ata/ata-raid.c:53:
/usr/src/sys/dev/ata/ata-raid-ddf.h:87: warning: '__packed__' attribute ignored for field of type 'struct '
/usr/src/sys/dev/ata/ata-raid-ddf.h:94: warning: '__packed__' attribute ignored for field of type 'struct '


... a tímto kompilace končí. Řešením je odebrat v souboru /usr/src/sys/dev/ata/ata-raid.c atributy "__packed" pro funkce na uvedených řádcích a kompilaci spustit znovu.

Pokud jste to udělali správně, odměnou vám bude device /dev/ar0 a výpis konfigurace obsahující:
# pciconf -lv
...
atapci0@pci0:5:10:0: class=0x010400 card=0x02419005 chip=0x02419005 rev=0x01 hdr=0x00
    vendor = 'Adaptec Inc'
    device = 'Serial ATA II RAID 1420SA'
    class = mass storage
    subclass = RAID
...

Pro diagnostiku stavu osm z deseti správců doporučuje příkaz ATA Control.

Powered by Drupal - Design by artinet