PowerFlex. Подборка драйверов PowerFlex SDC для PowerFlex по требованию
Summary: В этой статье на основе базы знаний описывается, как включить компиляцию драйвера PowerFlex SDC по требованию в системах Linux.
Instructions
Эта функция предназначена для поддержки изменений двоичного интерфейса приложений (ABI) в ядре Linux, которые могут привести к сбою загрузки драйвера SDC, предварительно скомпилированного для другого ядра.
Исторически сложилось так, что установочный пакет SDC для Linux (RPM/DEB) содержал несколько модулей ядра SDC для различных ядер этого дистрибутива Linux. Для пользователей, выполняющих установку в дистрибутивах, таких как Ubuntu, которая выпускает частые обновления ядра, предусмотрена возможность настроить службу SDC для подключения к удаленному репозиторию драйверов SDC Dell и попытки загрузки SDC оттуда.
С помощью новой функции пользователи могут скомпилировать идеальное соответствие драйвера SDC для работающего ядра, не полагаясь на наличие соответствующего SDC в репозитории драйвера.
Целевая аудитория: Пользователи, которые часто обновляют свои ядра из соображений безопасности и используют специализированные пользовательские ядра, могут извлечь выгоду из этой функции.
Необходимые условия
Для успешного выполнения процедуры компиляции на хосте сервиса SDC должны быть установлены следующие пакеты:
- Последняя версия компилятора GNU C (GCC), GCC
- GNU make(1).
- Пакет разработки ядра для работающего ядра. Этот пакет обычно доступен со следующими именами:
- kernel-devel для дистрибутивов с помощью менеджера пакетов RPM. (Red Hat, SUSE и т.д.)
- linux-heads для дистрибутивов, использующих менеджер пакетов Debian (Debian, Ubuntu и т.д.)
Автоматическая компиляция
по требованиюЧтобы обеспечить автоматическую компиляцию драйвера SDC по требованию, хост должен соответствовать всем предварительным требованиям, перечисленным в разделе Необходимые условия выше. При запуске драйвера SDC сервис SDC пытается скомпилировать драйвер SDC, если выполняются все следующие условия:
-
SDC, соответствующий работающему ядру, недоступен в кэше драйверов.
Дополнительные сведения о кэше драйверов см. в разделе Кэш драйверов ниже. -
Файл с именем
/etc/emc/scaleio/scini_sync/.build_sciniСуществует.
Содержимое файла игнорируется. Однако пользователи должны оставить его пустым для возможных будущих улучшений.
Файл можно создать, выполнив командуtouch(1).
Ручная компиляция
SDC, узел компиляции должен удовлетворять всем предварительным требованиям, перечисленным в разделе Необходимые условия выше.
Чтобы вручную скомпилировать драйвер SDC, выполните следующие действия.
-
Скопируйте пакет компиляции из соответствующего каталога в кэше драйвера во временный каталог. Расположение пакета зависит от версии PowerFlex и дистрибутива Linux.
Например, пакет PowerFlex 3.6.3 SDC для дистрибутивов на базе Red Hat Enterprise Linux 9 выглядит следующим образом:/bin/emc/scaleio/scini_sync/driver_cache/RHEL9/3.6.3000.128/Dell-PowerFlex-scini_builder-3.6.3000.128.x86_64.tgz
Дополнительные сведения о кэше драйверов см. в разделе Кэш драйверов ниже. -
Перейдите во временный каталог и извлеките пакет компиляции.
Пример.tar xzf Dell-PowerFlex-scini_builder-3.6.3000.128.x86_64.tgz
-
Запустите
build_driver.shскрипт, расположенный на верхнем уровне извлекаемого содержимого. Без аргументов сценарий пытается скомпилировать драйвер для работающего ядра.
Чтобы скомпилировать для другого ядра, укажите путь к каталогам заголовков этого ядра с помощью команды "-o" и "-s" аргументы командной строки.
Для получения дополнительной информации о вызове выполните команду:build_driver.sh -h
-
Выходные данные процесса компиляции печатаются в стандартном выводе.
После успешной компиляции полученный файл драйвера SDC, scini.ko, можно найти по адресу./ini/scini.ko. -
Скопируйте файл драйвера с хоста компиляции на целевой хост SDC в каталог, соответствующий целевой версии ядра, в том же местоположении, что и пакет компиляции, в кэше драйвера.
Например, для драйвера, выполненного для версии ядра 5.14.0-362.24.1.el9_3.x86_64, целевой путь к файлу драйвера выглядит следующим образом:/bin/emc/scaleio/scini_sync/driver_cache/RHEL9/3.6.3000.128/5.14.0-362.24.1.el9_3.x86_64/scini.ko.
Additional Information
Кэш
драйвераДрайвер SDC, успешно скомпилированный для определенного ядра, будет скопирован в соответствующий каталог кэша драйвера, и его компиляция не будет запущена повторно.
Кэш драйверов находится в следующем местоположении: /bin/emc/scaleio/scini_sync/drive_cache.
Журнал
сборкиЕсли включена автоматическая компиляция по требованию, все журналы компиляции добавляются в /bin/emc/scaleio/scini_sync/driver_build.log.
Успешная компиляция заканчивается сообщениями, подобными следующему:
make: Entering directory '/usr/src/linux-headers-5.15.0-30-generic' "Following additional compilation's conditions are defined:" BLK_MQ_HEADER BLK_DEV_MAX_SEGMENTS SOCKET_HAS_NET_IN_CREATE BIO_BI_BDEV BIO_BI_STATUS BLK_QUEUE_FLAG_FUNCS BLK_INITIALIZE_RMQ_FN WAIT_QUEUE_ENTRY_T HAS_SCSI_REQUEST HAS_SCSI_REQ HAS_SCSI_CMND HAS_SCSI_IOCTL HAS_SCSI_IOCTL_WITH_GENDISK HAS_QUEUE_FLAG_DISCARD HAS_DISK_LIVE_IN_GENHD CC [M] /tmp/PowerFlex_driver_build_hpoM6l/ini/./linux/api/api_main.o CC [M] /tmp/PowerFlex_driver_build_hpoM6l/ini/./linux/api/api_mos.o CC [M] /tmp/PowerFlex_driver_build_hpoM6l/ini/./linux/api/api_net.o CC [M] /tmp/PowerFlex_driver_build_hpoM6l/ini/./linux/api/api_ioctl.o CC [M] /tmp/PowerFlex_driver_build_hpoM6l/ini/./linux/api/api_blk_io.o CC [M] /tmp/PowerFlex_driver_build_hpoM6l/ini/./linux/api/api_blk_dev.o LD [M] /tmp/PowerFlex_driver_build_hpoM6l/ini/scini.o "Following additional compilation's conditions are defined:" BLK_MQ_HEADER BLK_DEV_MAX_SEGMENTS SOCKET_HAS_NET_IN_CREATE BIO_BI_BDEV BIO_BI_STATUS BLK_QUEUE_FLAG_FUNCS BLK_INITIALIZE_RMQ_FN WAIT_QUEUE_ENTRY_T HAS_SCSI_REQUEST HAS_SCSI_REQ HAS_SCSI_CMND HAS_SCSI_IOCTL HAS_SCSI_IOCTL_WITH_GENDISK HAS_QUEUE_FLAG_DISCARD HAS_DISK_LIVE_IN_GENHD MODPOST /tmp/PowerFlex_driver_build_hpoM6l/ini/Module.symvers CC [M] /tmp/PowerFlex_driver_build_hpoM6l/ini/scini.mod.o LD [M] /tmp/PowerFlex_driver_build_hpoM6l/ini/scini.ko BTF [M] /tmp/PowerFlex_driver_build_hpoM6l/ini/scini.ko Skipping BTF generation for /tmp/PowerFlex_driver_build_hpoM6l/ini/scini.ko due to unavailability of vmlinux make: Leaving directory '/usr/src/linux-headers-5.15.0-30-generic' 02-Apr-2024 11:46:48 INFO: Success.
Контейнер
инициализации SDCКонтейнер инициализации SDC поставляется предварительно настроенным для использования этой функции. Он включает в себя gcc и делает пакеты, а /etc/emc/scaleio/scini_sync/.build_scini Файл присутствует. Однако для успешной компиляции каталог заголовков ядра хоста должен быть сопоставлен с контейнером, чтобы /usr/src. Например, чтобы запустить контейнер вручную с помощью docker, после установки правильного пакета kernel-devel на хосте, добавьте -v/usr/src:/usr/src в командную строку, чтобы каталог заголовков ядра был доступен скрипту компиляции.
Ограничение
Может возникнуть ситуация, когда компилятор GCC, доступный в дистрибутиве Linux хоста, недостаточно развит для компиляции SDC для какого-либо ядра. Такая ситуация должна быть редкой, так как она, вероятно, будет включать в себя пользовательское ядро, а не то, которое является общим для этого дистрибутива. В этом случае пользователь должен установить более продвинутый GCC из нестандартного репозитория пакетов, и местоположение этого GCC должно быть указано в $PATH. Не существует автоматического способа предоставить альтернативный путь GCC к сервису SDC.
Версии
3.6.3 или выше
4.5.2 или выше
Видеоинструкции