Pull to refresh

Ещё один NAS своими руками, часть 3: приключения XXX в старой башне

Reading time26 min
Views72K
Интересно, мечтал ли кто-нибудь в детстве затолкать десяток шпиндельных дисков в свой домашний ПК и вообразить себя бравым Командиром Сервера? Что же, после цехов ИКМ, узлов космической связи, кабельных жгутов толщиной с баобаб, ЦОДов разных мастей и прочих весьма насыщенных железом помещений детские мечты, наконец, сбываются.
Но просто воткнуть десяток шпинделей в «башню» недостаточно, их ещё надо раскрутить, обдуть, залить файловой системой, предоставить доступ, разграничить права и потом ещё следить за здоровьем. Мы расскажем довольно подробно, как это сделать с комфортом для себя. При этом мы не станем петь молебны очередному серверному корпусу известной марки СтупорМиксер, а выступим в жанре рационального минимализма с железякой за $30 и сосредоточимся на софте и полезных мелочах. Ещё из этого поста читатель узнает о том, куда пропадает почти половина мощности у обычного блока питания, о волшебстве телеметрии, о некоторых стилях юниксового кунгфу, о кучерявом разграничении прав доступа без ACL (да, бывает и такое!) и к чему приводит использование старых дисков в новых серверах. Пасхальные яйца и обещанная история XXX рассеяны по посту;-)

Но сперва я хочу рассказать, как деталь стоимостью менее $1 может «испортить» диск за $100. Это весело, обещаю.

DISCLAIMER


Информация предоставляется AS-IS без какой-либо ответственности за ее использование кем-либо, где-либо и когда-либо. Все ненароком упомянутые торговые марки являются собственностью соответствующих владельцев. Некоторые из них в рекламе уже настолько не нуждаются, что я придумываю им шуточные названия.

Пасхальные яйца
Прочитав недавно пост про святого Исидора Севильского, я тоже решил порадовать любителей квестов нехитрым развлечением. В обычном шрифте Arial я насчитал почти десяток различных символов, более-менее похожих на «икс», и раскидал их по тексту. Найдете? +1 хабракармы первым 30 нашедшим восемь уникальных заглавных «иксов». Если хотите участвовать, присылайте (лично мне!) в течение 10080 14400 минут после публикации поста восемь кодов символов и само слово/контекст, где нашли. Результаты будут в комментариях.


ХERIAL ATA: новое название старой проблемы


Итак, вы только что истратили часть семейного (или фирменного) бюджета на новёхонький накопитель неприличной ёмкости, но не успели ещё улетучиться ароматы нового железа, как диск «посыпался». Не спешите паниковать! Если вы нечасто занимаетесь сборкой, продавец с большой вероятностью и цинизмом отправит вас обивать пороги сервисных центров, а дело может быть в интерфейсном кабеле ценой пятьдесят европейских копеек. Судите сами: из десятка купленных в разных местах кабелей SATA лично мне пришлось заменять целых три штуки (а это 30%, между прочим). Уж не знаю, вопрос ли это везения, репрезентативности выборки, кривизны рук или ещё чего, но первый же попавшийся тематический пост Three key strategies to prevent RAID failure лишь укрепил меня в уверенности:
According to the study, array failures result from disruptions in the protocols used to transfer data from application software to disk; failures of interconnect devices (including controllers, power supplies, fans and cabling); and failures in the disk drives themselves. In high-end storage systems, disk drive failures are the leading cause of array failures, followed closely by interconnect failures. Midrange arrays demonstrate roughly the same failure rates, while low-end storage systems exhibit higher failure rates in the interconnect category — presumably because devices do not ship with or support redundancies in interconnect components.
Если даже не вырывать фразы из контекста, интерфейсные кабели — это просто дешёвый расходный материал, поэтому относитесь к ним, как к туалетной бумаге.

Если интересна этимология названия ХERIAL ATA, то первую букву следует читать по-русски. Выявив описанной далее методикой экстрасвойства у кабеля, я просто решил пометить его крестиком, который случайно попал на букву S. Прочитав получившееся слово, я даже решил сложить об этом пост.


Кабель ХERIAL ATA

Кстати: философские практики Крепсондо учат помечать дефектные изделия сразу — это привычка, которая не раз экономила мне и время, и деньги. Но если вы считаете, что месть — блюдо, которое надо подавать холодным, тогда храните дефектные кабели, битые диски, глючную память и горелые блоки питания в одной коробке с исправным железом, никак не помечая. Уверяю, что кому-то это будет очень холодным и очень горьким блюдом. Возможно, вам. А слово ХER читается как иксер и может применяться к «человеку, занимающийся Х», что бы это ни значило...


Как выявить дефектный кабель

На регулярных операциях плохой интерфейсный кабель SATA можно распознать в S.M.A.R.T по ненулевому «сырому» значению атрибута UDMA_CRC_Error_Count (см. RAW VALUE). Этот атрибут характеризует только качество тракта SATA, независимо от состояния магнитных поверхностей. Сразу же после установки нового диска (но лучше до инициализации файловой системы) рекомендую погонять массивные (порядка Гб) операции чтения и записи, поглядывая на программу-монитор SMART. Если операции идут с ошибками, а системный журнал пестрит сообщениями «ATA Status Error», «Retrying command», возможно, что виноват не дорогой аромат нового диска, а всего лишь дешёвый запах шнурка.

UPD:
Если замена кабеля не помогает, и счётчик ошибок всё равно растёт, для начала попробуйте разгрузить блок питания и повторить эксперимент: убирайте энергоёмкие комплектующие, отключайте другие диски, и т.д. Если всё сразу становится хорошо, меняйте блок питания на дорогой и качественный, от плохого питания вы только повстречаете много НЛО, только не из нашей хабрагалактики, а чужих. Они неправильно заходят на посадку и питаются вашими данными, поэтому не кормите их, пусть пролетают себе мимо.

С вашего позволения, дорогие читатели, я дам несколько примеров использования утилиты dd(1) в сочетании со smartctl(8). В других системах надо просто скачать нужную утилиту (см. викисписок) и погонять небольшую, но увесистую группу файлов туда-сюда обычным копированием, чтобы хорошенько загрузить интерфейс. Любимая коллекция порнофильмов подойдет в самый раз.

