NAS з роутера d-link DIR-320

d-link dir-320 front

Роутер d-link dir-320

Довший час роль домашнього сервера, з часом виключно файлового сервера виконував старенький ПК. Підключався по RDP і samba, через безпровідний інтерфейс, керувала ним не менш старенька Windows XP MCE. Все би добре, але ПК шумний, енергії витрачає більше і старіє, припадає пилюкою. Тим більше незручно возити велику бандуру, щоби скинути фотки.
Не так давно придбав на аукціоні роутер d-link DIR-320: з’явився безлім інтернет, а на зоопарк ноутбуків кабель незручно.

Роутер вибирав, керуючись прочитаною колись інформацією про можливість змінити прошивку на одну з багатьох (dd-wrt,openwrt,wl-hdd та інших). Проробив апарат на дефолтній прошивці справно з півтора місяця, і потім просто руки зачесались щось змінити.

Спочатку стягнув в лабіринті офіційного сайту www.dd-wrt.com одну з однойменних прошивок. Там же з’ясувалось, що dir-320 має в своєму серці процесор архітектури MIPS виробництва Broadcom і частотою 240 МГц. ROM складає 4 Мб, а оперативної пам’яті 32 Мб на чіпі DDR SDRAM. Прошив методою через TFTP з деякими відмінностями – TFTP для прошивки стартує в цій моделі роутера лише після перезавантаження після аварійного режиму. В аварійний режим можна ввійти, затиснувши мікрік “reset” і тримаючи його протягом 15 секунд після увімкнення роутера. Аварійний режим відрізняється від робочого тим, що пінги до роутера повертаються з TTL=100

64 bytes from 192.168.0.1: icmp_req=2 ttl=100 time=0.102 ms

замість 64 в робочому режимі:

64 bytes from 192.168.0.1: icmp_req=2 ttl=64 time=0.838 ms

Загальна інформація лежить на вікі dd-wrt, але там все надто незручно (для мене) подано. Вже не пам’ятаю на якому англомовному блозі чи вікі вичитав для лінукса мега спосіб прошивки:

  • заходимо в каталог з файлом прошивки;
  • запускаємо tftp;
  • вводимо директиви binary – передача двійкових файлів;
  • rexmt 1 – повтор передачі щосекунди;
  • verbose – щоби бути в курсі;
  • connect 192.168.0.1  – з’єднуємось;
  • put f.bin – де f.bin ім’я файлу з прошивкою, коротке, щоби наступні рази набирати легше.

лише так і вдалось змінити моск роутера, і за адресою 192.168.1.1 чекав вже інтерфейс dd-wrt.

Прошивка цікава, налаштував роутер, порадів, скільки менюшок і функцій, круто.

Колись на хабрі прочитав статтю, як умілець вмонтував в роутер ASUS WL-500 жорсткий диск і роздавав торенти. На жаль, щось зараз тої статті знайти не можу, але не в тому суть. Подумалось, а чому би й собі таке не зробити, тим більше що dir-320 має ту ж начинку, що і wl-500, лише ROM 4 Мб замість восьми.

Інтерфейс прошивки

Інтерфейс прошивки

Погугливши, знайшов варіант альтпрошивки від oleg, широко відомого в вузьких колах чоловіка. Суть така, що це твікнута прошивка від wl-500 для wl-500 :) та подібних йому. Скачати можна тут. Я знайшов версію WL320gP-1.9.2.7-d-r2624, залив її через опцію оновлення прошивки dd-wrt, tftp мучити вже не довелось, і за кілька хвилин вивчав нові можливості.

Адмінка не така наворочена, але все необхідне є, тим більше в пункті меню System&Log знайшов вивід системних утиліт Linux, а також ssh- та telnet-доступ. Вже цікавіше. Користувач root в системі був, дефолтний пароль змінив на складніший, і вуаля:

[majesty][~]$ ssh root@majesty.srv
root@majesty.srv's password:
[root@majesty root]$ uname -a
Linux majesty.srv 2.4.37.11 #18 2011-02-19 19:42:06 MSK mips GNU/Linux

Досліди та гугління показали, що не така страшна прошивка, як уявлялось, насправді це звичайнісінький Linux 2.4 з оболонкою busybox (статично та монолітно скомпілене мінімальне системне оточення). Корінь системи береться за ROM і монтується як squashfs, тимчасові файли беруться з /tmp, змонтованого з рамдиска і біндяться в відповідні точки. Також існує така цікава штука як flashfs – у вільне місце ROM можна зберегти кастом скрипти ініціалізації і файли з системи, які біндяться поверх дефолтних. Існує пакетний менеджер ipkg, репозиторії пакетів для таких систем, в яких є багацько корисного. Встановлювати пакети можна в розділ /opt, який, в свою чергу, є можливість монтувати з розділу usbfs, там же можна створити swap-розділ і активувати його.

