Linux çekirdeğine bir diski bağlı değilmiş gibi tamamen yok saymasını nasıl söyleyebilirim?


18

Farkına varmak

Lütfen cevap için aşağı kaydırın (birkaç noktası vardır, ancak doğru olanıdır). Sorun, 3.12.7 ve sonraki çekirdeklerde olacak bir yama ile çözülmüştür; Umarım daha öncekilere de taşınır.

Dizüstü bilgisayarım Samsung Chronos serie s 7. Intel ile güncellenmiş sürücüleri olan Ubuntu Gnome Remix 13.04.

Dahili SSD sürücü ile ilgili bir sorunum var (8G kapasite). COMRESET ve giriş / çıkış hataları ile başarısız olur. Sorunun donanım olduğuna oldukça ikna oldum; maalesef, SSD yapılandırması veya herhangi bir şey olup olmadığını kontrol etmek için dizüstü bilgisayarda Windows yüklü değil.

Sorun diskin udev tarafından tanınmasıdır:

KERNEL[9.515930] add      /devices/pci0000:00/0000:00:1f.2/ata2/host1/target1:0:0/1:0:0:0/block/sdb (block)
ACTION=add
DEVNAME=sdb
DEVPATH=/devices/pci0000:00/0000:00:1f.2/ata2/host1/target1:0:0/1:0:0:0/block/sdb
DEVTYPE=disk
MAJOR=8
MINOR=16
SEQNUM=1785
SUBSYSTEM=block
UDEV_LOG=3

ve bundan sonra birçok kontrolde başarısız oluyor, önyüklemeyi geciktiriyor, kapanmayı geciktiriyor ve (sanırım) askıya almayı imkansız hale getiriyor.

Linux'a ata2 bağlantısındaki herhangi bir şeyi tamamen görmezden gelmesini söylemek mümkün mü? Bu satırı /etc/udev/rules.d/10-local.rules dizinine eklemeyi denedim

SUBSYSTEMS=="pci"  DRIVERS=="ahci" KERNELS=="ata2" OPTIONS=="ignore_device"

ama işe yaramıyor.

Öte yandan, kimse SSD'yi Windows kullanmadan "önbellek" modunda bırakılırsa nasıl sıfırlayacağını biliyorsa veya aynı işlemi yapmak için "canlı" pencereleri önyükleme ...

Teşekkürler!

Eklenen veriler:

Tam udevadm info -a -n /dev/sdbüzere yapıştırılan 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

ki bu kesinlikle yanlış. 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