Внимание: первая команда деструктивная, выполнять следует до заселения нового диска ada1 файловой системой!
#dd if=/dev/zero of=/dev/ada1 bs=1M count=1000
#dd if=/dev/ada1 of=/dev/null bs=1M count=1000 

#smartctl -x /dev/ada1
...
ID# ATTRIBUTE_NAME          FLAG     VALUE RAW_VALUE
...
199 UDMA_CRC_Error_Count    0x003e   200   75
Было замечено, что одним лишь чтением спровоцировать ошибку не всегда удается, поэтому добавлена запись. В примере счётчик ошибок у диска ada1 достиг 75, а для замены кабеля лично мне достаточно и единицы.

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

Пример запуска длинной проверки для диска ada1, диск в ответ сообщает примерное время окончания теста:
# smartctl -t long /dev/ada1
...
=== START OF OFFLINE IMMEDIATE AND SELF-TEST SECTION ===
Sending command: "Execute SMART Extended self-test routine immediately in off-line mode".
Drive command "Execute SMART Extended self-test routine immediately in off-line mode" successful.
Testing has begun.
Please wait 277 minutes for test to complete.
Test will complete after Mon Aug 31 23:00:14 2013

Use smartctl -X to abort test.
Такой тест не использует интерфейс SATA, а проверяет, грубо говоря, только состояние «блинов».

Проверим ход и результаты всех тестов диска ada1:
# smartctl -l selftest /dev/ada1
...
=== START OF READ SMART DATA SECTION ===
SMART Self-test log structure revision number 1
Num  Test_Description    Status                        Remaining  LifeTime(hours) LBA_of_first_error 
# 1  Extended offline    Self-test routine in progress 90%        123             -
Здесь тест прошел 10% (осталось 90%), пока ошибок не выявлено (прочерк в LBA_of_first_error), и в момент начала проверки диск отработал суммарно 123 часа. Всё это хранится в энергонезависимой памяти.

У системы FreeNAS вы сможете включить подобные тесты в пакет автоматизированной самодиагностики и собирать отчёты по расписанию (см. телеметрические примеры далее). Можете взять себе за правило раз в месяц (или чаще) проверять отчёты для раннего выявления неполадок. На самом деле, в этом и состоит работа хорошего Командира Сервера.

Выводы

Если проблема действительно с подключением, немедленно тушите сервер, сливайте масло, вынимайте кабель и ставьте на нём крест. Или выкидывайте сразу к чёртовой бабушке (а лучше всё вышеперечисленное). С победным ликом доставайте припасенный заранее новый кабель и ставьте его взамен выброшенного. Хотя снаряд бьёт в ту же воронку крайне редко, обязательно проверяйте и новый кабель. Ведите свой учет ошибок по каждому серийному номера диска: после каждой замены кабеля записывайте значение RAW_VALUE атрибута UDMA_CRC_Error_Count, а если кто-то знает универсальный способ сбрасывать только этот атрибут, напишите мне в личку, пожалуйста.

Волшебство телеметрии


Уверен, все согласятся, что отказавший диск в массиве необходимо заменить как можно скорее. Если для кого-то это неочевидно, я рекомендую почитать тематические статьи, хотя бы эту: A failed RAID drive needs immediate attention.
Мне кажется, что несмотря на полный инженерный консенсус, теория с практикой сильнее всего расходятся именно в этом месте: отказавшие диски продолжают тихо сидеть в серверах, как мыши под вениками мины замедленного действия. И это касается не только малых офисов, за которыми следят молодые и неопытные сисадмины. Я где-то читал статистику потерь данных на крупных предприятиях, и одной из весомых причин был именно недосмотр за массивами. Отказавшие диски ухитрялись месяцами сидеть в своих корзинах горячей замены, незамеченные никем. Обычно это заканчивалось отказом второго диска, когда рассыпался уже том, и срабатывала совсем другая сигнализация в виде рассерженного Бизнеса. Поэтому предлагаю быть мудрее и заняться этой проблемой, не откладывая.

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

Братцы, если вы используете FreeNAS, включите хотя бы уведомления по email, благо Интернет есть практически везде, да и смартфоном сейчас можно удивить разве что большого жирафа. Не любите смартфоны (бывает и такое) — заведите себе, наконец, планшет, 21-ый век на дворе. Даю пример для Gmail, без порта 25:
  1. Создать отдельный системный ящик на Gmail (бесплатно же! не мешайте личную почту с мониторингом системного здоровья).
  2. Задать в настройках (Email Tab) имя сервера: smtp.gmail.com, порт 587, включить режим TLS и SMTP-аутентификацию (использовать адрес отправителя, username и пароль от вновь созданного ящика — еще одна причина создать отдельный).
  3. Добавить сбор почты с вновь созданного ящика Gmail на смартфоне; приложение Почта Gmail позволяет быстро и удобно переключаться между ящиками.
  4. Дополнительно проработать раскладывание скучной периодики регулярных отчётов по папкам так, чтобы телефон «брынькал» только от аварийных событий.

Кстати: начиная с релиза 9.2, во FreeNAS отключили ежедневные отчёты «ни о чем», чтобы не отвлекать наше драгоценное внимание. И я очень рекомендую всем действовать в том же ключе: система должна кричать «волки!» только тогда, когда они действительно собираются сожрать вас вместе с вашими данными. И первым должен узнавать о проблеме не пользователь, а Командир Сервера. В этом и есть его основная задача.

Но это не все, дорогие читатели. Вся соль в том, что alias пользователя root теперь тоже завернут на созданный ящик Gmail. Поэтому те из вас, кто владеет юниксовым кунгфу, теперь смогут отправлять простые отчёты по почте обычной командой mail(1) без всяких выкрутасов. Например, вот так я отправляю отчёты SMART по Cron Jobs:
#!/bin/bash

for i in 0 1 2 3 4 5 6 7 8 9; do
        smartctl -x /dev/ada$i | mail -s "$HOSTNAME SMART report ada$i `date '+%Y-%m-%d'`" root
