¿Cómo deshabilitar el sondeo del núcleo para la unidad?

9

Tengo una laptop Samsung con SSD ExpressCache SanDisk de 30GB soldada en mainbord. SSD murió (da toneladas de errores cuando intento acceder a él de alguna manera), pero todavía se prueba en el arranque del kernel, veo que es una partición, la unidad de ubuntu muestra el ícono de la unidad desmontada en el cajón de la aplicación, y lo peor de todo es que no puedo suspender la computadora portátil , porque falla el envío del comando de suspensión al dispositivo ssd. Traté de pasar el parámetro del núcleo sdb = noprobe, pero parece que está obsoleto hace mucho tiempo en el núcleo 3.8.0 (Ubuntu 13.04). ¿Cómo puedo desactivar el dispositivo sata en núcleos recientes?

Sergey Melekhin
fuente

Respuestas:

1

Aquí hay dos soluciones: una es rápida de aplicar, aunque resuelve el problema solo parcialmente, la otra es la completa pero requiere que compiles tu propio núcleo.

La respuesta correcta es un parche de kernel.

Robin H. Johnson escribió un parche para el controlador del núcleo SATA ( encuéntrelo en el sitio de intercambio de pila Unix / Linux ) que oculta completamente la unidad.

Actualización El parche ahora está en sentido ascendente (al menos en el núcleo estable 3.12.7), consulte el repositorio de git . Pedí backport en la plataforma de lanzamiento de Ubuntu .

Una vez instalado el parche, agregue

 libata.force=2.00:disable

a los parámetros de arranque del kernel ocultarán el disco del kernel de Linux. Verifique que el número sea correcto; buscar el nombre del dispositivo puede ayudar:

(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

Solución alterna

Respondido por el usuario de Unix StackExchange Emmanuel en https://unix.stackexchange.com/a/103742/52205

Al menos puede resolver el problema de suspensión emitiendo el comando

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

antes de suspender

Para automatizarlo, agregué el siguiente archivo: (tenga en cuenta las banderas, debe ser ejecutable)

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

en el directorio /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

... y ahora el sistema se suspende (y reanuda) correctamente. Agregué el fragmento

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

a /etc/rc.localtambién, por si acaso.

Rmano
fuente
Gracias @Rmano, las cosas de eco funcionaron. Pero no está claro, ¿dónde debo colocar el 99_delete_sdbarchivo ejecutable? En /etc/rc0.d/tal vez?
Sergey Melekhin
Lo siento --- agregué la información relevante.
Rmano
5

Fui y escribí un parche del kernel para usted que implementa la capacidad de deshabilitar un solo disco en el momento del arranque, para que no tenga que molestarse en deshabilitarlo en udev o esperar durante el arranque inicial.

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

Debería aplicarse a muchos núcleos muy fácilmente (la línea anterior se agregó 2013-05-21 / v3.10-rc1 *, pero se puede aplicar de forma segura manualmente sin esa línea).

robbat2
fuente
1
Gracias por tus esfuerzos. Quizás pueda comentar (para aquellos que no están tan familiarizados con los parches del núcleo), cómo aplicar el parche y cómo usarlo (probablemente sdb=disablecomo parámetro del núcleo).
mpy
1
kernel.org/doc/Documentation/applying-patches.txt cubre la aplicación de parches de kernel en general, pero muchas distribuciones tienen métodos específicos para aplicar parches. Este parche implementa más específicamente un indicador de fuerza 'deshabilitar' para libata. El usuario necesitará usarlo con libata.force = ID: deshabilitar donde ID es un número o número.Tupla de número que identifica la unidad en cuestión.
robbat2
No sé si estas instrucciones: wiki.ubuntu.com/Kernel/BuildYourOwnKernel están actualizadas. Lo intentaré si puedo esta semana ...
Rmano
Por cierto, en el caso de la computadora portátil Samsung, el comando probablemente debería ser "libata.force = 2.00: deshabilitar" ( grep iSSD /var/log/syslogdebería darle una pista).
Rmano
1
Para su información, se fusionó con el kernel para 3.13, así como con el árbol de kernel estable. Sin embargo, la opción no desactivable NO fue aceptada.
robbat2
0

Investigué esto y encontré una solución que se puede implementar con bastante facilidad en Ubuntu. La distribución usa kmod, por lo que lo siguiente debería funcionar bien en eso y en cualquier distribución que use kmod.

Dependiendo del controlador que esté utilizando, deberá incluirlo en la lista negra si desea deshabilitar todos los dispositivos SATA. Intente lsmod | grep sataaveriguar qué controlador (es) está utilizando. Luego, en su /etc/modprobe.d/crear un nuevo archivo echo blacklist (module) > blacklist.confpara agregarlo a la lista negra. Reconstruye tus initramfs mkinitramfspara que surta efecto. Reiniciar.

Alternativamente, solo agregue modprobe.blacklist=(module)a los parámetros de su núcleo.

Héctor
fuente
1
Deshabilitará todos los dispositivos sata, incluido el disco duro, por lo que mi computadora portátil ya no se iniciará. Y el soporte sata se compila en el núcleo (no como un módulo), por lo que no puedo incluirlo en la lista negra.
Sergey Melekhin el
Bien, entonces solo abre tu laptop y quita la unidad ...
Héctor
Desafortunadamente, no soy lo suficientemente competente para hacerlo: está soldado en mainbord, no conectado a través de un cable sata. Ni siquiera estoy seguro de que la computadora portátil sea funcional si la elimino.
Sergey Melekhin