DD-WRT — Подключение USB-флешки или USB-HDD

Если у маршрутизатора есть USB-порт, то с прошивкой DD-WRT к нему можно подключить USB-флешку или внешний USB-жесткий диск.
Это нам позволит реализовать разного рода задачи, например, превратить роутер в домашний маленький NAS, иными словами в файловый сервер.
Но это только самое банальное. Наиболее интересной функцией для вас может оказаться установка пакета transmission и скачивание торрентов прямо на этот носитель, даже если компьютер выключен. (Еще один способ экономить электричество, кстати).
Так же умельцы превращают роутеры, даже самые дешевые, в небольшие веб-серверы при помощи Apache+PHP+MySQL, хотя лучше присмотреться к lighttpd+PHP+SQLite.
В общем есть смысл в подключении внешнего носителя через USB к маршрутизатору с прошивкой DD-WRT.

Подготовка флешки или жесткого диска к подключению в DD-WRT

Необходимо создать на носителей разделы. Их количество, типы файловых систем и размеры надо выставлять смотря какие задачи вы хотите реализовать.

DD-WRT в большинстве случаев поддерживает следующие файловые системы.

Типы файловых систем в DD-WRT

ext3 — журналируемая файловая система, родная для linux-based систем. В случае с DD-WRT она нужна в обязательном порядке для установки различных пакетов (программ). Максимальный размер файла зависит от ядра linux вашей прошивки и составляет не менее 2Tb, что вряд ли как то ограничит Вас

fat32 — всё более устаревающая файловая система, родная для Windows. В DD-WRT пригодна лишь для хранения пользовательский файлов, на неё нельзя установить пакеты. Максимальный размер файла составляет около 4гб, что по современным меркам не фантан. Еще бывают проблемы с длинными именами файлов. Пригодна лишь для использования как раздел под хранения небольших файлов, например документов.

В принципе не советую использовать fat32 вообще никому, все рано или поздно от неё отказываются всё-равно.

swap — это даже не файловая система, это раздел подкачки. Если кроме ftp планируете еще что-то устанавливать, то настоятельно рекомендую создать такой раздел размером 32-64мб. Больше врядли кому пригодится.

Другие файловые системы (ntfs, ext2, ext4 и т.д.) без хитрых манипуляций не подмонтировать, не будем на этом заострять внимание. По крайней мере пока.

Разметка флешки/диска

Основываясь на различных статьях и личном опыте предлагаю оптимальную на мой взгляд разметку, подходящую для большинства задач:

Раздел 1 / тип swap / размер 32 мб — раздел подкачки.

Раздел 2 / тип ext3 / размер 1 гб — раздел для установки пакетов (optware).

Раздел 3 / тип ext3 / размер — вся оставшаяся область на диске — раздел для прочих файлов.

Бытует мнение, что использовать swap на флешке нельзя, однако я с этим несколько несогласен.

Дело в том, что работа с разделом подкачки в linux имеет весьма умные алгоритмы. Данные туда начинают попадать только когда действительно не хватает оперативной памяти, и отправляются в своп данные, которые меньше других подвержены изменениям. Так что врядли ваша флешка быстро затрется разделом подкачки. Особенно, если не мучать её связкой Apache+PHP+MySQL ;-)

С разметкой в linux проблем у вас не будет. Хотя если будет — спрашивайте, помогу.

В Windows вам поможет Acronis Disk Director

Настройка роутера

Идем на вкладку СлужбыUSB (СервисUSB),

1) Включаем поддержку USB

2) На старых прошивках выбираем USB 2.0, на новых этот пункт убрали, но поддержка осталась и включается автоматически.

3) Включаем поддержку USB-дисков (USB Storage Support)

Включение поддержки USB-дисков в DDWRT

Включение поддержки USB-дисков в DD-WRT

Включать автомонтирование не стоит, так как монтируются в этом случае диски без флага noatime, то есть при обращении к файлам и папкам обновляется информация о последнем доступе к ним.

Роутеры итак медленными процессорами обладают, так что для нас это недопустимая роскошь.

