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


41

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

[root@fs-2 ~]# 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, но они не сработали:

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

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

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

[root@fs-2 ~]# 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:

[root@fs-2 ~]# 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:

[root@www-1 ~]# 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)

Я бы проверил состояние вашего контроллера SATA в той версии ядра Linux, которую вы используете. Это может быть ошибка или просто не поддерживается
Натан

Был 0 номер автобуса или 1?

3
Это была шина 0. / sys / class / scsi_host содержит host0 через host5. dmesg показывает от ata1 до ata6. ata1 соответствует host0, ata2 соответствует host1 и т. д.
Филипп Дурбин

Ответы:


43

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

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

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

На вышесказанном, <n> это номер шины.


Извините, нет радости; выполнение этой команды вызывает только то же автоматическое повторное сканирование, которое запускается, когда я первоначально подключаю диск. Спасибо хоть!
Хакамадаре

Вполне возможно, что на контроллере raid необходимо выполнить некоторые настройки, чтобы он увидел диск. В моем случае было необходимо добавить новый диск обратно в рейд.
MikeKulls

Я получаю отказано в доступе даже при использовании sudoи при переходе к пользователю root.
Аарон Франке

На моей системе, которая загружалась с NVMe SSD, это помогло обнаружить недавно подключенный SATA HD. Я использую, powertopчтобы другие устройства отключились, поэтому, возможно, порт SATA, к которому я подключил накопитель, полностью спал. (Система имеет оптический привод SATA подключена и обнаружен при загрузке, но это, вероятно , спит, тоже.) Как другие полагают, чтобы избежать сброса ссылки SATA для активных дисков, выяснить , какие hostидентификаторы уже находятся в использовании и не scanте , только тот, где вы подключили новый диск. (Или любой неиспользованный, если вы не знаете нумерацию.)
Питер Кордес

18
echo "- - -" >/sys/class/scsi_host/host<n>/scan
       ^ ^
        \_\_______ note spaces between the dashes.

5
Будьте осторожны с этим: dmesg показал, что он жестко сбрасывает все мои ссылки SATA. Возможно, стоит протестировать его перед запуском в производство и потерять тонны записей.
Иван Козик

12

Когда диск в некоторых случаях выходит из строя, 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

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

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

readlink /sys/block/<devnode>

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


7

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

sudo partprobe


Вам также может понадобиться 'yum install parted'
Антонио

partedFTW ... Вы должны знать , это хорошо , кроме обычных подозреваемых нравится fdisk, gdisk, cgdisk, testdisk.
Sjas

6

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

root@peter:~ # 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

root@peter:~ # readlink /sys/devices/pci0000:00/0000:00:11.0/driver
../../../bus/pci/drivers/ahci

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

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

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

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


1
Ты мой новый лучший друг: D
allyourcode

2

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

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

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

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


Хммм, хорошо, rescan-scsi-bus.sh уже работает с / proc / scsi / scsi, точно так же, как кажется, scsiadd. В любом случае, мы пытаемся найти другого поставщика серверов, поэтому, возможно, «горячая» замена в будущем нам просто подойдет.
Филипп Дурбин

4
Да, вы не можете обойти это, насколько я могу судить. Вот почему вы используете метку диска или UUID и монтируете свой fs таким образом (вручную или в fstab), вы можете установить его, и тогда он не изменится. Единственная хитрость - заставить ваш загрузчик установить на новый диск, но он все еще работает, когда он перезагружается, хотя из некоторых быстрых экспериментов с GRUB (я заменял sda на машине с sd [a, b, c, d] и программным обеспечением). raid1 для всей системной части фс).
Рональд Поттол

1
Вы никогда не должны использовать устройства / dev / sd * в файлах конфигурации, таких как fstab. Вы никогда не должны предполагать, что имена всегда одинаковы. Вместо этого вы должны использовать синтаксис UUID = ... (без кавычек), как вы видите в man fstab. Чтобы узнать UUID, используйте команду blkid. (в качестве альтернативы вы можете предпочесть метку или идентификатор; также смотрите / dev / disk / by- *)
Питер

1

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


1

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

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

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


1

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

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


Я только что проверил на машине, которая, как я знаю, имела это; на нем установлена ​​материнская плата Gigabyte Z77X-UD3H с встроенными контроллерами Marvell 88SE9172 и Intel 7 Series / C210
STW

1

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

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

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


0

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

[root@example ~]# modprobe acpiphp

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

modprobe acpiphp

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


Интересный. Я никогда не слышал об acpiphp. Спасибо. Похоже, для расширенной конфигурации и интерфейса питания PCI Hot Plug. Разумеется, PCI - это соединение периферийных компонентов.
Филипп Дурбин

2
acpiphp предназначен для горячего подключения PCI, т. е. для горячего добавления и удаления карт PCI. Некоторые дорогие системы поддерживают это. А также много гипервизоров.
Дероберт
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.