Как сканировать новые FC LUNS и SCSI диски в Linux?

В статье рассмотрено сканирование новых FC LUNS и SCSI дисков в Linux без перезагрузки сервера. Система производит много работы в фоновом режиме, когда выполняются команды сканирования хранилища. Этот тип сканирования может быть распределительным, поскольку он может вызывать задержки во время тайм-аута операции ввода-вывода и неожиданное удаление устройств из ОС.

Сканирование FC-LUN в Linux

  1. Выясняем, сколько дисков видно в «fdisk -l»:

    # fdisk -l 2>/dev/null | egrep '^Disk' | egrep -v 'dm-' | wc -l
    
  2. Получаем список адаптеров шины хоста (активных портов). Вы можете использовать «systool -fc_host -v», чтобы проверить доступность FC в системе:

    # ls /sys/class/fc_host
    host0  host1
    

    В этом случае вам необходимо просканировать HBA host0 и host1.

  3. Если системной виртуальной памяти слишком мало, не следует продолжать дальше. Если у вас достаточно свободной виртуальной памяти, вы можете выполнить следующую команду для сканирования новых LUNS (портов):

    # echo "1" > /sys/class/fc_host/host0/issue_lip
    # echo "- - -" > /sys/class/scsi_host/host0/scan
    # echo "1" > /sys/class/fc_host/host1/issue_lip
    # echo "- - -" > /sys/class/scsi_host/host1/scan
    

    Примечание

    Вам необходимо отслеживать «issue_lip» в /var/log/messages, чтобы определить, когда сканирование завершится. Эта операция является асинхронной.

    Вариант сканирования с помощью скрипта rescan-scsi-bus.sh для обнаружения новых LUNS:

    # apt install sg3-utils
    # rescan-scsi-bus.sh
    
  4. Проверяем, отображается ли новый LUN, подсчитав количество доступных дисков:

    # fdisk -l 2>/dev/null | egrep '^Disk' | egrep -v 'dm-' | wc -l
    

    Если добавлены какие-либо новые LUNS, вы можете увидеть, что количество больше, чем перед сканированием LUNS.

Сканирование SCSI-дисков в Linux

  1. Найдем существующий диск из fdisk:

    # fdisk -l |egrep '^Disk' |egrep -v 'dm-'
    Disk /dev/sda: 21.5 GB, 21474836480 bytes
    
  2. Узнаем, сколько контроллеров SCSI сконфигурировано:

    # ls /sys/class/scsi_host/host
    host0 host1 host2
    

    В этом случае вам нужно просканировать host0, host1 и host2.

  3. Просканируем диски SCSI, используя команду:

    # echo "- - -" > /sys/class/scsi_host/host0/scan
    # echo "- - -" > /sys/class/scsi_host/host1/scan
    # echo "- - -" > /sys/class/scsi_host/host2/scan
    
  4. Убедимся, что новые диски видны:

    # fdisk -l |egrep '^Disk' |egrep -v 'dm-'
    Disk /dev/sda: 21.5 GB, 21474836480 bytes
    Disk /dev/sdb: 1073 MB, 1073741824 bytes
    Disk /dev/sdc: 1073 MB, 1073741824 bytes
    

Для сканирования всей шины SCSI и обновления SCSI для отображения новых устройств можно также использовать скрипт /usr/bin/rescan-scsi-bus.sh.

Но в большинстве случаев скрипт не сможет сканировать новые диски, и необходимо использовать команду echo.

  1. Если вы изменяете размер LUN, вам необходимо пересканировать устройства. Сделать это можно с помощью команды:

    for i in /sys/class/scsi_device/*/device/rescan ; do echo 1 > $i ; done