Подключение диска

Подключаем флешку/диск и подключаемся к роутеру через телнет. Там нас спросят логин и пароль — те же самые, что и в веб-интерфейсе.

Далее выполняем команду

root@DD-WRT:~# dmesg|grep lun
Attached scsi removable disk sda at scsi0, channel 0, id 0, lun 0
/dev/scsi/host0/bus0/target0/lun0: p1 p2 p3

Строка /dev/scsi/host0/bus0/target0/lun0: p1 p2 p3 говорит нам о том, что наш носитель подключен, причем p1 p2 p3 — разделы на нем.

Если вы сделали разметку такую же, как предложил я, то у вас

p1 — раздел подкачки.

p2 — раздел для установки пакетов (optware).

p3 — раздел для прочих файлов.

Монтирование USB-диска

Сначала монтируем второй раздел, который предназначен для optware. Монтировать будем в уже существующую, но пустую папку /opt (в линуксе нет понятия о локальных дисках, все они так или иначе подключены в качестве каталога).

Примечание: в других статьях нередко монтируют в каталог /jffs, предварительно включая поддержку JFFS2, а уже затем создают каталог /jffs/opt, который монтируют к папке /opt (да, монтировать можно не только диски, но и папки, iso-файлы, ftp-каталоги, smb-диск, черта лысого). Для себя я так и не понял важность данных извращений, хотя скорее не пытался понять в силу своей природной лени. Без /jffs работает всё отлично, а главное последующий мониторинг смонтированных устройств и папок глаза не режет.

Для этого вводим команду:

root@DD-WRT:~# mount -o noatime /dev/discs/disc0/part2 /opt

Где /dev/discs/disc0 — наша флешка, part2 — второй раздел на ней.

Примечание: тут тоже я отступаюсь от других статей, там монтировали бы командой
mount -o noatime /dev/scsi/host0/bus0/target0/lun0/part2 /opt
уверяю вас, это абсолютно одно и тоже, только в моем случае выглядит короче и понятнее.

И проверяем смонтировалось или нет:

root@DD-WRT:~# df
Filesystem           1K-blocks      Used Available Use% Mounted on
rootfs                    2432      2432         0 100% /
/dev/root                 2432      2432         0 100% /
/dev/discs/disc0/part2  120979      5663    109070   5% /opt

Если вдруг флешка не смонтировалась, то подглядите в следующий раздел в этой статье, там описано почему так происходит и как исправлять ;-)

Если смонтировалась, то проверяем третий раздел, монтируя его в также существующую и пустую папку /mnt

root@DD-WRT:~# mount -o noatime /dev/discs/disc0/part3 /mnt
root@DD-WRT:~# df
Filesystem           1K-blocks      Used Available Use% Mounted on
rootfs                    2432      2432         0 100% /
/dev/root                 2432      2432         0 100% /
/dev/discs/disc0/part2  120979      5663    109070   5% /opt
/dev/discs/disc0/part3
                      15038940    168508  14106480   1% /mnt

Однако если у вас свежая версия прошивки DD-WRT, то может не получиться монтирование раздела диска в /mnt, но выход есть и он банален.

Создаем в папку /tmp/mnt и делаем символьную ссылку /mnt в /tmp:

root@DD-WRT:~# mkdir /tmp/mnt
root@DD-WRT:~# ln -s /mnt /tmp

Теперь смело монтируемся в /mnt:

root@DD-WRT:~# mount -o noatime /dev/discs/disc0/part3 /mnt
root@DD-WRT:~# df
Filesystem           1K-blocks      Used Available Use% Mounted on
rootfs                    2432      2432         0 100% /
/dev/root                 2432      2432         0 100% /
/dev/discs/disc0/part2  120979      5663    109070   5% /opt
/dev/discs/disc0/part3
                      15038940    168508  14106480   1% /tmp/mnt

Если USB-флешка/USB-HDD не монтируется в DD-WRT

В новых прошивках поддержка файловых систем зачастую автоматически не подключается.

