¿Cómo puedo decirle a Linux Kernel que ignore por completo un disco como si ni siquiera estuviera conectado?

18

darse cuenta

Por favor, desplácese hacia abajo para la respuesta (que tiene pocos puntos pero es la correcta). El problema se resuelve con un parche que estará en el núcleo 3.12.7 y superior; Espero que también sea compatible con los anteriores.

Mi laptop es un Samsung Chronos serie s 7. Ubuntu Gnome Remix 13.04, con controladores actualizados de Intel.

Tengo un problema con la unidad SSD interna (capacidad 8G). Falla con COMRESET y errores de entrada / salida. Estoy bastante convencido de que el problema es el hardware; desafortunadamente no tengo Windows instalado en la computadora portátil para verificar si es una cuestión de configuración SSD o lo que sea.

El problema es que el disco es reconocido por 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

y después de eso falla en muchas verificaciones, retrasando el arranque, retrasando el apagado y haciendo (creo) que la suspensión sea imposible.

¿Es posible decirle a Linux que ignore por completo cualquier cosa en el enlace ata2? Intenté agregar esta línea a /etc/udev/rules.d/10-local.rules

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

Pero no funciona.

Por otro lado, si alguien sabe cómo restablecer el SSD si se dejó en modo "caché" sin usar Windows ... o para iniciar una ventana "en vivo" para hacer lo mismo ...

¡Gracias!

Datos agregados:

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

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

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

lo cual es claramente incorrecto Sin embargo:

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

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

PENSAMIENTO ADICIONAL:

¿Podría todo esto ser un efecto secundario de que la tecnología Intel Smart Response no se deshabilite antes de instalar Linux? En caso afirmativo, ¿cómo puedo verificarlo antes de reinstalar una ventana en la máquina? O esto es un tiro en la oscuridad? (En la BIOS, la unidad SSD no se muestra y no hay nada sobre Intel SRT).

ACERCA DE MARCAR COMO DUPLICADO:

Cambié el título de la pregunta; No creo que la pregunta vinculada responda a mi problema. Me positivamente que el SSD está fallando. Estoy preguntando si es posible decirle al kernel de Linux que no lo analice en absoluto.

Rmano
fuente
2
Si el disco que desea ocultar es "sdb", ¿podría publicar la salida completa de "udevadm info -a -n / dev / sdb"?
Roman Raguet
1
Esto no es un duplicado de la pregunta vinculada, en absoluto. ¿Podría desmarcarlo como un duplicado? Cambié el título para transmitir mejor la pregunta. No se trata de una comprobación de SSD, se trata de una pregunta general sobre la administración de discos en Linux. ¡Gracias!
Rmano
1
¿Cuál es el problema con solo ... desconectar el disco?
Braiam
1
Pregunta similar sobre el Súper Usuario: ¿Cómo deshabilitar el sondeo del núcleo para la unidad?
ændrük
3
Braiam: el disco SSD está soldado a la placa base.
Rmano

Respuestas:

14

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 kernel SATA ( encuéntrelo en el sitio de intercambio de pila Unix / Linux ) que oculta completamente la unidad.

Actualización 1 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 .

Actualización 2 El parche está en el kernel estándar para Ubuntu Trusty Thar 14.04; así que ahora solo se necesita la siguiente adición al parámetro de arranque.

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

Para agregar un parámetro de kernel (bot de forma temporal y permanente) puede verificar estas preguntas y respuestas: ¿Cómo agrego un parámetro de arranque de kernel?

Solución alterna

Al menos el problema de habilitar suspender-reanudar ha sido resuelto por el usuario de Unix StackExchange Emmanuel en /unix//a/103742/52205 . Como root, emita el comando:

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

antes de suspender

Para hacerlo permanente, agregue el siguiente archivo /etc/pm/sleep.d/y hágalo ejecutable:

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

con contenido:

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

... y ahora el sistema se suspende (y reanuda) correctamente.

