Bagaimana cara memberitahu Linux Kernel> 3.0 untuk sepenuhnya mengabaikan disk yang gagal?


23

Saya punya Samsung laptop (Chronos s7) dengan satu SATA hard disk pada bus ata:1, yang terdeteksi sebagai /dev/sda, sebuah 8G SSD pada ata:2, /dev/sdb, dan berbagai perangkat lain di seluruh antarmuka SATA.

Masalahnya adalah disk SSD itu

  • disolder ke papan utama (tidak bergerak)
  • rusak (itu hanya memberikan kesalahan I / O untuk operasi apa pun)
  • tidak muncul dalam bios (mungkin karena rusak)

Sekarang disk ini:

  • menunda booting tiga hingga lima menit, mencoba menyelidiki disk yang rusak, yang menjengkelkan;
  • tetapi hal yang paling menjengkelkan adalah bahwa sistem gagal untuk ditangguhkan karena /dev/sdbgagal.

Perhatikan bahwa saya dapat hidup dengan penundaan saat boot --- yang membuat saya khawatir adalah resume / menunda.


Jadi pertanyaannya adalah: dapatkah saya memberi tahu kernel untuk menghindari bahkan memeriksa perangkat di ata: 2?

Di kernel yang lebih lama (<3.0), ketika saya masih bisa menggali sedikit ke dalam source, ada parameter baris perintah dari style hdb=ignoreyang akan melakukan trik.

Saya telah mencoba semua trik yang diusulkan di bawah ini dengan udevdan libata:forcekernel parameter, tidak berhasil. Secara khusus, berikut ini tidak berfungsi:

  1. Menambahkan ke salah /etc/udev/rules.d/satu file berikut (dalam eksekusi awal suka 00-ignoredisk.rulesatau terlambat sebagai 99-ignoredisk.rulesatau di kedua tempat)

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

    maupun

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

    juga tidak banyak solusi perantara --- ini membuat disk tidak dapat diakses setelah booting, tetapi disk tersebut diperiksa saat booting, dan masih diperiksa saat menangguhkan --- menyebabkan penangguhan gagal.

  2. Mengedit file sistem /lib/udev/rules.d/60-persistent-storage.rules(dan udisks, udisks2) berubah

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

    untuk

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

    sekali lagi, ini memiliki beberapa efek, menutupi disk dari userspace, tetapi disk tersebut masih terlihat oleh kernel.

  3. Boot dengan semua kemungkinan kombinasi (well, banyak dari mereka) dari libata:forceparameter (ditemukan misalnya di sini ) untuk menonaktifkan DMA, kecepatan lebih rendah atau apa pun tentang disk yang gagal --- tidak berfungsi. Parameter digunakan, tetapi disk masih diselidiki dan gagal.

    udevadm info -a -n /dev/sdbDisisipkan penuh ke http://paste.ubuntu.com/6186145/

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

    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
    

    yang jelas salah. Namun:

    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
    

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


Maaf jika ini terlalu jelas, tetapi karena Anda belum memasukkan dalam pertanyaan Anda: apakah Anda sudah memastikan nama perangkat atau UUID tidak terdaftar /etc/fstab? Karena keterlambatan saat boot bisa disebabkan oleh kernel atau udev, yang tampaknya merupakan kasusnya, tetapi juga nanti oleh fsck, ketika membaca fstab.
Teresa e Junior

Ya, tidak ada menyebutkan / dev / sdb (atau partisinya) dalam file sistem. Penundaannya bahkan sebelum init dimulai ... ia berada dalam sebuah kthread (karena boot berlanjut secara paralel), tetapi berada pada level yang lebih mendasar. Tapi sungguh keterlambatan booting adalah masalah yang lebih kecil --- kalau saja saya bisa mengabaikan disk selama suspend / resume sehingga menunda bekerja saya akan senang. (terima kasih).
Rmano

Apakah Anda menggunakan initrd? jika demikian siapa?
Hildred

@hildred: Saya menggunakan kernel dan initramfs dari Ubuntu 13.04. Saya dapat menonaktifkan AHCI atau semua SATA di sana, tetapi kemudian sistem saya mati --- tidak ada disk sama sekali.
Rmano

Debian (dan Umbutu) mengkompilasi subsistem ata sebagai modul. Sudahkah Anda mencoba mengatur parameter ke modul ketika itu dimuat oleh initrd?
Hildred

Jawaban:


26

libatasama sekali tidak memiliki opsi noprobe; itu adalah opsi IDE warisan ...

Tapi saya pergi dan menulis patch kernel untuk Anda yang mengimplementasikannya. Ini harus diterapkan ke banyak kernel dengan sangat mudah (baris di atasnya ditambahkan 2013-05-21 / v3.10-rc1 *, tetapi dapat dengan aman diterapkan secara manual tanpa garis itu).

Perbarui Patch sekarang menjadi hulu (setidaknya di kernel stabil 3.12.7). Ia berada di kernel standar yang didistribusikan dengan Ubuntu 14.04 (yang didasarkan pada 3.13-stable).

Setelah tambalan diinstal, tambahkan

 libata.force=2.00:disable

ke parameter boot kernel akan menyembunyikan disk dari kernel Linux. Periksa kembali apakah nomornya benar; mencari nama perangkat dapat membantu (jelas, Anda harus memeriksa pesan kernel sebelum menambahkan parameter boot):

