Bagaimana saya bisa memberitahu kernel linux untuk sepenuhnya mengabaikan disk seolah-olah tidak terhubung?

18

Memperhatikan

Silahkan gulir ke bawah untuk jawabannya (ini memiliki beberapa poin tetapi itu adalah yang benar). Masalahnya dipecahkan oleh tambalan yang akan ada di kernel 3.12.7 dan lebih tinggi; Saya berharap ini akan kembali porting ke yang sebelumnya juga.

Laptop saya adalah Samsung Chronos seri 7. Ubuntu Gnome Remix 13.04, dengan driver yang diperbarui Intel.

Saya memiliki masalah dengan drive SSD internal (kapasitas 8G). Gagal dengan COMRESET dan kesalahan input / output. Saya cukup yakin bahwa masalahnya adalah perangkat keras; sayangnya saya tidak menginstal Windows di laptop untuk memeriksa apakah itu masalah konfigurasi SSD atau apa pun.

Masalahnya adalah bahwa disk dikenali oleh udev:

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

dan setelah itu gagal dalam banyak pemeriksaan, menunda boot, menunda shutdown, dan membuat (saya pikir) menunda tidak mungkin.

Apakah mungkin memberi tahu Linux untuk sepenuhnya mengabaikan apa pun di tautan ata2? Saya mencoba menambahkan baris ini ke /etc/udev/rules.d/10-local.rules

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

tetapi tidak berhasil.

Di sisi lain, jika ada yang tahu cara mengatur ulang SSD jika dibiarkan dalam mode "cache" tanpa menggunakan Windows ... atau untuk mem-boot windows "live" untuk melakukan hal yang sama ...

Terima kasih!

Data ditambahkan:

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

PIKIRAN TAMBAHAN:

Bisakah semua ini menjadi efek samping dari Intel Smart Response Technology tidak dinonaktifkan sebelum menginstal Linux? Jika ya, bagaimana saya bisa memeriksanya sebelum menginstal ulang windows pada mesin? Atau ini tembakan dalam gelap? (Dalam bios drive SSD tidak menunjukkan dan tidak ada tentang Intel SRT).

TENTANG MARKING SEBAGAI DUPLIKAT:

Saya mengubah judul pertanyaan; Saya tidak berpikir bahwa pertanyaan terkait menjawab masalah saya. Saya tahu pasti bahwa SSD gagal. Saya bertanya apakah mungkin untuk memberitahu kernel linux untuk tidak menyelidiki sama sekali.

Rmano
sumber
2
Jika disk yang ingin Anda sembunyikan adalah "sdb", bisakah Anda memposting output lengkap dari "info udevadm -a -n / dev / sdb" ?.
Roman Raguet
1
Ini sama sekali bukan duplikat dari pertanyaan terkait. Bisakah Anda menghapus tanda itu sebagai duplikat? Saya mengubah judul untuk menyampaikan pertanyaan dengan lebih baik. Bukan tentang pemeriksaan SSD, adalah tentang pertanyaan umum tentang manajemen disk di Linux. Terima kasih!
Rmano
1
Apa masalah dengan hanya ... mencabut disk?
Braiam
1
Pertanyaan serupa tentang Pengguna Super: Bagaimana cara menonaktifkan kernel probing untuk drive?
ændrük
3
Braiam: disk SSD disolder ke mainboard.
Rmano

Jawaban:

14

Dua solusi di sini: satu cepat untuk diterapkan, meskipun hanya memecahkan sebagian saja, yang lain adalah yang lengkap tetapi mengharuskan Anda untuk mengkompilasi kernel Anda sendiri.

Jawaban yang benar adalah tambalan kernel.

Robin H. Johnson menulis tambalan untuk driver kernel SATA ( temukan di situs pertukaran tumpukan Unix / Linux ) yang menyembunyikan sepenuhnya drive.

Pembaruan 1 Patch sekarang menjadi hulu (setidaknya di kernel stabil 3.12.7), lihat repositori git . Saya meminta backport di launchpad Ubuntu .

Perbarui 2 Patch berada di kernel standar untuk Ubuntu Trusty Thar 14.04; jadi sekarang hanya tambahan berikut untuk parameter boot diperlukan.

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:

