¿Cómo puedo eliminar de forma segura un disco SATA de un sistema en ejecución?

64

A veces necesito conectar un disco a una bahía de disco. En otras ocasiones, tengo la configuración muy extraña de conectar un SSD usando un cable SATA-eSATA en mi computadora portátil mientras extraigo la energía de una computadora de escritorio.

¿Cómo puedo eliminar con seguridad el disco SATA del sistema? Este hilo del foro de Phoronix tiene algunas sugerencias:

justsumdood escribió:

Un droide (noónimo) escribió:
¿Qué haces luego en el lado del software antes de desconectar? ¿Es un simple "umount / dev / sd" [letra de unidad]? después de desmontar el dispositivo, para "apagar" (o suspender) la unidad:

hdparm -Y /dev/sdX

(donde X representa el dispositivo que desea apagar. por ejemplo: / dev / sdb)

esto apagará el disco permitiendo su extracción sin riesgo de sobrevoltaje.

¿Significa esto que las memorias caché de disco se enjuagan y apagan correctamente a partir de entonces?

Otra sugerencia del mismo hilo:

chithanh escribió:
Todo el hardware SATA y eSATA se puede conectar físicamente en caliente (es decir, no se daña si inserta / extrae el enchufe).

Cómo maneja el chipset y el controlador esta es otra pregunta. Algunas combinaciones de controlador / chipset no manejan correctamente la conexión en caliente y necesitan un comando warmplug como el siguiente:

echo 0 - 0 > /sys/class/scsi_host/hostX/scan

Reemplace X con el número apropiado para su puerto SATA / eSATA.

Dudo si es la forma correcta de hacerlo, pero tampoco puedo encontrar alguna prueba en su contra.

Entonces, ¿cuál es la forma correcta de eliminar un disco conectado de un sistema? Suponga que ya he desmontado todas las particiones del disco y las ejecuté sync. Si es posible, señale alguna documentación oficial, no pude encontrar nada en el árbol de documentación de Linux, ni en el wiki de Linux ATA .

Lekensteyn
fuente

Respuestas:

82
  1. Desmonta cualquier sistema de archivos en el disco. ( umount ...)
  2. Desactivar cualquier grupo LVM. ( vgchange -an)
  3. Asegúrese de que nada esté usando el disco para nada.
  4. Una vez que haya hecho eso, debería ser seguro desenchufarlo.

Si quieres ser más cauteloso, hazlo echo 1 > /sys/block/(whatever)/device/deleteprimero. Eso anulará el registro del dispositivo desde el kernel, por lo que no sabrá nada cuando lo desconecte. Cuando hago eso con una unidad en un gabinete eSATA, puedo escuchar cómo se estacionan los cabezales de la unidad, por lo que el núcleo aparentemente le dice a la unidad que se prepare para el apagado.

Si está utilizando un controlador AHCI, debería hacer frente a los dispositivos que se desconectan. Si está utilizando algún otro tipo de controlador SATA, el controlador podría confundirse con la conexión en caliente.

En mi experiencia, la conexión en caliente SATA (con AHCI) funciona bastante bien en Linux. Desenchufé una unidad óptica, conecté un disco duro, lo escaneé en busca de errores, hice un sistema de archivos y copié datos en él, lo desmonté y lo desenchufé, enchufé una unidad de DVD diferente y grabé un disco, todo con la máquina encendida y corriendo.

Wyzard --Deja de dañar a Monica--
fuente
Tenía la necesidad de desconectar un HDD que quería borrar por completo. Después de sacar el disco de la bahía, / dev / sdXY todavía apareció. Escribir 1para deletehacerlo desaparecer y pude escuchar el disco girando hacia abajo. Simplemente hdparm -Yno fue suficiente porque las /dev/entradas seguirían existiendo. ¡Gracias!
Lekensteyn
16
Recomiendo encarecidamente que siempre emita el echo 1 > /sys/block/(whatever)/device/deletecomando porque la unidad estacionará los cabezales, detendrá por completo el disco y desactivará la alimentación del bus. Si una cabeza no estacionada toca una placa giratoria, la unidad puede destruirse permanentemente.
drumfire
2
Además, si se ejecuta smartd, es una buena idea emitir un SIGHUP al proceso para que vuelva a cargar la información de la unidad. Especialmente importante si está reemplazando unidades porque smartd volverá a cargar la información para esa unidad y todas las demás.
drumfire
1
Solo una nota que vale la pena mencionar, echo 1 > /sys/block/(whatever)/device/deleteno funcionará sudo, se lanzará el error "Permiso denegado". Tendrás que convertirte en una raíz real, así que usa en su sulugar el viejo .
TranslucentCloud
11
@TranslucentCloud Puede canalizarlo sudo teepara emular una redirección como root:echo 1 | sudo tee /sys/block/(whatever)/device/delete
Oli
5

