Bagaimana cara membuat Linux mengenali drive SATA / dev / sda baru yang saya gunakan untuk swap tanpa me-reboot?

41

Hot menukar drive SATA / dev / sda yang gagal berfungsi dengan baik, tetapi ketika saya beralih ke drive baru, drive itu tidak dikenal:

[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

Saya mencoba beberapa hal untuk membuat server menemukan / dev / sda baru, seperti rescan-scsi-bus.sh tetapi tidak berfungsi:

[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

Saya akhirnya me-reboot server. / dev / sda dikenali, saya memperbaiki perangkat lunak RAID, dan semuanya baik-baik saja sekarang. Tetapi untuk waktu berikutnya, bagaimana saya bisa membuat Linux mengenali drive SATA baru yang saya gunakan untuk bertukar panas tanpa reboot?

Sistem operasi yang dimaksud adalah RHEL5.3:

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

Hard drive adalah Seagate Barracuda ES.2 SATA 3.0-Gb / s 500-GB, model ST3500320NS.

Berikut ini adalah output 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)

Pembaruan : Dalam mungkin selusin kasus, kami terpaksa me-reboot server karena hot swap tidak "hanya bekerja." Terima kasih atas jawabannya untuk melihat lebih dalam pada kontroler SATA. Saya sudah memasukkan output lspci untuk sistem yang bermasalah di atas (hostname: fs-2). Saya masih bisa menggunakan bantuan untuk memahami apa yang sebenarnya tidak didukung perangkat keras dalam hal hot swap untuk sistem itu. Tolong beri tahu saya apa output lain selain lspci yang mungkin berguna.

Berita baiknya adalah hot swap "baru saja bekerja" hari ini di salah satu server kami (hostname: www-1), yang sangat jarang bagi kami. Ini adalah output 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)
Philip Durbin
sumber
Saya akan memeriksa status pengontrol SATA Anda di versi kernel Linux yang Anda gunakan. Bisa jadi bug atau polos tidak didukung
Nathan
Apakah 0 nomor BUS, atau 1?
3
Itu bus 0. / sys / class / scsi_host berisi host0 hingga host5. dmesg menunjukkan ata1 hingga ata6. ata1 bersesuaian dengan host0, bersesuaian ata2 untuk host1, dll
Philip Durbin

Jawaban:

43

Jika pengontrol SATA Anda mendukung hot swap, itu seharusnya "hanya bekerja (tm)."

Untuk memaksa memindai ulang pada SCSI BUS (setiap port SATA menunjukkan sebagai SCSI BUS) dan menemukan drive baru, Anda akan menggunakan:

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

Di atas, <n> adalah nomor BUS.


sumber
Maaf, tidak ada sukacita; menjalankan perintah itu hanya memicu pemindaian ulang otomatis yang sama yang dipicu ketika saya pertama kali memasukkan drive. Terimakasih Meskipun!
hakamadare
Sangat mungkin beberapa konfigurasi perlu dilakukan pada pengontrol serangan agar dapat melihat disk. Dalam kasus saya itu adalah perlu untuk menambahkan disk baru ke dalam serangan itu.
MikeKulls
Saya mendapat izin bahkan ketika menggunakan sudodan beralih ke pengguna root.
Aaron Franke
Pada sistem saya yang boot dari NVMe SSD, ini berfungsi untuk mendeteksi SATA HD yang baru dipasang. Saya menggunakan powertopuntuk membiarkan lebih banyak hal mati, jadi mungkin port SATA yang saya tancapkan ke drive sepenuhnya tertidur. (Sistem ini memiliki drive optik SATA yang terhubung dan terdeteksi saat boot, tetapi mungkin juga tertidur.) Seperti yang disarankan orang lain, untuk menghindari pengaturan ulang tautan SATA untuk drive aktif, cari tahu hostid mana yang sudah digunakan dan jangan scanyang , hanya di mana Anda terhubung ke drive baru. (Atau yang tidak digunakan jika Anda tidak tahu nomornya.)
Peter Cordes
18
echo "- - -" >/sys/class/scsi_host/host<n>/scan
       ^ ^
        \_\_______ note spaces between the dashes.

sumber
5
Hati-hati dengan ini: dmesg menunjukkan bahwa hard-reset semua tautan SATA saya. Mungkin layak untuk diuji sebelum menjalankannya dalam produksi dan kehilangan banyak penulisan.
Ivan Kozik
12

Ketika sebuah drive gagal dalam beberapa keadaan, Linux tidak akan menyadari bahwa Anda sebenarnya telah menariknya secara fisik dari array. Jika Anda memiliki masalah itu (seperti yang saya lakukan pagi ini), Anda dapat melakukan hal berikut:

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

