it-swarm-ru.tech

Как заставить Linux распознавать новый диск SATA / dev / sda, в который я могу выполнить горячую замену без перезагрузки?

Горячая замена вышедшего из строя диска SATA/dev/sda работала нормально, но когда я перешел на новый диск, он не был распознан:

[[email protected] ~]# tail -18 /var/log/messages
May 5 16:54:35 fs-2 kernel: ata1: exception Emask 0x10 SAct 0x0 SErr 0x50000 action 0xe frozen
May 5 16:54:35 fs-2 kernel: ata1: SError: { PHYRdyChg CommWake }
May 5 16:54:40 fs-2 kernel: ata1: link is slow to respond, please be patient (ready=0)
May 5 16:54:45 fs-2 kernel: ata1: device not ready (errno=-16), forcing hardreset
May 5 16:54:45 fs-2 kernel: ata1: soft resetting link
May 5 16:54:50 fs-2 kernel: ata1: link is slow to respond, please be patient (ready=0)
May 5 16:54:55 fs-2 kernel: ata1: SRST failed (errno=-16)
May 5 16:54:55 fs-2 kernel: ata1: soft resetting link
May 5 16:55:00 fs-2 kernel: ata1: link is slow to respond, please be patient (ready=0)
May 5 16:55:05 fs-2 kernel: ata1: SRST failed (errno=-16)
May 5 16:55:05 fs-2 kernel: ata1: soft resetting link
May 5 16:55:10 fs-2 kernel: ata1: link is slow to respond, please be patient (ready=0)
May 5 16:55:40 fs-2 kernel: ata1: SRST failed (errno=-16)
May 5 16:55:40 fs-2 kernel: ata1: limiting SATA link speed to 1.5 Gbps
May 5 16:55:40 fs-2 kernel: ata1: soft resetting link
May 5 16:55:45 fs-2 kernel: ata1: SRST failed (errno=-16)
May 5 16:55:45 fs-2 kernel: ata1: reset failed, giving up
May 5 16:55:45 fs-2 kernel: ata1: EH complete

Я попробовал пару вещей, чтобы сервер нашел новую/dev/sda, например rescan-scsi-bus.sh , но они не сработали:

[[email protected] ~]# echo "---" > /sys/class/scsi_Host/host0/scan
-bash: echo: write error: Invalid argument
[[email protected] ~]#
[[email protected] ~]# /root/rescan-scsi-bus.sh -l
[snip]
0 new device(s) found.
0 device(s) removed.
[[email protected] ~]#
[[email protected] ~]# ls /dev/sda
ls: /dev/sda: No such file or directory

Я закончил тем, что перезагрузил сервер./dev/sda был распознан, я установил программный RAID, и теперь все в порядке. Но в следующий раз как я могу заставить Linux распознавать новый SATA-диск, на который у меня была горячая замена без перезагрузки?

Рассматриваемая операционная система RHEL5.3:

[[email protected] ~]# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 5.3 (Tikanga)

Жесткий диск представляет собой Seagate Barracuda ES.2 SATA 3.0-Gb/s 500-GB, модель ST3500320NS.

Вот вывод lscpi:

