状態:
ディレクトリを外部ハードドライブに再帰的にコピーしたいと思います。このディレクトリには多数のファイル(少なくとも100,000個)が含まれています。
質問:
外付けハードドライブは、私の作業と同じくらい(数時間使用)使用するとかなり熱くなる傾向があります。これは期待寿命には良くありません。だから時間が問題にならないので、コピー中にファイルコピーの間にしばらく休んでドライブの温度を少し冷やすことができたらと思います。
現在、私はionice -c3 nice nice cp -r
他のすべての実行ジョブのパフォーマンスの低下を最小限に抑えるためにこれを使用しています。しかし、冷却の問題は解決されません。
どんな提案がありますか?
他のコマンドを使用することもcp
可能rsync
ですが(コマンドラインに適用可能な場合)、これまで各ファイルのコピー間でx秒を待つことができるコマンドやオプションが見つかりませんでした。
追加情報: 外付けハードドライブは、データを他のコンピュータに転送する手段ではなく、データの最終目的地です。
答え1
特にエレガントではありませんが、コピーコマンドを実行してから20分ごとに3分間一時停止するループを実行できます。
バックグラウンドでコピーコマンドを開始します。
cp -r /path/to/dir /path/to/external/drive &
このループを実行すると停止/再開されます。
while ps -p $! >/dev/null; do kill -SIGCONT $!; sleep 20m; kill -s SIGSTOP $!; sleep 3m; done
答え2
rsync
スループットを制限するオプションがあります(例:
--bwlimit=1
1KB/秒)。数を掛けるには、サフィックスKMまたはGを使用します。デフォルトはKです。マニュアルページではソケットについて説明しますが、ローカルコピーにも適用されます。
sudo smartctl -a /dev/sdx
SDドライブで実行してみることができます。XすべてのディスクとバスがSMARTを実装しているわけではありませんが、過熱による兆候があることを確認してください。
hdparm -M 128
ディスクで次のことを試すことができます(このコマンドのバージョンはマニュアルページを確認してください)。音響管理これにより、頭の動きが遅くなり、騒音と熱が減ります。
答え3
私は方法を考えた。残念ながら復元されないので、コンピュータの電源を入れてもかまいません。テストされていません。
編集:そうです、terdonの修正された答えははるかに優れています。
SRC=src # source directory
DEST=dest # target directory
LOCKFILE=/var/tmp/copy.lock
BATCH_LEN=5m # 5 minutes
BATCH_DELAY=5m
touch "$LOCKFILE"
(cd "$SRC" && tar -cf - .) |
(cd "$TMP" && while [ -e "$LOCKFILE" ]; do
dd bs=4K & (sleep $BATCH_LEN; kill %1 >/dev/null)
sleep $BATCH_DELAY
done) |
(cd "$DEST" && tar -xpf - ; rm "$LOCKFILE")