scpを介してあるSolarisコンピュータから別のコンピュータに転送する7.5Gbファイルがあります。 scp の後、ファイルはターゲットサーバーに 13 Gb を表示します。その理由が何なのか知りたいです。
答え1
これが発生する可能性がある1つの方法は、「脆弱な」ファイルを使用することです。スパースファイル。プログラムが次のことをしているとしましょう。
fd = open("somefile", O_RDWR);
seek(fd, 1024, SEEK_SET);
write(fd, "blah blah", 9);
システムseek()
コールはファイルの最初のディスクブロックをスキップし(Solarisを使用しているかどうかはかなり)、2番目のブロックに9バイトを書き込みます。ほとんど/すべてのUnixおよびLinuxファイルシステムは、実際に書き込まれていない最初のディスクブロックを割り当てません。ファイルのコピー、アーカイブ、または他の操作を実行すると、read()
ファイルの最初の1024バイトに対する操作はすべて0バイトを返すため、ファイルサイズが大きくなります。
しかし、そのような状況は実際にまれです。重複などのエラーを見つけるためにさらに努力します。
サイズとディスク使用量を比較して、ソースファイルがリーンかどうかを確認できます。
ls -l the_file
du -k the_file
2番目の数字(ディスク使用量)が最初の数字(実際のファイルサイズ)より小さい場合、ファイルは希薄です。
ファイルが希薄な場合rsync -a --sparse
を使用して転送できますscp
。 Rsyncは、ユーザーが指示すると、スパースファイルをスパースファイルにコピーできます。