Апгрейд домашнего сервера. Пятнадцать лет спустя

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

Однако в последние годы возраст стал ощущаться сильнее. Я по мелочи апгрейдил систему — нарастил оперативку, поставил NVMe через PCIe-переходник, — но в какой-то момент с удивлением обнаружил, что даже мой старенький ноутбук в несколько раз быстрее сервера.

Это в целом не было проблемой, пока я не увлёкся экспериментами с LLM. Первой практической задачей стала установка Immich для интеллектуальной каталогизации фотоархива. Это, пожалуй, был тот самый момент, когда я окончательно понял: потолок возможностей достигнут. 8 ГБ оперативной памяти и четырёхъядерный Intel Core 2 Quad — это максимум, что можно выжать из материнской платы Intel DQ45CB. Для комфортной работы Immich этого, увы, маловато. Жить можно, но раскрыть потенциал системы уже не получается.

Так что когда я узнал, что коллега продаёт за разумные деньги вполне мощную материнку Gigabyte Z590 с процессором Intel Core i5 11400F, я решился. И, хотя я прекрасно осознавал, что без сложностей процесс переезда не обойдётся, я не предполагал, сколько всевозможных граблей мне придётся собрать по пути. Я даже подумал, что стоит поделиться ими с общественностью — кому-то, возможно, будет полезно, а кто-то просто посмеётся :)

Первые сложности и сюрпризы

Первым делом я разложил приобретённое железо на столе. Подключил к запасному блоку питания, раскопал старый кабель DisplayPort (ничего другого из видеовыходов на материнке не было, даже HDMI). Система помигала лампочками, после чего зажгла в уголке красный светодиод с подписью VGA и больше ничего не произошло.

На этом месте я вспомнил о предупреждении своего коллеги, продававшего мне железо: "процессор без графического ядра!". Я не придал значения этой мелочи, поскольку был уверен, что на всех современных материнках есть видеомодуль. Да и наличие Display Port как бы подтверждало эту мысль... но, как оказалось, я отстал от жизни: история за несколько десятков лет успела сделать полный разворот.

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

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

Однако технологии на месте не стоят. Дальнейшая миниатюризация привела к тому, что графическую подсистему (и не только) стало проще реализовывать прямо в процессоре. А раз так — зачем дублировать её на материнке? И постепенно платы снова стали выпускать без встроенного видео. Круг замкнулся.

Казалось бы, мне-то что до того? А дело как раз в том, что некоторые процессоры выпускаются без графического ядра, и они ощутимо дешевле своих "полноценнных" собратьев. Ходят споры на тему того, специально это делается или нет — есть версия, что это своего рода "легализованный" заводской брак. Каждый модуль процессора проходит тщательное тестирование, и если хотя бы один модуль оказался бракованным — весь процессор идёт в утиль. Но если на кристалле процессора не прошло тесты только графическое ядро, его просто отключают и продают как модель "F" — со скидкой. А что — отличный вариант для геймеров, которые всё равно ставят дискретную видеокарту!

И вот мне достался как раз такой процессор. Видеосистемы не было ни на нём, ни на материнке. Видеовыход вроде бы есть, но при этом он ни к чему не подключён. Получившаяся система попросту не умеет выводить изображение на экран. И хотя для Linux-сервера, к которому я подключаюсь исключительно по сети, это вроде бы не проблема, на этапе настройки мне видеокарта потребуется. Да и потом тоже не помешает — мало ли, сеть отвалится, или в BIOS поковыряться придётся, или ещё что-нибудь в этом роде...

Новая видеокарта

Раз уж мне всё равно потребуется видеокарта — то почему бы благородному дону не приобрести полноценную дискретную модель с GPU? Тем более, что я всё равно планировал экспериментировать с LLM-ками, так что тут сам бог велел озаботиться. Посоветовался с Дипсиком, какая модель лучше подойдёт для моих целей (картина маслом: кожаный мешок консультируется с языковой моделью, какое железо ему лучше подобрать для работы с языковыми моделями!). Бюджет, конечно, сразу вырос вдвое по сравнению с первоначальным, но что уж там...

В итоге я нашёл на Авито довольно мощную видеокарту Palit Geforce 1080 11Gb в очень приличном состоянии. Дипсик одобрил, сделка состоялась :)

