web-dev-qa-db-ja.com

実行中のシステムからSATAディスクを安全に取り外すにはどうすればよいですか?

ディスクをディスクベイに接続する必要がある場合があります。また、デスクトップから電源を引き出しながら、ラップトップでSATA-eSATAケーブルを使用してSSDを接続するという非常に奇妙な設定をしている場合もあります。

システムからSATAディスクを安全に取り外すにはどうすればよいですか?この Phoronix フォーラムのスレッドにはいくつかの提案があります:

justsumdoodが書いた:

(名声のある)ドロイドは書きました:
次に、プラグを抜く前にソフトウェア側で何をしますか?単純な「umount/dev/sd」[ドライブ文字]ですか?デバイスをアンマウントした後、ユニットを「電源オフ」(またはスリープ)するには:

hdparm -Y /dev/sdX

(Xは電源をオフにするデバイスを表します。例:/ dev/sdb)

これによりドライブの電源が切断され、電圧サージのリスクなしでドライブを取り外すことができます。

これは、ディスクキャッシュが適切にフラッシュされ、その後電源がオフになることを意味しますか?

同じスレッドからの別の提案:

チサンは書きました:
すべてのSATAおよびeSATAハードウェアは、物理的にホットプラグすることができます(つまり、プラグを挿入/プルしても破損しない)。

チップセットとドライバーがこれをどのように処理するかは、別の問題です。一部のドライバー/チップセットの組み合わせは、ホットプラグを適切に処理せず、次のようなwarmplugコマンドが必要です。

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

XをSATA/eSATAポートの適切な番号に置き換えます。

それが正しい方法であるかどうかは疑問ですが、それに対する証拠もいくつか見つかりません。

では、接続されているディスクをシステムから削除する正しい方法は何ですか?私はすでにディスク上のすべてのパーティションをアンマウントしてsyncを実行したと仮定します。可能であれば、公式のドキュメントをポイントしてください。Linuxのドキュメントツリーにも Linux ATA wiki も見つかりませんでした。

67
Lekensteyn
  1. ディスク上のファイルシステムをすべてアンマウントします。 (_umount ..._)
  2. LVMグループを非アクティブ化します。 (_vgchange -an_)
  3. ディスクが何のためにも使用されていないことを確認してください。
  4. それが完了したら、プラグを抜いても安全です。

慎重になりたい場合は、最初にecho 1 > /sys/block/(whatever)/device/deleteを実行してください。これにより、デバイスがカーネルから登録解除されるため、プラグを抜いたときにknowは何も使用していません。 eSATAエンクロージャのドライブでそれを行うと、ドライブのヘッドが止まるのが聞こえるので、カーネルがドライブに電源切断の準備をするように指示しているようです。

AHCIコントローラーを使用している場合は、プラグが抜かれたデバイスに対応する必要があります。他の種類のSATAコントローラーを使用している場合、ドライバーがホットプラグによって混乱する可能性があります。

私の経験では、SATAホットプラグ(AHCIを使用)はLinuxでかなりうまく機能します。オプティカルドライブを取り外し、ハードドライブを接続し、エラーをスキャンし、ファイルシステムを作成してデータをコピーし、アンマウントして取り外し、別のDVDドライブを差し込み、ディスクに書き込みました。と実行しています。

84
Wyzard

eject /dev/sdX?私のセットアップでは、このコマンドはドライブのマウント解除、同期、電源切断を行います。

5
bitvitez

これらの2つのセクションは別のものです。

最初はプラグを抜くです。 2番目はpluggingの場合です。

アンプラグの場合、OSはアンマウント操作中にデータを同期します。したがって、ディスクがアンマウントされている場合(実際には完全なハードウェアサポートがあると想定)、ディスクの電源をオフにしてから、データの損失や破損のリスクなしにディスクを取り外すことができます。

差し込むには、デバイスが自動的に認識される必要があります。そうでない場合は、そのコマンドを実行してバススキャンをトリガーできます。デバイスが認識されたら、マウントできます。

そして、私がUSBドライブでこの種のことをしたのは初めてだと言って、これを警告します。

5
bahamat

Wyzardによる回答 をベースにしたスクリプトのペアがあります。最初のscsi-dropは、単一のディスクを安全に切り離すことです。

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

その主な利点は、/dev/disk/by-id/にあるようなシンボリックリンクを渡すことができ、それを実際のデバイスに解決することです。 chaseをインストールする必要があります。 readlink -eを使用しても同じ結果が得られる場合があります。

2番目のスクリプトscsi-rescanは、新しいデバイスのホットプラグ後に使用されます。

#!/bin/bash

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

これにより、すべてのアダプターがデバイスを再スキャンします。これが、新しい容量とパーティションテーブルを読み取るための唯一の方法でした。

2
Toby Speight

実際には、SATAドライブは、電源が失われると自動的にヘッドをパークします。ドライブがまだ回転しているときにドライブを引っ張っても、問題は発生しません。ただし、回転するディスクは、ぶつかるとへこみが発生しやすくなります。フレークパワーまたは太陽フレアがあるときにこれを聞くことができます。

ほとんどの損傷は、通常、フラッシュされていないキャッシュやバッファ内のコミットされていない書き込みなどによって引き起こされます...これが、ドライブを取り外す前にマウントを解除する必要がある理由です。 SCSIコマンドは適切な測定であり、同じ目的で機能します。

0
spongebob