Jak sprawić, aby Linux rozpoznał nowy dysk SATA / dev / sda, w który zamieniłem się na gorąco bez ponownego uruchamiania?


41

Wymiana na gorąco uszkodzonego dysku SATA / dev / sda działała dobrze, ale kiedy poszedłem zamienić na nowy dysk, nie został rozpoznany:

[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

Próbowałem kilku rzeczy, aby serwer znalazł nową / dev / sda, takich jak rescan-scsi-bus.sh, ale one nie działały:

[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

W końcu zrestartowałem serwer. / dev / sda zostało rozpoznane, naprawiłem programową macierz RAID i teraz wszystko jest w porządku. Ale następnym razem, w jaki sposób mogę sprawić, aby Linux rozpoznał nowy dysk SATA, w którym zamieniłem się na gorąco bez ponownego uruchamiania?

System operacyjny, o którym mowa, to RHEL5.3:

[root@fs-2 ~]# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 5.3 (Tikanga)

Dysk twardy to Seagate Barracuda ES.2 SATA 3.0-Gb / s 500-GB, model ST3500320NS.

Oto wyjście 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)

Aktualizacja : w kilkunastu przypadkach byliśmy zmuszeni zrestartować serwery, ponieważ hot swap „nie działał”. Dziękujemy za odpowiedzi, aby lepiej przyjrzeć się kontrolerowi SATA. Powyżej podałem wyjście lspci dla problematycznego systemu (nazwa hosta: fs-2). Nadal mogę skorzystać z pomocy w zrozumieniu, co dokładnie nie jest obsługiwane sprzętowo pod względem wymiany w systemie hot-swap dla tego systemu. Daj mi znać, jakie inne wyjście oprócz lspci może być przydatne.

Dobra wiadomość jest taka, że ​​hot swap „po prostu działał” dzisiaj na jednym z naszych serwerów (nazwa hosta: www-1), co jest dla nas bardzo rzadkie. Oto wynik 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)

Sprawdziłbym status twojego kontrolera SATA w używanej wersji jądra Linux. Może to być błąd lub zwykły nieobsługiwany
Nathan

Czy 0 było numerem magistrali, czy 1?

3
Była to magistrala 0. / sys / class / scsi_host zawiera host0 przez host5. dmesg pokazuje ata1 do ata6. ata1 odpowiada hostowi 0, ata2 odpowiada hostowi 1 itd.
Philip Durbin

Odpowiedzi:


43

Jeśli twój kontroler SATA obsługuje hot swap, powinien „po prostu działać (tm)”.

Aby wymusić ponowne skanowanie na szynie SCSI (każdy port SATA pokazuje się jako szyna SCSI) i znaleźć nowe dyski, użyjesz:

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

Na powyższym <n> jest numerem magistrali.


Przepraszam, nie ma radości; uruchomienie tego polecenia uruchamia tylko to samo automatyczne ponowne skanowanie, które jest uruchamiane, gdy początkowo podłączam dysk. W każdym razie dzięki!
hakamadare

Jest całkiem możliwe, że należy wykonać pewną konfigurację na kontrolerze RAID, aby zobaczyć dysk. W moim przypadku konieczne było dodanie nowego dysku z powrotem do nalotu.
MikeKulls,

Otrzymuję odmowę dostępu nawet podczas używania sudoi przełączania do użytkownika root.
Aaron Franke,

W moim systemie, który uruchomił się z dysku SSD NVMe, działało to w celu wykrycia nowo podłączonego dysku SATA HD. Używam, powertopaby pozwolić, aby więcej rzeczy przestało działać, więc może port SATA, do którego podłączyłem dysk, całkowicie spał. (System ma podłączony napęd optyczny SATA i wykryty podczas rozruchu, ale prawdopodobnie też spał.) Jak sugerują inni, aby uniknąć resetowania łącza SATA dla aktywnych napędów, dowiedz się, które hostidentyfikatory są już w użyciu, a nie scante , tylko ten, do którego podłączyłeś nowy dysk. (Lub jakikolwiek nieużywany, jeśli nie znasz numeracji.)
Peter Cordes

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

5
Uważaj na to: dmesg pokazał, że twardy reset wszystkich moich łączy SATA. Być może warto przetestować przed uruchomieniem go w produkcji i utratą ton zapisów.
Ivan Kozik,

12

Kiedy dysk ulegnie awarii w niektórych okolicznościach, Linux nie zda sobie sprawy, że faktycznie wyciągnąłeś go fizycznie z tablicy. Jeśli masz ten problem (tak jak dzisiaj rano), możesz wykonać następujące czynności:

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

