OpenWrt - HDD/USB/SDMOD
Montowanie zasobów dyskowych w OpenWrtOstatnia zmiana: 2013-05-14 16:40
1. Obsługa USB
2. Nazewnictwo partycji
3. Montowanie zasobów
3.1. Sekcja automount
3.2. Sekcja autoswap
3.3. Sekcja mount
3.4. Sekcja swap
4. Sprawdzanie systemu plików
5. Zakończenie
6. Przykłady montowania systemów plików
6.1. Montowanie ext3
6.2. Montowanie vfat
6.3. Montowanie ntfs
6.4. Montowanie HFS+
7. Uruchamianie serwisu przy podłączeniu dysku
OpenWrt od wersji 8.09 standardowo posiada obsługę montowania zasobów dyskowych. Jeżeli chcemy podłączyć dysk na USB (pendrive, dysk zewnętrzny itd) to ten poradnik opisuje właśnie to rozwiązanie. Poniższe wskazówki działają także z SDMOD lub dyskiem (o ile nasz ruter ma wbudowany dysk twardy). Natomiast nie zadziała to z zasobami sieciowymi (np. nfs czy cifs).
UWAGA1: Nie wolno odłączać nośnika podczas pracy rutera! Ruter musi być wyłączony przed wyjęciem urządzenia z USB lub należy wcześniej odmontować zasoby.
UWAGA2: Dyski zasilane tylko z USB (2,5") mogę nie działać z racji większego zapotrzebowania na energię. Należy w takich przypadkach użyć zewnętrznego zasilanego huba USB.
UWAGA3: Ten mechanizm działa tylko dla urządzeń blokowych, takich jak dyski, karty czy pendrive. Nie działa dla zasobów sieciowych typu cifs lub nfs.
Założenia - nośnik (dysk, pendrive) ma jedną lub więcej partycji, może mieć także swap. Poniższe dane są prawdziwe dla wydania Attitude Adjustment.
Obsługa USB
# opkg update
# opkg install kmod-usb-core kmod-usb2 kmod-usb-storage
# opkg install block-mount
Dodatkowo należy zainstalować odpowiednie pakiety do obsługi systemów plików:
- ext2/ext3/ext4
# opkg install kmod-fs-ext4 (obsługuje on zarówno ext2, ext3 jak i ext4)
- FAT16/FAT32
# opkg install kmod-fs-vfat kmod-nls-cp437 kmod-nls-iso8859-1
- NTFS
# opkg install ntfs-3g
- exFAT
# opkg install exfat
- HFS+
# opkg install kmod-fs-hfsplus kmod-nls-utf8
Nazewnictwo partycji
Partycje dysku widoczne są pod nazwą /dev/sdaX gdzie X to numer odpowiedniej partycji, czyli partycja pierwsza widoczna jest pod nazwą np. /dev/sda1.Jeżeli podłączone zostanie więcej dysków może zmienić się litera dysku (sdX). Jak będzie widoczny dany dysk można przekonać się wydając polecenie logread po podłączeniu nośnika.
Montowanie zasobów
Jak to działa: przy starcie systemu, o ile zainstalowany jest pakiet block-mount, montowane są wszystkie partycje które są zdefiniowane w sekcjach mount oraz mają ustawione enabled na 1. Więc to sprawdzi się dla dysku ide czy karty SD. Jeżeli w czasie działania systemu podłączymy nośnika na USB to najpierw sprawdzane są sekcje automount i autoswap czy należy montować partycje. Jeżeli tak - odszukiwana jest odpowiednia sekcja mount czy swap na podstawie urządzenia i montowana jest partycja. Jeżeli takiej nie ma - o ile ustawione są odpowiednie opcje partycja montowana jest z domyślnymi parametrami.Odpowiada za to plik /etc/config/fstab. Podzielony jest na kilka sekcji które definiują zachowanie się podsystemu:
Sekcja automount
config global automount
option from_fstab 1
option anon_mount 1
Druga opcja, anon_mount, jeżeli jest ustawiona na 1 oznacza że nośnik zostanie zamontowany automatycznie nawet jeżeli nie ma go zdefiniowanego w sekcji mount. Czyli zwykły mechanizm hotplug - wkładamy pendrive i jest on montowany z domyślnymi opcjami w katalogu /mnt pod nazwą dysku i numerem partycji czyli np. sda1.
Sekcja autoswap
config global autoswap
option from_fstab 1
option anon_swap 0
Sekcja mount
config mount
option target /home
option device /dev/sda1
option fstype ext4
option options rw,noatime
option enabled 1
option enabled_fsck 1
- target: miejsce montowania partycji (utworzy się samodzielnie jeżeli nie ma tego katalogu)
- fstype: typ systemu plików
- options: opcje montowania, mogą być specyficzne dla danego systemu plików
- enabled: 1 - sekcja włączona
- enabled_fsck: 1 - jeżeli został zainstalowany pakiet e2fsprogs to przy starcie rutera zostanie wykonane także sprawdzenie systemu plików (dotyczy ext2/ext3/ext4).
Dysk można zidentyfikować na trzy sposoby:
- przez UUID (option uuid): unikalny identyfikator, więc tylko ten dysk/partycja będzie wykorzystana do tego celu (do odczytania przez program blkid)
- przez etykietę (option label): można posiadać wiele nośników z różnymi konfiguracjami, jeżeli tylko będzie miał odpowiednią etykietę to będzie wykorzystany
- przez nazwę urządzenia (option device): każdy podłączony nośnik, o ile oczywiście ma odpowiedni system plików, będzie wykorzystany
Jeżeli używamy klika fizycznych nośników to należy podawać uuid lub label, bo nazwa urządzenia może się zmienić w zależności od kolejności wykrywania urządzeń przez system. Sekcji mount należy zrobić tyle, ile chcemy montować partycji w określonym miejscu. Jeżeli nie zrobimy sekcji mount to partycja może być zamontowana automatycznie jeżeli jest ustawiona opcja anon_mount.
Sekcja swap
Niezależnie od nośnika (karta SD, dysk USB czy pendrive) można utworzyć tzw. swap. Swap pomaga przy pracy wielu zasobożernych programów jak klienci torrentów. - Swap w postaci partycji
# mkswap /dev/sda2
Konfiguracja to dodanie odpowiedniego zapisu w /etc/config/fstab
config swap
option device /dev/sda2
option enabled 1
- Swap w postaci pliku
# dd if=/dev/zero of=/hdd/swap count=262144
# mkswap /hdd/swap
Konfiguracja w /etc/config/fstab
config swap
option device /hdd/swap
option enabled 1
Ręczne montowanie swapa w miarę potrzeby to
# swapon /hdd/swap
Sprawdzanie systemu plików
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 (tylko jeżeli swap jest na partycji a nie jako plik w sprawdzanym dysku). Całe polecenie może wyglądać następująco (należy wcześniej zainstalować pakiet e2fsprogs, w pamięci rutera, nie na zewnętrznym nośniku!)
# umount /dev/sda1
# e2fsck -y /dev/sda1
Zakończenie
Odpowiednie montowanie zasobów można też wyklikać korzystając z gui LuCI. Zobacz także extroot w którym opisano metodę formatowania partycji oraz przeniesienia systemu plików na zewnętrzny nośnik (jeżeli np. brakuje miejsca we flash).Przykłady montowania systemów plików
Montowanie ext3
config mount
option target /mnt/dysk
option device /dev/sda1
option fstype ext3
option options rw,noatime
option enabled 1
Montowanie vfat
config mount
option target /mnt/dysk
option device /dev/sda1
option fstype vfat
option options rw
option enabled 1
config mount
option target /mnt/dysk
option device /dev/sda1
option fstype vfat
option options 'rw,umask=0,dmask=0'
option enabled 1
Montowanie ntfs
config mount
option target /mnt/dysk
option device /dev/sda1
option fstype ntfs-3g
option options rw
option enabled 1
Montowanie HFS+
config mount
option target /mnt/dysk
option device /dev/sda1
option fstype hfsplus
option options ro
option enabled 1
Uruchamianie serwisu przy podłączeniu dysku
Działanie niektórych serwisów ma sens, jeżeli jest podłączony nośnik, np minidlna lub Transmission. W moich obrazach możliwe jest teraz uruchamianie usług po podłączeniu dysku i ich zatrzymanie po odłączeniu (skrypt dostępny jest na forum openwrt.org). Serwis należy zainstalować i nie uruchamiać go po starcie systemu:
# opkg install minidlna vsftpd
# /etc/init.d/minidlna disable
# /etc/init.d/vsftpd disable
config 'mount'
option 'enabled' '1'
option 'device' '/dev/sda1'
option 'target' '/mnt/sda1'
option 'fstype' 'vfat'
option 'options' 'rw'
list 'service' 'minidlna'
list 'service' 'vsftpd'
Aby uzyskać tą funkcjonalność należy do systemu pobrać dodatkowy skrypt:
# wget http://ecco.selfip.net/projekty/60-services -O /etc/hotplug.d/block/60-services