(Http://ubuntuforums.org/showthread.php?t=1935699&p=11739579#post11739579 adresinden SSD verileri ).

İLAVE DÜŞÜNCE:

Tüm bunlar Linux kurmadan önce Intel Smart Response Teknolojisinin yan etkisi olabilir mi? Evetse, makineye bir pencereyi yeniden yüklemenin kısa olduğunu nasıl kontrol edebilirim? Yoksa bu karanlıkta bir atış mı? (BIOS'ta SSD sürücü gösterilmez ve Intel SRT hakkında hiçbir şey yoktur).

DUPLICATE OLARAK İŞARETLEME HAKKINDA:

Sorunun başlığını değiştirdim; Bağlantılı sorunun benim sorunuma cevap verdiğini düşünmüyorum. SSD'nin başarısız olduğunu olumlu bir şekilde biliyorum . Linux çekirdeğine hiç sormamasını söylemek mümkün mü diye soruyorum.


2
Gizlemek istediğiniz disk "sdb" ise, lütfen "udevadm info -a -n / dev / sdb" nin tüm çıktısını kaydeder misiniz?
Roman Raguet

1
Bu, bağlantılı sorunun hiçbir kopyası değildir. Lütfen kopya olarak işareti kaldırır mısınız? Soruyu daha iyi iletmek için başlığı değiştirdim. Bir SSD kontrolü ile ilgili değil, Linux'ta disk yönetimi hakkında genel bir soru ile ilgilidir. Teşekkürler!
Rmano

1
Diskin fişinin çıkarılmasıyla ilgili sorun nedir?
Braiam


3
Braiam: SSD disk anakarta lehimlenir .
Rmano

Yanıtlar:


14

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 1 Düzeltme eki şimdi akış yönünde (en azından 3.12.7 kararlı çekirdeğinde), git deposuna bakın . Ubuntu fırlatma rampasında backport istedim .

Güncelleme 2 Yama, Ubuntu Trusty Thar 14.04 için standart çekirdeğin içinde; şimdi önyükleme parametresine yalnızca aşağıdaki ek gereklidir.

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

Bir çekirdek parametresi eklemek için (geçici ve kalıcı olarak bot) şu S ve C'yi kontrol edebilirsiniz: Bir çekirdek önyükleme parametresini nasıl ekleyebilirim?

Geçici çözüm

En azından askıya alma özgeçmişini etkinleştirme sorunu Unps StackExchange kullanıcısı Emmanuel tarafından /unix//a/103742/52205 adresinde çözüldü . Kök olarak şu komutu verin:

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

askıya almadan önce.

Kalıcı hale getirmek için, aşağıdaki dosyayı ekleyin /etc/pm/sleep.d/ve yürütülebilir yapın:

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

içeriği ile:

#!/bin/sh

# Delete the failing disk so that it will not block suspend

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

... ve şimdi sistem doğru şekilde askıya alınıyor (ve devam ediyor).


1
Hatırlattığın için teşekkürler /sys/block/*/device/delete.
Michael Shigorin

@kikuto --- önerdiğiniz düzenleme biraz konu dışı göründü, ancak bir çekirdek önyükleme parametresi eklemeye bir bağlantı ekledim. Teşekkür ederim.
Rmano

5

Aşağıdaki bilgileri kullanarak udev kuralı oluşturmayı deneyebilirsiniz (udevadm info -a -n / dev / sdb çıktısı).

BİLGİ:

looking at parent device '/devices/pci0000:00/0000:00:1f.2/ata2/host1/target1:0:0/1:0:0:0':
    KERNELS=="1:0:0:0"
    SUBSYSTEMS=="scsi"
    DRIVERS=="sd"
    ATTRS{rev}=="SSD "
    ATTRS{type}=="0"
    ATTRS{scsi_level}=="6"
    ATTRS{model}=="SanDisk iSSD P4 "
    ATTRS{state}=="running"
    ATTRS{queue_type}=="none"
    ATTRS{iodone_cnt}=="0x309"
    ATTRS{iorequest_cnt}=="0x30a"
    ATTRS{queue_ramp_up_period}=="120000"
    ATTRS{timeout}=="30"
    ATTRS{evt_media_change}=="0"
    ATTRS{ioerr_cnt}=="0x1d6"
    ATTRS{queue_depth}=="1"
    ATTRS{vendor}=="ATA     "
    ATTRS{device_blocked}=="0"
    ATTRS{iocounterbits}=="32"

1) udev kuralını oluşturun.

  • sudo nano /etc/udev/rules.d/99-hide-ssd.rules

Sen maç için deneyebilirsiniz "alt" ve "SÜRÜCÜLER" anahtarlar ve "attrs {rev}" & attrs {modeli} , sonra da atamak niteliklerini "UDISKS" görmezden değişkeni.

99-hide-ssd.rules dosyasının içeriği:

SUBSYSTEMS == "scsi", SÜRÜCÜLER == "sd", ATTRS {rev} == "SSD", ATTRS {model} == "SanDisk iSSD P4", ENV {UDISKS_IGNORE} = "1"

... nano değişiklikleri kaydetmek için Ctrl+ Oardından, Enterve nihayet Ctrl+ X.

2) Son olarak udev kurallarını aşağıdakilerle yenileyin:

  • sudo udevadm trigger

NOT: With ENV {UDISKS_IGNORE} = "1" Ubuntu 12.10 & 13.04 için diski yok sayacak.
Ubuntu 12.04 için değişken ENV {UDISKS_PRESENTATION_HIDE} = "1" olacaktır .

Bu yardımcı olur umarım.


Denedi, hala sdb önyükleme sırasında algılanır (ve geciktirir). Bence bazı çekirdek satırı parametresi seçeneği olmalı, ama hiçbir şey bulamadım ... iç çekti. Yine de teşekkürler.
Rmano

@Rmano ... Yalnızca çekirdek anahtarıyla eşleşmeye çalışırsanız? diskin udev'de algılanıp algılanmadığını görmek için kural KERNEL == "sdb", ENV {UDISKS_IGNORE} = "1" ... olur.
Roman Raguet

Çok zaman geçtiğini biliyorum. ancak bu sorun hala cevapsız ... önerilerin hiçbiri işe yaramadı. Yine de hepinize teşekkürler.
Rmano

2

/server/112147/tell-ubuntu-to-ignore-dead-hard-drive-during-booting kısmen öneriyor:

Kök olarak, /etc/udev/rules.d/60-persistent-storage.rules dosyasını favori metin düzenleyicinizle açın.

Birkaç satır aşağıda, muhtemelen şöyle görünen bir satır göreceksiniz:

uygunsuz blok cihazlar için kuralları atla

KERNEL == "ram * | loop * | fd * | nbd * | gnbd * | dm- | md ", GOTO = "persistent_storage_end " sdb * " ifadesini bu ikinci satıra ekleyin, böylece şöyle görünür:

KERNEL == "koç * | döngü * | fd * | nbd * | gnbd * | dm- | md | sdb *", GOTO = "persistent_storage_end"

Kaydet, yeniden başlat ve belki işe yarıyor. Değilse, bu garanti sonrası mıdır?


Denedim, şans yok. Hala sdb sürücü var, hala askıya engelleme. Bir zamanlar bir sdb = çekirdek komut satırı seçeneğini yoksay ... Ve ne yazık ki evet, garanti sonrası.
Rmano

BTW, bu
dosyam

2

Diğer diskleriniz ahci kullanmıyorsa veya SSD değilse, onlar için çekirdek sürücüsünü kaldırabilirsiniz.

söz konusu oturum için (bir sonraki yeniden başlatmaya kadar) kaldırmak için şunu çalıştırın:

sudo rmmod ahci

yeniden yüklemek için şunu çalıştırın:

sudo modprobe ahci

her şeyin yolunda gittiğini görürseniz, şimdi tamamen devre dışı bırakabilirsiniz (sonraki botları yüklemeyin). /etc/modprobe.d/blacklist.conf dosyasını açın ve aşağıdaki satırı ekleyin:

blacklist ahci 

kara liste ssd sürücülere, sadece yerine ahci ile sd


2
Bu bana disksiz bir sistem bırakacak ... ana sürücü açık ata1, başarısız ssd açık ata2.
Ahios modunun bios'ta devre

1

Bildiğim kadarıyla, SSD'yi kaldırmak dışında mesajı kaldırmanın bir yolu yoktur.


Ne yazık ki, SSD (bildiklerim için) anakarta lehimlenmiştir. Sadece 8G yongası.
Rmano

Çip üzerindeki ledlerden birini kesin, tercihen + 5V hattını bulun ve bunu bir X-Acto ile kesin?
K7AAY

... sadece hangi çipin nerede olduğunu biliyor olsaydım. O zaman bunun daha da fazla sorun yaratabileceğinden korkuyorum.
Rmano

1

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

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.