Dodanie dysku USB do routera z OpenWrt

Dzisiaj nieco nietypowe rozwiązanie, otóż mój dysk sieciowy (NAS) ostatnio odmówił posłuszeństwa, a żeby zrobić z nim porządek, potrzebuję w nim co nieco pogrzebać, w związku, w między czasie z tym chciałbym wykorzystać port USB 3.0 wbudowany w mój router WRT3200ACM z oprogramowaniem OpenWrt w celu udostępnienia w sieci dysku USB.
Do tego celu używam 2TB dysk w obudowie WD My Book Essential (3.5” z zewnętrznym zasilaniem) ze złączem USB 3.0. Dysk sformatowałem w exFat (z poziomu komputera nim zacząłem), ze względu na kompatybilność zarówno w Windows, jak i Mac. Gdy będę chciał go odłączyć z sieci, zawsze będę miał dostęp do danych, podłączając kabel USB bezpośrednio do komputera.
A więc zaczynamy…
Większość kroków odbywać się z poziomu terminala.
W tym wpisie skupię się na tym, jak dodać dysk do routera. W osobnym wpisie (link na końcu) opiszę jak udostępnić ten dysk w sieci lokalnej.
Sprawdzone w wersji OpenWrt 21.02 oraz OpenWrt 22.03
Instalacja obsługi dysku USB
W pierwszej kolejności aktualizujemy pakiety.
opkg update
Następnie dodajemy wsparcie dla urządzeń USB.
opkg install kmod-usb-storage kmod-usb-storage-uas
W moim przypadku muszę dodać również obsługę exFat. W zależności, jaki system plików wybierzecie, musicie zainstalować go zgodnie z tym poradnikiem.
opkg install kmod-fs-exfat libblkid
Dodatkowo potrzebne nam będą narzędzia do sprawdzenia, czy nasze urządzenie USB działa prawidłowo. Instalujemy je za pomocą poniższej komendy:
opkg install usbutils
Teraz możemy podłączyć nasz dysk.
Jeżeli wszystko wykonaliśmy prawidłowo, wykonując poniższą komendę, zobaczymy nasz dysk na liście urządzeń podłączonych do USB.
lsusb -t
Powinniśmy zobaczyć coś takiego:
root@OpenWrt:~# lsusb -t
/: Bus 03.Port 1: Dev 1, Class=root_hub, Driver=xhci-hcd/1p, 5000M
|__ Port 1: Dev 4, If 0, Class=Mass Storage, Driver=usb-storage, 5000M
lub w przypadku wspieranego protokołu UASP:
root@OpenWrt:~# lsusb -t
/: Bus 03.Port 1: Dev 1, Class=root_hub, Driver=xhci-hcd/1p, 5000M
|__ Port 1: Dev 4, If 0, Class=Mass Storage, Driver=uas, 5000M
Sprawdzenie widoczności dysku
Sprawdzamy, czy nasz dysk i partycje są widoczne w systemie.
ls -l /dev/sd*
Powinniśmy zobaczyć coś takiego:
root@OpenWrt:~# ls -l /dev/sd*
brw------- 1 root root 8, 0 May 1 21:20 /dev/sda
brw------- 1 root root 8, 1 May 1 21:20 /dev/sda1
W następnym kroku zainstalujemy dodatkowe narzędzie, które będziemy używali do montowania partycji.
opkg install block-mount
Wykonujemy komendę:
block info | grep "/dev/sd"
Powinniśmy zobaczyć coś takiego:
root@OpenWrt:~# block info | grep "/dev/sd"
/dev/sda1: UUID="5EAC-6F27" LABEL="2TB" TYPE="exfat"
Montowanie dysku
Przygotowujemy plik konfiguracyjny:
block detect | uci import fstab
Włączenie automatycznego montowania na podstawie wygenerowanego pliku konfiguracyjnego:
uci set fstab.@mount[-1].enabled='1'
uci commit fstab
Montujemy nasz dysk:
block mount
(Opcjonalne) Jeżeli chcemy się upewnić, czy automatyczne montowanie dysku działa przy starcie systemu, wykonujemy:
reboot
Sprawdzamy, czy nasz dysk jest widoczny za pomocą:
df
Powinniśmy zobaczyć coś takiego:
root@OpenWrt:/mnt# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 195341. 10368 1953408896 0% /mnt/sda1
Oraz:
uci show fstab
Powinniśmy zobaczyć coś takiego:
root@OpenWrt:~# uci show fstab
fstab.@mount[0]=mount
fstab.@mount[0].target='/mnt/sda1'
fstab.@mount[0].uuid='5EAC-6F27'
fstab.@mount[0].enabled='1'
Jeżeli mamy jakieś problemy, upewniamy się, że w polu @mount[0].enabled widnieje wartość 1.
Jeżeli mamy jakieś dane na dysku, możemy je zobaczyć:
ls -l /mnt/sda1
Upewniamy się, że wszystko działa prawidłowo wykonując komendę:
block info
Powinniśmy zobaczyć coś takiego:
root@OpenWrt:~# block info
/dev/sda1: UUID="5EAC-6F27" LABEL="2TB" MOUNT="/mnt/sda1" TYPE="exfat"
Całość kończymy komendą:
service fstab boot
Uśpienie dysku (Opcjonalne)
Moja kieszeń WD posiada wbudowane oprogramowanie, które po czasie wstrzymuje silnik dysku / usypia go. Dysk nadal jest dostępny, ale gdy jest nieużywany, nie będzie się niepotrzebnie kręcił. W momencie, gdy dysk jest potrzebny, wówczas rozkręci się na nowo.
Jeżeli nie mamy możliwości programowej, wówczas możemy wesprzeć się dodatkowym rozwiązaniem, pozwoli nam zaprogramować bezpośrednio dysk w celu wykonania tego samego.
W tym celu instalujemy hdparm:
opkg update
opkg install hdparm
Zakładając (z powyższych kroków), że nasz dysk jest dostępny jako /dev/sda1, poniższą komendą ustawiamy, po jakim czasie dysk przejdzie w stan wstrzymania. Czas ten ustawiamy jako wielokrotność 5-ciu sekund. Minuta to wartość 12, jeżeli chcemy ustawić 15 minut, potrzebujemy wartość 180.
hdparm -S 180 /dev/sda1
Powyższa opcja jest opcją sprzętową. Wprowadza on zmiany w ustawieniach dysku, dzięki czemu zostają one zachowane, nawet gdy podłączymy nasz dysk do innego urządzenia / komputera. Niestety, nie zawsze to działa. Niektóre obudowy odmawiają przyjęcia powyższe komendy, zwracając błąd. W tym przypadku istnieje dodatkowe programowe rozwiązanie o nazwie hd-idle, która może być zintegrowane z naszym panelem administracyjnym routera z poziomu przeglądarki internetowej.
Pakiet hd-idle, po określonym czasie (zdefiniowanym w panelu administracyjnym) wysyła komendę spindown-now w celu wyłączenia obrotów dysku i przejścia w stan wstrzymania.
Instalujemy go za pomocą komendy:
opkg install luci-app-hd-idle
Po czym przechodzimy do naszego panelu sterowania, Services > HDD idle, gdzie ustawiamy, czy ta opcja programowa ma być włączona, dla jakiego dysku oraz czas.
Zalecam najpierw sprawdzić, czy sprzętowa opcja działa (czy to wbudowana, czy zaprogramowana), gdyż nie wymaga ona żadnych dodatkowych pakietów, które muszą być włączone na naszym routerze a dopiero wybrać rozwiązanie programowe.
I to by było na tyle, jeżeli chodzi o dodanie dysku, możemy przejść dalej do udostępnienia naszego dysku w sieci lokalnej. Ten krok opisałem jednak w osobnym wpisie: Udostępnienie dysku USB w sieci z routera OpenWrt
Credits1