USB disk v OpenWrt
Ak máte Asus WL-500gP (alebo podobný), iste ste si všimli, že má USB porty. A iste Vás napadlo, rovnako ako mňa, prečo by som malkvôli sťahovaniu CD/DVD mať zapnutý celý počítač, ktoého spotreba prekračuje 200 W. Nebolo by lepším riešením využiť tieto USB porty na priipojenie externého disku, na ktorý by sa dalo sťahovať dáta? Nie je to problém!
Celý postup spočíva v nainštalovaní jadrových modulov (ovládačov) pre USB disk, súborových systémov a prípadne jazykovej podpory (pre lokalizované mená súborov).
Inštalácia
Inštalácia spočíva (predpokladám použitie USB 2.0) v nainštalovaní jadrových modulov, ktoré sa postarajú o prístup k nášmu USB disku. Potrebujeme nainštalovať tieto moduly:
- kmod-usb-core
- kmod-usb2
- kmod-usb-storage
Inštalácia nie je problémom, použijeme príkaz ipkg install, nasledovaný menom balíčka. Najprv však chcem ukázať chybu, ktorá sa mi pri pokuse vyskytla:
ipkg install kmod-usb-core Installing kmod-usb-core (2.4.34-brcm-1) to root... Downloading http://downloads.x-wrt.org/.../packages/./kmod-usb-core_2.4.34-brcm-1_mipsel.ipk Nothing to be done Done. Collected errors: Package kmod-usb-core md5sum mismatch. Either the ipkg or the package index are corrupt. Try 'ipkg update'.
Čo sa stalo? Nič vážne, len už som veľmi dlho do svojho Asusu nesiahol (načo, keď funguje ako má), a teda ani neaktualizoval zoznam balíčkov. V tomto prípade nastal rozdiel medzi informáciami o balíčku v lokálnej databáze a balíčkom na serveri. Stačilo prosto aktualizovať zoznam balíčkov:
root@OpenWrt:~# ipkg update Downloading http://downloads.openwrt.org/kamikaze/7.09/brcm-2.4/packages/Packages Updated list of available packages in /usr/lib/ipkg/lists/release Downloading http://downloads.openwrt.org/kamikaze/packages/mipsel/Packages Updated list of available packages in /usr/lib/ipkg/lists/packages Downloading http://downloads.x-wrt.org/xwrt/kamikaze/7.09/brcm-2.4/packages/Packages Updated list of available packages in /usr/lib/ipkg/lists/X-Wrt Done.
A po aktualizácii už hurá do inštalácie našich troch modulov:
ipkg install kmod-usb-core ipkg install kmod-usb2 ipkg install kmod-usb-storage
Všetko prebehlo ako malo, takže môžme pokračovať. Potrebuejme reštartovať smerovač, aby sa novo nainštalované moduly našítali do pamäte a po reštarte sa pustíme do pripojenia disku.
Súborové systémy
Samotná podpora USB disku iste nestačí. Určite budeme potrebovať aj ovládače pre súborové systémy. Podpora súborových systémov OpenWrt nie je až taká bohatá ako v štandardnom Linuxe, ale vyberať si je z čoho. Ak teda chceme vedieť,aké súborové systémy môžeme použiť, pozrieme aké balíčky s modulmi máme k dispozícii:
ipkg list| grep kmod-fs kmod-fs-cifs - 2.4.34-brcm-1 - CIFS support kmod-fs-ext2 - 2.4.34-brcm-1 - EXT2 filesystem support kmod-fs-ext3 - 2.4.34-brcm-1 - EXT3 filesystem support kmod-fs-hfsplus - 2.4.34-brcm-1 - HFS+ filesystem support kmod-fs-isofs - 2.4.34-brcm-1 - ISO9660 filesystem support kmod-fs-minix - 2.4.34-brcm-1 - Minix filesystem support kmod-fs-msdos - 2.4.34-brcm-1 - MSDOS filesystem support kmod-fs-nfs - 2.4.34-brcm-1 - NFS filesystem support kmod-fs-nfsd - 2.4.34-brcm-1 - NFS kernel server support kmod-fs-vfat - 2.4.34-brcm-1 - VFAT filesystem support kmod-fs-xfs - 2.4.34-brcm-1 - XFS filesystem support
Ktorý zvoliť? Ak budeme disk pripájať aj k Windows, asi si zvolíme súborový systém VFAT (FAT-32), ak nás Windows netrápi, bude dobrou voľbou rýchly ext2, žurnálovaný ext3, prípadne XFS. Ja si vyberám ext3, a to najmä kvôli žurnálovaniu (čo keď disk vypnem bez odpojenia) a osvedčenej technológii (viem s ním podrobne pracovať). Vyberám si tiež vfat, keby som potreboval pripojiť USB kľúč, nech to mám pripravené a pre istotu aj ext2:
ipkg install kmod-fs-ext2 ipkg install kmod-fs-ext3 ipkg install kmod-fs-vfat
Aby sme mohli s diskom a súborovým systémom pracovať priamo v OpenWrt, môžeme nainštalovať aj nejaké obslužné programy:
ipkg install cfdisk ipkg install e2fsprogs ipkg install tune2fs
Ale keďže miesto v Asuse nie je nejaké extra veľké, tieto nástroje neinštalujem, ale ak budem potrebovať manipulovať s diskom, či partíciami, pripojím ho k stolnému počítaču, kde tieto nástroje mám.
Pripojenie disku
Aby sme disk mohli pripojiť, potrebujeme vedieť ako ho systém rozpoznal a s tým nám pomôže systémový záznam, ktorý si prečítame pomocou príkazu logread, alebo ešte lepšie logread -f, aby nám vypisoval prírastky do záznamu:
Dec 6 10:35:06 (none) user.info kernel: hub.c: new USB device 01:03.2-1, assigned address 2 Dec 6 10:35:06 (none) user.info kernel: scsi0 : SCSI emulation for USB Mass Storage devices Dec 6 10:35:06 (none) user.warn kernel: Vendor: WDC WD80 Model: 0JB-00JJC0 Rev: 0000 Dec 6 10:35:06 (none) user.warn kernel: Type: Direct-Access ANSI SCSI revision: 02 Dec 6 10:35:06 (none) user.warn kernel: Attached scsi disk sda at scsi0, channel 0, id 0, lun 0 Dec 6 10:35:06 (none) user.warn kernel: SCSI device sda: 156301488 512-byte hdwr sectors (80026 MB) Dec 6 10:35:06 (none) user.info kernel: Partition check: Dec 6 10:35:06 (none) user.info kernel: p1 Dec 6 10:35:06 (none) user.debug kernel: WARNING: USB Mass Storage data integrity not assured Dec 6 10:35:06 (none) user.debug kernel: USB Mass Storage device found at 2
Ak sa v zázname objaví niečo podobné, je všetko OK a náš systém je pripravený na pripojenie partície. A čo to vlastne môžeme zo záznamu vyčítať? Okrem údajov o type (WDC WD80) a veľkosti disku (80026 MB), ktoré nám pomôžu identifikovať disk, sa dozvieme, že je disk rozpoznaný ako zariadenie sda a má jednu partíciu p1. Tieto informácie som vyčítal z riadkov:
Dec 6 10:35:06 (none) user.warn kernel: Attached scsi disk sda at scsi0, channel 0, id 0, lun 0
a
Dec 6 10:35:06 (none) user.info kernel: Partition check: Dec 6 10:35:06 (none) user.info kernel: p1
Najmä prvý uvedený riadok nám poskytne cenné informácie pre pripojenie disku, pretože by sme márne hľadali zariadenie /dev/sda, či /dev/sda1, ako ich poznáme z Linuxu. OpenWrt jednoducho nemá vytvorené nám známe súbory zariadení a samotné pripojenie partície do adresáre /mnt urobíme pomocou príkazu:
mount /dev/scsi/host0/bus0/target0/lun0/part1 /mnt
alebo pomocou symbolického odkazu v /dev/discs:
mount /dev/discs/disc0/part1 /mnt/
Samozrejme, lepšie by asi bolo vytvoriť v adresári /mnt podadresáre pre pripojenie jednotlivých partíci, ale to si už urobte ako chcete. Pokúšal som sa nastaviť aj automatické pripájanie, ale bez nejakého publikovateľného úspechu.
Teraz môžete do pripojeného disku veselo sťahovať, napríklad pomocou wget, len nezabudnite disk pred odpojením aj odmontovať:
umount /mnt
Inštalácia wget
OpenWrt (aj Kamikaze) poskytuje na sťahovanie nástroj wget, ktorý je však nainštalovaný ako súčasť BusyBox. Dôsledkom toho je jednak obmedzená funkčnosť a jednak to, že pri pokuse stiahnuť Ubuntu CD program skončil chybou:
wget http://releases.ubuntu.com/intrepid/ubuntu-8.10-desktop-i386.iso Connecting to releases.ubuntu.com [2001:6b0:e:2018::137:80] wget: socket: Address family not supported by protocol
Pravdepodobnou príčinou chyby je staršia implementácia wget v tejto verzii busybox, preto som sa rozhodol nainštalovať plnohodnotnú funkciu wget, čo však tiež skončilo chybou:
ipkg install wget
Installing wget (1.10.2-2) to root...
Downloading http://downloads.openwrt.org/kamikaze/packages/mipsel/./wget_1.10.2-2_mipsel.ipk ... An error ocurred, return value: 1. Collected errors: Package wget wants to install file /usr/bin/wget But that file is already provided by package busybox
Inými slovami, inštalátor nemôže nainštalovať súbor /usr/bin/wget, pretože tento súbor už je poskytnutý práve spomínaným balíčkom busybox. Je to symbolický odkaz, a tak som ho skúsil zmazať, čo nebol najlepší nápad, pretože tento wget používa aj ipkg na inštaláciu balíčkov. Nakoniec som to vyriešil tak, že som stiahol balíček wget:
wget http://downloads.openwrt.org/kamikaze/packages/mipsel/./wget_1.10.2-2_mipsel.ipk
Potom som zmazal spomínaný symbolický odkaz a nainštaloval wget zo stiahnutého balíčka:
rm /usr/bin/wget ipkg install wget_1.10.2-2_mipsel.ipk rm install wget_1.10.2-2_mipsel.ipk
No a to je všetko.