Misalnya dalam kasus saya / dev / sda telah gagal dan saya tidak ingin me-reboot server, jadi saya lakukan:

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

Setelah saya melakukan itu, drive baru (yang sebenarnya sudah ditambahkan secara fisik) segera terlihat.

Jika tidak terlihat pada titik ini, Anda juga dapat melakukan ini untuk memaksa pemindaian ulang:

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

Itu "- - -" adalah wildcard untuk saluran, id & LUN masing-masing, sehingga Anda dapat membatasi pemindaian ke beberapa bagian jika Anda ingin dengan menentukan angka sebagai gantinya.

Sebelum Anda mulai, Anda juga bisa:

readlink /sys/block/<devnode>

Yang akan menunjukkan jalan dengan nomor host yang tepat untuk check in / proc / scsi / scsi untuk menghilang setelah dihapus.

karora
sumber
7

Bagaimana dengan ini (tampaknya berfungsi di Ubuntu):

sudo partprobe


sumber
Anda mungkin juga perlu 'yum install parted'
Antonio
partedFTW ... Anda harus tahu dengan baik selain tersangka seperti fdisk, gdisk, cgdisk, testdisk.
sjas
6

Saya tidak percaya tidak ada yang menyebutkan AHCI ... kontroler SATA Anda harus dalam mode AHCI untuk mengaktifkan hot swap. Periksa ini dengan melihat driver yang Anda gunakan:

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

Lihat bagaimana katanya "ahci" di sana.

Jika tidak, aktifkan saja di BIOS Anda. Juga, beberapa BIOS, terutama pada server atau UEFI memiliki pengaturan "Tukar Panas = diaktifkan / dinonaktifkan" per disk yang juga harus Anda aktifkan jika ada.

Peter
sumber
1
Anda adalah sahabat baru saya: D
allyourcode
2

Inilah mengapa saya perlu me-reboot komputer ...

Saya baru saja menukar / dev / sdc saya. Saya telah menggunakan scsiadd -r 3 0 0 untuk mematikan disk lama sebelum menariknya keluar. Kemudian setelah menginstal disk baru, disk baru tidak muncul sebagai / dev / sdc melainkan sebagai / dev / sdd. Setelah reboot, disk akan muncul kembali sebagai / dev / sdc lagi.

Jadi sepertinya hotswap berfungsi Ok, mungkin saja / dev / sd * tidak sama lagi.

Mungkinkah ini jawaban untuk masalah Anda?

Peter
sumber
Hmmm, well, rescan-scsi-bus.sh sudah bekerja di / proc / scsi / scsi, seperti halnya scsiadd. Kami sedang mencoba vendor server yang berbeda, jadi mungkin hot swap akan "hanya berfungsi" bagi kami di masa mendatang.
Philip Durbin
4
Ya, Anda tidak bisa menyiasatinya, sedekat yang saya tahu. Inilah sebabnya mengapa Anda menggunakan label disk atau UUID, dan me-mount fs Anda dengan itu (secara manual, atau di fstab), Anda dapat mengaturnya, dan kemudian tidak berubah. Satu-satunya trik adalah membuat boot loader Anda untuk menginstal ke drive baru, tetapi masih berfungsi ketika reboot, meskipun dari beberapa percobaan cepat dengan GRUB (saya mengganti sda pada mesin dengan sd [a, b, c, d] dan perangkat lunak raid1 untuk semua bagian sistem dari fs).
Ronald Pottol
1
Anda seharusnya tidak pernah menggunakan perangkat / dev / sd * dalam file konfigurasi seperti fstab. Anda tidak boleh berasumsi bahwa namanya selalu sama. Sebagai gantinya, Anda harus menggunakan sintaksis UUID = ... (tanpa tanda kutip), seperti yang Anda lihat di man fstab. Untuk mengetahui UUID, gunakan perintah blkid. (Atau, Anda dapat memilih label atau id; lihat juga / dev / disk / by- *)
Peter
1

DVD saya pada mesin Fedora 16 saya terhubung ke antarmuka SATA. Terkunci dan tidak mau membuka atau menutup. Menjalankan partprobe sebagai root membuat cdrom / DVD saya bekerja kembali. Saya rasa itu akan membantu pada mesin anther di mana saya memiliki masalah hot swap sesekali. Terima kasih!

Stuart Edge
sumber
1

Pengontrol Fusion-MPT SAS yang Anda miliki adalah pengontrol RAID tingkat rendah. Jika Anda tidak menggunakannya untuk RAID, itu mungkin masih memberikan lapisan penghalang / abstraksi yang tidak membantu.

Anda mungkin perlu mencolek pengontrol RAID dengan mpt-status atau lsiutil untuk membuatnya benar-benar memindai bus.

