kettle — одомашенный терабайт

17.03.2007 19:52:49

Давно не покупал компы, не крутил отверткой всякое, в общем, соскучился. 😉 А тут повод какой, решил собрать наконец-то себе RAID-сервер домой, дабы, во-первых, не терять ничего при смерти винчестеров, а, во-вторых, легко добавлять винчестеры в промышленных, так сказать, масштабах.

Помимо этого, машинка должна взять на себя роль маршрутизатора из домашней сети «наружу» (хватит уже эксплуатировать Настин компьютер :)), а также быть просто большой и быстрой машинкой, чтобы делать с ней всякое, гонять эмуляторы/компиляторы и прочий приятный и нужный вздор. 🙂

Соответственно, набрал железа (в этот раз одним заходом в чудо-склад Ultra, где провёл часа три…):

  • Pentium D 915
  • MSI 945G Neo2-F
  • 2 раза по 1 ГБ памяти DDR2 от Corsair
  • 3 винчестера Hitachi на 400 Гб
  • Корпус Enermax Pandora ECA3070-B
  • Блок питания FSP Blue Storm на 400W
  • Радиаторы на память Revoltec

Ну, плюс, конечно, мелочёвка в виде вентиляторов и кабелей SATA, а также отдельный ИБП-шник Ippon.

Когда выбирал, подумал, что надо бы уже прописать домой двухядерник, иначе совсем несолидно, от того плясать и понеслась. Впервые за долгое время сознательно купил систему на базе Intel-овского процессора. Ранее все приобретения/рекомендации касались исключительно AMD. До жизни такой дошёл по нескольким параметрам, во-первых, двухъядерники от AMD почему-то неоправданно дороги для своих мощностей, во-вторых, для AMD нелегко найти приличные чипсеты со встроенной графикой, особенно если это не ATI/nVidia, от которых бежать, бежать, бежать. А тут всё Интель сделал, сынтегрировал, да ещё и не так дорого. Вот так и решил.

Подумалось: пока Intel лепила архитектуру, а AMD её реализовывала, стоило брать AMD, когда AMD начала лепить архитектуру, а Intel её реализовывать, пришла пора брать Intel. 🙂

Процессор, кстати, купил в коробочке. Разница в цене между OEM и коробкой у Intel значительно меньше, чем у AMD, поэтому покупать кулер отдельно без особой необходимости смысла вроде как и нет. Коробка порадовала, пакует Intel свои процессоры очень жёстко, порвать её надо хорошо, чтобы до процессора добраться.

По материнке. Меня достали недомерки формата mini-ATX. Хорошие материнки, не спорю, но какого чёрта на чипсетах со встроенной графикой их 99% процентов? Отыскал одну-единственную полноформатную (на чипсете 965G, правда, есть ещё, но там и материнки почему-то в полтора раза дороже и за память придётся доплатить тоже неслабо), её и нахватил.

По винчестерам. Hitachi. Бывший IBM. Раз уж решил собирать нетипичную для себя систему, то пошёл вразнос, вместо привычных Seagate натарил Hitachi. Посмотрим на них в деле. Кстати, винты Hitachi обладают одним приятным свойством: помимо ужасных разъёмов питания SATA, они поддерживают и обычные Molex-ы.

Вообще, изначально у меня была идея натарить пять винтов по 250 Гб и дополнительный SATA контроллер, но свежий их подвоз так быстро разгребли, что я просто-напросто не успел их купить! А по цене за мегабайт сейчас лучше всех как раз модели на 250 и 320 Гб. Но, потом у меня появился более интересный план, о котором дальше. Он уже потребовал трёх винчестеров по 400 Гб, заодно контроллера дополнительного не надо, да и свободный разъём ещё остался на расширение.

По ходу сборки выяснилось, что корпус своих денег никак не стоит. Не особенно расстроился, но хотелось что-то поближе к уровню корпуса lapsang, Cooler Master Cavalier. Конечно, у них и разница по ценнику раза в полтора, если не больше, но всё-таки… Вот несколько фоток для сравнения.

После сборки, первым делом, принялся всё это дело тестировать. Кстати, большой зачёт создателям RIP и Finnix. Надо признать, я очень люблю маленькие живые дистрибутивы, которые помещаются на мини-CD. Теперь я их люблю вдвойне, поскольку они помещаются на маленькие флэшки. 🙂 Выковыривать привод CD из lapsang не хотелось, поэтому грузил эти дистрибутивы с флэшки, очень даже отлично всё работает. RIP отдельный зачёт за простой скрипт для создания загрузочной флэшки, а Finnix просто большой зачёт, на мой вкус, лучший восстановительно-тестировочный-хакерский мини-дистрибутив на сегодня.

