Sürücü için çekirdek probunu nasıl devre dışı bırakabilirim?


9

Mainbord üzerinde lehimlenmiş 30GB ExpressCache SanDisk SSD'ye sahip samsung dizüstü bilgisayarım var. SSD öldü (bir şekilde erişmeye çalıştığımda tonlarca hata veriyor), ancak hala çekirdek önyüklemesinde inceleniyor, bölüm olduğunu görüyorum, ubuntu'nun birliği, uygulama çekmecesinde monte edilmemiş sürücü simgesini gösteriyor ve en kötüsü dizüstü bilgisayarı askıya alamıyorum , çünkü ssd aygıtına suspend komutu gönderilemedi. Sdb = noprobe çekirdek parametresini geçmeye çalıştım, ancak 3.8.0 çekirdeğinde (Ubuntu 13.04) uzun zaman önce kullanılmamış gibi görünüyor. Son çekirdeklerde sata cihazını nasıl devre dışı bırakabilirim?

Yanıtlar:


1

Buradaki iki çözüm: Biri uygulamak hızlıdır, ancak sorunu sadece kısmen çözse de, diğeri tamdır, ancak kendi çekirdeğinizi derlemenizi gerektirir.

Doğru cevap bir çekirdek yamasıdır.

Robin H. Johnson , sürücüyü tamamen gizleyen SATA çekirdek sürücüsü ( Unix / Linux yığın değişim sitesinde bulabilirsiniz) için bir yama yazdı .

Güncelleme Düzeltme eki şimdi akış yukarı (en azından 3.12.7 kararlı çekirdeğinde), git deposuna bakın . Ubuntu fırlatma rampasında backport istedim .

Yama yüklendikten sonra,

 libata.force=2.00:disable

çekirdeğe ö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:

(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

Geçici çözüm

Unix StackExchange kullanıcısı Emmanuel tarafından https://unix.stackexchange.com/a/103742/52205

Askıya alma sorununu en azından komutu vererek çözebilirsiniz.

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

askıya almadan önce.

Otomatikleştirmek için aşağıdaki dosyayı ekledim: (bayraklara dikkat edin, yürütülebilir olmalıdır)

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

dizinde /etc/pm/sleep.d/

#!/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 doğru şekilde askıya alınıyor (ve devam ediyor). Snippet'i ekledim

if [ -d /sys/block/sdb ]; then
      echo Deleting device sdb 
      echo 1 > /sys/block/sdb/device/delete     
fi

için /etc/rc.localde iyi ölçmek için.


@Rmano teşekkürler, yankı şeyler çalıştı. Ancak belirsizdir, 99_delete_sdbyürütülebilir dosyayı nereye yerleştirmeliyim ? In /etc/rc0.d/belki?
Sergey Melekhin

Üzgünüz --- ilgili bilgileri ekledi.
Rmano

5

Gidip tek bir diski önyükleme sırasında devre dışı bırakma yeteneğini uygulayan bir çekirdek yaması yazdım, böylece udev'de devre dışı bırakma veya ilk önyükleme sırasında beklemenize gerek kalmadı.

http://dev.gentoo.org/~robbat2/patches/3.13-libata-disable-disks-by-param.patch

Birçok çekirdeğe çok kolay uygulanmalıdır (yukarıdaki satır 2013-05-21 / v3.10-rc1 * eklenmiştir, ancak bu satır olmadan manuel olarak güvenle uygulanabilir).


1
Çabaların için teşekkürler. Belki de (çekirdek yamalarına çok aşina olmayanlar için), yamanın nasıl uygulanacağını ve nasıl kullanılacağını (muhtemelen sdb=disableçekirdek parametresi olarak) yorum yapabilirsiniz.
mpy

1
kernel.org/doc/Documentation/applying-patches.txt , genel olarak çekirdek düzeltme ekleri uygulamayı kapsar, ancak birçok dağıtımda düzeltme eki uygulama yöntemleri vardır. Bu yama daha spesifik olarak libata için 'devre dışı bırak' kuvvet bayrağı uygular. Kullanıcının libata.force = ID ile kullanması gerekir: ID, söz konusu sürücüyü tanımlayan bir sayı veya sayıdır.
robbat2

Bu talimatların olup olmadığını bilmiyorum: wiki.ubuntu.com/Kernel/BuildYourOwnKernel güncel. Bu hafta yapabilirsem deneyeceğim ...
Rmano

Bu arada, Samsung Dizüstü bilgisayar için komut muhtemelen "libata.force = 2.00: devre dışı" grep iSSD /var/log/syslogolmalıdır ( size bir ipucu vermelidir).
Rmano

1
FYI, 3.13 çekirdek ile sabit çekirdek ağacı birleşti. Ancak nodisable seçeneği kabul edilmedi.
robbat2

0

Bunu araştırdım ve Ubuntu'da kolayca uygulanabilecek bir çözüm buldum. Dağıtım kmod kullanıyor, bu nedenle aşağıdakiler ve kmod kullanan herhangi bir dağıtım iyi çalışmalıdır.

Hangi sürücüyü kullandığınıza bağlı olarak, tüm SATA aygıtlarını devre dışı bırakmak istiyorsanız sürücüyü kara listeye almanız gerekir . lsmod | grep sataHangi sürücüleri kullandığınızı anlamaya çalışın . Sonra kara listeye eklemek için /etc/modprobe.d/ile yeni bir dosya oluşturun echo blacklist (module) > blacklist.conf. Etkilenmesi için initramflarınızı yeniden oluşturun mkinitramfs. Yeniden Başlatma.

Alternatif olarak, modprobe.blacklist=(module)çekirdek parametrelerinize ekleyin .


1
Sabit disk dahil tüm sata cihazlarını devre dışı bırakacak, bu yüzden dizüstü bilgisayarım artık önyükleme yapmayacak. Ve sata desteği çekirdeğe (modül olarak değil) derlendi, bu yüzden kara listeye alamıyorum.
Sergey Melekhin

Tamam, o zaman dizüstü bilgisayarınızı açın ve sürücüyü çıkarın ...
Hector

Ne yazık ki bunu yapmak için yeteri kadar değilim - sata kablosu ile bağlı değil, mainbord üzerinde lehimlenir. Sadece kaldırırsam dizüstü bilgisayarın işlevsel olacağından emin değilim.
Sergey Melekhin
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.