Першим ділом встромив в usb порт флешку, створив на ній розділ і почав експерименти. Перш за все, система монтує лише ext3 розділи. Або fat (не для системного, звісно). Або ж ntfs, але при наявності пакета ntfs-3g з репозиторія. Ext2 не годиться. Тому при створенні нового розділу

mke2fs -j /dev/discs/disc0/part1

не забути журнал. /dev/discs/disc0/part1 – це автоматичний сімлінк на /dev/scsi/host0/bus0/target0/lun0/part1 для зручності. Для існуючих розділів ext2 необхідно додати журнал, але це після встановлення відповідного пакету e2fstools:

tune2fs -j -m1 /dev/discs/disc0/part1

додаємо журнал, ну і резервуємо 1% об’єму для службових потреб. Монтуємо розділ:

mount /dev/discs/disc0/part1 /opt

Після успішного монтування можемо встановлювати пакети. Першим ділом додамо репозиторій в стартовий пакетний скрипт ipkg.sh (busybox не може запускати сторонні бінарники, необхідні динамічні бібліотеки, тому такий проміжний етап). Правимо файл /etc/ipkg.conf:

src oleg http://ipkg.nslu2-linux.org/feeds/optware/oleg/cross/unstable/
dest root /

можна і stable вітку, це як хто вже хоче. По дефолту в цьому файлі записаний некоректний репозиторій.

[root@majesty root]$ ipkg.sh update
Downloading http://ipkg.nslu2-linux.org/feeds/optware/oleg/cross/unstable//Packages ...
Connecting to ipkg.nslu2-linux.org (140.211.169.161:80)
Packages             100% |******************************************************************************|   478k 00:00:00 ETA
Done.
Updated list of available packages in /opt/lib/ipkg/lists/oleg

Ставимо більш наворочений пакет ipkg-opt, він же ipkg. З собою потягне по залежності також бібліотеки uclibc-opt.

mc

mc

ipkg.sh install ipkg-opt

Тепер по бажанню:

ipkg install e2fstools mc

, наприклад. Тепер є можливість легко і невимушено допилювати все для головної мети – інсталяції жорсткого диска.

Для цієї мети був придбаний 750 Гб 2.5 хард WD7500BPVT. Зрештою, мабуть, можна ще економічніший було вибрати, так як були сумніви на рахунок споживання енергії від БЖ роутера.

Під WinXP, яка стояла на старому сервері знайшов в мережі драйвер читання-запису ext2/3, і цілком успішно переніс туди всю інформацію. На жаль, в FAT32 740-гігабайтний розділ створити не вийшло, але не жалкую, що на ext3 будуть.

Western Digtial Scorpio Blue 750GB

Western Digtial Scorpio Blue 750GB

Також придбав на аукціоні перехідник usb-sata-ide дешевенький, продавець заявляв, що pata працює з глюками, а sata нормально.

usb-sata перехідник

usb-sata перехідник

Щодо живлення, то надпис на корпусі вінта свідчив про споживання 0,55 А струму при напрузі 5В. Це полегшило завдання, адже стандарт sata передбачає напруги живлення 3.3 В, 5 В та 12 В. Невибагливий виявився накопичувач.

Також була спроба не просто зайняти єдиний usb-порт в маршрутизаторі, а зробити всередині usb-хаб, що дозволило би в майбутньому до зовнішнього порта підключити принтер чи 3g модем. Та виникли підозри, що енергії контролеру перехідника не вистачає, тому такі експерименти було залишено до кращих часів.

Для препарування були відшукані перехідник molex-SATA

Molex-SATA

Molex-SATA

Та звичайний SATA-конектор

кабель SATA

кабель SATA

Потрібно було відклеїти дві задні ніжки роутера, під якими містились шурупи. Так був отриманий доступ до внутрішніх органів

розкручувати тут

розкручувати тут

Над цим творінням інженерної думки доведеться познущатись:

системна плата роутера

системна плата роутера

Деякі інструменти вже розкладені перед операцією:

майже все готово

майже все готово

Така система-ніппель була зібрана для тестування першого варіанту:

перші проби

перші проби

usb-хаб себе не виправдав як вселенське джерело живлення :) що і не дивно, тому спочатку пробував живити вінчестер з точки перед запобіжником usb-порта, а потім і безпосередньо від блока живлення 5В.

пробуєм живити вінт від usb-порта

пробуєм живити вінт від usb-порта

Виникла проблема з файловими системами розділів вінчестера – справа в тому, що контролер перехідника витрачає на ініціалізацію біля 10 секунд, і тому автоматом не монтувався стартовим скриптом. Я думав, що то скрипт не працює, і задав автомонтування в файлі fstab. Це спричинило те, що при неготовому контролері лінукс почав смикати вінчестер, писати туди щось і запускати самбу для шарингу розділів, потім контролер блокувався, монтування відмінялось, самба писала в логи, що якась біда.

робочі досліди

робочі досліди

