Tengo un ordenador portátil de Samsung (Cronos s7) con un disco duro SATA en el autobús ata:1
, que se detecta como /dev/sda
, un SSD 8G en ata:2
, /dev/sdb
y varios otros dispositivos en el resto de la interfaz SATA.
El problema es que el disco SSD es
- soldado a la placa principal (inamovible)
- reventado (solo da errores de E / S para cualquier operación)
- no aparece en la BIOS (probablemente porque está roto)
Ahora este disco:
- retrasa el arranque de tres a cinco minutos tratando de sondear el disco que falla, lo cual es molesto;
- pero lo más molesto es que el sistema no se suspende por
/dev/sdb
fallar.
Tenga en cuenta que puedo vivir con el retraso en el arranque --- lo que me preocupa es la reanudación / suspensión.
Entonces la pregunta es: ¿puedo decirle al kernel que evite incluso probar el dispositivo en ata: 2?
En el kernel anterior (<3.0), cuando aún podía profundizar un poco en la fuente, había un parámetro de línea de comandos del estilo hdb=ignore
que habría funcionado.
He intentado todos los trucos propuestos a continuación con udev
y los libata:force
parámetros del kernel, sin éxito. Específicamente, lo siguiente no funciona:
Agregar a uno de los siguientes
/etc/udev/rules.d/
un archivo (en ejecución temprana como00-ignoredisk.rules
o tarde como99-ignoredisk.rules
o en ambos lugares)SUBSYSTEMS=="scsi", DRIVERS=="sd", ATTRS{rev}=="SSD ", ATTRS{model}=="SanDisk iSSD P4 ", ENV{UDISKS_IGNORE}="1"
ni
KERNEL=="sdb", ENV{UDISKS_IGNORE}="1"
ni muchas soluciones intermedias, esto hace que el disco no sea accesible después del arranque, pero se prueba en el arranque y aún se verifica al suspenderlo, lo que hace que la suspensión falle.
La edición de los archivos del sistema
/lib/udev/rules.d/60-persistent-storage.rules
(yudisks
,udisks2
) cambiandoKERNEL=="ram*|loop*|fd*|nbd*|gnbd*|dm-|md", GOTO="persistent_storage_end"
a
KERNEL=="ram*|loop*|fd*|nbd*|gnbd*|dm-|md|sdb*", GOTO="persistent_storage_end"
De nuevo, esto tiene algún efecto, enmascarando el disco desde el espacio de usuario, pero el disco aún es visible para el núcleo.
Arrancar con todas las combinaciones posibles (bueno, muchas de ellas) de los
libata:force
parámetros (que se encuentran, por ejemplo, aquí ) para desactivar DMA, velocidad más baja o lo que sea sobre el disco que falla --- no funciona. Se utiliza el parámetro, pero el disco todavía está sondeado y falla.Completamente
udevadm info -a -n /dev/sdb
pegado 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 ).
fuente
/etc/fstab
? Porque el retraso en el arranque podría ser causado antes por el kernel o udev, que parece ser el caso, pero también más tarde por fsck, al leerfstab
.Respuestas:
libata
no tiene una opción sin sonda en absoluto; esa era una opción IDE heredada ...Pero fui y escribí un parche de kernel para ti que lo implementa. 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).
Actualización El parche ahora está en sentido ascendente (al menos en 3.12.7 kernel estable). Está en el núcleo estándar distribuido con Ubuntu 14.04 (que se basa en 3.13-estable).
Una vez instalado el parche, agregue
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 (obviamente, debe verificar los mensajes del núcleo antes de agregar los parámetros de arranque):
El número importante es el
ata2.00
de la primera línea de arriba.fuente
Los problemas de hardware tienen solución de hardware físico. ¿Consideró desoldar o cortar la fuente de alimentación de la unidad?
EDITAR: Ok, si esa no es una opción, la gente está usando esto antes para conectar en caliente un disco duro. Podrías usar eso para deshabilitar tu disco.
Tenga en cuenta que cualquier otro proceso puede forzar un escaneo del bus SATA y luego hacer que regrese. Intenta hacerlo justo antes de hibernar el portátil.
Editado por OP: funcionó . Agregué el siguiente archivo:
con contenido:
... y ahora el sistema se suspende (y reanuda) correctamente.
fuente
delete
.BIOS
¿Este dispositivo no aparece de ninguna manera a través de su BIOS?
Muchas veces, los HDD se configuran en modo "automático", lo reviso y me aseguro de que estos dispositivos estén deshabilitados e incluso hasta el punto de habilitar explícitamente solo un HDD y deshabilitar todo lo demás.
Opciones de arranque del kernel
Muchas veces puede deshabilitar la detección automática de varios subsistemas mediante el kernel de arranque de Linux mediante el uso de diferentes opciones de arranque que pueden pasarse a él como conmutadores.
La mayoría, si no todas, las opciones se enumeran aquí:
Linux en un libro de cáscara de nuez
Es posible que desee leer el libro de O'Reilly, Kernel de Linux en una cáscara de nuez , específicamente, Capítulo 7: Personalizar un kernel .
Este libro está disponible de forma gratuita por su autor, Greg Kroah-Hartman, en su sitio web personal. También se puede descargar todo el libro.
fuente
noide=....
. Hay muchas otras opciones que puede proporcionar al núcleo de arranque para deshabilitar la detección automática de hardware.hdb=noprobe
opciones no se han transferido a scsi (creo que se eliminó alrededor de 2.6.x), por lo que no existe (tan pronto como sé) unasdb=noprobe
uata:2=noprobe
opción. He leído (casi) todo elkernel-parameters.txt
archivo en la fuente del núcleo y no puedo encontrar el parámetro correcto. Si conoces a alguien, por favor dilo en una respuesta --- Estaré realmente agradecido.libata.dma=
sudo hdparm -I /dev/sdX
Forma de Linux para verificar el bloqueo: (con X = a..z; debe saber qué dispositivo es su unidad, por supuesto). Al final de la (grande) de salida, debe ser capaz de leer en los últimos 10 líneas:*not* locked
.fuente