Como posso remover com segurança um disco SATA de um sistema em execução?

60

Às vezes, preciso conectar um disco a um compartimento de disco. Outras vezes, tenho a configuração muito estranha de conectar um SSD usando um cabo SATA-eSATA no meu laptop enquanto puxo energia de um desktop.

Como posso remover com segurança o disco SATA do sistema? Este tópico do fórum Phoronix tem alguns sugestões:

justsumdood wrote:

An(noymous)droid wrote:
What then do you do on the software side before unplugging? Is it a simple "umount /dev/sd"[drive letter]? after unmounting the device, to "power off" (or sleep) the unit:

hdparm -Y /dev/sdX
     

(onde X representa o dispositivo que você deseja desligar, por exemplo: / dev / sdb)

     

isso desligará o inversor, permitindo sua remoção sem o risco de surtos de tensão.

Isso significa que os caches de disco são corretamente liberados e desligados depois disso?

Outra sugestão do mesmo segmento:

chithanh wrote:
All SATA and eSATA hardware is physically able to be hotplugged (ie. not damaged if you insert/pull the plug).

How the chipset and driver handles this is another question. Some driver/chipset combinations do not properly handle hotplugging and need a warmplug command such as the following one:

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

Replace X with the appropriate number for your SATA/eSATA port.

Eu duvido que seja a maneira correta de fazê-lo, mas também não consigo encontrar alguma prova contra isso.

Então, qual é a maneira correta de remover um disco conectado de um sistema? Suponha que eu já desmontei todas as partições no disco e executei sync . Por favor, aponte para alguma documentação oficial, se possível, eu não consegui encontrar nada na árvore de documentação do Linux, nem o wiki ATA do Linux .

    
por Lekensteyn 18.07.2012 / 22:04

4 respostas

73
  1. Desmonte todos os sistemas de arquivos no disco. ( umount ... )
  2. Desativa todos os grupos de LVM. ( vgchange -an )
  3. Certifique-se de que nada está usando o disco para nada.
  4. Depois de fazer isso, é seguro desconectar.

Se você quiser ser mais cauteloso, faça echo 1 > /sys/block/(whatever)/device/delete primeiro. Isso cancelará o registro do dispositivo do kernel, então você sabe que nada está sendo usado quando você o desconecta. Quando faço isso com uma unidade em um compartimento eSATA, posso ouvir as cabeças da unidade se estacionando, então o kernel aparentemente avisa a unidade para se preparar para o desligamento.

Se você estiver usando um controlador AHCI, ele deve lidar com dispositivos sendo desconectados. Se você estiver usando algum outro tipo de controlador SATA, o driver pode ficar confuso com o hotplugging.

Na minha experiência, o hot plug SATA (com AHCI) funciona muito bem no Linux. Eu desconectei uma unidade óptica, conectei um disco rígido, fiz uma varredura por erros, fiz um sistema de arquivos e copiei dados para ele, desmontei e desconectei, liguei uma unidade de DVD diferente e gravei um disco, tudo com a máquina para cima. e correndo.

    
por 19.07.2012 / 05:25
5

Essas duas seções são para coisas diferentes.

O primeiro é para desconectar . O segundo é para ligar .

Para desconectar, o sistema operacional sincronizará os dados durante a operação de desmontagem. Assim, se o disco for desmontado (supondo que você de fato tenha suporte de hardware completo), você pode desligar o disco e desconectá-lo sem risco de perda ou corrupção de dados.

Para ligar, o dispositivo deve ser reconhecido automaticamente. Caso contrário, você pode executar esse comando para acionar uma varredura de barramento. Uma vez que o dispositivo é reconhecido, você pode montá-lo.

E deixe-me advertir isso dizendo que eu só fiz esse tipo de coisa com drives USB.

    
por 18.07.2012 / 23:37
5

e quanto a eject /dev/sdX ? Na minha configuração, isso comanda os valores, sincroniza e liga a unidade.

    
por 27.08.2013 / 23:58
2

Eu tenho um par de scripts que se baseiam na resposta da Wyzard . O primeiro, scsi-drop , é desconectar com segurança um único 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

Seu principal benefício é que você pode passar um link simbólico, como encontrado em /dev/disk/by-id/ , e isso será resolvido para o dispositivo real. Ele requer que chase seja instalado; você pode conseguir o mesmo resultado usando readlink -e .

O segundo script, scsi-rescan , é usado após o hotplug de um novo dispositivo:

#!/bin/bash

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

Isso faz com que todos os adaptadores varram novamente os dispositivos. Foi a única maneira de conseguir que a nova capacidade e a tabela de partições fossem lidas.

    
por 21.04.2016 / 13:01