Pull to refresh

Debian на Iomega StoreCenter Ix2-200 или делаем полноценный сервачок из сетевого диска

Reading time 6 min
Views 22K


Возникла как-то на работе потребность организовать в сети хранилище для документации всякой разной. Требования: надежность, небольшой размер, объем в несколько террабайт. Мой выбор остановился на сетевом хранилище (Network Attached Storage) Iomega StoreCenter Ix2-200. В процессе исследования рынка выяснилось, что на этом устройстве используется урезанный вариант Debian Lenny, и есть возможность установить полноценный Debian Squeeze. Тем самым получить все возможности, предоставляемые данной ОС.

Итак, устройство было закуплено, я обложился документацией, найденной в интернет и приступил к установке ОС Debian Squeeze для архитектуры armel. К сожалению, доступная документация оказалась на английском, не полной и не точной, в общем был простор для размышлений. К тому же для первоначальной загрузки и переустановки ОС потребовался достаточно специфичный кабель RS-232.

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



Про кабель


Для установки нам понадобится интерфейсный кабель, работающий по протоколу rs-232 с обыкновенным DB9 с одной стороны и необыкновенным (не знаю есть ли у него свое название) разъемом с другой. Сам я путаюсь с какой стороны к паяльнику подходят, так что обратился к коллегам, которые спаяли мне вот такое вот:
UPD от 19.01.2012: Как мне подсказали, разъем с другого конца (не DB9) называется BLS-04. Некоторые технические подробности про кабель тут.


Распиновка:

Пин 1 	 VCC (3.3V) 
Пин 2 	 TxD 
Пин 3 	 GND 
Пин 4 	 RxD 

Пин 1 подписан "JP1"


Вместо этого в оригинальной инструкции рекомендуют использовать кабель TTL-232-R-3V3-AJ. Он лучше моего тем, что на стороне компа включается в USB, и на него не фонит все вокруг (у меня, когда плата касалась корпуса компа, шли шикарные помехи), но хуже тем, что малой кровью в Москве купить его я не смог.
Поэтому и сделали свой.

UPD от 19.01.2012: Другие варианты интерфейсного кабеля написаны в комментах, за что их авторам большое спасибо.

Характеристики Iomega Storcenter ix2-200


Параметры железа:

CPU				1.0 GHz Marvell Kirkwood 88F6281 
RAM				256 MB Zentel/Hynix 
Flash ROM		  32 MB Hynix 
Сеть	           Gigabit Marvell Alaska 88E81116R 
USB				3x USB 2.0 порта
Внутренние HDD	Два SATA-II диска
Емкость HDD		Поставляется с вариантами суммарного объема 1/2/4 TB


Параметры последовательного соединения:
  • cкорость: 115200 бод
  • четность (parity): нет (none)
  • управление потоком (flow control): xon/xoff
  • 8 битов данных (data bits)
  • 1 стоповый бит (stop bit)

Про установочные файлы


Файлы (uImage — ядро и uInitrd — initrd.img) для загрузки установщика NAS может брать с разделов на одном из жестких дисков, установленных внутри, с флешки или по сети с tftp сервера. Я выбрал последний вариант и использовал tftpd32 (там же есть и 64-битная версия tftpd64) под рабочей виндой и net-ftp/tftp-hpa под домашней гентой.

Скачиваем пресловутые файлы отсюда и кидаем в директорию, из которой раздает tftp-сервер.

Запускаем терминал (putty, hyperterminal и т.п.) в режиме прослушивания соответствующего порта (в моем случае это был COM1), выставив правильно параметры последовательного соединения (см. выше).

Подключаем NAS:
  1. к компьютеру с tftp-сервером по сети
  2. к компьютеру, с которого будем управлять установкой через rs-232 кабель (может совпадать с п.1)
  3. к электричеству

Если все пошло хорошо, то видим в терминале следующую картину:


Останавливаем автозагрузку в нужный момент, нажав любую клавишу и переходим к следующему этапу.

Загрузка установщика


Вводим следующие комманды:
setenv mainlineLinux yes
setenv arcNumber 1682
saveenv
reset

Тем самым мы выставляем конфигурационные параметры так, чтоб NAS грузился с нужного нам ядра и перезапускаем устройство.

Грузим ядро установщика:
Для TFTP:
setenv serverip 192.168.1.2
setenv ipaddr 192.168.1.147
tftpboot 0x01100000 uInitrd
tftpboot 0x00800000 uImage

192.168.1.2 — адрес tftp сервера, 192.168.1.147 — адрес, присвоенный NAS.

Для флешки (только FAT):
usb start
fatload usb 0:1 0x01100000 /uInitrd
fatload usb 0:1 0x00800000 /uImage


Установка Debian


Подробно описывать стандратный установщик Debian я не буду, так как это много где сделано до меня. Например в официальном руководстве. Остановлюсь лишь на следующих тонких моментах по порядку возникновения во время установки.

Разбиение дисков

У меня сейчас сделано так: каждый из двух двухтеррабайтных жестких дисков разбит на два раздела: 230 мегабайт и все остальное. 230-мегабайтные разделы на первом и втором диске используются под /boot и корневой раздел соответственно. Как показывает вывод df -hT ниже — размер в 200 мегабайт весьма избыточен.
Вторые разделы на каждом из дисков объединены в программный рейд 1 (зеркалирующий) и на нем создан LVM.

