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С со штатным кулером. 

Комментариев нет:

Отправить комментарий