Linux'un, yeniden başlatmadan değiştirdiğim yeni bir SATA / dev / sda sürücüsünü tanımasını nasıl sağlayabilirim?


41

Çalışırken değiştirilemeyen bir SATA / dev / sda sürücüsünün çıkarılması iyi çalıştı, ancak yeni bir sürücüde takas ettiğimde, tanınmadı:

[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

Sunucuyu rescan-scsi-bus.sh gibi new / dev / sda'yı bulması için birkaç şey denedim ama işe yaramadı:

[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

Sunucuyu yeniden başlattım. / dev / sda, RAID yazılımını düzelttim ve şimdi her şey yolunda. Ancak bir dahaki sefere, Linux'un yeniden başlatılmadan çalışırken değiştirdiğim yeni bir SATA sürücüsünü tanımasını nasıl sağlayabilirim?

Söz konusu işletim sistemi RHEL5.3'tür:

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

Sabit sürücü bir Seagate Barracuda ES.2 SATA 3.0 GB / sn 500 GB, model ST3500320NS'dir.

İşte lscpi çıkışı:

[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)

Güncelleme : Belki de bir düzine durumda, sunucuları yeniden başlatmaya zorlandık, çünkü hot swap "sadece işe yaramadı". SATA denetleyicisine daha fazla bakabilmek için cevaplarınız için teşekkür ederiz. Yukarıdaki sorunlu sistem için lspci çıktısını dahil ettim (hostname: fs-2). Hala, donanımda neyin desteklenmediğini ve bu sistem için çalışırken değiştirilebilir durumda ne olduğunu anlamakta biraz yardım alabilirim. Lütfen lspci'den başka hangi çıktıların faydalı olabileceğini bana bildirin.

İyi haber şu ki, hot swap'ımız bugün sunucularımızdan birinde ("www-1") çalıştı, bu bizim için çok nadir. Lspci çıktısı:

[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 denetleyicinizin durumunu, kullandığınız Linux çekirdeğinin sürümünde kontrol ederdim. Desteklenmeyen bir hata veya düz olabilir
Nathan

BUS numarası 0 mı, 1 mi?

3
0'dı. / Sys / class / scsi_host, host0 ile host5 arasında. dmesg, ata1 ila ata6'yı gösterir. ata1, host0'a karşılık gelir, ata2, host1'e vb. karşılık gelir.
Philip Durbin,

Yanıtlar:


43

SATA denetleyiciniz çalışırken değiştirmeyi destekliyorsa, "sadece çalışması gerekir (tm)".

SCSI BUS'ta bir yeniden taramaya zorlamak (her SATA bağlantı noktası bir SCSI BUS olarak gösterilir) ve yeni sürücüler bulmak için kullanacaksınız:

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

Yukarıda, <n> BUS numarasıdır.


Üzgünüm, neşe yok; bu komutu çalıştırmak yalnızca sürücüyü ilk taktığımda tetiklenen aynı otomatik yeniden taramayı tetikler. Yine de teşekkürler!
hakamadare

Diski görebilmesi için bazı kontrollerin baskın denetleyicisinde yapılması gerekiyor. Benim durumumda, yeni diski baskın içine geri eklemek gerekliydi.
MikeKulls

Kullanırken sudove kök kullanıcıya geçerken bile izin verilmedi .
Aaron Franke

Bir NVMe SSD'den başlatılan sistemimde bu, yeni takılmış bir SATA HD'yi algılamaya çalıştı. Daha powertopfazla şeyin kapanmasına izin vermek için kullanıyorum , bu yüzden belki sürücüyü taktığım SATA bağlantı noktası tamamen uyuyordu. (Sistem SATA optik sürücü bağlı ve açılışta algılanan, ama çok, muhtemelen uykudaydı etmiştir.) Diğerleri önermek üzere, figür hangi aktif sürücüler, SATA bağlantı sıfırlama önlemek için hostkimlikleri değil zaten kullanımda olan ve yapılacak scanolan , yalnızca yeni bir sürücüye taktığınız sürücüyü. (Ya da numaralandırmayı bilmiyorsanız, kullanılmayanlar).
Peter Cordes

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

5
Buna dikkat edin: dmesg, SATA bağlantılarımın hepsinin sıfırlandığını gösterdi. Üretimde çalışmaya başlamadan ve tonlarca yazı kaybetmeden önce denemeye değer.
Ivan Kozik,

12

Bir sürücü bazı durumlarda arızalandığında, Linux onu fiziksel olarak diziden çektiğinizi fark etmez. Bu sorunu yaşıyorsanız (bu sabah yaptığım gibi) aşağıdakileri yapabilirsiniz:

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

Örneğin benim durumumda / dev / sda başarısız oldu ve sunucuyu yeniden başlatmak istemedim, ben de yaptım:

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

Bunu yaptıktan sonra (gerçekten fiziksel olarak eklenmiş olan) yeni sürücü hemen görülebiliyordu.

Bu noktada görünmüyorsa, yeniden taramaya zorlamak için bunu da yapabilirsiniz:

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

"- - -", sırasıyla kanal, id ve LUN için joker karakterlerdir, bu nedenle sayıları belirterek isterseniz taramayı bazı alt kümelerle sınırlayabilirsiniz.

Başlamadan önce şunları da yapabilirsiniz:

readlink /sys/block/<devnode>

Bu, kaldırıldıktan sonra kaybolma olup olmadığını / proc / scsi / scsi'yi kontrol etmek için doğru ana bilgisayar numarasına sahip yolu gösterir.


7

Buna ne dersiniz (Ubuntu'da çalışıyor gibi):

sudo partprobe


Ayrıca 'yum install parted' bölümüne de ihtiyacınız olabilir
Antonio

partedOlağan şüpheliler gibi yanında FTW ... pek iyi bilmelidir fdisk, gdisk, cgdisk, testdisk.
sjas

6

Henüz kimsenin AHCI'den bahsetmediğine inanamıyorum ... SATA denetleyicinizin, çalışırken değiştirmeyi etkinleştirmek için AHCI modunda olması gerekir. Bunu, kullandığınız sürücüye bakarak kontrol edin:

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

Orada nasıl "ahci" yazdığını görün.

Olmazsa, BIOS'unuzda etkinleştirin. Ayrıca, bazı BIOS'lar, özellikle sunucularda veya UEFI'de, varsa, etkinleştirmeniz gereken disk başına "Hot Swap = etkin / devre dışı" ayarına da sahiptir.


1
Sen benim en iyi arkadaşımsın: D
allyourcode

2

İşte bu yüzden bilgisayarı yeniden başlatmam gerekiyordu ...

Sadece / dev / sdc'mi çalışırken değiştirdim. Eski diski çıkarmadan önce kapatmak için scsiadd -r 3 0 0 kullandım. Sonra yeni diski kurduktan sonra, yeni disk / dev / sdc olarak görünmüyor, yerine / dev / sdd olarak göründü. Yeniden başlatmanın ardından, disk tekrar / dev / sdc olarak yeniden belirir.

Öyle görünüyor ki hotswap işe yarıyor Tamam, sadece / dev / sd * artık aynı olmayabilir.

Bu, sorununuza bir cevap olabilir mi?


Hmmm, rescan-scsi-bus.sh zaten / proc / scsi / scsi üzerinde çalışıyor, tıpkı scsiadd gibi görünüyor. Yine de farklı bir sunucu satıcısına çalışıyoruz, bu yüzden belki de çalışırken takas gelecekte bizim için sadece "işe yarar".
Philip Durbin

4
Evet, söyleyebileceğim gibi, bunun üstesinden gelemezsin. Bu nedenle disk etiketini veya UUID'yi kullanıyorsunuz ve fs'nizi bununla (elle veya fstab'da) monte ediyor, ayarlayabilir ve sonra değişmiyor. Tek püf noktası, önyükleme yükleyicinizi yeni sürücüye yüklemektir, ancak GRUB (bazı makinelerin sda'sını sd [a, b, c, d] ve yazılım ile değiştiriyordum.) fs'nin tüm sistem kısmı için raid1).
Ronald Pottol

1
/ Dev / sd * aygıtlarını asla fstab gibi config dosyalarında kullanmamalısınız. Asla adların hep aynı olduğunu varsaymamalısın. Bunun yerine, UUID = ... sözdizimini fstab erkekte gördüğünüz gibi (tırnak işaretleri olmadan) kullanmalısınız. UUID'yi bulmak için blkid komutunu kullanın. (alternatif olarak, etiketi veya kimliği tercih edebilirsiniz; ayrıca bkz: / dev / disk / by- *)
Peter

1

Fedora 16 makinemdeki DVD'im bir SATA arabirimine bağlı. Kilitlendi ve açılmadı ya da kapanmadı. Partprobe'u root olarak çalıştırmak cdrom / DVD'mi tekrar çalıştırdı. Zaman zaman hot swap problemimin olduğu anter makinede yardımcı olacağını düşünüyorum. Teşekkürler!


1

Sahip olduğunuz Fusion-MPT SAS denetleyicisi, düşük kaliteli bir RAID denetleyicisidir. RAID için kullanmıyorsanız, yine de yararsız bir engel / soyutlama katmanı sağlıyor olabilir.

Veriyolunu gerçekten taramasını sağlamak için RAID denetleyicisini mpt durumu veya lsiutil ile dürtmeniz gerekebilir.

http://hwraid.le-vert.net/wiki/LSIFusionMPT için çok sayıda dokümantasyon var, ancak bunu doğruladığımı söyleyemem.


1

Bazı durumlarda, çalışırken değiştirilebilir ana kartın ve / veya SATA denetleyicisinin BIOS'unda etkinleştirilmesi gerekebilir. Bu tamamen her ikisinin de yapısına ve modeline bağlıdır, ancak eğer hızlı geçişi desteklemesi gereken yerleşik SATA denetleyicileriniz varsa , ana kart BIOS'u taramaya değer. SATA kartları kendi BIOS ayarlarına sahip olabilir veya olmayabilir, birçok alt uç kart yoktur, ancak sunucu sınıfı kartlar genellikle yapar.

Doğru hatırlıyorsam, buna birkaç Gigabyte anakart ve belki de başka bazı markalarda ihtiyaç duydum. Çalışırken değiştirilebilir bir SATA tepsisinin çalışması için ihtiyacım vardı; özelliği devre dışı bırakıldığında sürücünün çıkarılması sorun çıkarmaz, ancak yeni bir sürücü yeniden başlatılıncaya kadar kayıt olmaz. Ayarın beklendiği gibi çalışmasını sağlamak için, tepsiye yerleştirilen sürücüler hemen çalıştırıldı ve işletim sistemi tarafından kullanılabiliyordu.


Sadece sahip olduğumu bildiğim bir makineyi kontrol ettim; yerleşik Marvell 88SE9172 ve Intel 7 Serisi / C210 denetleyicileri olan Gigabyte Z77X-UD3H anakartını kullanıyor
STW

1

Bu sorunun eski olduğunu biliyorum, ancak başka bir yerde rapor görmedim, bir miktar başarım oldu. Bugün Dell Precision 380'de de benzer sıkıntılar yaşandı. Sonunda aşağıdakilerin bir kombinasyonunu yaparak işe aldı:

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

UYARI: Bu, sistemdeki diğer ATA aygıtlarını da bozabilir. Dosya sistemlerini bu aygıtlara monte ettiyseniz, bunun kötü bir şekilde bitmesi olasıdır. Durumum umrunda değildi, ama senin olabilir.

Tam olarak yukarıdaki komutlardan hangisine ihtiyaç duyulur ve şu anda hangi sırayla benim için bilinmiyor. Bazı komutların tekrarlanması gerekebilir. Tahmin etmek zorunda olsaydım, yukarıda gösterilen sırayla yapın derdim, sonra başka bir scsi_host tekrar tarar. Araştırmalarımda epeyce yaptım

İlk komut (scsi_host scan) SCSI orta katmanına, yeni / değiştirilmiş cihazlar için tüm otobüsleri taramasını söyler. İkinci komut, SCSI hedefini (disk aygıtı) sıfırlamaya çalışır. Son ikisi, AHCI kontrol cihazının kendisinin sürücüsü ile çalışıyor.

Söz konusu maddeleri daha çok ayrıntılı inceleme ve cesur deneylerle buldum.

Scsi_device düğümlerini cihaz markası ve modeliyle eşleştirebilirsiniz (dosya adlarını içeriğin önüne yazdırmak için grep kullanarak):

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

SCSI cihaz kimliğinin ilk basamağı, scsi_host numarası olmalıdır. Daha sonra scsi_host düğümlerini cihaz düğümleriyle şununla eşleştirebilirsiniz:

ls -l /sys/class/scsi_host

Daha fazla incelemek için asla bir şansım olmayacağından şüpheliyim, bu yüzden diğerlerini daha da yakınlaştırma umuduyla bu bilgiyi paylaşmak istedim. Daha fazla bilgi edersem, yansıtmak için bu cevabı düzenleyeceğim.

Bu yardımcı olur umarım.


0

Çalışırken çalışan cihazın çalışması için acpiphp modülünün yüklü olması gerekir.

[root@example ~]# modprobe acpiphp

Açıkçası bunun önyükleme sırasında çalışmasını istiyorsanız, önyükleme sırasında yüklenecek şekilde yapılandırmanız gerekecek - bunun bir yolu /etc/rc.modules (/ rc.sysinit tarafından adlandırılır) oluşturmak ve düzenlemek:

modprobe acpiphp

Bu dosyayı chmod + x dosyalarında oluşturduğunuzda, bu şekilde adlandırıldığı gibi hatırlayın.


İlginç. Acpiphp'i hiç duymamıştım. Teşekkürler. Gelişmiş Yapılandırma ve Güç Arabirimi PCI Çalışırken Takma için duruyor gibi görünüyor. PCI elbette Çevre Birim Bileşeni Bağlantısıdır.
Philip Durbin

2
acpiphp, PCI hotplug içindir, yani sıcak PCI kartları ekleyerek ve çıkartır . Bazı pahalı sistemler bunu destekler. Ve ayrıca birçok hipervizör.
derobert 21:12
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.