http://hwraid.le-vert.net/wiki/LSIFusionMPT memiliki jumlah dokumentasi yang bagus, tetapi saya tidak dapat mengatakan saya telah memverifikasinya.

aij
sumber
1

Dalam beberapa kasus hot-swap mungkin perlu diaktifkan pada BIOS baik motherboard dan / atau pengontrol SATA. Ini sepenuhnya tergantung pada merek dan model keduanya, tetapi jika Anda memiliki pengontrol SATA on-board yang harus mendukung hotswap maka ada baiknya menyisir melalui BIOS motherboard. Kartu SATA mungkin atau mungkin tidak memiliki pengaturan BIOS sendiri, banyak kartu kelas bawah tidak, tetapi kartu kelas server biasanya.

Jika saya ingat dengan benar, saya perlu melakukan ini dengan sejumlah motherboard Gigabyte, dan mungkin beberapa merek lain. Saya membutuhkannya agar baki SATA hot-swap berfungsi; dengan fitur yang dinonaktifkan menghapus drive tidak menyebabkan masalah tetapi drive baru tidak akan mendaftar sampai reboot. Mengaktifkan pengaturan bekerja sesuai yang diharapkan, drive yang ditempatkan di baki segera diputar dan tersedia untuk OS.

STW
sumber
Baru saja memeriksa mesin di rumah yang saya tahu punya ini; itu menjalankan motherboard Gigabyte Z77X-UD3H dengan on-board Marvell 88SE9172 dan pengontrol Intel 7 Series / C210
STW
1

Saya tahu pertanyaan ini sudah lama, tetapi saya memiliki beberapa kesuksesan yang tidak saya lihat dilaporkan di tempat lain. Punya masalah serupa pada Dell Precision 380 hari ini. Akhirnya berhasil dengan melakukan beberapa kombinasi berikut ini:

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

PERINGATAN: Ini juga dapat mengganggu perangkat ATA lain pada sistem. Jika Anda telah menginstal sistem file pada dev tersebut, itu mungkin berakhir dengan buruk. Situasi saya tidak peduli, tetapi Anda mungkin.

Persis dari perintah di atas yang diperlukan, dan dalam urutan apa, tidak diketahui oleh saya saat ini. Beberapa perintah mungkin perlu diulangi. Jika saya harus menebak, saya akan mengatakan lakukan dalam urutan yang ditunjukkan di atas, maka scan scsi_host lagi di akhir. Saya melakukan beberapa hal lagi dalam penjelajahan saya.

Perintah pertama (pemindaian scsi_host) memberi tahu pemain tengah SCSI untuk memindai semua bus untuk perangkat yang baru / diubah. Perintah kedua mencoba mengatur ulang target SCSI (perangkat disk). Dua yang terakhir bekerja dengan driver untuk pengontrol AHCI itu sendiri.

Saya menemukan barang-barang tersebut sebagian besar melalui pemeriksaan terperinci dan eksperimen yang berani.

Anda dapat mencocokkan node scsi_device dengan perangkat yang dibuat dan dimodelkan dengan (menggunakan grep untuk mencetak nama file di depan konten):

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

Digit pertama ID perangkat SCSI harus berupa angka scsi_host. Anda kemudian dapat mencocokkan node scsi_host dengan node perangkat mereka dengan:

ls -l /sys/class/scsi_host

Saya kira saya tidak akan pernah mendapatkan kesempatan untuk memperbaiki lebih lanjut, jadi saya ingin berbagi info ini dengan harapan membuat orang lain lebih dekat. Jika saya mendapatkan lebih banyak info, saya akan mengedit jawaban ini untuk mencerminkan.

Semoga ini membantu.

Ben Scott
sumber
0

Agar hotplug berfungsi, Anda harus memuat modul acpiphp.

[root@example ~]# modprobe acpiphp

jelas jika Anda ingin ini berfungsi saat boot, Anda harus mengonfigurasikannya untuk dimuat pada saat boot - salah satu caranya adalah dengan membuat / mengedit /etc/rc.modules (yang dipanggil oleh rc.sysinit) dan menambahkan baris:

modprobe acpiphp

ingat jika Anda membuat file ini ke chmod + x, seperti yang dipanggil dengan cara itu.

nox
sumber
Menarik. Saya belum pernah mendengar tentang acpiphp. Terima kasih. Tampaknya merupakan kepanjangan dari Konfigurasi Lanjut dan Antarmuka PCI Power Plug. PCI adalah Interconnect Component Component, tentu saja.
Philip Durbin
2
acpiphp adalah untuk hotplug PCI, yaitu, hot menambah dan mengeluarkan kartu PCI. Beberapa sistem yang mahal mendukung hal ini. Dan juga banyak hypervisor.
derobert