Довший час роль домашнього сервера, з часом виключно файлового сервера виконував старенький ПК. Підключався по 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.
ipkg.sh install ipkg-opt |
Тепер по бажанню:
ipkg install e2fstools mc |
, наприклад. Тепер є можливість легко і невимушено допилювати все для головної мети – інсталяції жорсткого диска.
Для цієї мети був придбаний 750 Гб 2.5 хард WD7500BPVT. Зрештою, мабуть, можна ще економічніший було вибрати, так як були сумніви на рахунок споживання енергії від БЖ роутера.
Під WinXP, яка стояла на старому сервері знайшов в мережі драйвер читання-запису ext2/3, і цілком успішно переніс туди всю інформацію. На жаль, в FAT32 740-гігабайтний розділ створити не вийшло, але не жалкую, що на ext3 будуть.
Також придбав на аукціоні перехідник usb-sata-ide дешевенький, продавець заявляв, що pata працює з глюками, а sata нормально.
Щодо живлення, то надпис на корпусі вінта свідчив про споживання 0,55 А струму при напрузі 5В. Це полегшило завдання, адже стандарт sata передбачає напруги живлення 3.3 В, 5 В та 12 В. Невибагливий виявився накопичувач.
Також була спроба не просто зайняти єдиний usb-порт в маршрутизаторі, а зробити всередині usb-хаб, що дозволило би в майбутньому до зовнішнього порта підключити принтер чи 3g модем. Та виникли підозри, що енергії контролеру перехідника не вистачає, тому такі експерименти було залишено до кращих часів.
Для препарування були відшукані перехідник molex-SATA
Та звичайний SATA-конектор
Потрібно було відклеїти дві задні ніжки роутера, під якими містились шурупи. Так був отриманий доступ до внутрішніх органів
Над цим творінням інженерної думки доведеться познущатись:
Деякі інструменти вже розкладені перед операцією:
Така система-ніппель була зібрана для тестування першого варіанту:
usb-хаб себе не виправдав як вселенське джерело живлення що і не дивно, тому спочатку пробував живити вінчестер з точки перед запобіжником usb-порта, а потім і безпосередньо від блока живлення 5В.
Виникла проблема з файловими системами розділів вінчестера – справа в тому, що контролер перехідника витрачає на ініціалізацію біля 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 Мб оперативки.
4 Comments
Хороша і повчально розповідь, читається на одному диханні =)
Єдине, що не радує, швидкість передачі даних.. 3 Мб/сек це дуже мало, у мене зараз атомний сервачок, й коли треба багато даних поперекидати, підключаю без свіча, так працює гігабітний лінк, ібо навіть 10 Мб/сек то не є багато..
В мене специфіка інша, активна робота з даними проводиться з локального накопичувача, цей сторедж лише як архівний, ну і музику з нього і фільми подивитись теж швидкості вистачає.
Чудово. Дуже приємний результат =)
Але, товаришу Всесильний, як із охолодженням накопичувача?
Теж переймався цим питанням, але практика показала, що вінт ледь теплий на дотик, ну і ще контролер харда при відсутності активності присипляє його.