Оттестировал на славу — 9 часов memtest-а, 7 часов параллельных burnP6, burnBX и burnMMX. Всё прошло нормально, на тестах процессора раскочегарил Pentium D до 52 градусов, в состоянии простоя температура держится в районе 27 градусов.

Начал думать об установке ОС. 🙂 Признаться, я много ходил и облизывался вокруг ZFS и RAID-Z в Solaris. Даже хотел поставить. Но… В конце концов всё решило шифрование. Во всяком случае, это стало окончательным поводом. 🙂 Шифрования разделов/файлов в Solaris нет. А мне его хочется. Стало быть, остался вариант один — что-то из GNU/Linux.

За установку Solaris был ещё один момент, конечно, ибо мне по статусу просто положено держать дома зоопарк разных ОС. 🙂 В некоторой степени, я и стараюсь это делать, дабы разнообразить бытие, но всё-таки с Solaris пока не судьба, поскольку помимо шифрования, оно не так хорошо совместимо с разным свободным софтом (а я не знаю, что мне может в голову взбрести завтра опробовать), да и опыта общения с Solaris у меня очень мало, так что по сумме всего отказался.

Ну а что выбрать из GNU/Linux? Для сервера нужен какой-нибудь надёжный, стабильный дистрибутив, тут много экспериментировать нельзя. Значит, Debian. 🙂 Но я не стал ставить уже порядком устаревший Sarge, а пошёл сразу за пре-релизом Etch. Образы инсталлятора регулярно компилируются, можно брать и ставить, пакеты утягиваются из сети. Вот тебе и Etch сегодня. 🙂

По инсталляции, не обошлось без некоторых мелочей, но в целом обалденно порадовало. Загрузил инсталлятор, кстати, с той же флэшки, на сайте Debian есть руководство на эту тему, заодно добавил параметр «console=ttyS0,115200n8» ядру и получил, наконец-то, консоль через последовательный порт, вернул монитор/клавиатуру на место (к lapsang).

Прям в инсталляторе можно сконфигурировать комбинацию из RAID5 на три диска, на которой разместить физический раздел LVM, в котором создать два логических, для / и для шифрованного раздела хранения данных, причём шифрование добавляется тут же в инсталляторе! Шифрование, правда, только либо со случайным ключём (для swap) или с паролем, с ключём-файлом не зашифроваться, ну да это уже можно и после установки наладить, благо LUKS. 🙂

Ещё одна закавыка, конечно, была с загрузкой, поскольку загрузить систему с рутовым разделом на софтовом RAID5 представляется невозможным, я вынес /boot на USB флэшку. Инсталлятор честно поставил туда GRUB, но загрузиться с этой флэшки не удалось, поскольку на момент установки это был раздел «(hd4,0)», а в момент загрузки GRUB думает, что это «(hd0,0)». Это поправил на другой машинке, после чего всё радостно загрузилось и я получил в распоряжение RAID-массив на 700 с лишним гигабайт. 🙂

Назвал машину в продолжение чайной темы, но на этот раз не сортом, а инструментом, так сказать.

Инсталлятор ещё порадовал тем, что поставил автоматически запуск getty на ttyS0, то есть ту самую консоль на последовательном порту, в установленной системе. Так что, монитор подключать больше и не пришлось.

На пустой системе немножко погонял bonnie++ на основном разделе хранения данных:

Version  1.03       ------Sequential Output------ --Sequential Input- --Random-
                    -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
kettle           4G 43733  91 67809  62 18482   7 34348  75 37940   7 374.0   1
                    ------Sequential Create------ --------Random Create--------
                    -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
              files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
                 16   995  25 +++++ +++   832  25  1140  29 +++++ +++   435  13

И на рутовом, нешифрованном:

Version  1.03       ------Sequential Output------ --Sequential Input- --Random-
                    -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
kettle           4G 40953  90 75921  29 33144  15 44604  95 123309  27 274.8   1
                    ------Sequential Create------ --------Random Create--------
                    -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
              files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
                 16 +++++ +++ +++++ +++ +++++ +++ 20307  40 +++++ +++ +++++ +++