Карта приехала... и не завелась. Проблема была не в ней — просто ей банально не хватило питания. У неё на борту два разъёма питания, и подключить надо было оба — о чём она мне недвусмысленно и сообщила первым делом, как только экран, наконец, засветился.

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

Подобрать замену оказалось несложно. Бюджет, конечно, ещё немножко подрос, а также пришлось подождать ещё пару дней, пока приедет новый CHIEFTEC Smart 700W, но с ним разложенный на столе кадавр, наконец, завёлся и хотя бы позволил зайти в BIOS.

Обновление драйверов на ходу

Отлично, железо завелось — теперь надо попробовать загрузить операционку. Я выключил стоящий под столом сервер, достал из него системный диск и подключил к конструкции на столе. Включил.

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

Процесс реанимации был осложнён одним существенным фактором: сеть не работала. Вообще. Linux почти прямым текстом заявил: "Я понятия не имею, куда делась сетевая карта, под которую я настроен! А к той, что у тебя тут стоит, у меня драйверов нет!"

Дипсик подсказал, какие драйверы нужны и где их искать. Но выяснилось, что эти драйвера требуют кучки библиотек, от которых они зависят. Те, в свою очередь, от других библиотек. И так почти до бесконечности. Вручную установить, по одному скачивая библиотеки и подтаскивая их к системе, где не работает интернет — практически нереальная задача.

По-хорошему, надо было загружаться с LiveUSB и настраивать оттуда. Но я сделал проще: вернул загрузочный диск на прежнее место, установил все необходимые драйвера на старой, работающей системе, после чего снова запустил "кадавра" на столе — и система, наконец, полноценно запустилась! Я даже зашёл на неё привычным образом: по сети с ноутбука.

В этот момент у меня сложилось ощущение, что можно потихоньку начинать переезд.

Технический долг пятнадцатилетней давности

Пятнадцать лет назад, когда я впервые собирал этот сервер, у меня под рукой почему-то не оказалось нужного количества латунных стоек для крепления материнской платы. В идеале их нужно девять: по три с боков и ещё три посередине — тогда плата лежит жёстко и устойчиво, не "играя".

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

И вот теперь, открутив от корпуса старую материнку и смахнув пятнадцатилетнюю пыль, я в полный рост осознал, что вернулась прежняя дилемма: откладывать сборку или снова крепить плату "на соплях". Обидно? Конечно!

Почему-то за 15 лет новых стоек не выросло... Фото старой материнки — на память

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

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

А запасной комплект латунных стоек я после этого всё-таки заказал. На всякий случай :)

SATA: конфликт поколений

И вот материнская плата наконец-то обосновалась в моём старом и заслуженном корпусе. Она даже влезла, хотя я до последнего опасался, что места не хватит. Подключил всю периферию: вентиляторы, жёсткие диски, провода от лампочек и кнопочек. В процессе всплыло несколько некритичных мелочей — например, все вентиляторы оказались с трёхпиновыми штекерами, а на материнке — только четырёхпиновые разъёмы. Но Дипсик меня успокоил: мол, разъёмы обратно совместимы, смело втыкай.

Собрал, включил — и система не стартует. Показывает заставку и наглухо виснет.

Методом научного тыка (последовательного отключения всего подряд) выяснил, что проблема в двух дополнительных жёстких дисках. Если хотя бы один из них подключён — система виснет. Если оба отключены — всё загружается.

Уже неплохо, но что делать-то? Пошёл жаловаться Дипсику, но его куда-то не туда понесло:

— Эти порты, скорее всего, конфликтуют с NVMe, у этой модели материнки есть ограничения...
— Я знаю про эти ограничения, я читал спецификацию. Конкретно в этой конфигурации конфликтов быть не должно.
— Значит, порты на материнке неисправны!
— Да нет, когда я в эти же порты втыкаю системный диск, всё грузится.
— Тогда всё ещё хуже! Наверняка навернулись жёсткие диски!
— Ага, оба сразу, конечно...

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

Дело оказалось вот в чём: материнка пытается работать по современному протоколу SATA III (6 Гбит/с), а салазки — древние, они рассчитаны на старый добрый SATA II (3 Гбит/с) и на высокой скорости просто "захлёбываются". Самое забавное, что если система уже загрузилась, то салазки можно подключить "на горячую" — и тогда уже они прекрасно работают. Проблемы возникают исключительно только на старте.