Np. W moim przypadku / dev / sda nie powiodło się i nie chciałem restartować serwera, więc zrobiłem:

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

Po wykonaniu tej czynności nowy dysk (który został już fizycznie dodany) był natychmiast widoczny.

Jeśli w tym momencie nie jest to widoczne, możesz to zrobić, aby wymusić ponowne skanowanie:

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

To „- - -” to symbole wieloznaczne odpowiednio dla kanału, identyfikatora i jednostki LUN, więc możesz ograniczyć skanowanie do niektórych podzbiorów, jeśli chcesz, podając zamiast tego liczby.

Zanim zaczniesz, możesz również:

readlink /sys/block/<devnode>

Który pokaże ci ścieżkę z odpowiednim numerem hosta do sprawdzenia / proc / scsi / scsi pod kątem zniknięcia po usunięciu.


7

Co powiesz na to (wydaje się, że działa w Ubuntu):

sudo partprobe


Możesz także potrzebować „yum install parted”
Antonio

partedFTW ... powinieneś to wiedzieć dobrze oprócz Podejrzani podoba fdisk, gdisk, cgdisk, testdisk.
sjas,

6

Nie mogę uwierzyć, że nikt jeszcze nie wspomniał o AHCI ... twój kontroler SATA musi być w trybie AHCI, aby umożliwić hot swap. Sprawdź to, patrząc na używany sterownik:

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

Zobacz, jak tam jest napisane „ahci”.

Jeśli tak się nie stanie, włącz go w systemie BIOS. Ponadto niektóre BIOS-y, szczególnie na serwerach lub UEFI, mają ustawienie „Hot Swap = włączone / wyłączone” na dysk, które należy również włączyć, jeśli istnieje.


1
Jesteś moim nowym najlepszym przyjacielem: D
allyourcode

2

Oto dlaczego musiałem ponownie uruchomić komputer ...

Właśnie zmieniłem / dev / sdc na gorąco. Użyłem scsiadd -r 3 0 0 do wyłączenia starego dysku przed jego wyciągnięciem. Następnie po zainstalowaniu nowego dysku nowy dysk nie pojawił się jako / dev / sdc, a raczej jako / dev / sdd. Po ponownym uruchomieniu dysk ponownie pojawi się jako / dev / sdc.

Więc wygląda na to, że hotswap działa Ok, może być tak, że / dev / sd * już nie jest taki sam.

Czy to może być odpowiedź na twój problem?


Hmmm, cóż, rescan-scsi-bus.sh już działa na / proc / scsi / scsi, tak jak wydaje się scsiadd. W każdym razie próbujemy innego dostawcy serwerów, więc być może hot swap „po prostu” zadziała dla nas w przyszłości.
Philip Durbin,

4
Tak, nie możesz tego obejść, blisko, jak mogę powiedzieć. Dlatego używasz etykiety dysku lub identyfikatora UUID i montujesz przy tym swój plik fs (ręcznie lub w fstab), możesz go ustawić, a potem nic się nie zmieni. Jedyną sztuczką jest zainstalowanie modułu ładującego na nowym dysku, ale nadal działa on po ponownym uruchomieniu, choć po kilku szybkich eksperymentach z GRUB (zastępowałem sda na komputerze sd [a, b, c, d] i oprogramowaniem raid1 dla całej części systemowej FS).
Ronald Pottol,

1
Nigdy nie powinieneś używać urządzeń / dev / sd * w plikach konfiguracyjnych takich jak fstab. Nigdy nie należy zakładać, że nazwy są zawsze takie same. Zamiast tego powinieneś użyć składni UUID = ... (bez cudzysłowów), na przykład w man fstab. Aby znaleźć identyfikator UUID, użyj polecenia blkid. (alternatywnie możesz wybrać etykietę lub identyfikator; zobacz także / dev / disk / by- *)
Peter

1

Moje DVD na moim komputerze Fedora 16 jest podłączone do interfejsu SATA. Był zamknięty i nie chciał się otworzyć ani zamknąć. Uruchamianie partprobe jako root sprawiło, że moje cdrom / DVD znów działa. Sądzę, że to pomoże na innym komputerze, na którym od czasu do czasu mam problem z wymianą na gorąco. Dzięki!


1

Kontroler Fusion-MPT SAS, który posiadasz, jest niskiej klasy kontrolerem RAID. Jeśli nie używasz go do RAID, może nadal zapewniać nieprzydatną warstwę przeszkody / abstrakcji.

Być może trzeba będzie szturchać kontroler RAID statusem mpt lub lsiutil, aby faktycznie skanował magistralę.