В этом случае необходимо посмотреть, какие файловые системы поддерживаются:

root@DD-WRT:~# cat /proc/filesystems
nodev rootfs
nodev bdev
nodev proc
nodev sockfs
nodev tmpfs
nodev pipefs
nodev ramfs
nodev devfs
      squashfs
nodev usbdevfs
nodev usbfs

и какие модули подключены:

root@DD-WRT:~# lsmod
Module                 Size   Used by
ip_nat_pptp            2560   0 (unused)
ip_conntrack_pptp      3036   1
ip_nat_proto_gre       1664   0 (unused)
ip_conntrack_proto_gre 2584   0 [ip_nat_pptp ip_conntrack_pptp]
usb-storage            40344  0 (unused)
sd_mod                 13092  0 (unused)
scsi_mod               101584 2 [usb-storage sd_mod]
usb-ohci               20352  0 (unused)
ehci-hcd               22060  0 (unused)
usbcore                84576  1 [usb-storage usb-ohci ehci-hcd]
switch-robo            6108   0 (unused)
switch-core            5888   0 [switch-robo]

Ага. Нашей ext3 не видно. Как впрочем и модуля jbd, отвечающего за поддержку журналирования в файловых системах.

Пробуем подгрузить вручную этим модули, причем сначала jbd.o, без него ext3.o не загрузится:

Для прошивки с ядром 2.4:

root@DD-WRT:~# insmod /lib/modules/$(uname -r)/jbd.o
root@DD-WRT:~# insmod /lib/modules/$(uname -r)/ext3.o

Для прошивки с ядром 2.6 и выше:

root@DD-WRT:~# insmod /lib/modules/$(uname -r)/kernel/fs/mbcache.ko
root@DD-WRT:~# insmod /lib/modules/$(uname -r)/kernel/fs/jbd/jbd.ko
root@DD-WRT:~# insmod /lib/modules/$(uname -r)/kernel/fs/ext3/ext3.ko

Примечание: если не знаете, какое у вас ядро, то выполните команду uname -r

За выявления различия в прошивках спасибо пользователю bereg с форума DD-WRT

И проверяем знает ли наше ядро теперь ext3:

root@DD-WRT:~# cat /proc/filesystems
nodev rootfs
nodev bdev
nodev proc
nodev sockfs
nodev tmpfs
nodev pipefs
nodev ramfs
nodev devfs
      squashfs
nodev usbdevfs
nodev usbfs
      ext3

Вот и всё, теперь можно монтироваться.

Автоматизируем процесс подключения дисков в DD-WRT

Для автоматизации команд надо занести в скрипт включения.

Для этого в веб-интерфейсе перейдите в раздел Administration — Commands

И в верхнее окно введите команды в нужном порядке, только если у вас уже есть стартовый скрипт, то необходимо их объединить.

В моем случае он выглядит так:

# часть моего стартового скрипта, не относящегося к дискам
udhcpc -i vlan1 -s /tmp/custom.sh -b -p /var/run/udhcpc.pid

# подключение модулей ядра jbd и ext3
insmod /lib/modules/$(uname -r)/jbd.o
insmod /lib/modules/$(uname -r)/ext3.o

# создаем папку /tmp/mnt и делаем символьную ссылку /mnt -> /tmp/mnt
mkdir /tmp/mnt
ln -s /mnt /tmp

# монтирование разделов в /opt и /mnt
mount -o noatime /dev/discs/disc0/part2 /opt
mount -o noatime /dev/discs/disc0/part3 /mnt

Всё, теперь нажимаем Save Startup.

Автоматическое размонтирование дисков в DD-WRT

Размонтирование необходимо для корректного отключения разделов во время перезагрузки, дабы жили дольше. :-)

Для этого добавляем скрипт выключения:

# Всё что смонтировано размонтируем
umount /opt &
umount /mnt &
umount /tmp/mnt &
umount /jffs
# Пауза на 2 сек перед выключением, вдруг кто не успел отключиться
sleep 2