done
Между прочим, smartctl в таком виде затягивает и упомянутый выше журнал самодиагностики, так что я могу при желании оценить состояние дисков буквально на бегу, не подключаясь к серверу. Согласитесь, оно того стоит.

Вещи позаковырестее (наподобие резервной копии настроек), конечно, придется одеть в base64 и обуть в правильные MIME-заголовки, либо хотя бы завернуть в uuencode(1).

Как S.M.A.R.T подрался с APM

FreeNAS использует подсистему smartd(8) для мониторинга температуры дисков и критических отказов. Дополнительные настройки (S.M.A.R.T. extra options) задаются по формату smartd.conf(5).
Интересная коллизия происходит при попытке одновременного использования мониторинга S.M.A.R.T. и функции HDD STANDBY из раздела управления дисками. Если задать интервал опроса Check interval короче, чем время «ухода» диска в STANDBY, то SMART своими опросами будет все время перезаряжать таймер обратного отсчёта диску, и он никогда не «заснёт». Если действительно надо усыпить диск, ставим интервал опроса SMART больше, чем тайм-аут STANDBY, а smartd(8) уже обучен деликатному обращению со спящими дисками. Профессионалы, правда, не рекомендуют тушить диски, т.к. они на циклах старт-стоп шпинделя стареют быстрее, чем от регулярной половой жизни постоянной работы.

Память и процессы

Система FreeNAS версии 9 использует collectd для сбора и отображения исторической статистики в своём графическом интерфейсе. Вы можете посмотреть, например, расход ОЗУ за месяц. Как я уже писал в предыдущей части, статистика накапливается на RAM-диске и один раз в час сохраняется целиком в разделе /data на системной флэшке, благодаря чему вся информация выживает между перезагрузками. Это одно из отличий нового FreeNAS от NAS4free: возможности последнего в плане сбора полезной статистики достаточно рудиментарны.

Добрый старый syslog

Если есть возможность, рекомендую завести себе где-нибудь сервер под *nix* (можно виртуальный) и построить до него туннель для приема syslog. Со стороны FreeNAS есть тривиальная настройка Syslog server. На принимающей стороне надо не забыть открыть нужный порт (обычно 514/udp), хорошо также раскидать сообщения от разных хостов по файлам. Например, для rsyslog версии 5.6 можно добавить близко к началу rsyslog.conf такую конструкцию:
$ModLoad imudp
$UDPServerRun 514
$template FILENAME,"/var/log/%fromhost-ip%/messages.log"
*.* ?FILENAME

Этот вариант телеметрии можно усилить, заставив S.M.A.R.T регистрировать изменения всех атрибутов. Для этого достаточно зайти в раздел управления дисками и добавить простой флажок ``-a'' в поле S.M.A.R.T extra options.
Не забывайте о ротации логов, иначе они забьют диск. Думаю, это не нуждается в комментариях.
Хранение логов отдельно от системы — вообще очень полезная концепция, и не только с точки зрения информационной безопасности, но и для оперативного принятия решений. Представьте себе, что сервер внезапно пропал из сети, либо к нему нет доступа. Держа логи в своём «облаке», можно еще до визита на площадку хотя бы попытаться понять, что с ним происходило за сутки, за час или за минуты до аварии. Иногда это очень ценная возможность.

Облачное хранение отчётов

По сути, архив отправленных отчётов в Gmail является практически СУБД с протоколом доступа IMAP/POP3. Складируйте туда информацию, а когда придет время, желание и вдохновение, берите в руки perl (PHP, Python, да хоть Visual Basic), подключайтесь и ваяйте на здоровье парсеры и анализаторы чего-нибудь. Gmail использовать необязательно, бесплатных почтовых сервисов много.

Выводы

Готовая телеметрия — полезнейшая функция FreeNAS, и использовать ее хотя бы в базовом варианте с email обязательно. Об аварии или предпосылке к ней первым должен узнать Командир Сервера, а не Бизнес.

Кунгфу с зеркалами


Заодно я решил немного рассказать об опыте эксплуатации FreeNAS с томами UFS, использующих аппарат GEOM и gmirror(8). Почему я отказался от модной файловой системы ZFS, написано в первой части истории.

Стиль ящерицы

В первой части истории я уже писал, что всех производителей дисков можно считать начинающими программистами: один килобайт у них принят строго по системе СИ и равняется 1000 байт. Интересно, что при этом физический сектор может быть, например, 512 или 4096, но никогда не 500 или 4000 байт. Но это так, к слову: знайте свой диск, для любой файловой системы важен размер физического блока.
Для нас более важно то, что производитель по-разному контролирует случайные дефекты на разных моделях, отдыхая, понятное дело, на бюджетных дисках для домашних компьютеров. Мне попались четыре вроде бы одинаковых диска ST2000DM001. Два оказались объемом ровно 2000398934016 байт, два других — примерно на 2Гб меньше, но и этого мало: между последними обнаружилась разница ещё в 13Мб. По идее, нехватка 2Гб — это вообще нарушение моих прав покупателя, но я решил плюнуть и не тратить время на разборки с продавцом. Пострадать тут можно из-за того, что при попытке заменить отказавший диск на новый эта самая нехватка в 2Гб не даст реконструировать массив. И тогда либо придется снова бежать в магазин за диском уже в 3Тб, либо переделывать массив целиком…
Но давайте перехитрим силы зла, подсунув жадному производителю и циничному продавцу от мёртвого осла уши. При создании массива оставим в конце технологический запас, эдакий хвост ящерицы, который можно при желании потом отстрелить откинуть. Вполне естественным желанием тут будет создание «опалубки» из разделов GPT нужного размера, куда потом заливается тот же gmirror(8). Но меня остановило то, что gmirror(8) во FreeNAS работает по умолчанию только с «сырыми» дисками, т.е. с разделами GPT можно в теории нарваться на проблему поддержки и затем потеть на каждом апгрейде. Поскольку это не домашняя система, я решил найти способ ограничения размера тома на «сырых» дисках, который и приведу здесь:

