Вопрос или проблема
Похожий вопрос был задан здесь. У меня есть SATA диск, подключенный к контроллеру SAS2308 HBA, и существует бэкплейн. Есть ли способ заставить систему Linux игнорировать диск при загрузке.
# lsscsi -v
[0:0:3:0] disk ATA WDC WD10EFRX-68J 1A01 /dev/sda
dir: /sys/bus/scsi/devices/0:0:3:0 [/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/0000:02:09.0/0000:04:00.0/host0/port-0:3/end_device-0:3/target0:0:3/0:0:3:0]
HBA это,
# lspci -nn -v -s 04:00.0
04:00.0 Serial Attached SCSI controller [0107]: Broadcom / LSI SAS2308 PCI-Express Fusion-MPT SAS-2 [1000:0087] (rev 05)
Subsystem: Hewlett Packard Enterprise H220i [1590:0041]
Flags: bus master, fast devsel, latency 0, IRQ 17
I/O ports at c000 [size=256]
Memory at dd540000 (64-bit, non-prefetchable) [size=64K]
Memory at dd500000 (64-bit, non-prefetchable) [size=256K]
Expansion ROM at dd400000 [disabled] [size=1M]
Capabilities: [50] Power Management version 3
Capabilities: [68] Express Endpoint, IntMsgNum 0
Capabilities: [d0] Vital Product Data
Capabilities: [a8] MSI: Enable- Count=1/1 Maskable- 64bit+
Capabilities: [c0] MSI-X: Enable+ Count=16 Masked-
Capabilities: [100] Advanced Error Reporting
Capabilities: [1e0] Secondary PCI Express
Capabilities: [1c0] Power Budgeting <?>
Capabilities: [190] Dynamic Power Allocation <?>
Capabilities: [148] Alternative Routing-ID Interpretation (ARI)
Kernel driver in use: mpt3sas
Kernel modules: mpt3sas
Ошибка в dmesg выглядит так,
[ 235.126718] mpt2sas_cm0: log_info(0x31110d00): originator(PL), code(0x11), sub_code(0x0d00)
[ 235.126738] sd 0:0:3:0: [sda] tag#4233 FAILED Result: hostbyte=DID_SOFT_ERROR driverbyte=DRIVER_OK cmd_age=3s
[ 235.126751] sd 0:0:3:0: [sda] tag#4233 CDB: Read(10) 28 00 00 44 d0 00 00 00 08 00
[ 235.126757] I/O error, dev sda, sector 4509696 op 0x0:(READ) flags 0x80700 phys_seg 1 prio class 2
[ 235.126787] sd 0:0:3:0: [sda] tag#4227 FAILED Result: hostbyte=DID_SOFT_ERROR driverbyte=DRIVER_OK cmd_age=3s
[ 235.129288] sd 0:0:3:0: [sda] tag#4227 CDB: Read(10) 28 00 1c 6d 3a 00 00 00 08 00
[ 235.129293] I/O error, dev sda, sector 476920320 op 0x0:(READ) flags 0x80700 phys_seg 1 prio class 2
[ 235.474711] sd 0:0:3:0: Power-on or device reset occurred
[ 238.716033] mpt2sas_cm0: log_info(0x31110d00): originator(PL), code(0x11), sub_code(0x0d00)
Ответ или решение
Чтобы отключить SCSI-диск в системе Linux без физического извлечения, необходимо воспользоваться рядом системных команд для настройки ядра на игнорирование определенного устройства при загрузке. Это может быть полезно в случаях, когда устройство вызывает ошибки ввода-вывода, как это видно из предоставленных данных dmesg
, или когда его временно не требуется использовать. В данном случае мы будем работать с устройством, подключённым через контроллер LSI SAS2308.
Принципы работы SCSI-дисков и контроллеров
Технология SCSI (Small Computer System Interface) представляет собой стандарт для подключения периферийных устройств к компьютеру. В Linux доступ к устройствам этого типа осуществляется через подсистему SCSI, включённую в ядро. Управлять подключенными устройствами можно с помощью различных драйверов и модулей ядра, например, в данном случае драйвер mpt3sas
.
Пример
В нашем примере устройство [0:0:3:0]
подключено как /dev/sda
, и именно его необходимо исключить из системы. На основе данных команды lsscsi
, видим, что это устройство вероятно вызывает ошибки ввода-вывода, что приводит к проблемам на уровне ядра.
Применение
Для того чтобы исключить это устройство из загрузки системы, можно действовать следующим образом:
-
Определение устройства:
- Используем команду
lsscsi
для определения идентификатора устройства. - Пример:
[0:0:3:0]
– это ID нашего SCSI-устройства.
- Используем команду
-
Исключение устройства:
- В конфигурации загрузчика GRUB можно указать ядру игнорировать это устройство.
-
Изменения в конфигурации GRUB:
- Откройте файл конфигурации GRUB, обычно находящийся по пути
/etc/default/grub
. - Добавьте параметр в
GRUB_CMDLINE_LINUX_DEFAULT
. Например, можно использовать параметрscsi_mod.scan=none
для того, чтобы игнорировать все SCSI-устройства, а затем вручную добавлять те, которые необходимы. - Более адресный подход — использование параметра
rd.driver.blacklist=mpt3sas
, но это отключит весь драйвер SAS2308, что может привести к отключению всех устройств, связанных с этим драйвером.
- Откройте файл конфигурации GRUB, обычно находящийся по пути
-
Применение изменений:
- После внесения изменений в файл
/etc/default/grub
, выполните обновление конфигурации GRUB командойsudo update-grub
(или аналогичной для вашей системы).
- После внесения изменений в файл
-
Перезагрузка системы:
- Перезапустите систему для применения изменений.
Дополнительные методы и утилиты
- Udev: Можно создать правило udev, чтобы отключать заданное устройство после обнаружения. Это может быть важно, если изменения в GRUB нежелательны или не подходят.
- echo ‘offline’ > /sys/bus/scsi/devices/X\:Y\:Z\:W/device/state: Замена X\:Y\:Z\:W идентификатором вашего устройства.
Заключение
Эти методы позволяют управлять подключёнными устройствами SCSI с высокой степенью гибкости и точности, исключая их при необходимости из процессов загрузки и работы системы. Это рекомендуется делать исключительно с пониманием возможных последствий, так как ошибки могут привести к потере доступа ко всем устройствам, поддерживаемым данным драйвером.