Come posso dire al kernel Linux di ignorare completamente un disco come se non fosse nemmeno connesso?


18

Avviso

Si prega di scorrere verso il basso per la risposta (ha pochi punti ma è quello corretto). Il problema è risolto da una patch che sarà nel kernel 3.12.7 e versioni successive; Spero che venga riportato anche a quelli precedenti.

Il mio laptop è un Samsung Chronos serie s 7. Ubuntu Gnome Remix 13.04, con driver Intel aggiornati.

Ho un problema con l'unità SSD interna (capacità 8G). Non riesce con COMRESET e errori di input / output. Sono abbastanza convinto che il problema sia l'hardware; sfortunatamente non ho Windows installato nel laptop per verificare se è una questione di configurazione SSD o altro.

Il problema è che il disco è riconosciuto da 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

e in seguito fallisce in molti controlli, ritardando l'avvio, ritardando l'arresto e rendendo (penso) la sospensione impossibile.

È possibile dire a Linux di ignorare completamente qualsiasi cosa sul collegamento ata2? Ho provato ad aggiungere questa riga a /etc/udev/rules.d/10-local.rules

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

ma non funziona.

D'altra parte, se qualcuno sa come resettare l'SSD se è stato lasciato in modalità "cache" senza usare Windows ... o avviare una finestra "live" per fare lo stesso ...

Grazie!

Dati aggiunti:

Completamente udevadm info -a -n /dev/sdbincollato su http://paste.ubuntu.com/6186145/

smartctl -i /dev/sdb -T permissive dà:

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

che è chiaramente sbagliato. Tuttavia:

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

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

PENSIERO AGGIUNTIVO:

Tutto ciò potrebbe essere un effetto collaterale della tecnologia Intel Smart Response che non viene disabilitata prima di installare Linux? In caso affermativo, come posso verificarlo prima di reinstallare Windows sul computer? O questo è uno scatto nel buio? (Nel BIOS l'unità SSD non mostra e non c'è nulla su Intel SRT).

INFORMAZIONI SULLA MARCATURA COME DUPLICATO:

Ho cambiato il titolo della domanda; Non credo che la domanda collegata risponda al mio problema. Io positivamente So che l'SSD sta fallendo. Sto chiedendo se è possibile dire al kernel di Linux di non sondarlo affatto.


2
Se il disco che desideri nascondere è "sdb", potresti inviare l'output completo di "udevadm info -a -n / dev / sdb" ?.
Roman Raguet,

1
Questo non è affatto un duplicato della domanda collegata. Potresti per favore deselezionarlo come duplicato? Ho cambiato il titolo per comunicare meglio la domanda. Non si tratta di un controllo SSD, ma di una domanda generale sulla gestione del disco su Linux. Grazie!
Rmano,

1
Qual è il problema con il solo ... scollegamento del disco?
Braiam,


3
Braiam: il disco SSD è saldato alla scheda madre.
Rmano,

Risposte:


14

Due soluzioni qui: una è veloce da applicare, sebbene risolva il problema solo parzialmente, l'altra è quella completa ma richiede di compilare il proprio kernel.

La risposta corretta è una patch del kernel.

Robin H. Johnson ha scritto una patch per il driver del kernel SATA ( trovalo nel sito di scambio di stack Unix / Linux ) che nasconde completamente l'unità.

Aggiornamento 1 La patch è ora a monte (almeno nel kernel stabile 3.12.7), consultare il repository git . Ho chiesto il backport nel launchpad di Ubuntu .

Aggiornamento 2 La patch è nel kernel standard per Ubuntu Trusty Thar 14.04; quindi ora è necessaria solo la seguente aggiunta al parametro di avvio.

Una volta installata la patch, aggiungendo

 libata.force=2.00:disable

i parametri di avvio del kernel nasconderanno il disco dal kernel di Linux. Ricontrolla che il numero sia corretto; la ricerca del nome del dispositivo può aiutare:

(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

Per aggiungere un parametro del kernel (bot temporaneamente e permanentemente) è possibile controllare questa domanda e risposta: Come posso aggiungere un parametro di avvio del kernel?

Soluzione

Almeno il problema di abilitare la sospensione-ripresa è stato risolto dall'utente Emmanuel di Unix StackExchange in /unix//a/103742/52205 . Come root, emetti il ​​comando:

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

prima di sospendere.

Per renderlo permanente, aggiungere il seguente file /etc/pm/sleep.d/e renderlo eseguibile:

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

con contenuto:

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

... e ora il sistema sospende (e riprende) correttamente.


1
Grazie per avermelo ricordato /sys/block/*/device/delete.
Michael Shigorin,

@kikuto --- la tua modifica proposta sembrava un po 'fuori tema, ma ho aggiunto un link a come aggiungere un parametro di avvio del kernel. Grazie.
Rmano,

5

Puoi provare a creare la regola udev con le seguenti informazioni (output delle informazioni udevadm -a -n / dev / sdb).

INFORMAZIONI:

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) Creare la regola udev.

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

Puoi provare a far corrispondere le chiavi "SUBSYSTEMS" e "DRIVERS" e gli attributi "ATTRS {rev}" e ATTRS {model} , quindi assegna la variabile "UDISKS" per ignorarla.

Il contenuto del file 99-hide-ssd.rules sarebbe:

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

Per salvare le modifiche in nano ... Ctrl+ O, quindi Entere infine Ctrl+ X.

2) Infine aggiorna le regole di udev con:

  • sudo udevadm trigger

NOTA: Con ENV {UDISKS_IGNORE} = "1" ignorerà il disco per Ubuntu 12.10 e 13.04.
Per Ubuntu 12.04 la variabile sarebbe ENV {UDISKS_PRESENTATION_HIDE} = "1" .

Spero che sia di aiuto.


Provato, viene ancora rilevato sdb all'avvio (e lo ritarda). Penso che dovrebbe essere un'opzione per i parametri della linea del kernel, ma non sono riuscito a trovare nulla ... sigh. Grazie comunque.
Rmano,

@Rmano ... Se provi ad abbinare solo la chiave del kernel ?. la regola sarebbe KERNEL == "sdb", ENV {UDISKS_IGNORE} = "1" ... per vedere se il disco viene rilevato in udev.
Roman Raguet,

So che è stato tanto tempo fa. ma questo problema è ancora senza risposta ... nessuno dei suggerimenti ha funzionato. Grazie a tutti comunque.
Rmano,

2

/server/112147/tell-ubuntu-to-ignore-dead-hard-drive-during-booting suggerisce in parte:

Come root, apri /etc/udev/rules.d/60-persistent-storage.rules con il tuo editor di testo preferito.

Alcune righe in basso, probabilmente vedrai una linea simile a questa:

saltare le regole per i dispositivi di blocco inappropriati

KERNEL == "ram * | loop * | fd * | nbd * | gnbd * | dm- | md ", GOTO = "persistent_storage_end" Aggiungi "sdb *" a quella seconda riga, quindi assomiglia a questo:

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

Salva, riavvia e forse funziona. In caso contrario, bene, questa è post-garanzia?


Ho provato, senza fortuna. Hai ancora il disco SDB, bloccando ancora la sospensione. C'era una volta un'opzione sdb = ignora la riga di comando del kernel ... E sfortunatamente sì, è post-garanzia.
Rmano,

A proposito, non avevo quel file, quindi l'ho aggiunto ...
Rmano,

2

Se gli altri dischi non utilizzano ahci o non sono SSD, è possibile rimuovere il driver del kernel per essi.

per rimuovere per quella sessione (fino al prossimo riavvio), eseguire:

sudo rmmod ahci

per ricaricarlo, esegui:

sudo modprobe ahci

se vedi che tutto sta andando bene, ora puoi disabilitarlo totalmente (non caricarlo al prossimo avvio). aprire il file /etc/modprobe.d/blacklist.conf e aggiungere la seguente riga:

blacklist ahci 

nella lista nera dei driver ssd, basta sostituire ahci con sd


2
Questo mi lascerà un sistema senza alcun disco ... l'unità principale è accesa ata1, l' SSD in errore ata2. La disabilitazione della modalità ahci nel BIOS rende il sistema non avviabile ...
Rmano,

1

Da quello che so, non c'è modo di rimuovere il messaggio, se non quello di rimuovere il tuo SSD.


Sfortunatamente, l'SSD è (per quello che ne so) saldato alla scheda madre. È solo un chip 8G.
Rmano,

Taglia uno dei led sul chip, preferisci trovare la linea + 5V e tagliarlo con un X-Acto?
K7AAY,

... se solo sapessi quale chip è e dove si trova. Quindi temo che ciò possa creare ancora più problemi (tre stati non guidati ...).
Rmano,

1

Sono andato a scrivere una patch del kernel per te che implementa la possibilità di disabilitare un singolo disco al momento dell'avvio, in modo da non doverti preoccupare di disabilitarlo in udev o l'attesa durante l'avvio iniziale.

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

Dovrebbe applicarsi a molti kernel molto facilmente (la riga sopra è stata aggiunta 21/05/2013 / v3.10-rc1 *, ma può essere tranquillamente applicata manualmente senza quella riga).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.