# Загружаем модуль zero для "опалубки"
geom zero load

# Создаём опалубку тома нужного размера, оставив от 2Тб хвост примерно 4Гб: 
gnop create -s 1996103966720 gzero

# Заливаем в опалубку первую половину зеркала -- диск ada0, пометив том MIRROR1
gmirror label -v MIRROR1 gzero.nop ada0

# Зеркало затвердело, разбираем опалубку и освобождаем системный ресурс
gmirror forget MIRROR1
gnop destroy gzero.nop
geom zero unload

# Создаем на половине зеркала файловую систему с размером блока 4096 байт, по физическому сектору диска
newfs -U -f 4096 /dev/mirror/MIRROR1

# Прикуриваем второй диск ada2 от первой половины ada0; ВНИМАНИЕ: начинается полная синхронизация!
gmirror insert MIRROR1 ada2

# Смотрим, что получилось
gmirror status

Правда, описанный трюк (А) не даст использовать хвост и (Б) никак не восполняет отсутствие ERC на моделях ST2000DM001, ST3000DM001 и ST4000DM001, и потому они для RAID малопригодны (читайте habrahabr.ru/post/92701). Если и рассматривать продукцию Seagate, то для массивов гораздо лучше подойдут модели ST2000VN000, ST3000VN000 и ST4000VN000: помимо наличия ERC, они строго выдерживают объём в 2000398934016 байт, меньше греются на своих 5900rpm, да и стоят всего лишь чуть-чуть дороже десктопных братьев.
Я не настаиваю на том, что это единственный вариант. Если читатель предпочитает GPT или желает разместить в хвосте, скажем, swap, то можно сделать опалубку и на разделах GPT. Примеров в Интернете можно найти массу, если желаете, я вклею прямо сюда.

Стиль кошки

Сколько я ни менял подключение дисков к портам контроллера, gmirror(8) всякий раз, подобно кошке, приземлялся на четыре лапы. Поэтому могу сказать уверенно: gmirror(8) не боится перестановки «сырых» дисков, а опознаёт их по метаданным. Переставляйте, сколько хотите. Если сделаете разделы на GPT, тоже должно работать. Из преимуществ использования gmirror(8) на GPT я увидел только возможность разместить на тех же дисках ещё и swap где-нибудь в зоне «хвоста ящерицы».

Стиль черепахи

Самое узкое место нашего винтажного сервера — конечно же, шина PCI, дающая меньше, чем любой из дисков на линейном чтении. Из опыта эксплуатации могу подтвердить комментарий пользователя AMDmi3: если теребить файловую систему операциями, то вероятность полной синхронизации после «плохого» выключения весьма велика. Если не теребить — можно легко проскочить вообще без синхронизации. Надо понимать, что у FreeNAS отключена фоновая проверка UFS (background_fsck="NO") и старт системы с одновременной проверкой тома может сильно растянуться во времени. Если на шину PCI навалятся сразу несколько зеркал с намерением синхронизироваться, то… лучше даже не думать, что будет. Очень грустно все будет.
К счастью, мой разборный БАФ по условиям эксплуатации позволяет запечатать некоторые части данных в read-only. Временно переключать том на запись, кстати, большого труда не составляет. FreeNAS такого в GUI сделать не даст, но можно снова применить кунгфу и изменить кое-что прямо в местном аналоге fstab:
FreeNAS# sqlite3 /data/freenas-v1.db
SQLite version x.x.x.x 20xx-xx-xx xx:xx:xx
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .mode html
sqlite> .headers ON
sqlite> select * from storage_mountpoint;
mp_path mp_options mp_volume_id id
/mnt/VOL1 rw 1 1
/mnt/VOL2 rw 2 2
/mnt/VOL3 rw 3 3
Полагаю, дальше всё понятно. Менять таблицу вручную — риск ещё больший, чем использование разделов GPT. Решайте сами.

Стиль паука

Есть у разборного массива один недостаток: его неудобно «расшаривать» по сети. Создавать отдельную «шару» на каждый том довольно неуклюже для Бизнеса, вдобавок FreeNAS дает расшарить только папки хранилища, но принципиально не дает системные папки: можно, например, /mnt/VOL1, но нельзя /mnt или /tmp. Хочется найти способ согнать все тома в одну точку, но при этом не вкладывать один в другой: чем лучше третий, если появится четвертый, а первый планируется выключить? Вдохновившись одним постом, я придумал такой способ:
  1. На каждом томе обязательно создается главный каталог, например, /mnt/VOL1/PUBLIC,/mnt/VOL2/PUBLIC и т.д. Пользовательские папки в корне не создаются, ни при каких обстоятельствах.
  2. Либо на одном из томов, либо на дополнительной флэшке создается «монтажная площадка», например, /mnt/SITE, куда будут выведены все главные каталоги. В ней же создается каталог PUBLIC, а под ним – пустые точки VOL1, VOL2, VOL3 для монтажа для каждого тома.
  3. С помощью инструмента FreeBSD mount_nullfs(8) на соответствующие точки стартовыми скриптами монтируются (инжектируются) главные каталоги каждого тома. Кстати, на диалекте Linux это называется просто: mount --bind.
  4. Расшариваются только главные каталоги, например, /mnt/SITE/PUBLIC.
  5. В перспективе здесь же на монтажной площадке можно будет расположить домашние папки пользователей /mnt/SITE/HOME/%username%, а в них инжектировать папки, связанные с конкретными бизнес-процессами. Так можно построить довольно кучерявую систему прав доступа, не мучаясь с ACL.



Паутина монтированных разделов переплетает между собой тома и их представление для пользователей

Но в стиле паука есть один неудобный нюанс. Дело в том, что свободное дисковое пространство, отображаемое клиентам, будет рапортовать по состоянию монтажной площадки, а не томов. Например, когда я построил площадку на флэшке 1Гб, то и видимое по сети свободное пространство всех моих томов сжалось до одного несчастного гигабайта, и клиент под Windows 7 сразу же отказался записывать туда крупные файлы. Да и вообще, понятие свободного дискового пространства на составном томе весьма относительно.
К счастью, сама Samba позволяет выкрутиться из этой истории, да и FreeNAS не препятствует. Есть такой удар в нашем кунгфу, известный как dfree command. Опытный мастер может изложить системе полностью своё видение пространства в папке и его расхода, написав нехитрый скрипт на любимом языке. В простейшем случае можно даже взять целиком ответственность на себя, независимо от фактической ситуации рапортуя десять совершенно свободных терабайт:

