Linux Çekirdeği> 3.0'ın arızalı bir diski tamamen yoksaymasını nasıl söylerim?


23

Bir SATA otobüste sabit disk ile Samsung dizüstü (Chronos s7) sahip ata:1olarak algılanır, /dev/sdaüzerinde bir 8G SSD ata:2, /dev/sdbve SATA arayüzüne geri kalanı üzerinde çeşitli diğer cihazlar.

Sorun SSD diski olmasıdır

  • ana panoya lehimlenmiş (taşınmaz)
  • busted (herhangi bir işlem için sadece G / Ç hataları verir)
  • bioslarda görünmüyor (muhtemelen kırılmış olduğu için)

Şimdi bu disk:

  • can sıkıcı, arızalı diski araştırmaya çalışırken önyüklemeyi üç ila beş dakika geciktirir;
  • Ancak en sinir bozucu şey, sistemin başarısızlık nedeniyle askıya /dev/sdbalınmamasıdır.

Açılışta gecikmeyle yaşayabileceğime dikkat edin --- beni endişelendiren şey devam etme / askıya alma olayıdır.


Öyleyse soru şudur: Çekirdeğe cihazı ata atamamaktan bile kaçınmasını söyleyebilir miyim: 2?

Eski çekirdekte (<3.0), kaynağa hala bir miktar kazı yapabildiğimde hdb=ignore, hile yapan stilin bir komut satırı parametresi vardı .

Aşağıda sunulan tüm hileleri udevve libata:forceçekirdek parametrelerini boşuna boşuna denedim . Özellikle, aşağıdaki çalışmıyor:

  1. Aşağıdaki /etc/udev/rules.d/dosyalardan birine ekleme yapmak (erken uygulamada olduğu gibi 00-ignoredisk.rulesveya 99-ignoredisk.rulesher iki yerde de geç veya sonra)

    SUBSYSTEMS=="scsi", DRIVERS=="sd", ATTRS{rev}=="SSD ", ATTRS{model}=="SanDisk iSSD P4 ", ENV{UDISKS_IGNORE}="1" 
    

    ne de

    KERNEL=="sdb", ENV{UDISKS_IGNORE}="1"
    

    ne de pek çok ara çözüm --- bu, diski önyüklemeden sonra erişilemez hale getirir, ancak önyüklemede incelenir ve askıya alınırken hala kontrol edilir --- askıya alınmasının başarısız olmasına neden olur.

  2. Düzenleme sistem dosyalarını /lib/udev/rules.d/60-persistent-storage.rules(ve udisks, udisks2) değiştirerek

    KERNEL=="ram*|loop*|fd*|nbd*|gnbd*|dm-|md", GOTO="persistent_storage_end"
    

    için

    KERNEL=="ram*|loop*|fd*|nbd*|gnbd*|dm-|md|sdb*", GOTO="persistent_storage_end"
    

    Yine, bunun diski kullanıcı alanından maskeleme etkisi vardır, ancak disk yine de çekirdeğe görünebilir.

  3. DMA'yı, daha düşük devir sayısını veya arızalı diskle ilgili herhangi bir şeyi yapmamak için libata:forceparametrelerin (örneğin burada bulunur ) tüm olası kombinasyonlarıyla (yani pek çoğu) önyükleme çalışmaz. Parametre kullanılır, ancak disk hala problanmış ve hatalıdır.

    Tam udevadm info -a -n /dev/sdbyapıştırma işlemi http://paste.ubuntu.com/6186145/

    smartctl -i /dev/sdb -T permissive verir:

    root@samsung-romano:/home/romano# smartctl -i /dev/sdb -T permissive
    smartctl 5.43 2012-06-30 r3573 [x86_64-linux-3.8.0-31-generic] (local build)
    Copyright (C) 2002-12 by Bruce Allen, http://smartmontools.sourceforge.net
    
    Vendor:               /1:0:0:0
    Product:              
    User Capacity:        600,332,565,813,390,450 bytes [600 PB]
    Logical block size:   774843950 bytes
    >> Terminate command early due to bad response to IEC mode page
    

    bu açıkça yanlıştır. Yine:

    root@samsung-romano:/home/romano# fdisk -b 512 -C 970 -H 256 -S 63 /dev/sdb
    fdisk: unable to read /dev/sdb: Input/output error
    