Знак & между командами говорит о том, что они будут выполняться одновременно. Это уменьшит паузу перед перезагрузкой.

В итоге у меня стартовый скрипт и скрипт выключения выглядят следующим образом (монтирование дисков происходит после строки # mount USB-disc):

Стартовый скрипт и скрипт выключения с командами для корректного монтирования и размонтирования USB флешки/винчестера

Swap-раздел

Разделы мы подключили, всё работает, а вот про раздел подкачки мы.. нет, не забыли.
Подключение раздела подкачки пожалуй заслуживает отдельной статьи. И вы познакомитесь с ней позже 😉

Помогла статья? Поддержи блог - расскажи о нём на своей странице в социальной сети.

29 комментариев к DD-WRT — Подключение USB-флешки или USB-HDD

  1. Автор помогите.
    Разделы SDA. не могу смонировать. Уже все перепробывал.
    ПРи включении автомонтирования ройтер умирает.

  2. Всё сделал всё видит, но после перезагрузки роутера не монтируется по автомату , и в старт ап закинул и шатдаун, в чём проблема?

  3. Доброго времени суток, не подскажете с чем может быть связана проблема?

    У меня после выполнения команды «dmesg|grep lun» вызлазит следующая ошибка «Dropping NETIF_F_UFO since no NETIF_F_HW_CSUM feature.»

    Как её решить?

    Прошивка:
    DD-WRT v24-sp2 mega (c) 2013 NewMedia-NET
    Release: 03/25/13 (SVN revision: 21061)

    Роутер: Asus RT-N10U B

    Подключен внешний HDD WD Elements (созданы 3 раздела ext2, fat, swap)

  4. Спасибо за подробную статью. Не мог понять почему не монтируются разделы. Однако все же не могу подгрузить дополнительные модули.
    Версия ядра — 2.6.24.111. mbcache.ko — есть, однако по команде insmod /lib/modules/$(uname -r)/kernel/fs/jbd/jbd.ko папка jbd, как и сам модуль — не появляются. Пробовал сам создать папку — тоже ничего не выходит. Как быть?

  5. Денис, Доброго времени суток, у меня такой вопрос есть:
    после: команды dmesg|grep lun — тишина… не могу понять, что не так..

    • Денис Юрьев Денис Юрьев

      видимо, у вас более свежее ядро, нежели 2.4
      попробуйте команду dmesg|grep sda

      и разделы на носителях в Вашем случае будут иметь адреса
      #первая подключенная флешка/диск
      /dev/sda1
      /dev/sda2
      /dev/sda3
      #вторая подключенная флешка
      /dev/sdb1
      /dev/sdb2

      • Автор помогите.
        Бьюсь уже в течение года.
        Не монтируются разделы. Модель роутера tl-wr 842 nd v2 (dd-wrt)
        Разделы sda. Как их монтировать уже весь мозг сломал.
        mount -o noatime /dev/sda1 /opt и ей подобные пробывал. ноль эффекта. И еще — если вкл автомонтирование, то роутер помирает. Пробывал разные usb.

    • Василий здравствуйте, установил актуальную на 21 10 2014 прошивку, описанный выше способ монтирования работает или нужны другие команды монтирования? Заранее благодарен.

  6. Есть флешка на 16Гб — с ней все замечательно вышло, как по нотам.
    Решил заменить ее на usb-hdd 320Гб — возникли «проблемы». На этапе подключения диска.
    На команду dmesg|grep lun получаю: /dev/scsi/host0/bus0/target0/lun0: p1
    Т.е. dd-wrt не видит всех трех разделов :( Как не бился, не смог получить положительного результата :(
    Почему с флешкой получилось, а с диском нет (при равных условиях и порядке действий)?

    • Денис Юрьев Денис Юрьев

      Может быть питания жесткому не хватает? Или, как вариант, не известная прошивке таблица разделов.

      • Про питание уже наслышан :) Шнурок кабеля HDD ~ 5см (заводской, не переделанный). А что значит «прошивка таблицы разделов»? Я так понимаю речь не о типе разделов, а о чем-то другом?

        • Денис Юрьев Денис Юрьев

          в смысле ядро прошивки DD-WRT может не знать вашу таблицу разделов.
          В принципе их основных два типа — GPT и MBR.
          есть еще наработка btrfs, но в её сторону в случае с ddwrt даже смотреть не стоит

          • «при равных условиях и порядке действий» — т.е. и на флешке и на hdd абсолютно одинаковая таблица разделов, за исключением того, что на hdd третий раздел много больше :) И флешку и hdd разбивал на одном и том же компе, в одной и той же программе по одному и тому же принципу …
            1) Swap — 32Мб, swap
            2) Apps — 1024 Mb, ext3
            3) Data — все остальное, ext3

          • Очень похоже на то, что питания все же не хватает :( (5V 0.45A).

          • Денис Юрьев Денис Юрьев

            найдите кабель где-нить на барахолке для жесткого внешнего диска с двумя разъемами USB A «папа».
            Простым языком — с доп.разъемом для питания. и попробуйте запитать извне.
            Как вариант — найти похожий блок питания более мощный, но не намного, чтоб маршрутизатор не спалить.

            PS — у меня жесткий диск на 5V 0.55A нормально работает с DIR-320 rev.A без доп.питания

        • Денис Юрьев Денис Юрьев

          еще, возможно, стоит проверить типы разделов — они все должны быть первичными (основными), а не расширенными (логическими)

        • Денис Юрьев Денис Юрьев

          а монтируется первый раздел?

          • p1 — это swap, соответственно и нет. Так как swapon я не поставил, из-за того что некуда его ставить …

          • Денис Юрьев Денис Юрьев

            попробуйте свап в конец разделов разместить. форматируете через Windows?

          • Денис Юрьев Денис Юрьев

            ну я сейчас на удивление Windows использую, полностью от него не избавиться.
            по теме — с таким парадоксом впервые сталкиваюсь. да и вообще уже перешел на openwrt, так хоть самому можно собрать и знать точно в чем причина несчастей

          • У меня нет Windows :) Попробую сейчас все разделы снести, создать один раздел ext3 и подключить его …

          • Прошу прощения, забыл где пишу :) У меня на всех машинках linux …

  7. Привет ребята! хелп!
    при скачивании скрипта он пустой….
    и при разбивки накопителя пишет Attached scsi removable disk sda at scsi0, channel 0, id 0, lun 0
    /dev/scsi/host0/bus0/target0/lun0: p1 p2
    что такое
    после редактирования optware.sh пишет
    /tmp/optware-install.sh: line 94: /opt/sbin/ldconfig: not found
    /tmp/optware-install.sh: line 95: /opt/bin/ipkg: not found
    /tmp/optware-install.sh: line 96: /opt/bin/ipkg: not found
    /tmp/optware-install.sh: line 97: /opt/bin/ipkg: not found
    помогите словом…

  8. Сергей

    У меня такой вопрос, USB диск подключен к роутеру, по FTP я могу только закачать или скачать. Как я могу удалённо смотреть фильмы и т.д с диска, не скачивая их, то есть онлайн?

  9. Ильдар

    сделал разделы, ввожу команду dmesg… в ответ тишина. На команду dmesg | grep scsi выдает [ 4.400000] scsi0 : usb-storage 1-1:1.0
    [ 5.660000] scsi 0:0:0:0: Direct-Access Seagate FreeAgent GoFlex 211
    PQ: 0 ANSI: 0
    т.е. я понимаю что он видит жесткий seagate но не видит сами разделы? Хотя один раз все получилось сделать, а потом перестало работать.

  10. ух! смонтировал. а как дальше взаимодействовать с разделом? по фтп заходить или ещё как хитро?

  11. Большое спасибо за статью. Уже не первые сутки разбирался почему вручную не монтируется флэшка. Ваша статья очень выручила.
    Оказалось нужно было подгрузить модуль jbd.o :)

Добавить комментарий

Войти с помощью: