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

64

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

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

justsumdood escreveu:

Um dróide (nômade) escreveu:
O que você faz no lado do software antes de desconectar? É um "umount / dev / sd" simples [letra da unidade]? depois de desmontar o dispositivo, para "desligar" (ou dormir) a unidade:

hdparm -Y /dev/sdX

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

isso desligará a unidade, permitindo sua remoção sem risco de aumento de tensão.

Isso significa que os caches de disco são lavados e desligados adequadamente depois?

Outra sugestão do mesmo tópico:

chithanh escreveu:
Todo o hardware SATA e eSATA é fisicamente capaz de ser conectado a quente (ou seja, não danificado se você inserir / puxar o plugue).

Como o chipset e o driver lidam com isso é outra questão. Algumas combinações de driver / chipset não lidam adequadamente com hotplugging e precisam de um comando hotplug, como o seguinte:

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

Substitua X pelo número apropriado para sua porta SATA / eSATA.

Duvido que seja a maneira correta de fazê-lo, mas também não encontro provas.

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

Lekensteyn
fonte

Respostas:

82
  1. Desmonte qualquer sistema de arquivos no disco. ( umount ...)
  2. Desative quaisquer grupos LVM. ( vgchange -an)
  3. Verifique se nada está usando o disco para nada.
  4. Depois de fazer isso, deve ser seguro desconectar.

Se você quer ser mais cauteloso, faça echo 1 > /sys/block/(whatever)/device/deleteprimeiro. Isso cancelará o registro do dispositivo do kernel, para que você saiba que nada o está usando quando o desconecta. Quando faço isso com uma unidade em um gabinete eSATA, ouço as cabeças da unidade se estacionarem, de modo que o kernel aparentemente diz à unidade para se preparar para o desligamento.

Se você estiver usando um controlador AHCI, ele deverá lidar com os dispositivos que estão sendo desconectados. Se você estiver usando algum outro tipo de controlador SATA, o driver poderá ficar confuso com a hotplugging.

Na minha experiência, o hotplugging SATA (com AHCI) funciona muito bem no Linux. Desconectei uma unidade óptica, conectei um disco rígido, verifiquei se havia erros, fiz um sistema de arquivos e copiei dados, desmontei e desconectei, conectei uma unidade de DVD diferente e gravei um disco, tudo com a máquina ligada e correndo.

Wyzard - Pare de prejudicar Monica--
fonte
Eu precisava desconectar um disco rígido que eu queria apagar completamente. Após puxar o disco para fora do compartimento, o / dev / sdXY ainda apareceu. Escrever 1para deletefazê-lo desaparecer e eu pude ouvir o disco girando. Apenas hdparm -Ynão foi suficiente, porque as /dev/entradas ainda existiriam. Obrigado!
Lekensteyn
16
Eu recomendo fortemente que sempre emita o echo 1 > /sys/block/(whatever)/device/deletecomando, porque a unidade irá parar as cabeças, parar completamente o disco e desativar a energia do barramento. Se uma cabeça não estacionada tocar uma placa giratória, a unidade poderá ser destruída permanentemente.
drumfire
2
Além disso - se o smartd estiver em execução, é uma boa ideia emitir um SIGHUP para o processo para que ele recarregue as informações da unidade. Especialmente importante se você estiver substituindo unidades, porque o smartd recarregará as informações dessa unidade e de todas as outras.
drumfire
11
Apenas uma nota que vale a pena mencionar, echo 1 > /sys/block/(whatever)/device/deletenão funcionará sudo, o erro "Permissão negada" será lançado. Você precisará se tornar uma raiz real, portanto, use a planície antiga su.
TranslucentCloud
11
@TranslucentCloud Você pode canalizá-lo sudo teepara emular um redirecionamento como root:echo 1 | sudo tee /sys/block/(whatever)/device/delete
Oli
5

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

O primeiro é para desconectar . O segundo é para conectar .

Para desconectar, o sistema operacional sincronizará os dados durante a operação de desmontagem. Portanto, se o disco estiver desmontado (supondo que você realmente possua suporte total ao hardware), você poderá desligar o disco e desconectá-lo sem risco de perda ou corrupção de dados.

Para conectar, o dispositivo deve ser reconhecido automaticamente. Caso contrário, você pode executar esse comando para acionar uma varredura de barramento. Depois que o dispositivo for reconhecido, você poderá montá-lo.

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

bahamat
fonte
Obrigado pela sua resposta, mas ainda não estou convencido de qual seria a ação correta. Os SSDs têm um campo SMART "Contagem de desligamentos inseguros", apenas desconectá-lo sem fazer nada não me parece seguro.
18712 Lekensteyn
3
Se isso ajudar, eu rotineiramente conecto e desconecto os discos rígidos SATA como parte do meu trabalho, com apenas a garantia de que seja desmontado primeiro e nunca encontrei um problema. Isso é anedótico, então não tome isso como evangelho, mas há pelo menos algumas evidências de que provavelmente é seguro. De qualquer forma, consideraria um bug do kernel se o sistema operacional não garantir que os dados sejam totalmente gravados no final de uma operação de desmontagem, especialmente em um mundo de hotplug.
Jander
11
@Lekensteyn, o hdparm -Yvai cuidar disso. Isso é basicamente o que o sistema faz toda vez que você suspende ou encerra.
Psusi 19/07/12
5

que tal eject /dev/sdX? Na minha configuração, este comando desmonta, sincroniza e desliga a unidade.

bitvitez
fonte
4
Eu tentei isso com um disco conectado pelo eSATA, mas o comando falhou com "não hotpluggable" ou algo assim.
Lekensteyn
11
A ejeção do Afaik desconecta o disco conectável e não o dispositivo. Depende do driver do dispositivo de bloco suportar a ioctl()operação usada pela ejectferramenta. As unidades de disco rígido Esata não são compatíveis, mas sim dispositivos ópticos, disquetes e provavelmente unidades flash, sim.
user259412
2

Eu tenho um par de scripts que se baseiam na resposta de Wyzard . O primeiro scsi-drop,, é desanexar 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 transmitir um link simbólico, como o encontrado em, /dev/disk/by-id/e isso resolverá o problema para o dispositivo real. Requer chasea instalação; você poderá obter o mesmo resultado usando readlink -e.

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

#!/bin/bash

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

Isso faz com que todos os adaptadores voltem a procurar dispositivos. Foi a única maneira que consegui ler a nova tabela de capacidade e partição.

Toby Speight
fonte
0

Na verdade, as unidades SATA estacionam automaticamente as cabeças quando a energia é perdida. Puxar a unidade enquanto ela ainda está girando, não deve resultar em problemas. No entanto, discos giratórios são propensos a dings se esbarrar. Você pode ouvir isso quando você tem energia escamosa ou erupções solares.

A maioria dos danos geralmente é causada por cache não liberado e gravações não confirmadas em buffers, etc. É por isso que DEVE desmontar uma unidade antes de removê-la. O comando SCSI é apenas uma boa medida e funciona para o mesmo fim.

bob esponja
fonte