1

ラップトップの HDD を安全にバックアップし、必要に応じてバックアップを迅速に使用できるようにする方法を考えていました。私の方法は次のとおりです。同じサイズの 2.5 インチ HDD を USB - SATA ケーブルで購入し、それに内部のクローンを作成します。災害が発生した場合は、ラップトップの HDD を別の HDD と交換するだけで済みます。でも、HDD をバックアップするたびに 500 GB を書き込むのは避けたいと思います。次の md5sum/dd スクリプトが助けになることを願っています:

#!/bin/bash
block="1M"
end=50000
count=10

input="/dev/sda"

output="/dev/sdb"
output="/path/to/imagefile"


function md5compute()
{
    dd if=$1 skip=$2 bs=$block count=$count | md5sum - | awk '{ print $1 }'
}
for i in {0..$end}
do
    start=$(($i*$count))
    md5source=$(md5compute $input $start)
    md5destination=$(md5compute $output $start)
    if [ "$md5source" != "$md5destination" ]
    then
        dd if=$input of=$output skip=$start seek=$start count=$count conv=sync,noerror,notrunc
    fi
done

さて、質問の部分:

A) これを実行すると、ディスクの一部が失われますか? いくつかの欠陥がありますか?

B) 500GB の読み取り/書き込みと比較して、ある程度の時間を勝ち取ることができますか?

C) 明らかに、ターゲット ディスクへの書き込みが少なくなる可能性があります。そのディスクの寿命を延ばすことはできますか?

D) count を 1 のままにして、ブロック サイズを大きくしようと考えていました。これは良い考えですか、それとも悪い考えですか?

E) この同じスクリプトは、画像ファイルを出力として使用できますか?

プログラミングはあまり得意ではありませんが、改善の余地は十分にあります。何かヒントはありますか?

皆さん、ありがとうございました...

4

1 に答える 1

0

ポイントバイポイントの答え:

  1. これを実行すると、ディスクの一部が失われますか?

    • 番号。
  2. いくつかの欠陥がありますか?

    • 単位は異なりますが。これは、ソースでの二重読み取りと、宛先での書き込み前の完全な読み取りを意味します。これにより、バックアップ時間が大幅に短縮されます。
    • 違いが存在する場合でも、MD5 が一致する可能性はほとんどありません。この確率は、SHA1MD256、またはその他のより厳しいチェックサム アルゴリズムを使用することで減少します。しかし、これは両端でより多くのリソースを意味します。(ウィキペディアの誕生日問題を参照)
  3. 500GB の読み取り/書き込みと比較して、しばらく勝てますか?

    • 両方の単位が既に同じである場合は、はい、一般的に書き込みよりも読み取りの方が速いためです。(プロセッサによっては、チェックサム計算のため: これは、非常に貧弱なプロセッサでは重要になる可能性があります)
  4. 明らかに、ターゲット ディスクへの書き込みが少なくなる可能性があります。そのディスクの寿命を延ばすことはできますか?

    • この場合は可能ですが、差分のみを記述すると、はるかに高速になり、ディスクの寿命が大幅に短縮されます。
    • ディスクが異なる場合、ディスク全体を書き換えますが、これは効率的ではありません!
  5. count を 1 のままにして、ブロック サイズを大きくしようと考えていました。これは良い考えですか、それとも悪い考えですか?

    • これは世界的に悪い考えだと思います。なぜ車輪を再発明するのですか?
  6. この同じスクリプトは、画像ファイルを出力として使用できますか?

    • はい。

機能の答え。

このようなジョブには、rsync!を使用できます。このツールを使用すると、

  • 転送中にデータを圧縮する
  • ネットワーク経由でコピー
  • SSH を使用したトンネリング (またはそうでない)
  • 変更されたブロックのみを転送 (書き込み)

の使用、ddおよびmd5sum

私が時々実行する一種のコマンドがあります:

ssh $USER@$SOURCE "dd if=$PATH/$SRCDEV |tee >(sha1sum >/dev/stderr);sleep 1" |
    tee >(sha1sum >/dev/tty) | dd of=$LOCALPATH/$LOCALDEV

これは、ローカル デバイスに書き込む前に確実に転送するために sha1sum よりも、localhost (宛先) に送信する前にsha1sumよりもソース ホストで完全な読み取りを行います。

これは次のように表示されます:

2998920+0 records in
2998920+0 records out
1535447040 bytes (1.4gB) copied, 81.42039 s, 18.3 MB/s
d61c645ab2c561eb10eb31f12fbd6a7e6f42bf11  -
d61c645ab2c561eb10eb31f12fbd6a7e6f42bf11  -
2998920+0 records in
2998920+0 records out
1535447040 bytes (1.4gB) copied, 81.42039 s, 18.3 MB/s
于 2013-12-31T09:03:43.600 に答える