制限された環境で2つの大きなファイルをスワップ(交換)する

制限された環境で2つの大きなファイルをスワップ(交換)する

それぞれ1GBの容量のフラッシュメモリデバイスが2つあるとします。また、各デバイスには1GBの大きなファイルが1つ含まれているとします。RAMは限られており(64MB)、ハードディスクドライブはないと仮定します。この 2 つのファイルを交換する最短の方法は何ですか?

つまり、ファイルaがデバイス上にありAbがデバイス上にある場合、スワップ操作をとにB配置する必要があります。aBbA

それを実行するための正確なLinuxツールはないことは知っていますこの議論

私は、目標を達成するための最短の方法に興味があります。その方法が長すぎる場合は、チャンクごとにスワップを実行する専用のソリューションを実装する必要があると思いますが、そうでしょうか?

答え1

両方のドライブがいっぱいか、ほぼいっぱいになっている限り、良い解決策はないと思います。ただし、ddコマンドをループすることは可能です。次のようなものです。

#This code is completely untested, 
#do NOT just copy paste and use it without proper testing
while [[ $((i*chunkSize)) -lt fileSize ]]; do
  dd skip=$i seek=$i bs=$chunkSize count=1 if=fileA of=tmpFileInMemory
  dd skip=$i seek=$i bs=$chunkSize count=1 if=fileB of=FileA
  dd skip=$i seek=$i bs=$chunkSize count=1 if=tmpFileInMemory of=fileB
done

fileA と fileB のサイズが異なる場合は、いくつかのチェックが必要です。

関連情報