df -hT:
Ф. система    Тип     Разм  Исп  Дост  Исп% смонтирована на
/dev/sda1     ext2    223M   18M  194M   9% /boot
/dev/sdb1     ext4    230M   79M  140M  36% /
/dev/mapper/vg-home
              ext4    1,8T  267G  1,6T  15% /home
/dev/mapper/vg-opt
              ext4    938M   18M  873M   2% /opt
/dev/mapper/vg-tmp
              ext2    893M   17K  845M   1% /tmp
/dev/mapper/vg-usr
              ext4    4,6G  782M  3,6G  18% /usr
/dev/mapper/vg-var
              ext4     19G  802M   17G   5% /var

Еще есть /dev/mapper/vg-swap на 512MB (удвоенное количество оперативы).

Разбивал на разделы я глубокой ночью, с трудом приходя в себя после ночи с 31 декабря на 3 января, поэтому получилось, очевидно, далеко от идеала. Но переделывать откровенно было лень. Сейчас, уже подумав, я бы сделал так:

1) Корень и /boot НЕ могут быть на рейде и\или lvm, поэтому они создаются как обыкновенные разделы на жестких дисках. При этом, так как все остальное будет на рейдах — корневой и /boot разделы должны лежать на разных дисках и быть равного размера. 150 мегабайт должно хватить под корень и особенно под /boot. Хоть /boot и скорее всего может быть с ext[3-4], но смысла в журналируемости нет никакой, так как писаться данные туда будут только при обновлении ядра.
Я не уверен, что это обязательно, но лучше /boot сделать на sda1.
2) /tmp и своп не надо делать на рейд 1. Под них стоит создать рейд 0, на нем свою volume group и на ней уже /tmp и своп разделами на гигабайт и 512 мегабайт соответственно.
3) Остальное свободное место на обоих винтах отдаем под рейд 1, создаем на нем lvm, и разбивая разделы так, как Вам удобнее.

Хочу заметить, что предложенная схема разбиения на разделы ориентирована на сетевое хранилище, предназначенное для бэкапов, т.е. основное требование надежность. Если Вы планируете хранить фильмы\музыку, т.е. то, что легко выкачивается из интернет, основной раздел (у меня это /home, но вполне может быть и /var, например) должен лежать на рейд 0.

Преобразование ядра


К сожалению, загрузчик в данном устройстве не умеет использовать стандартные vmlinuz-2.6.32-5-kirkwood и initrd.img-2.6.32-5-kirkwood, а инсталятор Debian ничего не знает про наше устройство и не прошивает ядро туда, куда надо. Поэтому нам самим надо сконвертировать его в нужный формат и скормить загрузчику.

Делается это следующими двумя командами (в /boot):
mkimage -A arm -O linux -T kernel -C none -a 0x00008000 -e 0x00008000 -n "Debian kernel" -d  vmlinuz-2.6.32-5-kirkwood uImage
mkimage -A arm -O linux -T ramdisk -C gzip -a 0x0 -e 0x0 -n "Debian InitRD" -d initrd.img-2.6.32-5-kirkwood uInitrd


К сожалению, я не помню ставится ли mkimage по умолчанию, если нет, то его можно поставить из пакета uboot-mkimage.
Исполняется это либо в конце установки, либо после, перезагрузившись в rescue mode, введя при старте вместо
setenv bootargs console=ttyS0,115200n8 base-installer/initramfs-tools/driver-policy=most
это
setenv bootargs console=ttyS0,115200n8 rescue/enable=true


Автоматическая загрузка


После установки системы, чтоб наш NASсервачок грузился так, как надо, прописываем следующие параметры при старте:
setenv bootargs_console console=ttyS0,115200 root=/dev/sdb1
setenv bootcmd_sata 'ide reset; ext2load ide 0:1 0x01100000 /uInitrd; ext2load ide 0:1 0x00800000 /uImage'
setenv bootcmd 'setenv bootargs $(bootargs_console); run bootcmd_sata; bootm 0x00800000 0x01100000'
saveenv


И, наконец-то, грузимся в нашу полноценную систему, перезагрузившись, или дав команду:
run bootcmd


Примечания


Невредная ошибка

В логах ядра во время загрузки будет появляться подобное сообщение об ошибке:
kernel: [    6.327359] uncorrectable error :
kernel: [   96.499883] uncorrectable error :
kernel: [   96.503342] end_request: I/O error, dev mtdblock0, sector 8


Это совершенно нормально, как выяснилось из глубокого гугленья. Связано, как я понял, с некоторыми проблемами в загрузчике uboot, а может и нет. Главное, что все прекрасно работает с этой ошибкой. Вот если бы ошибка была про mtdblock1, тогда было бы плохо.

Мониторинг железа

Очень хотелось бы мониторить температуру устройства, тем более оно ее пишет при загрузке, но sensors-detect на определенном этапе вешает систему наглухо. Спасает только отключение и включение питания. В логах при этом тихо. Работает только smartmontools, позволяющие увидеть температуру жестких дисков.

Использованные материалы


nas-central wiki:
Ix2-200
Ix2-200 Debian Installation

Installing Debian on OpenRD от сyrius
Tags:
Hubs:
+32
Comments 30
Comments Comments 30

Articles