Но, как ни крути, схема "отключить салазки, включить сервер и, пока он не успел загрузиться, включить салазки обратно" — это не совсем то, о чём я мечтал. В голове даже уже успела оформиться малодушная мысль отказаться от салазок совсем и поселить диски в корпусе стационарно...

Самодельная система охлаждения. Тишина прежде всего!

Самое ценное в тех старых салазках — встроенные вентиляторы. Да, маленькие, слабенькие и вечно ломающиеся, но они не давали температуре HDD подняться выше штатной. А диски у меня на 4 и 6 Тб, они серьёзно греются, так что совсем без охлаждения их ставить просто нельзя.

А во всех новых салазках, которые я видел, вентиляторов нет. Я даже пробовал такие — жёсткий диск в них нагревался до 60 градусов, что для длительной работы совершенно неприемлемо.

Честно говоря, я и не заметил, когда салазки с кулерами исчезли из продажи. Но факт: все современные модели видимо, рассчитаны на внешнее охлаждение — тот самый мощный нагнетаемый поток, как в серверных стойках. Я бывал в таких — там местами воздух дует так, что чуть с ног не сбивает!

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

Удивительно, но ничего хотя бы отдалённо похожего и подходяшего по вышеупомянутым критериям я в продаже не нашёл. Вообще, ни за какие деньги. Менять корпус очень не хотелось — я к нему привык, да и кто знает, какие новые грабли будут поджидать меня с новым корпусом.

Постепенно в голове оформилась идея. У меня есть старые сломанные салазки с рабочим питанием (и даже чёрного цвета!). А что, если вместо штатного 40-миллиметрового вентилятора, который дует вдоль, вкрячить туда плашмя большой 120-миллиметровый? Питание там стандартное, 12 вольт, а пластик я как-нибудь расковыряю.

Взял в итоге самый тихий вентилятор на 1200 оборотов — его вообще почти не слышно. Дует, правда, тоже не сказать чтобы очень сильно, и я до последнего боялся, что что потока воздуха окажется недостаточно для охлаждения, и вся затея окажется бессмысленной.

Но нет — всё получилось в лучшем виде! Мне даже удалось вырезать в пластике защёлку, чтобы вентилятор вставлялся «до щелчка», но его можно было легко вынуть — например, для замены.

Единственное, что обидно — несмотря на то, что разъёмы на плате и на вентиляторе совпали, подключить их напрямую было нельзя: полярность не совпадала! Разумеется, можно было разобрать коннектор и переставить проводки, но я ж наверняка потом про это забуду, когда через очередные пятнадцать лет придёт пора менять вентилятор, и я буду мучительно соображать, почему не ничего работает. Так что пришлось опять изобретать "колхоз": взял два разноцветных проводка от ардуино, воткнул их оба одним концом в разъём на плате, а другим — в коннектор вентилятора. Но вроде даже аккуратненько вышло :)

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

Вот так это всё теперь выглядит. Для сравнения рядом поставил фото пятнадцатилетней давности -- этот внешний вид практически не менялся со временем.

"Your Majesty, the building has been upgraded!" © А так было последние 15 лет

Заключение

В целом переезд можно считать успешным. Сервер по-прежнему работает и выполняет свои повседневные обязанности, плюс в нём теперь стоит значительно более современная "начинка", что позволит расширить спектр возлагаемых на него задач. При этом, кажется, удалось совместить несовместимое: вычислительную мощность, приемлемый температурный режим и тишину. Хотя за последним надо бы ещё понаблюдать — я думаю написать скриптик, собирающий показания всевозможных датчиков температуры в системе, и посмотреть на это дело в динамике: какие узлы и насколько сильно греются под нагрузкой. Связка Prometheus + Grafana мне неплохо знакома в теории, но настраивать её на практике пока не доводилось — вот и появился повод это исправить.

Резюмируя, могу сказать, что апгрейд оказался процессом непростым, но интересным и весьма познавательным. Я узнал кучу неочевидных мелочей, о которых раньше даже не задумывался. Ну и заодно получил практический опыт допиливания (местами даже в прямом смысле!) компонентов из того, что есть под рукой :) Мне как раз недавно попалась картинка — мне кажется, она будет отличной завершающей иллюстрацией:

Комментарии

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

Изображение myx

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

Во-вторых, я фактически и купил новый сервер под свои критерии, просто не сразу пришёл к пониманию, из чего он должен состоять. Или ты хочешь сказать, что я мог просто пойти в магазин и купить такую штуку в сборе? :)