#!/bin/sh
echo 10737418240 10737418240
В системе FreeNAS расположение скрипта задается в опции Auxiliary Parameters настройки Windows (CIFS) Shares, например, так:
dfree command = /mnt/SITE/scripts/mydfree

Однако, этот приём отработан только на CIFS и адекватен ровно до того момента, пока свободного места действительно хватает. При записи на заполненную до отказа часть тома произойдет, понятное дело, отказ. Пользователь, по штатному расписанию кунгфу не владеющий, естественным образом его проглядит, а в потере данных будет виноват уже мастер дорогой читатель. Поэтому будьте аккуратны, совмещайте с другими стилями, используйте телеметрию. Например, можно было бы применить описанный выше стиль черепахи для консервации всех томов, кроме последнего, и давать актуальную информацию только по нему. Выбирать вам, дорогой Мастер Юниксового Кунгфу!

Старый диск: казнить нельзя помиловать


В самом начале, при сборке системы я всё-таки оставил в ней старый диск Seagate ST3120827AS, унаследованный от прошлой жизни компьютера. Не преследуя конкретной производственной цели, я разместил на нем swap и тестовый раздел. После примерно полугода работы старый диск ухитрился отказать на перезагрузке, аккурат между своим обнаружением и проверкой файловой системы, прервав старт самым неудачным способом:
/dev/ufs/T1: CANNOT READ BLK: xxxxxxx
/dev/ufs/T1: UNEXPECTED SOFT UPDATE INCONSISTENCY; RUN fsck MANUALLY.

THE FOLLOWING FILE SYSTEM HAD AN UNEXPECTED INCONSISTENCY:
    ufs: /dev/ufs/T1 (/mnt/T1)
File system preen failed, trying fsck -y

Can't stat /dev/ufs/T1: No such file or directory

Mounting late file systems: mount: /dev/ufs/T1: No such file or directory.
Mounting /etc/fstab filesystems failed, startup aborted
ERROR: ABORTING BOOT (sending SIGTERM to parent)!
init: /bin/sh on /etc/rc terminated abnormally, going to single user mode
Enter full pathname of shell or RETURN for /bin/sh:

Для тех, кто не привык к юниксовым ребусам, перевожу системное сообщение: «хозяин, диск отчудил, поэтому отменяю взлет и прошу немедленно вмешаться». В такой момент достаточно нажать ENTER, но для этого надо подключать клавиатуру, монитор и, главное, хотя бы быть на площадке! В следующей части я расскажу, как можно подготовиться и к таким раскладам…

Выводы

В любом случае не стоит использовать старые диски в сервере даже для тестов, если сервер предназначен для производства (спасибо, Капитан Очевидность). Увы, тома UFS делают всю систему чувствительной к отказу одного тома.

Χ* дисков в старой башне

*здесь Χ означает римскую «десять»

Столкнувшись с ХERIAL ATA, я лишний раз убедился, что бюджетные изделия — это территория спонтанных отказов на ровном месте. Есть у меня также субъективное предубеждение против бюджетных корзин SATA с «горячей заменой» (у которых backplane с микроконтроллером). Во-первых, эта дешёвая имитация серверных технологий вовсе не дешёвая. Во-вторых, после дефекта простого кабеля можно себе представить, что бывает в более сложных устройствах. Порой они способны угробить данные гораздо быстрее глючного контроллера или больного блока питания. Но поскольку это провокационное утверждение, я разместил в конце поста опросник, и мне интересно знать мнение хаброкомьюнити.

В моем стареньком башенном корпусе аж шесть отсеков 3.5", из которых более-менее адекватно обдувается только четыре нижних, но зато есть ещё пять отсеков 5.25". В двух из них торчал балласт из оптических приводов, потому что когда-то было модно экономить ресурс лазера RW (никому не нужен для музея настоящий привод CD-ROM? Мало того, что он совсем не умеет писать, но про DVD даже и не знает).


Нижний ярус на 6 отсеков 3.5"

Хм. Любимый сисадминский биатлон (бег с прижатым к уху телефоном, на ходу обжимая витую пару) — всё это не про меня сейчас. Работая с хламом бюджетными решениями, я предпочитаю максимально упрощать конструкцию, а с невозможностью горячей замены позволяет мириться задача. Поищем что-нибудь простенькое: немного алюминия, большой вентилятор, поменьше мозгов, желательны виброгасящие резиночки. Поначалу приглянулось изделие Cooler Master STB-3T4-E3-GP, которое мозолило мне глаза всё лето 2013г., но в нужный момент оно испарилось из местного ритейла без всякого предупреждения. Чёрт. Ну не заказывать же кусок металла по $30 с доставкой за столько же. В голову полезли всякие неправильные решения: от ренегатских активных корзин до обычных салазок, с брутальным навесом из пивных банок для вентилятора.

