재부팅하지 않고 핫 스왑 된 새 SATA / dev / sda 드라이브를 Linux가 인식하도록하려면 어떻게합니까?


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

서버가 rescan-scsi-bus.sh 와 같은 새로운 / dev / sda를 찾도록하기 위해 몇 가지를 시도했지만 작동하지 않았습니다.

[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를 수정했으며 이제 모든 것이 정상입니다. 그러나 다음에, 재부팅하지 않고 핫 스왑 한 새 SATA 드라이브를 Linux가 인식하도록하려면 어떻게해야합니까?

해당 운영 체제는 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 500GB, 모델 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)

사용중인 Linux 커널 버전에서 SATA 컨트롤러의 상태를 확인하고 싶습니다. 버그 또는 평범하지 않은 지원 일 수 있음
Nathan

버스 번호가 0입니까, 아니면 1입니까?

3
버스 0이었습니다. / sys / class / scsi_host는 host0부터 host5까지 포함합니다. dmesg는 ata1에서 ata6을 보여줍니다. host0에 ata1의 대응 등이 host1에 ATA2의 대응
필립 더빈

답변:


43

SATA 컨트롤러가 핫 스왑을 지원하는 경우 "작동 (tm)"입니다.

SCSI BUS (각 SATA 포트가 SCSI BUS로 표시됨)를 강제로 다시 스캔하고 새 드라이브를 찾으려면 다음을 사용하십시오.

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

위의 <n> 은 버스 번호입니다.


죄송합니다. 기쁨은 없습니다. 해당 명령을 실행하면 드라이브를 처음 연결할 때 트리거되는 것과 동일한 자동 재검색 만 트리거됩니다. 그래도 고마워!
hakamadare

디스크를 보려면 RAID 컨트롤러에서 일부 구성을 수행해야 할 수도 있습니다. 필자의 경우 새 디스크를 RAID에 다시 추가해야했습니다.
MikeKulls

sudo루트 사용자로 사용 하거나 전환 할 때도 권한이 거부됩니다 .
Aaron Franke

NVMe SSD로 부팅 한 시스템에서 새로 연결된 SATA HD를 감지했습니다. powertop더 많은 전원을 끄는 데 사용 하므로 드라이브를 연결 한 SATA 포트가 완전히 잠들었을 수 있습니다. (이 시스템은 SATA 광학 드라이브를 연결하고 부팅시 발견,하지만 너무, 아마 잠 들어있다.) 다른 제안으로, 그림 어떤에서 활성 드라이브의 SATA 링크 재설정 방지하기 위해 hostID를 사용하지 않을 이미와 할 scan사람들을 새 드라이브를 연결 한 드라이브 만 (또는 번호를 모르는 경우 사용하지 않는 것도 있습니다.)
Peter Cordes

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

5
dmesg는 모든 SATA 링크를 강제 재설정한다고 표시했습니다. 프로덕션 환경에서 실행하고 많은 양의 쓰기를 잃기 전에 테스트 할 가치가 있습니다.
Ivan Kozik 5

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

어떻습니까 (우분투에서 작동하는 것 같습니다) :

sudo partprobe


'yum install parted'가 필요할 수도 있습니다.
Antonio

parted평소 용의자가 좋아하는 외에 FTW ... 당신이 잘 알고 있어야합니다 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

그것이 어떻게 "ahci"라고 말하는지보십시오.

그렇지 않은 경우 BIOS에서 활성화하십시오. 또한 일부 BIOS, 특히 서버 또는 UEFI의 경우 디스크 당 "핫 스왑 = 활성화 / 비활성화"설정이 있으며 디스크가있는 경우 활성화해야합니다.


1
당신은 나의 새로운 절친
이야

2

컴퓨터를 다시 부팅해야하는 이유는 다음과 같습니다.

방금 / dev / sdc를 핫스왑했습니다. scsiadd -r 3 0 0을 사용하여 디스크를 꺼내기 전에 기존 디스크의 전원을 끕니다. 그런 다음 새 디스크를 설치 한 후 새 디스크는 / dev / sdc가 아니라 / dev / sdd로 나타납니다. 재부팅 후 디스크는 / dev / sdc로 다시 나타납니다.

hotswap이 작동하는 것 같습니다. / dev / sd *가 더 이상 동일하지 않을 수도 있습니다.

이것이 당신의 문제에 대한 답이 될 수 있습니까?


