Итак, после установки на роутер DIR-620 прошивки dd-wrt, можно подключить к нему флешку или внешний диск по USB, установить нужные программы и получить помимо самого роутера — NAS с закачкой торрентов.
Монтирование внешнего диска в dd-wrt
Для начала нужно включить поддержку USB на роутере через веб-интерфейс: Services — USB — USB Support — Core USB Support + USB Storage Support. После подключения внешнего диска проверить успешность при помощи вызова dmesg | grep scsi
, где строки вида /dev/scsi/host2/bus0/target0/lun0: p1 p2
укажут на подключенный диск (в данном случае мой диск подключен к третьему порту USB-хаба — host2 и имеет два раздела — p1 p2.
Монтирование на прошивке с поддержкой файловых систем
Поскольку при каждой загрузке роутера его состояние обнуляется до того, что штатно позволяет прошивка, монтирование USB-дисков, применение нужных настроек и запуск требуемых программ следует прописать в startup-скрипте (Administration — Commands — Startup) через веб-интерфейс:
switch reg w 90 10007f7f
insmod jbd.ko
insmod mbcache.ko
insmod ext3.ko
sleep 10
mount -t ext3 -o noatime,nodiratime /dev/scsi/host0/bus0/target0/lun0/part1 /jffs
mount -o bind /jffs/opt /opt
mount -o bind /opt/etc/profile /etc/profile
mount -t ext3 /dev/scsi/host1/bus0/target0/lun0/part1 /mnt
/opt/bin/busybox swapon /mnt/routerswap.swp
sleep 1
/opt/bin/transmission-daemon -g /opt/etc/transmission
О некоторых строках расскажу подробней сразу, другие рассмотрены дальше в заметке. Первая — исправляет ошибку невключения WAN-порта, возникующую в dd-wrt 17201 после прошивки загрузчика uboot 3.3.2. Вторая-четвертая — загрузка модулей для поддержки работы с файловыми системами, модули находятся в /lib/modules/версия_ядра, если прошивка без модулей поддержки ФС — см. ниже. Шестая и девятая строки отвечают за монтирование внешних дисков (флешки для установки софта и USB-HDD, выступающего в роли NAS). Седьмая — монтирование каталога с флешки в каталог ФС роутера, восьмая — замена штатного /etc/profile на измененный (см. ниже). Десятая — подключение своп-файла, создание которого подробно рассмотрено ниже. Последняя — запуск transmission с указанным каталогом в качестве рабочего (в частности там хранится файл настроек).
Монтирование при отсутствии встроенной поддержки файловых систем
Если установленная прошивка не имеет в комплекте модулей поддержки файловых систем — можно поступить следующим образом — записать поблочно архив с нужными модулями при помощи dd на отдельный раздел флешки (достаточно раздела размером в 1 Мб) и прописать их распаковку и подгрузку при старте роутера, изменив соответствующим образом startup-скрипт (подробная инструкция на английском):
mkdir /var/lib/fs
cd /var/lib/fs
tar -zxvf /dev/scsi/host0/bus0/target0/lun0/part2
insmod jbd.ko
insmod mbcache.ko
insmod ext3.ko
После этого ext3 монтируется без проблем. Кстати поддержки ext4 я в dd-wrt не обнаружил (по крайней мере на их ftp модулей нет, разве что собирать модуль самостоятельно, чтобы получить поддержку ext4), обратная конвертация из ext4 в ext3 судя по всему невозможна — стоит учесть это заранее.
Проверяем результаты монтирования
Каким бы из двух перечисленных выше путей для монтирования диска мы ни двинулись, в итоге всё должно получиться и останется только проверить, так ли это. Можно посмотреть вывод mount
, можно использовать что-то ещё, а я воспользовался выводом df
:
root@DIR620:~# df -h
Filesystem Size Used Available Use% Mounted on
/dev/root 2.8M 2.8M 0 100% /
/dev/scsi/host0/bus0/target0/lun0/part1
1.8G 123.9M 1.6G 7% /jffs
/dev/scsi/host0/bus0/target0/lun0/part1
1.8G 123.9M 1.6G 7% /opt
/dev/scsi/host0/bus0/target0/lun0/part1
1.8G 123.9M 1.6G 7% /etc/profile
/dev/scsi/host1/bus0/target0/lun0/part1
293.4G 160.1G 118.4G 57% /mnt
Как видно из вывода команды — моя флешка для установки софта (1.8G) и USB-диск для закачки торрентов (293.4G) успешно примонтировались и используются системой. О том, зачем потребовалось монтировать /etc/profile с флешки, речь пойдёт дальше.
Включение SWAP на роутере с dd-wrt
Если установлена прошивка с поддержкой swap (см. Как прошить DIR-620 прошивкой dd-wrt), то нужно выделить отдельный раздел под него на внешнем диске или создать своп-файл, как поступил я (можно воспользоваться Linux-машиной, можно установить расширенную версию busybox на роутер):
dd if=/dev/zero of=/mnt/myswap.swp bs=1k count=16000
/opt/bin/busybox mkswap /mnt/myswap.swp
/opt/bin/busybox swapon /mnt/myswap.swp
где count=16000 — 16 тысяч блоков размером по одному килобайту, т.е. размер своп-файла составит 16 мегабайт. Советую сделать не меньше 32-х мегабайт, при большом количестве закачек в transmission легко используется по 20-25 Мб подкачки.
Если при попытке включения свопа выдаётся ошибка swapon: function not implemented — значит, ядро установленной прошивки не имеет поддержки swap.
Установка программ в dd-wrt
Для установки софта (optware) из репозиториев под dd-wrt применяются следующие команды:
- ipkg-opt update — обновить список пакетов, доступных в репозитории;
- ipkg-opt upgrade — обновить установленные пакеты;
- ipkg-opt install — установить пакет;
- ipkg-opt remove — удалить пакет;
- ipkg list — показать список всех доступных для установки пакетов;
- ipkg list | grep ‘название программы’ — найти программу по названию, если она естьв репозитории.
Настройка NFS для доступа к NAS
Из вариантов сетевого доступа к внешнему диску я выбрал доступ по NFS — samba медленней и сложней в настройке, большинство машин у меня дома — с Linux или Android, а кроме того — для Windows XP есть официальный NFS-клиент (точнее — клон mount), доступный на сайте Microsoft, а Vindows Vista и старше — поддерживают NFS изначально.
Настройка NFS на роутере производится следующим образом — устанавливаем пакеты portmap (для динамического выделения портов) и unfs3 (NFS-демон). В созданные после установки файлы /opt/etc/init.d/S56unfsd и /opt/etc/init.d/S55portmap добавляем строку LD_LIBRARY_PATH=/opt/lib:${LD_LIBRARY_PATH}
— путь к дополнительным библиотекам на внешнем диске. Создаем файл настроек для NFS-демона /opt/etc/exports:
/mnt/точка_монтирования_внешнего_диска 192.168.0.1/255.255.255.0(rw,sync,no_subtree_check,no_root_squash)
Точку монтирования NAS-диска и маску подсети надо естественно изменить на свои. При перезагрузке роутера portmap и unfs будут стартовать автоматически.
Затем я на ноутбуке установил пакет nfs-client, после чего можно монтировать NAS:
mount -t nfs 192.168.0.1:/mnt /media/NAS
В каталог /mnt примонтирован на роутере внешний HDD.
Небольшие настройки для удобства работы в ash
Штатно в dd-wrt используется оболочка командной строки ash. Конечно можно установить из репозитория bash или любую другую и прописать ее в автозагрузку, но фактически возможностей ash более чем достаточно для роутера. Единственное реальное неудобство, которое возникло у меня при работе с ней — невозможность прописать свои алиасы в конфиге, поскольку при каждой загрузке роутера все системные файлы откатываются к исходному состоянию. Выход — монтировать поверх штатного конфига командной оболочки (/etc/profile) свой, расположенный на внешнем диске (например у меня — /opt/etc/profile) и дополненный нужными опциями, дописав в startup скрипте такую строку:
mount -o bind /opt/etc/profile /etc/profile
Мой profile устанавливает алиасы для вызова vim с моим vimrc, htop в качестве системного монитора, transmission с внешним каталогом хранения настроек и в итоге дополнен следующими командами:
alias vim='vim -u /opt/etc/vim/.vimrc'
alias top='htop'
alias transmission='/opt/bin/transmission-daemon -g /opt/etc/transmission'
alias halt='/opt/sbin/shutdown'
alias ll='ls -lh'
alias la='ls -lha
Полезно сделать shutdown-скрипт, копирующий содержимое секции shutdown (Administration — Commands — Shutdown) из веб-интрефейса, которое выполняется при перезагрузке роутера. Скрипт будет точно также выгружать определенные процессы и отмонтировать внешние диски для последующего безопасного выключения роутера. Мой скрипт выглядит так:
killall transmission-daemon
killall unfsd
sleep 1
/opt/bin/busybox swapoff /mnt/routerswap.swp
umount /dev/scsi/host1/bus0/target0/lun0/part1
umount /dev/scsi/host0/bus0/target0/lun0/part1
Приветствую! А если версия стоит без свап? Как-то есть вариант добавить свап?
Делаю так:
/opt/bin/busybox dd if=/dev/zero of=/mnt/myswap.swp bs=1k count=16000
Файл создается
/opt/bin/busybox mkswap /mnt/myswap.swp
Setting up swapspace version 1, size = 16379904 bytes
/opt/bin/busybox swapon /mnt/myswap.swp
swapon: /mnt/myswap.swp: Function not implemented
Благодарю!
Вариант по сути один — пересобрать ядро с включением поддержки подкачки. Либо самостоятельно, либо взять прошивку, где ядро уже с поддержкой. swapon как раз и ругается на отсутствие поддержки swap в ядре.
Спасибо, только у тебя нашел нужную информацию!
Спасибо за инструкцию!
Правда portmap нормально поставился только после того, как в startup добавил
unset LD_PRELOAD
unset LD_LIBRARY_PATH
а nfs завелся лишь после того, как изменил в файле /opt/etc/init.d/S56unfsd
/opt/sbin/unfsd -e /opt/etc/exports
и в файле /opt/etc/exports
192.168.1.0/255.255.255.0
С путем для доп. библиотек мне помогает строка
LD_LIBRARY_PATH=/opt/lib:${LD_LIBRARY_PATH}
в конце S55portmap и S56unfsd, как в заметке написано. В S56unfsd у меня тоже добавлена/opt/sbin/unfsd -e /opt/etc/exports
. В /opt/etc/exports, пример из которого я в заметке привожу, у меня прописан диапазаон адресов моей подсети. Соотв. если у вас роутер живет на 192.168.1.0, а не на 192.168.0.1, как у меня, то естественно нужно было заменить диапазон на правильный.Друзья! Понимаю абсурдность и глупость своего вопроса, но тем не менее — как установить portmap и unfs3? винт подключила, он монтируется, все вроде бы отлично, но без этих вот сервисов нихрена не работает. Я вообще в этом деле (общении с техникой) новичок, так что не злитесь)) Помогите, пожалуйста, добрым советом, что делать. Уже блин неделю бьюсь и все никак ничего не выйдет.
Заходим по ssh на роутер, выполняем команды
ipkg-opt install portmap
иipkg-opt install unfs3
.Про установку программ под dd-wrt в этой заметке есть раздельчик кстати.
Пишу, он отвечает ipkg-opt not found или что то типа того. как туда запилить то этот ipkg-opt?
ipkg уже присутствует в прошивке (которую я использовал по крайней мере). Могу предположить, что если раздел /opt и/или /jffs у вас смонтированы на съемном носителе, — могли просто забыть его примонтировать.
Ну и вот это можно почитать на всякий случай: [ссылка]
Удалось прикрутить ipkg после прочтения
[ссылка]
Теперь буду крутить дальше, NFS =)
На всякий случай уточню, что прикрутить поддержку NFS в WinXP или в Android тоже не самая тривиальная задача. Если с ними работать — стоит на Samba посмотреть.
Да вот уже начинаю поглядывать. Пока что с нфс не получается ничего.
Простите за глупый вопрос, но
«Создаем файл настроек для NFS-демона /opt/etc/exports:»
как создавать файл?
и еще:
«/mnt/точка_монтирования_внешнего_диска »
т.е. если у меня диск примонтирован как
/dev/scsi/host1/bus0/target0/lun0/part1
то после /mnt добавить эту строку, или как?
Например — при помощи команды touch имя_файла. Или vim имя_файла и сохранить его при выходе. Или echo » > имя_файла. Можно и поискать по запросу «как создать файл в linux».
Это значит, что если внешний диск у вас примонтирован в директорию /mnt — прописать так, а если в /mnt/ext_hdd или еще куда-то — прописать, куда именно. Например у меня внешний диск монтируется так:
mount -t ext3 /dev/scsi/host1/bus0/target0/lun0/part1 /mnt
и значит мне нужно прописать /mnt в данном случае.Подскажите, пожалуйста!
Как запустить portmap и unfs3. Эти пакеты установлены, но при вызове ps, они не отображаются.
Раздел заметки «Настройка NFS для доступа к NAS», указаны файлы: «В созданные после установки файлы /opt/etc/init.d/S56unfsd и /opt/etc/init.d/S55portmap добавляем строку…» — вот они и запускают утилиты, это скрипты-обертки для запуска. Можно запустить вручную, можно перезагрузить роутер — они автоматически запустятся при загрузке (подробней можно почитать про «демон init.d»). Цифры после буквы S в названии — порядок запуска, чем меньше цифра — тем раньше запустится в ходе загрузки соответствующий скрипт.
Тогда я либо чего-то не понимаю, либо у меня руки не оттуда растут.
К роутеру я присоединяюсь по 192.168.1.1
При помощи unfs-3g примонтировал диск (на данный момент флешку на 16 Гб) в папку
/mnt. Дальше действую, как написано в заметке в файл S56unfsd и S55portmap дописал LD_LIBRARY_PATH=/opt/lib:${LD_LIBRARY_PATH}
Мой файл ecports выглядит так?
/mnt 192.168.1.1/255.255.255.0 (rw,sync,no_subtree_check,no_root_squash)
Дальше, из-за того, что у меня стоит Windows 7 Pro (в котором нету вшитого NFS-клиента), нашел NFS-клиент под название Neko Drive.
Поставил, захожу, прописываю адрес сервера 192.168.1.1
на что мне вылетает ошибка ONC/RPC portmap failure
Ума не приложу, что я делаю неправильно. Весь инет обшарил по этому поводу.
Сами библиотеки-то есть на внешнем диске? unfsd и portmap запущены? Может еще опции монтирования проверить — не знаю, как виндовый клиент на них реагирует, возможно что-то надо добавить/убрать. На сайте Microsoft был NFS-клиент родной, может его еще попробовать.
А вот насчет этих библиотек можно подробнее?
Откуда их брать и что это за библиотеки?
PS: поставил клиент от мелкомягких, при вызове showmnt -e 192.168.1.1 выскакивает ошибка RPC: port mapper failure.
Они ставятся автоматом при установке пакетов через ipkg, но стоит проверить — вдруг сбой какой был.
По ошибке гугль выдает много разного — стоит поискать и почитать. Порты-то не закрыты, которые portmap пытается выделить?
в папке /opt/lib есть библиотеки. Я просто вначале неправильно понял, подумал, что они должны быть на диске, который мы монтируем как /mnt.
вызвал rpcinfo -p 192.168.1.1
вывело:
rpcinfo: RPC: Unable to receive; errno = no error string available
rpcinfo: can’t connact portmapper.
что делать с портами? как с ними воевать?
Нашел ошибку.
Попробовал запустить вручную
sh /opt/etc/init.d/S55portmap
на выходе:
/opt/sbin/portmap: can’t handle reloc type 47
т.е. portmap не запускается. Далее попробовал снести пакет и поставить его заново. В конце установки ошибка:
/opt/sbin/portmap: can’t handle reloc type 47
postinst script returned status 1
ERROR: portmap.postinst returned 1
Далее попробовал запустить пакет unfsd
root@DD-WRT:~# sh /opt/etc/init.d/S56unfsd
Cannot register service: RPC: Unable to receive; errno = Connection refused
unable to register (NFS3_PROGRAM, NFS_V3, udp).
Подскажите, пожалуйста, что можно сделать?
Как говорится, кто ищет, тот всегда найдет.
После длительного поиска я нашел решение проблемы. Всё что нужно, это прописать в консоли:
unset LD_PRELOAD
unset LD_LIBRARY_PATH
и запустить пакеты на выполнение:
sh /opt/etc/init.d/S56unfsd
sh /opt/etc/init.d/S55portmap
Теперь в одном из NFS клиентов есть возможность открыть шару, но монтировать как диск, почему-то не хочет.
NekoDrive выкидывает ошибку Permission denied.
NFS-клиент майкрософта пишет при вызове:
showmnt -e 192.168.1.1
/mnt , 192.168.1.1/255.255.255.0
т.е. диск виден
Но при вызове mount 192.168.1.1:\mnt x:
выкидывает ошибку сети 1204
Значит гугление по тексту ошибки как обычно дает результат 🙂
С правами надо разбираться — или опции монтирования менять для unfsd (вместо no_root_squash для начала попробовать all_squash — виндовые клиенты вероятно с пользователями/группами работают не так, как линуксовые), или проверить, что IP клиента действительно попадает в разрешенный в exports диапазон (как например тут решилась схожая проблема). Проверить права на внешний диск не помешает — может он монтируется удаленно как rw, а локально на сервере права только на чтение например. Почитать man exports и пример в АрчВики. В exports кстати можно диапазон IP меньше указать, у меня так сейчас указан:
/mnt 192.168.0.0/24
.В интернете поискал, толком по этой ошибке ничего нету.
Вписал в опции монтирования unfsd all_squash, никак не повлияло.
В диапазон попадает т.к. у меня в exports указано 192.168.1.1, а клиенты начинаются с 192.168.1.100 и выше.
Что делать дальше я пока не знаю.
Пока самое полезное встретил тут (в частности — прописывание в hosts.allow нужных сервисов и опция no_root_squash). man exports читали по опциям экспорта директорий? На выходных поэкспериментирую в WinXP.
Установил NekoDrive и Dokan под WinXP, всё отлично монтирует. Протокол 3 версии выставил и поддержку юникода при подключении, разблокировал NekoDrive в фаерволе и без проблем сетевой диск примонтировал. Access denied получал только когда для эксперимента изменил разрешенный диапазон адресов в exports и клиент перестал в него попадать. Поменял обратно на 192.168.0.0/24 — снова без проблем подключается.
Да, я на выходных проделал почти то же самое. Диск монтируется. Но в Моём компьютере диск подписан как «Отключенное сетевое устройство» и помечен красным крестом, но файлы всё просматриваются. Частенько диск отваливается, Total Commander при проигрывании мультимедиа пишет «Соединение с x:»
В добавок к этому мне не нравится скорость обмена. Если я через Total Commander, либо через обычный проводник перекидываю файлы на сетевой диск, то обмен идет приблизительно на скорости 1 МБайт/сек. Когда я запускаю медиа-файлы, то скорость значительно падает + обрывы (из-за того, что отваливается диск). Включаю музыку через Winamp, играет секунд 10-15, дальше обрыв приблизительно на 5-10 секунд, а бывает и дольше, потом звук продолжается. Насчет фильмов я вообще молчу.
Вот сейчас не знаю и на «кого» думать. Либо USB-хаб не тянет, либо во флешке что-то не так, либо я с настройками что-то намудрил. Хотя, настройки вроде в порядке.
Может и хаб, он активный? У меня обычный HDD подключен к роутеру, скорость копирования в Win была в принципе близка к таковой в Linux. Флешку с fat32 нет особого смысла использовать для постоянной записи/чтения — умрет быстро.
Активный хаб, насколько я знаю, это тот, который еще отдельно подключается в электросеть? Тогда у меня не такой хаб. Он подключается только в USB выход роутера.
Флешка отформатирована в NTFS.
На данный момент я просто провожу эксперименты с флешкой. Т.к. у меня есть жесткий диск на 1 Тб, но он внутренний и расположен в стационарном компьютере; я подумывал насчет того, чтобы докупить к нему внешний карман и подключить к хабу (чтоб диск раздавался и на ноутбук и на стационар).
Вот сейчас подумываю либо заменить хаб, либо купить такую штуку (точно не знаю название), подобие внешнего кармана, но подключается в порт Lan. (Но я пока не знаю, как настраивать это дело)
Что скажете на этот счет?
Да, именно такой — с дополнительным отдельным питанием.
Салазки с LAN-портом по идее должны определиться без всяких проблем, я правда подобными никогда не пользовался — так что достоверно не знаю. Надо гуглить, как конкретные модели работают с конкретными ОС, или же от ОС тут вообще ничего не зависит. Однозначно они выйдут дороже хаба, скорость работы должна быть выше, а тонкости подключения — повторюсь — лучше предварительно по выбранной модели поискать.