Флэшбэк из веселых 90ых
Работал я тогда в одном рассекреченном ящике. Получили мы однажды просто гигантский промышленный серверный корпус где-то на 8U, хоть и с киловаттным блоком питания, но совершенно бестолковый в плане обдува дисков и мониторинга здоровья. Сервер надо было собрать и отвезти на бывшую АТС М9, где только-только начинался обмен трафиком (мы знаем её теперь как MSK-IẌ, а тогда под обмен было занято всего два этажа с половиной).
Эксплуатация сервера началась с буквально искромётного тестового запуска в лаборатории, после чего с продавцом состоялся примерно следующий диалог:
— Здравствуйте, у нас отказал промышленный сервер.
— А сколько он проработал?
— Э-э… секунды полторы, не более.
— ?! И как это было?
— Хлопок, сноп искр из блока питания и немного дыма.
— (после паузы) Ладно, привозите…
На плате управления отказоустойчивым блоком питания щедрые азиаты оставили, наверное, полстакана припоя, и наши Мастера космической связи, взглянув на качество пайки, только презрительно хмыкнули. Пока везли новый блок питания (на это уйдет в итоге полгода, но я ещё этого не знал), я решил как-то позаботится о горяченькой барракуде 7200rpm. Завозимые тогда в страну вентиляторы были «масляные» чуть менее, чем полностью, но я нашёл один «шариковый» в куче хлама. Правда, навес для него пришлось вырезать чуть ли не из куска ведра, и сейчас я даже не помню, как мне удалось сделать отверстие круглым…
Интереснее всего вышло с датчиком оборотов вентилятора: его просто не было, но для Мастеров это было даже смешнее, чем ежа голым задом пугать. Сложнее всего было отвлечь Мастеров от их игрушек, напоминающих декорации к фильму Империя наносит ответный удар. Зайдешь иной раз в лабораторию, а в ответ: «так, молодежь, а ну-ка на выход, у вас ещё всё спереди». Ага, Мастера опять волноводы свои паяют, ретируемся-ка подальше от всех этих излучений высокой частоты и большой мощности, пока всё ещё действительно спереди…
Помню, как бегал полдня по радиорынку в поисках терморезисторов определенного номинала, и с каким замиранием сердца скручивал и запускал всю эту кунсткамеру. Как ни странно, аппаратная часть заработала, ожил датчик оборотов, да и термометр врал всего на пару градусов. Проблема, как обычно, была в банальном отсутствии адекватного софта для сервера noname, работающего под управлением FreeBSD версии 2...

И вот я уже почти собрался повторять свой подвиг двадцать лет спустя, но тут попалась альтернатива в виде EverCool Armor HDD Cooling Box (или просто HD-AR). В спецификации написано, что этот крашеный кусок железа совместим с Intel Core i7. Ого, ну тогда на моем P4 это будет вообще бомба… нет, маркетологи точно нужны, без их причуд мир был бы скучнее.


EverCool Armor HDD Cooling Box (HD-AR)

Эта штука превращает два 5.25" в три 3.5", что даст возможность посадить в мою «башню» ещё шесть шпинделей и оставить один отсек 5.25" под что-нибудь эдакое. Да, вентилятор тут поменьше и погромче, чем на Cooler Master STB-3T4-E3-GP, но я его заменю на какой-нибудь майбах мерседес из мира вентиляторов. Например, на австрийца Noctua NF-R8 (от Штутгарта недалеко уехали, кстати). Продавец, дайте по два и того, и другого!

Посмотрим, что здесь у нас. Ага, разбирается HD-AR довольно легко:


Несущая рама из крашеного железа


Сменные вставки на 3.5" или 2.5" (на выбор)


Нужная вставка садится на раму через виброгасящие резиновые втулки


Пластиковая «морда» с откидной крышкой


Кондовый шариковый вентилятор на 26dBa



Лендроверы пару родных вентиляторов от HD-AR сразу же меняем на мерседесы рыжебородых австрийских близнецов Noctua NF-R8. Резисторную вставочку подберем позже, в комплекте с NF-R8 дается аж две: на 1300rpm (шум 10dBa) и 800rpm (7dBa). Без вставочки будет 1800rpm на 17dbA.

Кстати: NF-R8 управляется напряжением и имеет три традиционных контакта: земля, датчик оборотов и питание DC 4..13В. Но у NF-R8 есть и более технологичный брат NF-R8 PWM, управляемый уже ШИМ: добавляется четвертый сигнальный контакт, а напряжение фиксируется на 12В. Так что если у вас есть соответствующее железо, либо если вы самостоятельно разрабатываете схемы на микроконтроллерах, выбирайте правильное изделие.



Закрепляем NF-R8 собственными резиновыми вставками


Рыжий австриец смотрится в HD-AR совершенно естественно

У этой конструкции один недостаток: «горячая» замена возможна только для пылевых фильтров, а для замены диска требуется вынимать корзину из корпуса (но не разбирать ее). Время замены диска увеличивается примерно до 20 минут полного останова, что для моей задачи оказалось допустимо. Зато между дисковым контроллером и диском нет ничего, кроме кабеля.
Кстати: количество циклов «втыкания» у обычного разъема SATA обычно составляет 50 раз, в отличие от eSATA

Итак, взяв свой сисадминский чемоданчик и переделанные заблаговременно корзины, заявляемся зимним субботним утром в офис на регламентные работы. Открываем компьютер, оставляем на столе дисковые внутренности и выходим на улицу подышать. Корпус без дисков непривычно легкий, как кастрюля без супа. С удовольствием и под внимательными взглядами прохожих, набрав полные легкие морозного воздуха, выдуваем пылищу к чёртовой бабушке из всех щелочек и радиаторов. Эх, бодра-весела наша русская зимушка-зима! Вспоминается что-то от Николая Алексеевича Некрасова про здоровый и ядреный воздух, который усталые силы бодрит. Провентилировав вместе с сервером заодно и системного администратора, с порозовевшим лицом и небольшим головокружением возвращаемся в уютное тепло офиса. Собираем. Ровняем, нумеруем и подбираем сразу все десять кабелей SATA разборными стяжками.


Макаронные изделия — прочь из серверных корпусов!

Так намного красивее, но не увлекайтесь: тугой жгут может слишком сильно потянуть «на себя», и в результате через некоторое время из какого-нибудь неудачливого диска может вырвать питание или интерфейс. Это же обычные, почти бытовые изделия, в них не предусмотрена защита от ударов и вибраций в виде замков и защёлок. Убедитесь, что кабели слегка провисают без напряжений.

Как раскрутить десяток шпинделей