흠, rescan-scsi-bus.sh는 scsiadd처럼 이미 / proc / scsi / scsi에서 작동합니다. 우리는 어쨌든 다른 서버 벤더를 시도하고 있으므로 앞으로 핫 스왑이 우리에게 "잘 작동"할 것입니다.
Philip Durbin

4
그래, 당신은 내가 알 수있는 근처에 그 주위를 돌 수 없습니다. 그렇기 때문에 디스크 레이블 또는 UUID를 사용하고 수동으로 또는 fstab에 의해 fs를 마운트하면 설정 한 다음 변경되지 않습니다. 유일한 요령은 부트 로더를 새 드라이브에 설치하는 것이지만 GRUB을 사용한 빠른 실험을 통해 재부팅 할 때도 여전히 작동합니다 (기계의 sda를 sd [a, b, c, d] 및 소프트웨어로 대체하고있었습니다) fs의 모든 시스템 부분에 대한 raid1).
로널드 포톨

1
fstab과 같은 구성 파일에서 / dev / sd * 장치를 사용해서는 안됩니다. 이름이 항상 동일하다고 가정해서는 안됩니다. 대신 man fstab에서 볼 수 있듯이 UUID = ... 구문 (따옴표없이)을 사용해야합니다. UUID를 찾으려면 blkid 명령을 사용하십시오. (또는 레이블이나 아이디를 선호 할 수도 있습니다; / dev / disk / by- * 참조)
Peter

1

Fedora 16 컴퓨터의 DVD가 SATA 인터페이스에 연결되어 있습니다. 잠겨 있었고 열리지 않거나 닫지 않았습니다. root로 partprobe 를 실행 하면 CD-ROM / DVD가 다시 작동합니다. 가끔 핫 스왑 문제가 발생하는 다른 컴퓨터에서 도움이 될 것이라고 생각합니다. 감사!


1

보유한 Fusion-MPT SAS 컨트롤러는 저사양 RAID 컨트롤러입니다. RAID에 사용하지 않는 경우 여전히 도움이되지 않는 방해 / 추억의 계층을 제공 할 수 있습니다.

실제로 버스를 스캔하려면 mpt-status 또는 lsiutil을 사용하여 RAID 컨트롤러를 찌를 필요가 있습니다.

http://hwraid.le-vert.net/wiki/LSIFusionMPT 에는 많은 양의 문서가 있지만 그것을 확인했다고 말할 수는 없습니다.


1

경우에 따라 핫 스왑을 마더 보드 및 / 또는 SATA 컨트롤러의 BIOS에서 활성화해야 할 수도 있습니다. 이는 두 모델의 제조사와 모델에 따라 다르지만 핫스왑을 지원 해야하는 온보드 SATA 컨트롤러가 있는 경우 마더 보드 BIOS를 사용하는 것이 좋습니다. SATA 카드에는 자체 BIOS 설정이 있거나 없을 수 있지만 많은 저급 카드는 없지만 서버급 카드는 일반적으로 사용합니다.

올바르게 기억한다면 많은 기가 바이트 마더 보드와 다른 제조사가 필요합니다. 핫 스왑 SATA 트레이가 작동하려면 필요했습니다. 이 기능을 비활성화하면 드라이브를 제거해도 문제가 발생하지 않지만 재부팅 할 때까지 새 드라이브는 등록되지 않습니다. 설정이 예상대로 작동하면 트레이에 놓인 드라이브가 즉시 회전되어 OS에서 사용할 수있게됩니다.


방금 알고있는 기계를 사내에서 확인했습니다. 그것은 온 - 보드 마벨 88SE9172와 인텔 7 시리즈 / C210 컨트롤러와 기가 바이트 Z77X-UD3H 메인 보드를 실행중인
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 장치 ID의 첫 번째 숫자는 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로이 파일을 작성하면 해당 방식으로 호출되므로이 파일을 작성하십시오.


흥미 롭군 나는 acpiphp에 대해 들어 본 적이 없다. 감사. 고급 구성 및 전원 인터페이스 PCI 핫 플러그를 의미합니다. 물론 PCI는 Peripheral Component Interconnect입니다.
Philip Durbin

2
acpiphp는 PCI 핫 플러그, 즉 PCI 카드의 핫 추가 및 제거를위한 것 입니다. 일부 고가의 시스템이이를 지원합니다. 또한 많은 하이퍼 바이저도 있습니다.
derobert
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.