Пробовал подключить ИБП, не очень пока успешно. Через USB он работать всё-таки отказался, а COM-порт у меня выведен сейчас один и тот нужен для консоли. Второй порт разведён на материнке, но ни в Ultra, ни в «Компьютерном Мире», ни в «Кее» не нашлось стандартной планки, чтобы выкинуть этот разъём! Ну, либо найду (есть на примете откуда скрутить, но не уверен, что там разъём на мат. плате такой же), либо чего-нибудь придумаю, ИБП-шник всё-таки подключить надо обязательно.

Вспомнил как работать с IPTables, уже довольно долго с ним не возился, маршрутизацией ведала Настина машина с FreeBSD, на которой успешно использовал pf. Кстати, мне не очень нравится подход, предлагаемый многими для настройки IPTables — добавление скрипта в /etc/init.d и его запуск при загрузке. Получается, все правила настраиваются одной кучей, несимпатично. 🙂

Поэтому, подумал, почитал `man interfaces` и насоздавал в /usr/local/bin/ скриптов fire-set-* плюс скрипт fireup, гасящий iptables и загружающий умолчальные правила для блокировки всех и вся. Вот, например, скрипт fire-set-all, открывающий полный доступ на интерфейсе:

#!/bin/sh

if [ "$MODE" == "start" ]; then
        ACT="-A"
else
        ACT="-D"
fi

iptables $ACT INPUT -i $IFACE -j ACCEPT
iptables $ACT OUTPUT -o $IFACE -j ACCEPT

Плюс похожие скрипты на нужные сервисы/протоколы, после чего в /etc/network/interfaces можно писать нечто в стиле:

# External network interface
auto eth1
iface eth1 inet static
        address 10.20.15.72
        netmask 0xffffe000
        up      fire-set-tcp_udp_out
        up      fire-set-icmp
        up      fire-set-gre
        up      fire-set-ftp
        down    fire-set-tcp_udp_out
        down    fire-set-icmp
        down    fire-set-gre
        down    fire-set-ftp

Это самое сложное описание интерфейса, смотрящего в локалку. При подъёме интерфейса дёргаются скрипты и настраиваются правила файрвола для этого интерфейса, при заглушке эти же правила обрубаются. Скрипт fireup, инициализирующий файрвол, вызывается как «pre-up» для интерфейса lo. На мой вкус, очень даже симпатично.

Особо внимательные товарищи, наверное, уже заметили, что три диска по 400 Гб в RAID5 дают вместилище объёмом в 800 Гб (минус округление 1024/1000), но никак не терабайт. Как же я докатился до терабайта?

После переноса данных с lapsang на RAID-массив kettle у меня освободились полностью два винчестера: на 200 и на 250 Гб. Кстати, изначальная идея по сборке массива из 250-гигабайтных винчестеров как раз и предполагала, что один из освободившихся винчестеров пойдёт как ещё один в массив. Оба винчестера с интерфейсом IDE.

Так вот и родился в голове адский план по включениюх этих двух во всё тот же массив. Как? Очень просто — создаём массив RAID0 на двух винчестерах и получаем раздел на (чуть меньше) 450 Гб. И этот массив уже добавляем в качестве четвёртого устройства в массив RAID5!

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

Операция «решейпинга» или расширения массива заняла часов 10-12. Никаких проблем не возникло. Операция расширения физического раздела LVM на котором лежит и / и /storage также не вызвала затруднений. Операция расширения логического раздела LVM — без проблем. Расширение зашифрованного раздела — легко. Расширение раздела XFS — запросто. А теперь самое главное — абсолютно все операции проводились без отключения разделов/отмонтирования ФС. Всё полностью на живой и вполне рабочей системе. Так-то нынче GNU/Linux умеет. 🙂

Для всех безобразий по расширению доступного пространства вполне хватило двух мануалов: раз и два. Ну, плюс, конечно, «cryptsetup resize» и «xfs_growfs».

Единственное «но», поскольку теперь для сборки массива RAID5 нужно ещё собрать сначала массив RAID0, а рутовый раздел лежит на RAID5, потребовалось обновить initramfs после правки /etc/mdadm/mdadm.conf. Дело нехитрое: «update-initramfs -u».

Вот так и получился RAID5 на 1117 Гб и раздел на нём на 1110, или 1.08 Тб. Вот что получилось у bonnie с забитым на треть терабайтным разделом:

