
それぞれ1GBの容量のフラッシュメモリデバイスが2つあるとします。また、各デバイスには1GBの大きなファイルが1つ含まれているとします。RAMは限られており(64MB)、ハードディスクドライブはないと仮定します。この 2 つのファイルを交換する最短の方法は何ですか?
つまり、ファイルa
がデバイス上にありA
、b
がデバイス上にある場合、スワップ操作をとにB
配置する必要があります。a
B
b
A
それを実行するための正確な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 のサイズが異なる場合は、いくつかのチェックが必要です。