http://hwraid.le-vert.net/wiki/LSIFusionMPT ma niezłą ilość dokumentacji, ale nie mogę powiedzieć, że to zweryfikowałem.


1

W niektórych przypadkach może być konieczne włączenie wymiany na gorąco w systemie BIOS płyty głównej i / lub kontrolera SATA. Zależy to całkowicie od marki i modelu obu, ale jeśli masz wbudowane kontrolery SATA, które powinny obsługiwać hotswap, warto przeczesać BIOS płyty głównej. Karty SATA mogą, ale nie muszą, mieć własne ustawienia BIOS-u, wiele kart niższej klasy nie, ale zazwyczaj karty klasy serwerowej.

Jeśli dobrze pamiętam, potrzebowałem tego z wieloma płytami głównymi Gigabyte i być może z innymi markami. Potrzebowałem go do pracy zasobnika SATA z możliwością wymiany podczas pracy; z wyłączoną funkcją usunięcie dysku nie spowodowało problemów, ale nowy dysk nie zarejestrowałby się do momentu ponownego uruchomienia. Włączenie ustawienia działało zgodnie z oczekiwaniami, dyski umieszczone w zasobniku były natychmiast obracane i dostępne dla systemu operacyjnego.


Właśnie sprawdziłem wewnętrzną maszynę, o której wiem, że ma to; działa na płycie głównej Gigabyte Z77X-UD3H z wbudowanymi kontrolerami Marvell 88SE9172 i Intel 7 Series / C210
STW

1

Wiem, że to pytanie jest stare, ale odniosłem pewien sukces, którego nie widziałem gdzie indziej. Miałem podobne problemy z Dell Precision 380 dzisiaj. W końcu udało się go uruchomić, wykonując kombinację następujących czynności:

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

OSTRZEŻENIE: Może to również zakłócić działanie innych urządzeń ATA w systemie. Jeśli masz zamontowane systemy plików na tych urządzeniach, prawdopodobnie źle się to skończy. Moja sytuacja nie obchodziła, ale twoja może.

Dokładnie, które z powyższych poleceń są potrzebne i w jakiej kolejności nie są mi obecnie znane. Niektóre polecenia mogą wymagać powtórzenia. Gdybym musiał zgadywać, powiedziałbym, że zrobię to w podanej wyżej kolejności, a następnie kolejny skan scsi_host ponownie na końcu. W swoich poszukiwaniach zrobiłem całkiem sporo.

Pierwsze polecenie (skanowanie scsi_host) informuje warstwę pośrednią SCSI, aby skanowała wszystkie magistrale w poszukiwaniu nowych / zmienionych urządzeń. Drugie polecenie próbuje zresetować cel SCSI (urządzenie dyskowe). Dwa ostatnie pracują ze sterownikiem dla samego kontrolera AHCI.

Znalazłem te przedmioty głównie poprzez szczegółowe badanie i odważne eksperymenty.

Możesz dopasować węzły scsi_device do marki i modelu urządzenia (używając grep do drukowania nazw plików przed zawartością):

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

Pierwszą cyfrą identyfikatora urządzenia SCSI powinien być numer scsi_host. Następnie możesz dopasować węzły scsi_host do węzłów ich urządzeń za pomocą:

ls -l /sys/class/scsi_host

Podejrzewam, że nigdy nie będę miał szansy na dalsze udoskonalenie, więc chciałem podzielić się tymi informacjami w nadziei na zbliżenie innych. Jeśli otrzymam więcej informacji, zmienię tę odpowiedź, aby ją odzwierciedlić.

Mam nadzieję że to pomoże.


0

Aby hotplug działał, musisz mieć załadowany moduł acpiphp.

[root@example ~]# modprobe acpiphp

oczywiście, jeśli chcesz, aby działało to przy starcie systemu, będziesz musiał skonfigurować, aby ładował się podczas uruchamiania systemu - jednym ze sposobów jest utworzenie / edycja /etc/rc.modules (który jest wywoływany przez rc.sysinit) i dodanie wiersza:

modprobe acpiphp

pamiętaj, jeśli utworzysz ten plik, aby chmod + x go, jak to się nazywa.


Ciekawy. Nigdy nie słyszałem o acpiphp. Dzięki. Wygląda na to, że oznacza zaawansowaną konfigurację i interfejs zasilania PCI Hot Plug. Oczywiście PCI to Peripheral Component Interconnect.
Philip Durbin

2
acpiphp jest dla hotplug PCI, tj. dodawanie i usuwanie kart PCI na gorąco . Obsługują to niektóre drogie systemy. A także wielu hiperwizorów.
derobert
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.