Come disabilitare il probing del kernel per l'unità?


9

Ho un laptop Samsung con SSD ExpressDache SanDisk da 30 GB saldato sul mainbord. L'SSD è morto (dà tonnellate di errori quando provo ad accedervi in ​​qualche modo), ma è ancora sondato all'avvio del kernel, vedo la sua partizione, l'unità di Ubuntu mostra l'icona dell'unità non montata nel cassetto delle app e, peggio di tutto, non posso sospendere il laptop , poiché l'invio del comando suspend al dispositivo ssd non riesce. Ho provato a passare il parametro kernel sdb = noprobe, ma sembra che sia obsoleto molto tempo fa nel kernel 3.8.0 (Ubuntu 13.04). Come posso disabilitare il dispositivo SATA nei kernel recenti?

Risposte:


1

Due soluzioni qui: una è rapida 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 La patch ora è a monte (almeno nel kernel stabile 3.12.7), consultare il repository git . Ho chiesto il backport nel launchpad di Ubuntu .

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

Soluzione

Risposta dell'utente Emmanuel di Unix StackExchange in https://unix.stackexchange.com/a/103742/52205

Puoi almeno risolvere il problema di sospensione inviando il comando

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

prima di sospendere.

Per automatizzarlo, ho aggiunto il seguente file: (notare i flag, deve essere eseguibile)

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

nella directory /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

... e ora il sistema sospende (e riprende) correttamente. Ho aggiunto lo snippet

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

a /etc/rc.localanche, per buona misura.


Grazie @Rmano, l'eco ha funzionato. Ma non è chiaro, dove devo posizionare 99_delete_sdbil file eseguibile? In /etc/rc0.d/forse?
Sergey Melekhin il

Siamo spiacenti --- aggiunto le informazioni pertinenti.
Rmano,

5

Sono andato e ho scritto 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).


1
Grazie per il tuo impegno. Forse puoi commentare (per coloro che non hanno familiarità con le patch del kernel), come applicare la patch e come usarla (probabilmente sdb=disablecome parametro del kernel).
mpy

1
kernel.org/doc/Documentation/applying-patches.txt copre l'applicazione di patch del kernel in generale, ma molte distribuzioni hanno metodi specifici di applicazione delle patch. Questa patch implementa più specificamente un flag di forza 'disabilita' per libata. L'utente dovrà usarlo con libata.force = ID: disabilita dove ID è un numero o una tupla numero.numero che identifica l'unità in questione.
robbat2,

Non so se queste istruzioni: wiki.ubuntu.com/Kernel/BuildYourOwnKernel siano aggiornate. Ci proverò se posso questa settimana ...
Rmano,

A proposito, nel caso del Samsung Laptop il comando dovrebbe probabilmente essere "libata.force = 2.00: disable" ( grep iSSD /var/log/syslogdovrebbe darti un suggerimento).
Rmano,

1
Cordiali saluti, è unito al kernel per 3.13 e all'albero del kernel stabile. L'opzione nodisable NON è stata accettata comunque.
robbat2,

0

Ho studiato questo e ho trovato una soluzione che può essere implementata abbastanza facilmente su Ubuntu. La distro usa kmod, quindi quanto segue dovrebbe funzionare bene su quella e su ogni distro che usa kmod.

A seconda del driver in uso, sarà necessario inserirlo nella blacklist se si desidera disabilitare tutti i dispositivi SATA. Prova a lsmod | grep satacapire quali driver stai utilizzando. Quindi nel tuo /etc/modprobe.d/creare un nuovo file con echo blacklist (module) > blacklist.confper aggiungerlo alla lista nera. Ricostruisci i tuoi initramfs con mkinitramfsaffinché abbia effetto. Reboot.

In alternativa, basta aggiungere modprobe.blacklist=(module)ai parametri del kernel.


1
Disabiliterà tutti i dispositivi sata incluso il disco rigido, quindi il mio laptop non si avvierà più. E il supporto per sata è compilato nel kernel (non come un modulo), quindi non posso inserirlo nella blacklist.
Sergey Melekhin,

Okay, quindi apri il tuo laptop e rimuovi l'unità ...
Hector,

Sfortunatamente non sono abbastanza competente per farlo - è saldato sul mainbord, non collegato tramite cavo SATA. Non sono nemmeno sicuro che il laptop funzionerà se lo rimuovo.
Sergey Melekhin,
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.