Esas dos secciones son para cosas diferentes.

El primero es para desconectar . El segundo es para enchufar .

Para desconectar, el sistema operativo sincronizará los datos durante la operación de desmontaje. Por lo tanto, si el disco está desmontado (suponiendo que de hecho tenga soporte de hardware completo), puede apagar el disco y luego desenchufarlo sin riesgo de pérdida de datos o corrupción.

Para enchufar, el dispositivo debe reconocerse automáticamente. Si no, puede ejecutar ese comando para activar una exploración de bus. Una vez que se reconoce el dispositivo, puede montarlo.

Y déjenme advertir esto diciendo que solo he hecho este tipo de cosas con unidades USB.

bahamat
fuente
Gracias por su respuesta, pero todavía no estoy convencido de cuál sería la acción correcta. Los SSD tienen un campo SMART "Conteo de apagado no seguro", simplemente desconectarlo sin hacer nada no me parece seguro.
Lekensteyn
3
Si ayuda, rutinariamente conecto y desconecto en caliente los discos duros SATA como parte de mi trabajo, sin más que asegurarme de que esté desmontado primero, y nunca me he encontrado con un problema. Eso es anecdótico, así que no lo tome como un evangelio, pero al menos es evidencia de que es seguro. En cualquier caso, lo consideraría un error del kernel si el sistema operativo no garantiza que los datos estén completamente escritos al final de una operación de desmontaje, especialmente en un mundo de conexión en caliente.
Jander
1
@Lekensteyn, hdparm -Yse encargará de eso. Eso es básicamente lo que hace el sistema cada vez que suspende o apaga.
psusi
5

¿qué pasa eject /dev/sdX? En mi configuración, este comando desmonta, sincroniza y apaga el disco.

bitvitez
fuente
44
Intenté esto con un disco conectado a través de eSATA pero el comando falló con "no conectable en caliente" o algo así.
Lekensteyn
1
La expulsión de Afaik desconecta el disco conectable y no el dispositivo. Depende de que el controlador del dispositivo de bloque admita la ioctl()operación utilizada por la ejectherramienta. Las unidades de disco duro Esata no lo admiten, pero sí dispositivos ópticos, disquetes y probablemente unidades flash.
user259412
2

Tengo un par de guiones que se basan en la respuesta de Wyzard . El primero, scsi-dropes separar de forma segura un solo disco:

#!/bin/sh

if test -h "$1"
then
    disk=$(chase "$1")
else
    disk="$1"
fi

if test -b "$disk"
then
    echo 1 >/sys/block/$(basename "$disk")/device/delete
else
    echo "$0: not a block device: $1" >&2
    exit 1
fi

Su principal beneficio es que puede pasarle un enlace simbólico, como el que se encuentra en, /dev/disk/by-id/y lo resolverá en el dispositivo real. Requiere chaseser instalado; Es posible que pueda obtener el mismo resultado utilizando readlink -e.

El segundo script, scsi-rescanse usa después de conectar en caliente un nuevo dispositivo:

#!/bin/bash

exec tee /sys/class/scsi_host/host*/scan <<<'- - -' >/dev/null

Esto hace que todos los adaptadores vuelvan a buscar dispositivos. Fue la única forma en que logré leer la nueva capacidad y la tabla de particiones.

Toby Speight
fuente
0

En realidad, las unidades SATA aparca automáticamente los cabezales cuando se pierde la energía. Tirar de la unidad mientras todavía está girando, no debería causar problemas. Sin embargo, los discos giratorios son propensos a golpes si se golpean. Puede escuchar esto cuando tiene energía escamosa o erupciones solares.

La mayoría de los daños generalmente son causados ​​por una memoria caché vacía y escrituras no confirmadas en buffers, etc. Es por eso que DEBE desmontar una unidad antes de quitarla. El comando SCSI es una buena medida y funciona con el mismo fin.

Bob Esponja
fuente