Jak mogę bezpiecznie usunąć dysk SATA z działającego systemu?


64

Czasami muszę podłączyć dysk do wnęki dyskowej. Innym razem mam bardzo dziwną konfigurację podłączania dysku SSD za pomocą kabla SATA-eSATA na moim laptopie podczas pobierania zasilania z komputera stacjonarnego.

Jak mogę bezpiecznie usunąć dysk SATA z systemu? Ten wątek na forum Phoronix zawiera kilka sugestii:

justsumdood napisał:

Droid (groźny) napisał:
Co zatem robisz po stronie oprogramowania przed odłączeniem? Czy to proste „umount / dev / sd” [litera dysku]? po odmontowaniu urządzenia, aby „wyłączyć” (lub uśpić) urządzenie:

hdparm -Y /dev/sdX

(gdzie X oznacza urządzenie, które chcesz wyłączyć. na przykład: / dev / sdb)

spowoduje to wyłączenie napędu, umożliwiając jego usunięcie bez ryzyka wzrostu napięcia.

Czy to oznacza, że ​​pamięci podręczne dysków są odpowiednio opróżniane i następnie wyłączane?

Kolejna sugestia z tego samego wątku:

chithanh napisał:
Cały sprzęt SATA i eSATA może fizycznie być podłączony „na gorąco” (tzn. nie ulegnie uszkodzeniu po włożeniu / wyciągnięciu wtyczki).

Jak radzi sobie z tym chipset i sterownik, to kolejne pytanie. Niektóre kombinacje sterowników / mikroukładów nie obsługują poprawnie hotplugowania i wymagają polecenia warmplug, takiego jak poniższy:

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

Zastąp X odpowiednim numerem dla swojego portu SATA / eSATA.

Wątpię, czy jest to właściwy sposób, ale nie mogę znaleźć na to żadnego dowodu.

Więc jaki jest właściwy sposób na usunięcie dołączonego dysku z systemu? Załóżmy, że odmontowałem już każdą partycję na dysku i uruchomiłem sync. Jeśli to możliwe, proszę wskazać oficjalną dokumentację, nie mogłem znaleźć niczego w drzewie dokumentacji Linuksa ani wiki Linux ATA .

Odpowiedzi:


82
  1. Odmontuj wszystkie systemy plików na dysku. ( umount ...)
  2. Dezaktywuj dowolne grupy LVM. ( vgchange -an)
  3. Upewnij się, że nic nie używa dysku do niczego.
  4. Gdy to zrobisz, powinno być bezpiecznie odłączyć.

Jeśli chcesz być bardzo ostrożny, zrób to echo 1 > /sys/block/(whatever)/device/deletenajpierw. Spowoduje to wyrejestrowanie urządzenia z jądra, więc wiesz , że nic z niego nie korzysta po odłączeniu go. Kiedy robię to z dyskiem w obudowie eSATA, słyszę, jak same głowy parkują, więc jądro wyraźnie mówi dyskowi, aby przygotował się do wyłączenia.

Jeśli używasz kontrolera AHCI, powinien on poradzić sobie z odłączonymi urządzeniami. Jeśli używasz innego kontrolera SATA, sterownik może być pomylony przez hotplugging.

Z mojego doświadczenia wynika, że ​​hotplugowanie SATA (z AHCI) działa całkiem dobrze w Linuksie. Odłączyłem napęd optyczny, podłączyłem dysk twardy, zeskanowałem go pod kątem błędów, utworzyłem system plików i skopiowałem do niego dane, odmontowałem i odłączyłem go, podłączyłem inny napęd DVD i wypaliłem dysk - wszystko przy maszynie i bieganie.


Musiałem odłączyć dysk twardy, który chciałem całkowicie usunąć. Po wyciągnięciu dysku z wnęki wciąż pojawiał się / dev / sdXY. Pisząc 1do deletesprawiły, że zniknie i słyszałem dysk kręci w dół. Po prostu hdparm -Ynie wystarczyło, ponieważ /dev/wpisy nadal istniałyby. Dzięki!
Lekensteyn,

16
Zdecydowanie radzę, aby zawsze wydawać echo 1 > /sys/block/(whatever)/device/deletepolecenie, ponieważ napęd zaparkuje głowice, całkowicie zatrzyma dysk i wyłączy zasilanie magistrali. Jeśli niezaparkowana głowa dotknie obracającej się płyty, napęd może zostać trwale zniszczony.
wybuch

2
Ponadto - jeśli zdarza się, że smartd jest uruchomiony, dobrym pomysłem jest wydanie SIGHUP do procesu, aby ponownie załadował informacje o dysku. Jest to szczególnie ważne, jeśli wymieniasz dyski, ponieważ smartd ponownie załaduje informacje o tym dysku i wszystkich innych.
wybuch

