Dysponując złączem USB można podłączyć szereg urządzeń wspierających standard usb storage - począwszy od pendrive, poprzez różne dyski przenośne czy czytniki kart pamięci, a na aparatach cyfrowych kończąc.
Przed instalacją należy zainstalować moduły do obsługi USB oraz systemów plików.
Wyjaśnienia wymaga sposób nazewnictwa dysków i partycji w zależności o jakie jądro (sprawdzimy to uname -r) oparty jest nasz obraz OpenWrt.
/dev/sdXY, gdzie X to oznaczenie dysku(litera alfabetu), a Y numer partycji. Przeważnie pierwszy podłączony dysk jest /dev/sda1 (pierwszy dysk i pierwsza widoczna partycja tego dysku)./dev/scsi/hostX/bus0/target0/lun0/disc, gdzie X to numer dysku. Pierwsza partycja, pierwszego dysku ma lokalizację /dev/scsi/host0/bus0/target0/lun0/part1. Podłączenie kolejnego dysku powoduje zwiększenie host o jeden w górę.Partycjonowanie i formatowanie można bez problemu wykonać na zewnętrznym systemie (Linux lub Windows). Jeżeli zostało to wykonane przy pomocy innego programu (np. Partition Magic), można ten rozdział pominąć. Jeżeli nie mamy takiej możliwości można to wykonać z poziomu OpenWrt.
Na początek instalujemy potrzebne składniki:
opkg install cfdisk e2fsprogs dosfsck mkdosfs swap-utils
Mając na uwadze powyższe wyjaśnienie na temat nazewnictwa dysków i partycji przystępujemy do partycjonowania. Przyjmujemy, że posiadamy jądro z serii 2.6, więc partycjonujemy pierwszy dysk /dev/sda (brak cyfry oznacza cały dysk). cfdisk to łatwiejszy w obsłudze odpowiednik fdisk. Obsługa przypomina Partition Magic lub GParted z Ubuntu.
cfdisk /dev/sda
Dysk dzielimy wg. własnych upodobań. Przeważnie dzieli się na dwie partycje - cześć użytkowa(sda1) i swap (sda2). Do podstawowych zastosowań nie jest wymagany, ale jeżeli już potrzebujemy to 128MB będzie dobrym wyjściem. W takim razie tworzymy dwie partycje podstawowe. Ostatecznie wybieramy WRITE i QUIT.
Dysk podzielony, przechodzimy do sformatowania. Poniżej tabelka przedstawiająca system plików, odpowiedzialny moduł oraz jak sformatować taka partycję:
| System plików | Moduł | Formatowanie |
|---|---|---|
| ext2 | kmod-fs-ext2 | mkfs.ext2 /dev/sda1 |
| ext3 | kmod-fs-ext3 | mkfs.ext3 /dev/sda1 |
| ext4 | kmod-fs-ext4 | mkfs.ext4 /dev/sda1 |
| FAT16 | kmod-fs-vfat | mkfs.vfat -F16 /dev/sda1 |
| FAT32 | mkfs.vfat /dev/sda1 |
Pozostało stworzenie systemu plików swapa:
mkswap /dev/sda2
block-mount, block-hotplug oraz block-extroot zostały połaczone w jeden block-mount Dotyczy to tylko obecnego trunka!
block-mount
opkg update opkg install block-mount block-hotplug
Pakiety te to nic innego jak skrypty shella umieszczone w konkretnych miejscach w systemie. Pakiet block-hotplug jest niezwykle ciekawy, gdyż dzięki niemu wykonywane sa pewne akcje/czynności pod wpływem jakiś bodźców np. wsadzenie dysku do portu USB lub jego wyjecie.
Przyjrzyjmy się domyślnej konfiguracji fstab tuż po zainstalowaniu tych pakietów:
uci show fstab
fstab.automount=global fstab.automount.from_fstab=1 fstab.automount.anon_mount=1 fstab.autoswap=global fstab.autoswap.from_fstab=1 fstab.autoswap.anon_swap=0 fstab.@mount[0]=mount fstab.@mount[0].options=rw,sync fstab.@mount[0].enabled_fsck=0 fstab.@mount[0].enabled=0 fstab.@mount[0].fstype=ext3 fstab.@mount[0].device=/dev/sda1 fstab.@mount[0].target=/mnt/sda1 fstab.@swap[0]=swap fstab.@swap[0].device=/dev/sda2 fstab.@swap[0].enabled=0
Struktura pliku /etc/config/fstab jest podzielona na trzy części: global, mount oraz swap.
Działanie w skrócie:
Parametr fstab.automount.from_fstab ustalony na 1 oznacza, że urządzenie ma być zamontowane wg, ustawień ustalonych w sekcji mount(gdy jest enabled=1). W połączeniu z pakietem block-hotplug umożliwia montowanie do jednej ustalonej lokalizacji.
W przypadku, gdy fstab.automount.anon_mount jest ustalony na 1 i nie ma włączonej sekcji mount(enabled=0) dysk montowany jest automatycznie do domyślnej lokalizacji /mnt/<udządzenie> (np. /mnt/sda1). Włączając sekcje mount montuje wg. ustaleń.
Podobna sytuacja wygląda w sekcji swap. Do używania swapa potrzeby jest pakiet swap-utils, oraz jego wcześniejsze stworzenie (patrz wyżej przy partycjonowaniu dysku)
Dostępne parametry i ich znaczenie:
| Nazwa | Domyślnie | Opis |
|---|---|---|
from_fstab | 1 | Gdy jest 1 używa sekcji mount do zamontowania dysku |
anon_mount | 1 | Gdy jest 1 automatycznie montuje dysk do domyślnej lokalizacji /dev/<urzadzenie> (chyba że, włączony jest from_fstab oraz enabled w sekcji mount) |
| Nazwa | Domyślnie | Opis | Uwagi |
|---|---|---|---|
options | rw,sync | Opcje montowania zależne od systemu plików. Domyślnie rw,sync | vfat: „umask=0,dmask=0” 1); extX: „noatime” |
enabled_fsck | 0 | Gdy system plików jest uszkodzony, sprawdza jego spójność przez zamontowaniem | |
enabled | 0 | Gdy jest 1 to nośnik montowany jest wg ustawień w tej sekcji mount | |
device | /dev/sda1 | Wskazuje na urządzenie /dev/XXX | |
fstype | auto | Typ montowanego systemu plików : ext2, ext3, ext4, vfat. Przy ntfs-3g, należy ustawić auto | |
label | brak | Wskazuje na urządzenie jako etykietę, utworzoną programem tune2fs | |
uuid | brak | Wskazuje na urządzenie jako uuid. Brany w pierwszej kolejności pod uwagę jeżeli również występuje label lub device | |
target | /mnt/sda1 | Cel montowania nośnika | |
is_rootfs | 0 | Wskazuje partycje na której przechowywany jest system plików systemu, więcej na extroot |
W celu wygenerowania uuid należy posłużyc sie dodatkową aplikacją - blkid
opkg upddate opkg install blkid
Przykład:
blkid /dev/sda1 /dev/sda1: UUID="e699b4e6-3717-4f58-b104-77ee772b1448"
Ostatecznie dodajemy do fstaba:
uci set fstab.@mount[0].uuid=e699b4e6-3717-4f58-b104-77ee772b1448 uci commit fstab
Żeby opcja enabled_fsck poprawnie działała potrzebujemy pakietu: e2fsprogs dla systemów plików linuksowych lub dosfsck dla FAT16/32
| Nazwa | Domyślnie | Opis |
|---|---|---|
enabled | 0 | Gdy jest 1 to nośnik montowany jest wg ustawień w tej sekcji mount |
device | /dev/sda2 | Wskazuje na urządzenie /dev/XXX |
label | brak | Wskazuje na urządzenie jako etykietę, utworzoną programem tune2fs |
uuid | brak | Wskazuje na urządzenie jako uuid. Brany w pierwszej kolejności pod uwagę jeżeli również występuje label lub device 2) |
Jeżeli na dysku pojawią się błędy można sprawdzić system plików. PRZED sprawdzeniem należy koniecznie odmontować nośnik. Jeżeli dysk jest dużej pojemności może zabraknąć pamięci podczas sprawdzania systemu plików, dlatego też warto wcześniej zamontować swap. Całe polecenie może wyglądać następująco
/etc/init.d/fstab stop swapon /dev/sda2 e2fsck -y /dev/sda1 # linuksowe systemy plików
lub
dosfsck -y /dev/sda1 # windowsowy system plików
Sprawdzanie dla dysku 500GB z błędami może trwać ok 30 minut, więc należy uzbroić się w cierpliwość nie przerywać polecenia, nie restartować routera i nie odłączać dysku.
Opis zamieściłem na portalu openrouter.info. Funkcja jest w moich obrazach.
Założenie: jedna partycja ext2 zamontowana na stałe pod /mnt/hdd. Montowanie po urządzeniu(device)
cfdisk /dev/sda (tworzymy jedna partycje na cały dysk)
mkfs.ext2 /dev/sda1
uci set fstab.@mount[0].enabled=1 uci set fstab.@mount[0].options=rw,noatime uci set fstab.@mount[0].fstype=ext2 uci set fstab.@mount[0].target=/mnt/hdd uci set fstab.@mount[0].device=/dev/sda1 uci commit fstab
mkdir -p /mnt/hdd
/etc/init.d/fstab enable reboot