Не секрет, что шпиндельный диск потребляет совершенно различную мощность при раскрутке (старте) и в установившемся режиме. Если рассчитывать на экономичный поочередный старт (staggered spin up), требуется поддержка в контроллере, либо активная дисковая корзина с backplane (которую я не хочу использовать). Поддержка софтом управляемого поочередного старта пока под большим вопросом, хотя APM на дисках имеется.
Пусковой ток современного шпинделя составляет порядка 2А по линии 12В (у ST2000DM001 даже 2.5А и я опять скажу, что их не стоит использовать в RAID, но не из-за большей мощности, а по причине отсутствия ERC; читайте habrahabr.ru/post/92701). Четыре стартующих диска в сочетании с холодной архитектурой P4 без графики уже поместились в 250Вт и проблем не обнаруживали. Ещё шесть дисков — это плюс 6 x 2.0А x 12В = 144Вт. Итого мы целимся на десять дисков и почти 400Вт стартовой мощности с блоком питания номиналом 450Вт. Отработать на пиковом потреблении надо менее полуминуты.
400Вт: много это или мало? По меркам 2005 года столько потреблял настоящий сервер известной торговой марки Ӽарлампий-Панкрат. Сейчас же я вижу в продаже киловаттные потребительские блоки питания, правда, продавцы не подсказали способов истратить более 60% их мощности. Ладно, в сторону маркетинг, мы же делаем очень бюджетную конструкцию, почти из хлама.


Шильдик на блоке питания рассказывает о его мощностных способностях

UPD:
Это очень примитивный блок питания, который, судя по субъективным наблюдениям, начинает терять номинал через полгода работы. Лучше не используйте его.

Итак, присмотревшись внимательнее к шильдику на блоке ATX-450PNR, видим две независимых линии 12В: +12V1 на 14А (мать, «молексы» и SATA), и дополнительная +12V2 16А (4-контактный разъем mini-fit для питания современных мощных комплектующих). Суммарная мощность по линиям 12В ограничена 360Вт. Но мощную линию с разъемом mini-fit почти на 200Вт нам пока решительно не к чему подключить в нашем архаичном наборе железа, и блок питания 450Вт снова превратился в 250Вт. Делаем беглый взгляд по просторам Интернета на более мощные блоки питания и видим схожую картину: добавленная мощность распределяется порциями по таким же линиям с разъемами mini-fit, только их становится больше (для процессора, видеокарты и других нагревательных элементов современного компьютера).
Настало время для инженерной смекалки.

Как же вынуть эти 200Вт и подать их на диски? По идее, ничто не мешает взять линию на 5В 16А, но вместо общей +12V1 на 14А скрестить в стандартном «молексе» с мощной линией +12V2 на 16А, добавив «земли» туда же. Конечно, можно перекусить плоскогубцами провода, зачистить их своими (или чужими) зубами, переплести жилы пальцами и замотать чем-нибудь поверх, но это идет вразрез с философскими практиками Крепсондо: (1) блок питания на гарантии, (2) короткие замыкания не нужны и (3) надо обеспечить максимальную ремонтопригодность изделия, чтобы быстро заменять отказавший агрегат. Поэтому снова идем за покупками и берем 4-контактный ответный разъем mini-fit, а также Y-образный разветвитель низковольтного питания с «молексами». Клещи-кримпер для mini-fit и «молексов» по странному стечению обстоятельств давно соседствует в моем ящике инструментов с обжимкой для витой пары, машинкой для забивки кроссов и прочими любимыми игрушками сисадмина.
Итак, уединившись как-то вечером на кухне, извлекаем наши покупки для игры wirecraft. Чтобы скрафтить нужный Ҳ-образный разветвитель низковольтного питания, нужно соединить на столе пустой разъем mini-fit, Y-образный разветвитель и кримпер (не путать с крипером).





Через два часа крафта и нескольких испорченных контактов нужный переходник в виде буквы Ҳ всё-таки появляется на столе, а кримпер теряет порядка 0,01% durability.




Полученный в итоге Ҳ-переходник встретился с блоком питания, как Ромео с Джульеттой, образовав надежное разборное соединение с защелкой. Если надо будет срочно заменить блок питания, всё разбирается и собирается обратно без всякой пайки, изоленты и матюков.


Переставляем шесть дисков в корзины верхнего яруса 5.25", спрятав их за пылевые фильтры. Нижний ярус пока свободен, поэтому отсоединяем нижний вентилятор, чтобы не тянул пыль зазря. Подключаем питание шести верхних дисков на отдельную линию через только что собранный переходник. Собираем, включаем, тестируем тракты SATA. Выбрасываем очередной выявленный ХERIAL ATA кабель. Берем припасенный специально на такой случай запасной кабель (клянусь, правда), ещё раз включаем, снова проверяем тракт SATA. Работает.
Посмотрим, какой бравый красавец получился из старины Зевса.


Корпус с двумя корзинами теперь вмещает Χ дисков

UPD:
Всё это, конечно, довольно увлекательно, но подбираться близко к номиналу бюджетных блоков питания я точно не рекомендую. Лучше возьмите блок подороже с запасом мощности около 30%, но не менее 200Вт. Смотрите внимательно на линии питания, чтобы не оказаться в описанной мною ситуации. Чтобы обойтись без wirecraft, удобнее всего иметь одну линию 12В большой мощности, а проблемы её подвода блок питания пусть решает своими «мозгами». За это вы и платите.

О пользе пылевых фильтров