[[email protected] ~]# lspci
00:00.0 RAM memory: nVidia Corporation MCP55 Memory Controller (rev a2)
00:01.0 ISA bridge: nVidia Corporation MCP55 LPC Bridge (rev a3)
00:01.1 SMBus: nVidia Corporation MCP55 SMBus (rev a3)
00:02.0 USB Controller: nVidia Corporation MCP55 USB Controller (rev a1)
00:02.1 USB Controller: nVidia Corporation MCP55 USB Controller (rev a2)
00:04.0 IDE interface: nVidia Corporation MCP55 IDE (rev a1)
00:05.0 IDE interface: nVidia Corporation MCP55 SATA Controller (rev a3)
00:05.1 IDE interface: nVidia Corporation MCP55 SATA Controller (rev a3)
00:05.2 IDE interface: nVidia Corporation MCP55 SATA Controller (rev a3)
00:06.0 PCI bridge: nVidia Corporation MCP55 PCI bridge (rev a2)
00:08.0 Bridge: nVidia Corporation MCP55 Ethernet (rev a3)
00:09.0 Bridge: nVidia Corporation MCP55 Ethernet (rev a3)
00:0a.0 PCI bridge: nVidia Corporation MCP55 PCI Express bridge (rev a3)
00:0b.0 PCI bridge: nVidia Corporation MCP55 PCI Express bridge (rev a3)
00:0c.0 PCI bridge: nVidia Corporation MCP55 PCI Express bridge (rev a3)
00:0d.0 PCI bridge: nVidia Corporation MCP55 PCI Express bridge (rev a3)
00:0e.0 PCI bridge: nVidia Corporation MCP55 PCI Express bridge (rev a3)
00:0f.0 PCI bridge: nVidia Corporation MCP55 PCI Express bridge (rev a3)
00:18.0 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] HyperTransport Technology Configuration
00:18.1 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] Address Map
00:18.2 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] DRAM Controller
00:18.3 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] Miscellaneous Control
00:19.0 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] HyperTransport Technology Configuration
00:19.1 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] Address Map
00:19.2 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] DRAM Controller
00:19.3 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] Miscellaneous Control
03:00.0 VGA compatible controller: Matrox Graphics, Inc. MGA G200e [Pilot] ServerEngines (SEP1) (rev 02)
04:00.0 PCI bridge: NEC Corporation uPD720400 PCI Express - PCI/PCI-X Bridge (rev 06)
04:00.1 PCI bridge: NEC Corporation uPD720400 PCI Express - PCI/PCI-X Bridge (rev 06)

Обновление : возможно, в десятке случаев мы были вынуждены перезагружать серверы, потому что горячая замена не "просто работала". Спасибо за ответы, чтобы больше заглянуть в контроллер SATA. Я включил вывод lspci для проблемной системы выше (имя хоста: fs-2). Я все еще мог бы использовать некоторую помощь, чтобы понять, что именно не поддерживается аппаратно с точки зрения горячей замены для этой системы. Пожалуйста, дайте мне знать, какой другой вывод, кроме lspci, может быть полезен.

Хорошая новость заключается в том, что "горячая замена" сегодня "сработала" на одном из наших серверов (имя хоста: www-1), что очень редко для нас. Вот вывод lspci:

[[email protected] ~]# lspci
00:00.0 RAM memory: nVidia Corporation MCP55 Memory Controller (rev a2)
00:01.0 ISA bridge: nVidia Corporation MCP55 LPC Bridge (rev a3)
00:01.1 SMBus: nVidia Corporation MCP55 SMBus (rev a3)
00:02.0 USB Controller: nVidia Corporation MCP55 USB Controller (rev a1)
00:02.1 USB Controller: nVidia Corporation MCP55 USB Controller (rev a2)
00:04.0 IDE interface: nVidia Corporation MCP55 IDE (rev a1)
00:05.0 IDE interface: nVidia Corporation MCP55 SATA Controller (rev a3)
00:05.1 IDE interface: nVidia Corporation MCP55 SATA Controller (rev a3)
00:05.2 IDE interface: nVidia Corporation MCP55 SATA Controller (rev a3)
00:06.0 PCI bridge: nVidia Corporation MCP55 PCI bridge (rev a2)
00:08.0 Bridge: nVidia Corporation MCP55 Ethernet (rev a3)
00:09.0 Bridge: nVidia Corporation MCP55 Ethernet (rev a3)
00:0b.0 PCI bridge: nVidia Corporation MCP55 PCI Express bridge (rev a3)
00:0c.0 PCI bridge: nVidia Corporation MCP55 PCI Express bridge (rev a3)
00:0f.0 PCI bridge: nVidia Corporation MCP55 PCI Express bridge (rev a3)
00:18.0 Host bridge: Advanced Micro Devices [AMD] K10 [Opteron, Athlon64, Sempron] HyperTransport Configuration
00:18.1 Host bridge: Advanced Micro Devices [AMD] K10 [Opteron, Athlon64, Sempron] Address Map
00:18.2 Host bridge: Advanced Micro Devices [AMD] K10 [Opteron, Athlon64, Sempron] DRAM Controller
00:18.3 Host bridge: Advanced Micro Devices [AMD] K10 [Opteron, Athlon64, Sempron] Miscellaneous Control
00:18.4 Host bridge: Advanced Micro Devices [AMD] K10 [Opteron, Athlon64, Sempron] Link Control
00:19.0 Host bridge: Advanced Micro Devices [AMD] K10 [Opteron, Athlon64, Sempron] HyperTransport Configuration
00:19.1 Host bridge: Advanced Micro Devices [AMD] K10 [Opteron, Athlon64, Sempron] Address Map
00:19.2 Host bridge: Advanced Micro Devices [AMD] K10 [Opteron, Athlon64, Sempron] DRAM Controller
00:19.3 Host bridge: Advanced Micro Devices [AMD] K10 [Opteron, Athlon64, Sempron] Miscellaneous Control
00:19.4 Host bridge: Advanced Micro Devices [AMD] K10 [Opteron, Athlon64, Sempron] Link Control
03:00.0 VGA compatible controller: Matrox Graphics, Inc. MGA G200e [Pilot] ServerEngines (SEP1) (rev 02)
04:00.0 PCI bridge: NEC Corporation uPD720400 PCI Express - PCI/PCI-X Bridge (rev 06)
04:00.1 PCI bridge: NEC Corporation uPD720400 PCI Express - PCI/PCI-X Bridge (rev 06)
09:00.0 SCSI storage controller: LSI Logic / Symbios Logic SAS1064ET PCI-Express Fusion-MPT SAS (rev 04)
44
Philip Durbin