Rmano
fuente
1
Gracias por recordarlo /sys/block/*/device/delete.
Michael Shigorin
@kikuto --- su edición propuesta parecía un poco fuera de tema, pero agregué un enlace sobre cómo agregar un parámetro de arranque del kernel. Gracias.
Rmano
5

Puede intentar crear la regla udev con la siguiente información (salida de udevadm info -a -n / dev / sdb).

INFORMACIÓN

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) Crea la regla de udev.

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

Puede intentar hacer coincidir las teclas "SUBSISTEMA" y "CONTROLADORES" y los atributos "ATTRS {rev}" y ATTRS {modelo} , luego asigne los variable "DISCOS" para ignorarlo.

El contenido del archivo 99-hide-ssd.rules sería:

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

Para guardar los cambios en nano ... Ctrl+ O, luego Entery finalmente Ctrl+X .

2) Finalmente actualice las reglas de udev con:

  • sudo udevadm trigger

NOTA: Con ENV {UDISKS_IGNORE} = "1" ignorará el disco para Ubuntu 12.10 y 13.04.
Para Ubuntu 12.04, la variable sería ENV {UDISKS_PRESENTATION_HIDE} = "1" .

Espero que esto ayude.

Raguet romano
fuente
Probado, todavía se detecta sdb en el arranque (y lo retrasa). Creo que debería ser alguna opción de parámetro de línea del núcleo, pero no pude encontrar nada ... suspiro. Gracias de cualquier manera.
Rmano
@Rmano ... ¿Si intentas solo hacer coincidir la clave del kernel ?. la regla sería KERNEL == "sdb", ENV {UDISKS_IGNORE} = "1" ... para ver si el disco se detecta en udev.
Roman Raguet
Sé que fue hace mucho tiempo. pero este problema sigue sin respuesta ... ninguna de las sugerencias funcionó. Gracias a todos de todos modos.
Rmano
2

/server/112147/tell-ubuntu-to-ignore-dead-hard-drive-during-booting sugiere en parte:

Como root, abra /etc/udev/rules.d/60-persistent-storage.rules con su editor de texto favorito.

Algunas líneas hacia abajo, probablemente verá una línea que se ve así:

omitir reglas para dispositivos de bloqueo inapropiados

KERNEL == "ram * | loop * | fd * | nbd * | gnbd * | dm- | md ", GOTO = "persistent_storage_end" Agregue "sdb *" a esa segunda línea, así se ve así:

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

Guardar, reiniciar, y tal vez funcione. Si no, bueno, ¿es esto garantía posterior?

K7AAY
fuente
Probé, sin suerte. Todavía tengo la unidad SDB, todavía bloqueando la suspensión. Había una vez una opción de línea de comando sdb = ignore kernel ... Y desafortunadamente sí, es posterior a la garantía.
Rmano
Por cierto, no tenía ese archivo, así que lo agregué ...
Rmano
2

Si sus otros discos no están usando ahci, o no son SSD, puede eliminar el controlador del núcleo para ellos.

para eliminar para esa sesión (hasta el próximo reinicio), ejecute:

sudo rmmod ahci

para recargarlo, ejecuta:

sudo modprobe ahci

si ve que todo va bien, ahora puede deshabilitarlo por completo (no lo cargue las próximas botas). abra el archivo /etc/modprobe.d/blacklist.conf y agregue la siguiente línea:

blacklist ahci 

para poner en la lista negra los controladores ssd, simplemente reemplace ahci con sd

Ohad Cohen
fuente
2
Eso me dejará un sistema sin ningún disco ... la unidad principal está encendida ata1, el SSD que falla ata2. Deshabilitar el modo ahci en la BIOS hace que el sistema no sea
arrancable
1

Por lo que sé, no hay forma de eliminar el mensaje, aparte de eliminar su SSD.

Anudeep Revuri
fuente
Desafortunadamente, el SSD está (por lo que sé) soldado a la placa base. Es solo un chip 8G.
Rmano
¿Cortar uno de los leds en el chip, preferible encontrar la línea + 5V y cortarla con un X-Acto?
K7AAY
... si supiera qué chip es y dónde está. Entonces me temo que eso podría crear aún más problemas (tres estados no controlados ...).
Rmano
1

Fui y escribí un parche de kernel 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

Debe aplicarse a muchos núcleos con mucha facilidad (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