(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

Angka penting adalah ata2.00pada baris pertama di atas.


Terima kasih banyak. Saya akan mencoba memeriksanya segera setelah saya ingat bagaimana mengkompilasi dan menginstal kernel pada Ubuntu saya. Sayangnya, saya akan memiliki minggu yang sangat kompleks ke depan ...
Rmano

1
+1 Ini jelas lebih baik daripada trik yang saya posting. Saya berharap ini akan menjadi resmi.
Emmanuel

1
Ok, coba patchnya. Berhasil. Jika Anda perlu mendorongnya ke atas, saya dapat menambahkan Tested-by: ke patch --- Anda memiliki email saya yang sebenarnya di profil saya. Saya menginstalnya mengikuti (dengan kebiasaan) instruksi di wiki.ubuntu.com/Kernel/BuildYourOwnKernel .
Rmano

1
@ illuminÉ --- baru saja mengedit jawaban dalam arti itu --- tunggu sampai disetujui.
Rmano

1
Alasan Lain untuk MENCINTAI GENTOO !!
eyoung100

15

Masalah perangkat keras memiliki solusi perangkat keras fisik. Apakah Anda mempertimbangkan untuk melepas atau memotong catu daya drive?

EDIT: Ok kalau itu bukan pilihan orang menggunakan ini sebelumnya untuk hot-plug hard drive. Anda dapat menggunakannya untuk menonaktifkan drive Anda.

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

Perhatikan bahwa proses lain dapat memaksa pemindaian bus SATA, dan kemudian membuatnya kembali. Cobalah untuk melakukannya tepat sebelum hibernasi laptop.

Diedit oleh OP: itu berhasil . Saya menambahkan file berikut:

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

dengan konten:

#!/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

... dan sekarang sistem menangguhkan (dan melanjutkan) dengan benar.


1
Kalau saja itu benar. Saya bahkan tidak bisa mengatakan chip (atau chip) mana yang merupakan drive SSD --- kebanyakan tidak ditandai. Dan melepaskan sebuah chip tidak aman --- bagaimana dengan pin tiga-negara yang tidak diremehkan? Saya membuka laptop berharap drive SSD terhubung pada semacam papan anak. Tidak berhasil (Dan selain itu, sebagian besar kesulitan dalam menulis driver kernel adalah untuk bekerja di sekitar hw yang dirancang buruk).
Rmano

@Rmano Bagaimana melakukan trik "hapus"?
Emmanuel

IT WORKS --- saya dapat menangguhkan setelah "menghapus" trik. Terima kasih banyak. (Ini masih menunda boot, tapi yah --- tidak masalah).
Rmano

Terima kasih banyak untuk mengingatkan delete.
Michael Shigorin

3

BIOS

Apakah perangkat ini tidak muncul dengan cara apa pun melalui BIOS Anda?

Sering kali HDD dikonfigurasikan dalam mode "otomatis", saya akan memeriksa dan memastikan bahwa perangkat ini dalam keadaan dinonaktifkan dan bahkan secara eksplisit hanya mengaktifkan satu HDD dan menonaktifkan yang lainnya.

Opsi Boot Kernel

Sering kali Anda dapat menonaktifkan berbagai subsistem agar tidak terdeteksi secara otomatis oleh booting Kernel Linux melalui penggunaan opsi boot yang berbeda yang dapat diteruskan ke sana sebagai sakelar.

Sebagian besar jika tidak semua opsi tercantum di sini:

Linux dalam buku singkatnya

Anda mungkin ingin membaca buku O'Reilly, Linux Kernel in a Nutshell , khususnya, Bab 7: Menyesuaikan Kernel .

Buku ini tersedia secara gratis oleh penulisnya, Greg Kroah-Hartman, di situs pribadinya. Seluruh buku juga dapat diunduh.


Tidak, BIOS tidak memiliki jejak disk ini; Saya dapat melihat HDD dan DVD dan tidak lebih. Sebelum gagal, di Windows (sekarang tidak ada windows lagi di sistem) itu digunakan sebagai cache percepatan untuk disk utama. Saya mencoba untuk mengatur mode AHCI ke legacy, off, yes atau auto (untuk semua disk) tetapi itu tidak mengubah apa pun atau (untuk off) hanya membuat sistem tidak bisa boot.
Rmano

Metode lain yang pernah saya gunakan di masa lalu adalah ketika Kernel sedang boot untuk memberitahukannya melalui Grub (opsi boot kernel) ke noide=..... Ada sejumlah opsi lain yang dapat Anda berikan ke kernel booting untuk menonaktifkan deteksi otomatis perangkat keras.
slm

disk SATA (scsi), tidak ada IDE. Dan hdb=noprobeopsi belum lulus kerahkan ke scsi (saya pikir itu dihilangkan sekitar 2.6.x), sehingga tidak ada (segera setelah saya tahu) a sdb=noprobeatau ata:2=noprobeopsi. Saya telah membaca (hampir) semua kernel-parameters.txtfile di sumber kernel dan saya tidak dapat menemukan parameter yang benar. Jika Anda mengenal seseorang, tolong katakan dalam jawaban --- Saya akan sangat berterima kasih.
Rmano

@Rmano - Saya harus menggali lebih banyak untuk menemukannya, saya ingat beberapa opsi yang berkaitan dengan HDD dan deteksi bus, tetapi tidak lepas dari kepala saya.
slm

@Rmano - bagaimana dengan opsi:libata.dma=
slm

0

Cara Linux untuk memeriksa kunci: sudo hdparm -I /dev/sdX(dengan X = a..z; Anda harus tahu perangkat apa yang digunakan drive Anda). Pada akhir output (besar), Anda harus bisa membaca di dalam 10 baris terakhir: *not* locked.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.