Так уж совпало, что незадолго до установки корзин в нижнем дисковом ярусе сработала тревога по перегреву, о чем я тут же прочитал уведомление на смартфоне благодаря smartd(8) и FreeNAS Email Alert: в этом и состоит главная польза от телеметрии. Оказалось, что самый верхний диск в группе впервые за всё время разогрелся до 45°C (предельной считается 60°C), и это при том, что на улице мороз где-то -25°C. Вот так номер! Других уведомлений не приходило, значит, зеркала не бились, и реконструкций массивов не было. А как же тот самый вентилятор в труднодоступном месте (см. начало истории)? Заглянем по SSH. Вся четверка шпинделей уютно пригрелась друг к другу, выполняя какое-то там обычное копирование с пары на пару. По мере продвижения по четверке сверху вниз температура падает на 2..3°C с каждым диском. Поставив по-быстрому mbmon(1), видим, что вентилятор крутится себе с вполне нормальной скоростью (это рассказал установленный на материнской плате Winbond W83627). Что за чертовщина? Вспоминаем, что площадка — это далеко не зал ЦОД с классом чистоты Ẋ, а довольно стандартный офис с обычной пылью, которую наш ящик пылесосит уже почти полгода. Представив себе, как это инженерное проклятие набилось в весьма жадные зазоры между дисками, я подумал, что надо как-то решать проблему фильтрации и переставил все имеющиеся шесть дисков в верхний ярус 5.25".
Так что не пренебрегайте пылевыми фильтрами в нафаршированных корпусах: иначе это либо тепловая мина замедленного действия (на малых оборотах), либо звонкий аэродром (на высоких оборотах вентиляторов). Обслуживание штатных пылевых фильтров элементарно: раз в месяц открываем крышку на «морде», достаем фильтр, стираем в раковине обычным мылом, отжимаем руками, обстукиваем слегка от капель и вставляем обратно. Идеальной сухости не надо, чай не насос высокого давления, в корпус воды не натянет. Вместо горячей замены дисков — горячая замена фильтров, тоже неплохо.


Фильтр после месяца работы в офисе на самых нижних оборотах

Выводы

  • Потребительские блоки питания плохо предназначены для серверных задач (спасибо, Капитан Очевидность).
  • Для поочередного запуска (staggered spin-up) нужна активная дисковая корзина с «горячей заменой» (дороже и не всегда лучше), либо APM на дисках и поддержка софтом (не нашёл таковую).
  • У бытового блока питания хватает мощности на старт десяти дисков, но эту мощность приходится брать с отдельной линии через переходник низковольтного питания.
  • UPD: лучше взять блок питания подороже и с запасом мощности 30% по номиналу, но не менее 200Вт; а ещё лучше — серверный корпус


Весенняя история (18+)
А вот и обещанная история ӾӾӾ.
Дело было в старшей группе пионерского лагеря. Едва совершеннолетний сисадмин как-то поздно вечером возвращался то ли с объекта, то ли ещё откуда. И вдруг… Проходя мимо душевой, он услышал странные звуки. Сначала тихо, но потом громче. Странно. Молодой сисадмин решил проверить обстановку. И что же? Совершенно голый мужик в совершенно голом душе мылит совершенно голую женщину. У молодого сисадмина, кстати, обладавшего совершенно традиционной ориентацией, от такого зрелища аж закипели слюни. В этот момент пара заметила молодого сисадмина, но, ничуть не смутившись, предложила присоединиться к банному процессу. Тут у молодого сисадмина свело уже в другом месте, пульс подскочил, и он, конечно тут же… проснулся.
Четыре ночи подряд доставал сисадмина проклятый мужик, являясь тому во сне при тех же обстоятельствах и с теми же перспективами. И все четыре раза сисадмин в самый неудачный момент просыпался от избытка чувств (весна, молодой растущий организм, и всё такое).
На пятую ночь молодой человек, наконец, овладел техникой управления сном. И хоть был он совершенно традиционной ориентации, но от накопленной злости успел таки всадить нефритовый йенг мужику прямо промеж зубов ровно до того момента, как проснулся. Потому что молодым сисадминам тоже нужны любовь и ласка.


Ссылки


www.freenas.org
doc.freenas.org/index.php/Settings#General_Tab
doc.freenas.org/index.php/Settings#Email_Tab
doc.freenas.org/index.php/Cron_Jobs
doc.freenas.org/index.php/S.M.A.R.T.
doc.freenas.org/index.php/S.M.A.R.T._Tests
doc.freenas.org/index.php/Volumes#Viewing_Volumes
doc.freenas.org/index.php/Volumes#Viewing_Disks
doc.freenas.org/index.php/Windows_%28CIFS%29_Shares
www.freebsd.org/cgi/man.cgi?query=dd&sektion=1
www.freebsd.org/cgi/man.cgi?query=mail&sektion=1
www.freebsd.org/cgi/man.cgi?query=mbmon&manpath=ports&sektion=1
www.freebsd.org/cgi/man.cgi?query=uuencode&sektion=1
www.freebsd.org/cgi/man.cgi?query=smartd.conf&manpath=ports&sektion=5
www.freebsd.org/cgi/man.cgi?gmirror%288%29
www.freebsd.org/cgi/man.cgi?query=mount_nullfs&sektion=8
www.freebsd.org/cgi/man.cgi?query=smartd&manpath=ports&sektion=8
searchstorage.techtarget.com/tip/Failed-RAID-drives-need-immediate-attention
www.samba.org/samba/docs/man/manpages-3/smb.conf.5.html#DFREECOMMAND
forums.nas4free.org/viewtopic.php?f=18&t=1552
linux.die.net/man/8/mount
www.collectd.org
www.rsyslog.com
smartmontools.sourceforge.net/man/smartctl.8.html
www.coolermaster.com/case/case-accessories/4-in-3-device-module
www.evercool.com.tw/products/hd-ar.htm
www.brownbear.ru
www.noctua.at/main.php?show=productview&setlng=en&products_id=9
www.noctua.at/main.php?show=productview&setlng=en&products_id=45
www.fsp-power.ru/product/atx_450pnr
www.fsp-group.com.tw
www.wikipedia.org/wiki/Comparison_of_S.M.A.R.T._tools
www.wikipedia.org/wiki/Spin-up

Другие части истории про Ещё один NAS своими руками:
часть 1: из того, что было
часть 2: хорошие воспоминания
часть 3: приключения в старой башне
часть 4: призрак Чернобыля
Only registered users can participate in poll. Log in, please.
Насколько хороши для нужд малого бизнеса активные дисковые корзины SATA с «горячей заменой» стоимостью порядка $100?
76.36% Я лично сталкивался с аппаратными проблемами дешёвых корзин и применять их без острой нужды в горячей замене не рекомендую84
23.64% Я много раз обслуживал серверы с дешёвыми SATA-корзинами для «горячей замены» и всегда рекомендую их использовать26
110 users voted. 297 users abstained.
Tags:
Hubs:
Total votes 47: ↑44 and ↓3+41
Comments34

Articles