Если ваш контроллер SATA поддерживает горячую замену, он должен "просто работать (тм)".

Чтобы принудительно выполнить повторное сканирование на шине SCSI (каждый порт SATA отображается как шина SCSI) и найти новые диски, вы будете использовать:

echo "0 0 0" >/sys/class/scsi_Host/host<n>/scan

На вышеупомянутом <n> это номер шины.

45
user1797
echo "- - -" >/sys/class/scsi_Host/host<n>/scan
       ^ ^
        \_\_______ note spaces between the dashes.
19
Noah

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

echo 1 > /sys/block/<devnode>/device/delete

Например. в моем случае/dev/sda не удалось, и я не хотел перезагружать сервер, поэтому я сделал:

echo 1 > /sys/block/sda/device/delete

После того, как я это сделал, новый диск (который уже был физически добавлен) был сразу виден.

Если он не виден в данный момент, вы также можете сделать это для повторного сканирования:

echo "- – -" > /sys/class/scsi_Host/host<n>/scan

То, что "- - -" является символами подстановки для канала, id и LUN соответственно, поэтому вы можете ограничить сканирование некоторым подмножеством, если хотите, указав вместо этого числа.

Прежде чем начать, вы также можете:

readlink /sys/block/<devnode>

Который покажет вам путь с правильным номером хоста, чтобы проверить/proc/scsi/scsi на предмет исчезновения после удаления.

14
karora

Как насчет этого (похоже, работает в Ubuntu):

Sudo partprobe

8
user59282

Я не могу поверить, что никто еще не упомянул AHCI ... Ваш контроллер SATA должен быть в режиме AHCI, чтобы включить горячую замену. Проверьте это, посмотрев на драйвер, который вы используете:

[email protected]:~ # find /sys -name sdk
/sys/devices/pci0000:00/0000:00:11.0/ata5/Host4/target4:0:0/4:0:0:0/block    /sdk
/sys/block/sdk
/sys/class/block/sdk

[email protected]:~ # readlink /sys/devices/pci0000:00/0000:00:11.0/driver
../../../bus/pci/drivers/ahci

[email protected]:~ # lspci -k | less
[... big long output... search for ahci or your pci address, or use the awk below ...]

[email protected]:~ # lspci -k | awk '$1 == "00:11.0" {x=1}; x && /in use/ {print $0; exit}'
    Kernel driver in use: ahci

Посмотрите, как там написано "ачи".

Если это не так, просто включите его в BIOS. Кроме того, некоторые BIOS, особенно на серверах или UEFI, имеют параметр "Горячая замена = включено/отключено" на диск, который также следует включить, если он существует.

6
Peter

Вот почему мне нужно было перезагрузить компьютер ...

Я просто поменял местами мой/dev/sdc. Я использовал scsiadd -r 3 0 0, чтобы отключить старый диск перед тем, как вытащить его. Затем после установки нового диска новый диск не отображался как/dev/sdc, а как/dev/sdd. После перезагрузки диск снова появится как/dev/sdc.

