Powered By Blogger

понедельник, 13 марта 2023 г.

Не загружается Adaptec raid controller - пропатчил ядро Ubuntu

 Все таки есть умные люди, которые выяснили в чем причина и даже сделали патч для ядра, которые исправляет крайне херовую ситуацию с райд-контроллером. Дело было в следующем:

Воткнул райд-контроллер  Adaptec 5405, собрал массив, поставил Бубунту 22 залил данные, проработал неделю довольный и решил перезагрузится, а сервер не грузится, ни с первой ни с 10-й попытки, а с 20-й. На 7 винде все грузится нормально (установлена рядом)

Решение нашел тут:

https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1777586

Собственно сам патч:

https://patchwork.kernel.org/project/linux-scsi/patch/20190819163546.915-2-khorenko@virtuozzo.com/

Еще пару часов Бубунта поделала мне мозги c библиотекой libcrypt-dev которая не хотела вставать из-за версии libc6. Обновлял пакеты вручную, потом применял исправление:

wget http://archive.ubuntu.com/ubuntu/pool/main/g/glibc/libc6_2.35-0ubuntu3.1_amd64.deb

wget http://archive.ubuntu.com/ubuntu/pool/main/g/glibc/libc6-dev_2.35-0ubuntu3.1_amd64.deb

wget http://archive.ubuntu.com/ubuntu/pool/main/g/glibc/libc-dev-bin_2.35-0ubuntu3.1_amd64.deb

wget http://archive.ubuntu.com/ubuntu/pool/main/libx/libxcrypt/libcrypt-dev_4.4.27-1_amd64.deb

dpkg -i libc6-dev_2.35-0ubuntu3.1_amd64.deb

dpkg -i libc-dev-bin_2.35-0ubuntu3.1_amd64.deb

dpkg -i libc6-dev_2.35-0ubuntu3.1_amd64.deb

dpkg -i libcrypt-dev_4.4.27-1_amd64.deb

apt --fix-broken install

Далее выкладываю листинг команд:

apt install libncurses-dev dwarves build-essential gcc bc bison flex libssl-dev libelf-dev

apt-get install linux-source

tar -xjf linux-source-5.15.0.tar.bz2

cp /boot/config-5.15.0-58-generic .config

make menuconfig

sed -i '/CONFIG_SYSTEM_TRUSTED_KEYS/s/^/#/g' .config

vim .config для правки CONFIG_LOCALVERSION="-raid-edition"

scripts/config --undefine GDB_SCRIPTS

scripts/config --undefine DEBUG_INFO

scripts/config --undefine DEBUG_INFO_SPLIT

scripts/config --undefine DEBUG_INFO_REDUCED

scripts/config --undefine DEBUG_INFO_COMPRESSED

scripts/config --set-val  DEBUG_INFO_NONE       y

scripts/config --set-val  DEBUG_INFO_DWARF5     n

patch -p1 -i aacr.patch

make -j2

make modules

make modules_install

make install

reboot

 Содержимое aacr.patch:

diff --git a/drivers/scsi/aacraid/aacraid.h b/drivers/scsi/aacraid/aacraid.h

index 3fa03230f6ba..ddfa78c05728 100644

--- a/drivers/scsi/aacraid/aacraid.h

+++ b/drivers/scsi/aacraid/aacraid.h

@@ -2740,6 +2740,17 @@ static inline int aac_is_src(struct aac_dev *dev)

  return 0;

 }

 

+static inline int aac_is_srcv(struct aac_dev *dev)

+{

+ u16 device = dev->pdev->device;

+

+ if (device == PMC_DEVICE_S7 ||

+     device == PMC_DEVICE_S8)

+ return 1;

+

+ return 0;

+}

+

 static inline int aac_supports_2T(struct aac_dev *dev)

 {

  return (dev->adapter_info.options & AAC_OPT_NEW_COMM_64);

diff --git a/drivers/scsi/aacraid/comminit.c b/drivers/scsi/aacraid/comminit.c

index d4fcfa1e54e0..1918e46ae3ec 100644

--- a/drivers/scsi/aacraid/comminit.c

+++ b/drivers/scsi/aacraid/comminit.c

@@ -349,8 +349,7 @@ int aac_send_shutdown(struct aac_dev * dev)

  /* FIB should be freed only after getting the response from the F/W */

  if (status != -ERESTARTSYS)

  aac_fib_free(fibctx);

- if (aac_is_src(dev) &&

-      dev->msi_enabled)

+ if (aac_is_srcv(dev) && dev->msi_enabled)

  aac_set_intx_mode(dev);

  return status;

 }

@@ -605,7 +604,7 @@ struct aac_dev *aac_init_adapter(struct aac_dev *dev)

  dev->max_fib_size = status[1] & 0xFFE0;

  host->sg_tablesize = status[2] >> 16;

  dev->sg_tablesize = status[2] & 0xFFFF;

