
Возникла как-то на работе потребность организовать в сети хранилище для документации всякой разной. Требования: надежность, небольшой размер, объем в несколько террабайт. Мой выбор остановился на сетевом хранилище (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:
- к компьютеру с tftp-сервером по сети
- к компьютеру, с которого будем управлять установкой через rs-232 кабель (может совпадать с п.1)
- к электричеству
Если все пошло хорошо, то видим в терминале следующую картину:

Останавливаем автозагрузку в нужный момент, нажав любую клавишу и переходим к следующему этапу.
Загрузка установщика
Вводим следующие комманды:
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
Автоматическая загрузка
После установки системы, чтоб наш
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