Так что кажется, что hotswap работает Хорошо, может быть, просто/dev/sd * больше не то же самое.

Может ли это быть ответом на вашу проблему?

2
Peter

Контроллер Fusion-MPT SAS, который у вас есть, является RAID-контроллером нижнего уровня. Если вы не используете его для RAID, он все равно может обеспечивать бесполезный уровень препятствий/абстракций.

Возможно, вам придется подсунуть RAID-контроллер с помощью mpt-status или lsiutil, чтобы он действительно сканировал шину.

http://hwraid.le-vert.net/wiki/LSIFusionMPT имеет большое количество документации, но не могу сказать, что проверил ее.

1
aij

В некоторых случаях горячая замена может потребоваться включить в BIOS материнской платы и/или контроллера SATA. Это полностью зависит от марки и модели обоих, но если у вас есть встроенные контроллеры SATA, которые должны поддерживают горячую замену, то стоит покопаться в BIOS материнской платы. Карты SATA могут иметь или не иметь свои собственные настройки BIOS, многие карты более низкого уровня не имеют, но карты серверного уровня обычно имеют.

Если я правильно помню, мне нужно было это с несколькими материнскими платами Gigabyte и, возможно, с некоторыми другими марками. Мне нужно было это для горячей замены лотка SATA для работы; при отключенной функции удаление диска не вызывало проблем, но новый диск не регистрировался до перезагрузки. Включение параметра сработало, как и ожидалось, диски, которые были помещены в лоток, были немедленно раскручены и доступны для ОС.

1
STW

Мой DVD на моей машине Fedora 16 подключен к интерфейсу SATA. Он был заперт и не открывался и не закрывался. Запуск partprobe с правами root заставил мой cdrom/DVD снова работать. Я считаю, что это поможет на другой машине, где у меня иногда возникают проблемы с горячей заменой. Спасибо!

1
Stuart Edge

Я знаю, что этот вопрос старый, но у меня был некоторый успех, о котором я не видел нигде. Подобные проблемы возникли с Dell Precision 380 сегодня. В конце концов заставил его работать, выполнив некоторую комбинацию из следующего:

echo "- - -" > /sys/class/scsi_Host/host2/scan
echo 1 > /sys/class/scsi_device/2:0:0:0/device/reset
echo 1 > /sys/devices/pci0000:00/0000:00:1f.2/rescan
echo 1 > /sys/devices/pci0000:00/0000:00:1f.2/reset

ПРЕДУПРЕЖДЕНИЕ: Это также может нарушить работу других устройств ATA в системе. Если вы смонтировали файловые системы на этих устройствах, это может плохо закончиться. Моей ситуации было все равно, но твоя может.

Какие именно вышеперечисленные команды нужны и в каком порядке, мне пока неизвестно. Некоторые команды, возможно, придется повторить. Если бы мне пришлось угадывать, я бы сказал, сделать в порядке, показанном выше, а затем еще раз сканировать scsi_Host в конце. Я сделал еще немало в своих исследованиях.

Первая команда (scsi_Host scan) сообщает среднему слою SCSI сканировать все шины на наличие новых/измененных устройств. Вторая команда пытается сбросить цель SCSI (дисковое устройство). Последние два работают с драйвером для самого контроллера AHCI.

Я нашел эти предметы в основном путем подробного изучения и смелых экспериментов.

Вы можете сопоставить узлы scsi_device с маркой и моделью устройства (используя grep для печати имен файлов перед содержимым):

grep . /sys/class/scsi_device/*/device/model

Первая цифра идентификатора устройства SCSI должна быть номером scsi_Host. Затем вы можете сопоставить узлы scsi_Host с узлами их устройств:

ls -l /sys/class/scsi_Host

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

Надеюсь это поможет.

1
Ben Scott

Для работы hotplug у вас должен быть загружен модуль acpiphp.

[[email protected] ~]# modprobe acpiphp

очевидно, если вы хотите, чтобы это работало при загрузке, вам придется настроить его для загрузки во время загрузки - один из способов - создать/отредактировать /etc/rc.modules (который вызывается rc.sysinit) и добавить строку:

modprobe acpiphp

помните, если вы создадите этот файл для chmod + x, как он называется таким образом.

0
nox