- if (aac_is_src(dev)) {

+ if (aac_is_srcv(dev)) {

  if (host->can_queue > (status[3] >> 16) -

  AAC_NUM_MGT_FIB)

  host->can_queue = (status[3] >> 16) -

diff --git a/drivers/scsi/aacraid/linit.c b/drivers/scsi/aacraid/linit.c

index 644f7f5c61a2..c8badc9d9ae7 100644

--- a/drivers/scsi/aacraid/linit.c

+++ b/drivers/scsi/aacraid/linit.c

@@ -1835,7 +1835,7 @@ static int aac_acquire_resources(struct aac_dev *dev)

  aac_adapter_enable_int(dev);

 

 

- if (aac_is_src(dev))

+ if (aac_is_srcv(dev))

  aac_define_int_mode(dev);

 

  if (dev->msi_enabled)

В итоге у меня загрузилось более новое ядро linux-image-5.19.0-35-generic а не мое, так как перед этим обновился, но я уже так затрахался что поставил утилиту я мышкой перетащил скомпилированное ядро наверх загрузки:
apt install grub-customizer

Да, на моем процессоре  Intel(R) Pentium(R) CPU G3220 @ 3.00GHz сборка заняла неприлично много времени, часа 3-4. Даже с учетом того что я отключил компиляцию пакетов с дебагом, ну или я так думаю что отключил, т.к. в новой версии ядер оно отключается иначе. Порадовало только что при 100% нагрузке на оба ядра температура проца не поднималась выше 49С со штатным кулером. 

среда, 1 марта 2023 г.

Подключение SAS диска к домашнему компьютеру

 Пару лет как лежал без дела серверный жесткий диск SAS 10k энтерпрайз класса - идеальный вариант для хранения видео коллекции =) Продавать пробовал, но особо никому он не нужен, как раз таки по причине проблем с его подключением. Конечно в сервер с корзинами и raid-массивом запихать очень легко и просто, но не у каждого дома есть такой. А организации закупаются у дистрибьютеров с НДС.

Варианта было два. Купить китайскую материнскую плату с поддержкой SAS или купить б/у RAID-контроллер - так как у новых цена очень кусачая.

При этом на некоторых платах есть разъем SAS для подключения дисков (так же продаются и такие контроллеры на 4-8 портов) - но по факту они работают с SATA-дисками. Что это за диски такие и для чего это нужно, я не стал вдаваться в подробности.  

Решено было идти по пути наименьших затрат, а именно озадачился покупкой б/у контроллера, более-менее нормальный котроллер, из того что было в продаже, оказался 4-х портовый Adaptec 5405 с батарейкой, и главное, с кабелем. Потому-то отдельно кабель продавался от 500 до 1500 р. А так сам контроллер обошелся в 3500. 

Также был заказан переходничек на али за сотку. А иначе без него никак, ведь у SAS-дисков совмещенный разъем = дата + питание. Молодцы все таки китайцы, чего только не понапридумают. 

Компьютер - будущий файловый сервер, собирал из того что было или можно было нарыть бесплатно. В итоге получилась следующая конфигурация: Asus 610, Intel Pentium G430, 2 Gb DDR III - конечно хотел 4 Гб, но вторая планка оказалась битая, успев перед этим как следует поделать мне мозг. SSD-диск на 120 под систему. 

Контроллер сразу определился - зашел в управление через Ctrl+A, без каких либо проблем подружился с диском и был создан массив, иначе нельзя.

Что сразу насторожило - сильный нагрев радиатора, буквально за пару минут палец нельзя было держать более 1с. Был установлен (положен) кулер на 120 в направлении обдува радиатора контроллера. В текущем состоянии, независимо от нагрузки температура держится постоянно в диапазоне 68-70 С. Не знаю много это или нет, но работает. 

Изначально установил Windows 7, подоткнул дрова на контроллер - https://adaptec.com/en-us/support/raid/sas_raid/sas-5405/, все взлетело. Установил Adaptec Storage Manager https://adaptec.com/en-us/downloads/storage_manager/sm/productid=sas-5405&dn=adaptec+raid+5405.html. Несколько часов был счастлив, до первой перезагрузки. Контроллер висел в стадии инициализации и не давал прогрузиться дальше. Выключил, подождал, включил - работает. Далее все повторилось. Потом комп просто стал зависать в процессе работы, даже без нагрузки. 

Решил перепрошить контроллер на последнюю доступную версию прошивки, нашел прошивку, сделал USB-загрузочную DOS флешку, прошил удачно. Не помогло. Также загрузка могла пройти успешно, а могло все зависнуть. 

Установил Ubuntu - на мое удивление все драйвера подцепились без проблем на автомате, все заработало из коробки. Установил рядом с Windows 7 - возможность загрузки во враждебную систему сохранена, доступ к разделам тоже есть несмотря на NTFS файловую систему.

В качестве средства мониторинга была установлена утилитка ARCCONF - https://storage.microsemi.com/en-us/speed/raid/storage_manager/arcconf_v3_04_23699_zip.php

Настраивал как тут - https://dzek.ru/blog/linux/145.html

Меня больше интересовала температура контроллера, поэтому создал алиас - быструю команду:

alias raid_temp='sudo /home/linux_x64/arcconf GETCONFIG 1 AD | grep Temp'

Прописывается в .bashrc. Теперь достаточно набрать raid_temp что бы узнать текущую температуру:

Temperature                                : 69 C/ 156 F (Normal)

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

Расстроившись, пнул системник в дальний угол и положил на него в прямом и переносном смысле на несколько месяцев. Немного под остыв - включаю, ляя, все работает. Подергал, потыкал - тьфу тьфу - запускается. Установил последние обновления, настроил шару, торренты, DLNA-сервер - подключил к телевизору. Ну пока работает. 

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

UPD: Проблема с зависанием при инициализации контроллера решил при помощи пересборки ядра. Все таки Ubuntu - это линукс, хочешь на ней работать, ставь патчи на ядро.