(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

Untuk menambahkan parameter kernel (bot sementara dan permanen) Anda dapat memeriksa T&J ini: Bagaimana cara menambahkan parameter boot kernel?

Penanganan masalah

Setidaknya masalah mengaktifkan suspend-resume telah diselesaikan oleh pengguna Unix StackExchange Emmanuel di /unix//a/103742/52205 . Sebagai root, jalankan perintah:

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

sebelum ditunda.

Untuk membuatnya permanen, tambahkan file berikut ini /etc/pm/sleep.d/dan buat itu dapat dieksekusi:

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

dengan konten:

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

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

Rmano
sumber
1
Terima kasih sudah mengingatkan /sys/block/*/device/delete.
Michael Shigorin
@kikuto --- hasil edit yang Anda usulkan tampaknya agak di luar topik, tetapi saya menambahkan tautan tentang cara menambahkan parameter boot kernel. Terima kasih.
Rmano
5

Anda dapat mencoba membuat aturan udev dengan informasi berikut (output dari info udevadm -a -n / dev / sdb).

INFO:

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) Buat aturan udev.

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

Anda dapat mencoba mencocokkan kunci "SUBSYSTEMS" & "DRIVERS" , dan atribut "ATTRS {rev}" & ATTRS {model} , lalu menetapkan variabel "UDISKS" untuk mengabaikannya.

Konten dari file 99-hide-ssd.rules adalah:

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

Untuk menyimpan perubahan di nano ... Ctrl+ O, lalu Enterdan akhirnya Ctrl+ X.

2) Akhirnya menyegarkan aturan udev dengan:

  • sudo udevadm trigger

CATATAN: Dengan ENV {UDISKS_IGNORE} = "1" itu akan mengabaikan disk untuk Ubuntu 12.10 & 13.04.
Untuk Ubuntu 12,04 variabelnya adalah ENV {UDISKS_PRESENTATION_HIDE} = "1" .

Semoga ini membantu.

Raguet Romawi
sumber
Mencobanya, masih sdb terdeteksi saat boot (dan menunda). Saya pikir harus ada beberapa opsi parameter baris kernel, tetapi saya tidak dapat menemukan apa-apa ... sigh. Bagaimanapun, terima kasih.
Rmano
@Rmano ... Jika Anda hanya mencoba mencocokkan kunci kernel ?. aturannya adalah KERNEL == "sdb", ENV {UDISKS_IGNORE} = "1" ... untuk melihat apakah disk terdeteksi di udev.
Roman Raguet
Saya tahu itu sudah lama sekali. tetapi masalah ini masih tanpa jawaban ... tidak ada saran yang berhasil. Terima kasih semuanya.
Rmano
2

/server/112147/tell-ubuntu-to-ignore-dead-hard-drive-during-booting menyarankan sebagian:

Sebagai root, buka /etc/udev/rules.d/60-persistent-storage.rules dengan editor teks favorit Anda.

Beberapa baris ke bawah, Anda mungkin akan melihat garis yang terlihat seperti ini:

lewati aturan untuk perangkat blok yang tidak pantas

KERNEL == "ram * | loop * | fd * | nbd * | gnbd * | dm- | md ", GOTO = "persistent_storage_end" Tambahkan "sdb *" ke baris kedua itu, sehingga terlihat seperti ini:

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

Simpan, reboot, dan mungkin berhasil. Jika tidak, apakah ini pasca garansi?

K7AAY
sumber
Sudah mencobanya, tidak berhasil. Masih memiliki drive sdb, masih memblokir penangguhan. Sekali waktu ada sdb = abaikan opsi baris perintah kernel ... Dan sayangnya ya, itu pasca-garansi.
Rmano
BTW, saya tidak punya file itu, jadi saya menambahkannya ...
Rmano
2

Jika disk Anda yang lain tidak menggunakan ahci, atau bukan SSD, Anda dapat menghapus driver kernel untuk mereka.

untuk menghapus sesi itu (hingga reboot berikutnya), jalankan:

sudo rmmod ahci

untuk memuatnya kembali, jalankan:

sudo modprobe ahci

jika Anda melihat semuanya berjalan dengan baik, Anda sekarang dapat menonaktifkannya sepenuhnya (jangan memuatnya boot berikutnya). buka file /etc/modprobe.d/blacklist.conf , dan tambahkan baris berikut:

blacklist ahci 

untuk driver blacklist ssd, ganti saja ahci dengan sd

Ohad Cohen
sumber
2
Itu akan meninggalkan saya sistem tanpa disk ... drive utama aktif ata1, SSD gagal ata2. Menonaktifkan mode ahci di bios membuat sistem tidak bisa di-boot ...
Rmano
1

Dari apa yang saya ketahui, tidak ada cara untuk menghapus pesan, selain menghapus Anda SSD.

Anudeep Revuri
sumber
Sayangnya, SSD ini (untuk yang saya tahu) disolder ke mainboard. Ini hanya chip 8G.
Rmano
Potong salah satu led pada chip, lebih baik cari garis + 5V dan potong dengan X-Acto?
K7AAY
... jika saya hanya tahu chip mana, dan di mana chip itu. Maka saya khawatir hal itu dapat menciptakan lebih banyak masalah (tiga negara yang tidak terbengkokkan ...).
Rmano
1

Saya pergi dan menulis patch kernel untuk Anda yang mengimplementasikan kemampuan untuk menonaktifkan satu disk saat boot, sehingga Anda tidak perlu repot-repot menonaktifkannya di udev, atau menunggu selama boot awal.

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

Seharusnya berlaku untuk 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).

robbat2
sumber