Отключить SCSI-диск в Linux без физического доступа.

Вопрос или проблема

Похожий вопрос был задан здесь. У меня есть 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, видим, что это устройство вероятно вызывает ошибки ввода-вывода, что приводит к проблемам на уровне ядра.

Применение

Для того чтобы исключить это устройство из загрузки системы, можно действовать следующим образом:

  1. Определение устройства:

    • Используем команду lsscsi для определения идентификатора устройства.
    • Пример: [0:0:3:0] – это ID нашего SCSI-устройства.
  2. Исключение устройства:

    • В конфигурации загрузчика GRUB можно указать ядру игнорировать это устройство.
  3. Изменения в конфигурации GRUB:

    • Откройте файл конфигурации GRUB, обычно находящийся по пути /etc/default/grub.
    • Добавьте параметр в GRUB_CMDLINE_LINUX_DEFAULT. Например, можно использовать параметр scsi_mod.scan=none для того, чтобы игнорировать все SCSI-устройства, а затем вручную добавлять те, которые необходимы.
    • Более адресный подход — использование параметра rd.driver.blacklist=mpt3sas, но это отключит весь драйвер SAS2308, что может привести к отключению всех устройств, связанных с этим драйвером.
  4. Применение изменений:

    • После внесения изменений в файл /etc/default/grub, выполните обновление конфигурации GRUB командой sudo update-grub (или аналогичной для вашей системы).
  5. Перезагрузка системы:

    • Перезапустите систему для применения изменений.

Дополнительные методы и утилиты

  • Udev: Можно создать правило udev, чтобы отключать заданное устройство после обнаружения. Это может быть важно, если изменения в GRUB нежелательны или не подходят.
  • echo ‘offline’ > /sys/bus/scsi/devices/X\:Y\:Z\:W/device/state: Замена X\:Y\:Z\:W идентификатором вашего устройства.

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...