Та що найбільш неприємне – дуже псувались файлові системи. Розділ з даними став схожий на інопланетне решето, яке розпізнавалось як якась екзотична і порожня ФС. А якраз перед цим, переконавшись що все працює, залив туди свою інфу, щоб потестувати, а старі вінти форматнув (йолоп я). Ох нанервувався тоді, вставляв в ноутбук накопичувач, вантажився з livecd убунти, читав резервні суперблоки програмою testdisk і з них відновлював структуру ФС. Більше так робити не буду, але досвід повчальний. Так виникла ідея в стартовому скрипті задавати затримку перед монтуванням і перевірку розділу.

В каталозі /usr/local лежать файли, які можна зберегти в flashfs, це стартові скрипти в sbin, а в текстовику .files – перелік файлів, які треба зберегти в flashfs і потім забідити.

Ось такий вийшов стартовий скрипт /usr/local/sbin/post-boot:

#!/bin/sh
 
#wait for controller initialization
sleep 16
 
#if along this time runs automount then unmount partition
umount /tmp/mnt/disc0_1
 
#check unmounted partition
e2fsck -p -y /dev/discs/disc0/part1
 
#mounting
mount /dev/discs/disc0/part1 /opt
 
#waiting for mount otherwise wait
i=0
while [ $i -le 30 ]
do
if [ -d /opt/etc ]
then
break
fi
sleep 1
i=`expr $i + 1`
done
 
#if volume was mount lately,
#link libraries for successful starting custom applications
ldconfig
 
#if a time ago automount not work, unmount now
umount /tmp/mnt/disc0_1

Ліричний відступ: дай Господи здоров’я розробникам ext3 і їхнім родинам, наскільки хорошу придумали систему. Там і довільний розмір розділу, і довільний розмір блоку, і кодування імен utf8, і журналювання, і резерв місця для уникнення дефрагментації і домашнього каталогу рута, і резервні суперблоки! Останніх на розділі було біля 12, з них все відновилось, ніби нічого не ставалось.

Тепер настав час препарувати кабелі і припаювати до материнки. Звісно, нічого не запрацювало :). Спочатку подумав, що не тим боком встановив SATA конектор – змінив порядок проводів. Не допомогло. Вже подумки почав прощатись із контролером. Потім виявив, що в USB проводах переплутав місцями D- і D+, пофіксив. Опа, вінт вже детектиться, але… як один суцільний розділ, без файлової системи і недоступний. Перевірив, все на місці, нічого не зрушилось. Тоді догнав, що SATA якраз добре був приєднаний, і повернув все назад.

робоча конфігурація

робоча конфігурація

В результаті з’єднання набули (майже) наступного вигляду:

з'єднання

з'єднання

Щоправда, потім більш надійно розпаяв силову землю, а екранував ділянку SATA-кабеля звичайною фольгою від шоколадки.

В корпусі виглядає більш достойно. Хард потім перевернув в звичне положення, на всякий випадок:

компонування

компонування

І ось він: красунчик

успіх

успіх

Маю тепер портативний економний сервачок, хард шариться по Samba (хоча, можна і по FTP). Вбудована Samba цілком влаштовує, хоча можна з репозиторіїв покласти більш актуальну версію. Швидкість передачі не перевищує 3 Мб/сек. Мало, але достатньо в цілому, все впирається в швидкодію процесора.

Багато допускав помилок при роботі, всього два вихідних дні пішло на такий моддинг. Дається взнаки підзабуття навиків. Окремо виділив свої проїзди, щоби була наука.

В планах змінити блок живлення на потужніший, і все-таки додати хаб, щоб залишити зовнішній usb для принтера чи модема чи ще чогось. Читав про можливість перепаяти чіп оперативної пам’яті на більшої ємності – ну це вже після випрямлення рук хіба… Цілком можна підняти локальний веб-сервер на роутері – колупати сайти, в репозиторіях є все необхідне. Якщо вбити вбудований httpd, то звільняється до 15 Мб оперативки.

This entry was posted in Hardware. Bookmark the permalink. Post a comment or leave a trackback: Trackback URL.

4 Comments

  1. Posted 05.07.2011 at 21:16 | Permalink

    Хороша і повчально розповідь, читається на одному диханні =)
    Єдине, що не радує, швидкість передачі даних.. 3 Мб/сек це дуже мало, у мене зараз атомний сервачок, й коли треба багато даних поперекидати, підключаю без свіча, так працює гігабітний лінк, ібо навіть 10 Мб/сек то не є багато..

    • Posted 06.07.2011 at 12:13 | Permalink

      В мене специфіка інша, активна робота з даними проводиться з локального накопичувача, цей сторедж лише як архівний, ну і музику з нього і фільми подивитись теж швидкості вистачає.

  2. Posted 06.07.2011 at 01:20 | Permalink

    Чудово. Дуже приємний результат =)

    Але, товаришу Всесильний, як із охолодженням накопичувача?

    • Posted 06.07.2011 at 12:08 | Permalink

      Теж переймався цим питанням, але практика показала, що вінт ледь теплий на дотик, ну і ще контролер харда при відсутності активності присипляє його.

Post a Comment

You must be logged in to post a comment.