Version  1.03       ------Sequential Output------ --Sequential Input- --Random-
                    -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
kettle           4G 43023  86 69411  62 18813   9 32507  71 36633   8 408.4   1
                    ------Sequential Create------ --------Random Create--------
                    -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
              files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
                 16  1267  31 +++++ +++   880  27  1412  35 +++++ +++   718  22

Вот, собственно, и всё. Осталось подключить к этой машине принтер (рутина), да вынести её за пределы комнаты, чтобы могла она спокойно шуметь круглые сутки напролёт. Кстати, шумит она не так уж и сильно, но это пока не начинаются обращения к дискам. Поскольку это RAID, получается, что происходит практически синхронное обращение ко всем пяти дискам и вот этот дружный хруст уже слышен очень хорошо. 🙂

Много комментариев (10) к заметке “kettle — одомашенный терабайт”

  1. Dreamer:

    Коль не секрет, во сколько у.е. тебе все это обошлось? Какую минимальную конфигурацию можно поставить в качестве сервака?

  2. Роман:

    Эмм… В целом вышло 25000 российских рублей. От ИБП до радиаторов на память. 🙂

    А вот какую конфигурацию ставить в качестве сервака, зависит больше от задач. У меня тут просто и RAID5, и шифрование поверх него и желание пускать QEMU на той же машине по сети, плюс FTP сервер, плюс git-daemon с веткой Линуса для ядра, плюс сейчас ещё и Jabber сервер для внутренней сети поднял. Так что скучать-то особо не приходится железке.

    В качестве примечания, если соберёшся делать софтовый RAID5, [i]обязательно[/i] бери ИБП.

  3. Freeman:

    А Jabber-то тебе зачем?

  4. Роман:

    Для внутренней сети. Полезная штука. 🙂 Правда, поглядев на такое, админы CCTech сказали, что может быть восстановят бывший когда-то свой Jabber сервер.

  5. Дневник Романа Химова » О фильмах, носителях и свободном пространстве:

    […] В связи с появлением хранилища на терабайт с хвостиком, начал переносить фильмы с дисков разного рода внутрь него. Оказалось, не так уж зря говорят про ненадёжность самописных CD/DVD, один CD у меня в одном из приводов отказался читаться, ещё несколько читались с явным натугом. Все, что характерно, Verbatim. Но, в конечном счёте, самописное всё прочиталось. Что оказалось смешнее, так это битый штампованый DVD, который когда-то читался вполне без проблем. Эх, пираты, пираты… […]

  6. Дневник Романа Химова » Debian 4.0 etch: +2 машины:

    […] Или дебианизация всего, что только можно. Или “дебьянизация”. Это ещё, кстати, вопрос. Google поправляет в сторону “Дебиан”, как пиндосы произносят Ian я тоже слышал, а всё ж по-русски хочется сказать “Ян” и “Дебьян”, да положить на всё их произношение. Собственно, работать с etch я начал ещё некоторое время назад и работа эта была достаточно плодотворная. Я также запланировал сносить FreeBSD на компьютере жены в пользу всё того же Debian. Но пока это всё планировалось, произошли некоторые другие события, которые дали ход той самой “дебьянизации”. […]

  7. Дневник Романа Химова » 1.5 Tb:

    […] Как и ожидалось, любой массив можно забить. И терабайт у меня тоже начал подходить к концу. В связи с чем было принято решение о расширении, а заодно и ликвидировании неправильного раздела RAID0 из двух винчестеров, использовавшегося в качестве одного из носителей для RAID5. […]

  8. Дневник Романа Химова » Бука:

    […] По самой железке. Бука большая, внушительная. Дисплей явно TN+Film, но неплохой. Мощи, конечно, до одури, Core 2 Duo T7200 и 2 Гб памяти, боюсь, что на некоторых задачах сервер тихонько всплакнёт в углу. Понятно, 17″, что очень радует. Два винчестера. С винчестерами у меня давно самые тёплые и нежные отношения, поэтому на винчестерах сделал RAID1 для успокоения души. Это тоже плюс. Клавиатурка с цифровым блоком, это вообще очень полезно. Например, в ADOM рубиться. […]

  9. Дневник Романа Химова » Скоро два:

    […] Домашний сервер пережил ещё одно расширение. […]

  10. . » kettle: rev up:

    […] прошлой неделе неожиданно старый-добрый kettle, переживший не один апгрейд по винтовой и другим […]

Закомментировать

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