Як змусити 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-ГБ, модель 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 номер BUS, або 1?

3
Це було шиною 0. / sys / class / scsi_host містить host0 через host5. dmesg показує ata1 через ata6. ata1 відповідає host0, ata2 відповідає host1 тощо.
Філіп Дурбін

Відповіді:


43

Якщо ваш контролер SATA підтримує гарячу заміну, він повинен "просто працювати (tm)".

Для примусового сканування на шині SCSI (кожен порт SATA відображається як шина SCSI) та пошуку нових накопичувачів, ви будете використовувати:

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

Наведене вище <n> - номер АВТОМОБІЛІ.


Вибачте, ніякої радості; запуск цієї команди запускає той самий автоматичний пересканування, який спрацьовує, коли я спочатку підключаю диск. Дякую, хоча!
hakamadare

Цілком можливо, що для налаштування диска слід виконати конфігурацію на рейдовому контролері. У моєму випадку потрібно було знову додати новий диск в рейд.
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

Це "- - -" є символами для каналу, id та LUN відповідно, тож ви можете обмежити сканування деяким підмножиною, вказавши замість них числа.

Перед початком роботи ви також можете:

readlink /sys/block/<devnode>

Який покаже вам шлях з правильним номером хосту для реєстрації / proc / scsi / scsi для зникнення після видалення.


7

Як щодо цього (здається, працює в Ubuntu):

sudo partprobe


Можливо, вам також знадобиться "yum install rated"
Антоніо

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, мають налаштування "Hot Swap = увімкнено / вимкнено" на диску, який слід також активувати, якщо він існує.


1
Ти мій новий найкращий друг: D
allyourcode

2

Ось чому мені потрібно було перезавантажити комп’ютер ...

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

Тож здається, що гаряча заміна працює Добре, можливо, / dev / sd * вже не те саме.

Чи може це відповісти на вашу проблему?


Хм, ну, rescan-scsi-bus.sh вже працює на / proc / scsi / scsi, так, як здається scsiadd. Ми так чи інакше намагаємось іншого постачальника сервера, тому можливо, гаряча заміна буде "просто працювати" для нас у майбутньому.
Філіп Дурбін

4
Так, ви не можете обійти це поруч, як я можу сказати. Ось чому ви використовуєте мітку диска або UUID і монтуєте свій fs до цього (вручну або в fstab), ви можете встановити його, а потім він не зміниться. Єдина хитрість - це встановити завантажувач для встановлення на новий диск, але все ще працювати, коли він перезавантажується, хоча з деяких швидких експериментів з GRUB (я замінював sda на машині на sd [a, b, c, d] та програмне забезпечення raid1 для всієї системної частини fs).
Рональд Поттол

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

1

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


1

Контролер Fusion-MPT SAS у вас є 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

Для роботи гарячої пробки у вас повинен бути завантажений модуль acpiphp.

[root@example ~]# modprobe acpiphp

очевидно, якщо ви хочете, щоб це працювало на завантаженні, вам доведеться налаштувати його для завантаження під час завантаження - один із способів - створити / редагувати /etc/rc.modules (який викликається rc.sysinit) і додати рядок:

modprobe acpiphp

пам'ятайте, якщо ви створюєте цей файл для chmod + x it, як його називають у такий спосіб.


Цікаво. Я ніколи не чув про акпіфп. Спасибі. Здається, це розширена конфігурація та інтерфейс живлення PCI Hot Plug. PCI - це, звичайно, периферійний компонент.
Філіп Дурбін

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