1
Tylko jedna uwaga, o której warto wspomnieć, echo 1 > /sys/block/(whatever)/device/deletenie będzie działać sudo, pojawi się błąd „Odmowa zezwolenia”. Musisz stać się prawdziwym rootem, więc suzamiast tego użyj zwykłego starego .
TranslucentCloud

11
@TranslucentCloud Możesz przepuścić przez niego, sudo teeaby emulować przekierowanie jako root:echo 1 | sudo tee /sys/block/(whatever)/device/delete
Oli

5

Te dwie sekcje dotyczą różnych rzeczy.

Pierwszy dotyczy odłączenia . Drugi dotyczy podłączania .

W celu odłączenia system operacyjny zsynchronizuje dane podczas operacji odmontowania. Dlatego jeśli dysk jest odmontowany (zakładając, że faktycznie masz pełne wsparcie sprzętowe), możesz wyłączyć dysk, a następnie odłączyć go bez ryzyka utraty danych lub uszkodzenia.

W celu podłączenia urządzenie powinno zostać automatycznie rozpoznane. Jeśli nie, możesz wykonać to polecenie, aby uruchomić skanowanie magistrali. Po rozpoznaniu urządzenia możesz je zamontować.

I pozwolę sobie na to ostrzeżenie, mówiąc, że zrobiłem coś takiego tylko z napędami USB.


Dziękuję za odpowiedź, ale nadal nie jestem przekonany, jakie byłyby prawidłowe działania. Dyski SSD mają pole SMART „Niebezpieczne wyłączanie”, po prostu odłączenie go bez robienia niczego nie wydaje mi się bezpieczne.
Lekensteyn,

3
Jeśli to pomaga, rutynowo podłączam dyski twarde SATA typu hot-plug i odłączam na gorąco w ramach mojej pracy, upewniając się, że najpierw nie został on zamontowany, i nigdy nie miałem problemu. To anegdota, więc nie bierz tego za ewangelię, ale to przynajmniej niektóre dowody, że jest to prawdopodobnie bezpieczne. W każdym razie uważam to za błąd jądra, jeśli system operacyjny nie zapewnia, że ​​dane zostaną w pełni zapisane pod koniec odmontowanej operacji, szczególnie w świecie hotplug.
Jander

1
@ Lekensteyn, hdparm -Yzajmie się tym. To jest w zasadzie to, co robi system za każdym razem, gdy zawieszasz lub wyłączasz.
psusi

5

co eject /dev/sdX? W mojej konfiguracji to polecenie umountuje, synchronizuje i wyłącza dysk.


4
Próbowałem tego z dyskiem podłączonym przez eSATA, ale polecenie nie powiodło się z „nie można podłączyć na gorąco” lub coś w tym rodzaju.
Lekensteyn,

1
Afaik eject podłącza dysk wtykowy, a nie urządzenie. Zależy to od tego, czy sterownik urządzenia blokowego obsługuje ioctl()operację używaną przez ejectnarzędzie. Dyski twarde Esata nie obsługują go, ale urządzenia optyczne, dyskietki i prawdopodobnie dyski flash, tak.
user259412

2

Mam parę skryptów opartych na odpowiedzi Wyzarda . Pierwszym scsi-dropjest bezpieczne odłączenie pojedynczego dysku:

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

Jego główną zaletą jest to, że możesz przekazać mu dowiązanie symboliczne, takie jak znalezione w, /dev/disk/by-id/i rozwiąże to na prawdziwym urządzeniu. To wymaga chaseinstalacji; możesz być w stanie uzyskać ten sam wynik za pomocą readlink -e.

Drugi skrypt, scsi-rescanjest używany po podłączeniu nowego urządzenia na gorąco:

#!/bin/bash

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

To sprawia, że ​​wszystkie karty ponownie skanują urządzenia. To był jedyny sposób, w jaki udało mi się odczytać nową pojemność i tablicę partycji.


0

W rzeczywistości dyski SATA automatycznie parkują głowice po utracie zasilania. Ciągnięcie dysku podczas obracania się nie powinno powodować problemów. Jednak wirujące dyski są podatne na wgniecenia, jeśli zostaną zderzone. Możesz to usłyszeć, gdy masz słabą moc lub rozbłyski słoneczne.

Większość szkód jest zwykle powodowana przez niewyłączoną pamięć podręczną i niezapisane zapisy w buforach itp. Dlatego MUSISZ odmontować dysk przed jego usunięciem. Polecenie SCSI jest po prostu dobrą miarą i działa do tego samego celu.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.