(SSD veri http://ubuntuforums.org/showthread.php?t=1935699&p=11739579#post11739579 ).


Bu çok açıksa üzgünüm, ancak sorunuza dahil edilmediğiniz için: cihaz adının veya UUID'nin listede bulunmadığından emin misiniz /etc/fstab? Çünkü önyüklemedeki gecikmeye, çekirdeğin veya udev'in daha önce neden olabileceği, ancak durum daha sonra fsck tarafından okunabilir fstab.
Teresa e Junior

Evet, sistem dosyalarında / dev / sdb'den (veya bölümlerinden) bahsedilmez. Gecikme, başlama başlamadan önce bile ... bir kronometrede (önyükleme paralel olarak devam ediyor), ama daha temel bir seviyede. Fakat gerçekte önyükleme gecikmesi problemin azalmasıdır --- eğer askıya alma / devam ettirme sırasında diski yoksaysaydım, böylece askıya alma işlemi çalışırsa mutlu olurum. (yine de teşekkürler).
Rmano

İnitrd kullanıyor musunuz? eğer öyleyse kim?
hildred

@hildred: 13.04 Ubuntu'dan stok çekirdeği ve initramfs kullanıyorum. Orada AHCI'yi veya tüm SATA'yı devre dışı bırakabilirim, ancak sistemim öldü --- hiç disk yok.
Rmano

Debian (ve Umbutu) ata alt sistemini modül olarak derler. İnitrd tarafından yüklendiğinde parametreleri modüle ayarlamayı denediniz mi?
hildred

Yanıtlar:


26

libatahiç noprobe seçeneğine sahip değil; bu eski bir IDE opsiyonuydu ...

Ama ben gittim ve sizin için bir çekirdek bandı yazdım . Çok sayıda çekirdeğe çok kolay uygulanmalıdır (yukarıdaki satır 2013-05-21 / v3.10-rc1 * eklenmiştir, ancak bu satır olmadan el ile güvenle uygulanabilir).

Güncelleştirme yama artık bu akıntıya (en azından 3.12.7 sağlam bir çekirdek). Ubuntu 14.04 ile dağıtılan standart çekirdektedir (ki bu, 3.13'e dayanmaktadır).

Yama yüklendikten sonra,

 libata.force=2.00:disable

çekirdek önyükleme parametreleri diski Linux çekirdeğinden gizler. Numaranın doğru olup olmadığını iki kez kontrol edin; Cihaz adını aramak yardımcı olabilir (açıkçası, önyükleme parametrelerini eklemeden önce çekirdek mesajlarını kontrol etmeniz gerekir ):

(0)samsung-romano:~% dmesg | grep iSSD
[    1.493279] ata2.00: ATA-8: SanDisk iSSD P4 8GB, SSD 9.14, max UDMA/133
[    1.494236] scsi 1:0:0:0: Direct-Access     ATA      SanDisk iSSD P4  SSD  PQ: 0 ANSI: 5

Önemli sayı ata2.00yukarıdaki ilk satırda.


Çok teşekkürler. Ubuntu'uma bir çekirdek nasıl derlenip yükleneceğini hatırlayabildiğimde kontrol etmeye çalışacağım. Maalesef ileride çok karmaşık bir hafta
geçireceğim

1
+1 Gönderdiğim numaradan açıkça daha iyi. Umarım resmi olur.
Emmanuel

1
Tamam, yamayı test ettim. İşe yarıyor. Yukarı doğru itmeniz gerekiyorsa, Tested by: ekimi ekleyebilirim: profilimde gerçek e-postam var. Wiki.ubuntu.com/Kernel/BuildYourOwnKernel içindeki talimatları izleyerek (tuhaflıklar ile) yükledim .
Rmano

1
@ illuminÉ --- cevabı az önce o anlamda düzenledi --- onaylanmasını bekleyin.
Rmano

1
GENTOO'YU SEVMEK Başka Bir Neden !!
eyoung100,

15

Donanım sorunlarının fiziksel donanım çözümü var. Sürücünün güç kaynağını çözmeyi veya kesmeyi düşündün mü?

DÜZENLEME: Tamam, eğer bir sabit sürücüyü çalışırken takmadan önce insanların bunu kullanması bir seçenek değilse. Bunu sürücünüzü devre dışı bırakmak için kullanabilirsiniz.

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

Başka bir işlemin SATA veri yolunu taramaya zorlayabileceğini ve daha sonra geri gelmesini sağlayabileceğine dikkat edin. Dizüstü bilgisayarı hazırda bekletme modundan hemen önce yapmayı deneyin.

OP tarafından düzenlendi: işe yaradı . Aşağıdaki dosyayı ekledim:

-rwxr-xr-x 1 root root 204 Dec  6 16:03 99_delete_sdb

içerikli:

#!/bin/sh

# Tell grub that resume was successful

case "$1" in
    suspend|hibernate)
        if [ -d /sys/block/sdb ]; then
            echo Deleting device sdb 
            echo 1 > /sys/block/sdb/device/delete       
        fi
        ;;
esac

... ve şimdi sistem düzgün bir şekilde askıya alıyor (ve devam ediyor).


1
Keşke doğru olsaydı. Hangi yonga (veya yongaların) SSD sürücüsü olduğunu bile söyleyemiyorum --- çoğu işaretsiz. Ve bir çipin gücünü kesmek güvenli değil --- peki ya üç durumlu iğneler? SSD sürücüsünün bir çeşit anakart üzerine bağlandığını umarak dizüstü bilgisayarı açtım. Şanssız. (Ve ayrıca, çekirdekli sürücüleri yazmadaki zorluğun çoğu kötü tasarlanmış ortamlarda çalışmaktır.)
Rmano

@Rmano "Sil" numarasını nasıl gerçekleştirir?
Emmanuel

BT ÇALIŞIYOR --- "Sil" oyunundan sonra askıya alabilirim. Çok teşekkürler. (Hala önyüklemeyi geciktirir, fakat peki --- bir problem değil).
Rmano

Hatırlattığın için çok teşekkür ederim delete.
Michael Shigorin

3

BIOS

Bu cihaz BIOS'unuz üzerinden herhangi bir şekilde görünmüyor mu?

Çoğu zaman HDD'ler "otomatik" modda yapılandırılır, bu cihazların devre dışı durumda olduğundan ve hatta yalnızca bir HDD'nin açıkça etkinleştirilmesine ve diğer her şeyin devre dışı bırakılmasına kadar uzanır.

Çekirdek Önyükleme Seçenekleri

Çoğu zaman, çeşitli alt sistemlerin önyükleme yapan Linux Çekirdeği tarafından otomatik olarak algılanmasını, anahtar olarak geçirilebilecek farklı önyükleme seçeneklerini kullanarak devre dışı bırakabilirsiniz.

Çoğu seçenek burada listelenmemişse:

Özetle kitabında Linux

O'Reilly kitabı, bir Kısaca Linux Çekirdeği , özellikle Bölüm 7: Bir Çekirdeğin Özelleştirilmesi .

Bu kitap, kişisel web sitesinde yazarı Greg Kroah-Hartman tarafından ücretsiz olarak sunuluyor. Kitabın tamamı da indirilebilir.


Hayır, BIOS bu diskin hiçbir izine sahip değildir; HDD’yi ve DVD’yi daha fazla göremiyorum. Başarısız olmadan önce, Windows'ta (artık sistemde pencere yok), ana disk için bir önbellek olarak kullanıldı. AHCI modunu eski, kapalı, evet veya otomatik (tüm diskler için) ayarlamaya çalıştım, ancak bu hiçbir şeyi değiştirmedi ya da (kapalı) sistemi önyükleme yapmadı.
Rmano

Geçmişte kullandığım diğer yöntem, Çekirdek’in Grub (çekirdek önyükleme seçenekleri) aracılığıyla söylemesi için başlattığı yöntemdir noide=..... Donanım otomatik olarak algılanmasını devre dışı bırakmak için önyükleme çekirdeğine sağlayabileceğiniz birçok seçenek vardır.
slm

disk SATA (scsi), IDE yok. Ve hdb=noprobeeğer mevcutsa değil bu yüzden seçenekler (en kısa sürede bildiğim gibi), scsi (Ben 2.6.x etrafında elendi düşünüyorum) için toplayabilecek geçmedi sdb=noprobeveya ata:2=noprobeseçenek. kernel-parameters.txtÇekirdek kaynağındaki tüm dosyaları okudum (neredeyse) ve doğru parametreyi bulamıyorum. Birini tanıyorsan, lütfen cevabını söyle --- Gerçekten minnettar olacağım.
Rmano

@Rmano - Bulmak için daha fazla kazmak zorunda kalacağım, HDD ve veri yolu algılama ile ilgili birkaç seçeneği hatırlıyorum ama başımın üstünden değil.
slm

@Rmano - seçenek ne olacak:libata.dma=
slm

0

Kilidi kontrol etmenin Linux yolu: sudo hdparm -I /dev/sdX(X = a..z ile; sürücünüzün hangi cihaz olduğunu bilmeniz gerekir). (Büyük) çıktının sonunda, son 10 hatlarında okumak için GEREKIR: *not* locked.

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.