preload
パッケージを追加した後、アプリケーションは高速化されたように見えますが、大きなファイルをコピーすると、ファイルのサイズがファイルのサイズの2倍以上になります。
単一の3〜4 GBの仮想ボックスイメージまたはビデオファイルを外部ドライブに転送することにより、この巨大なキャッシュはプリロードされたすべてのアプリケーションをメモリから削除し、ロード時間の増加と一般的なパフォーマンスの低下につながります。
大きな数ギガバイトのファイルをコピーする方法はありますか?withoutそれらをキャッシュします(つまり、ファイルキャッシュをバイパスします)?または、特定のフォルダーがキャッシュされるのをホワイトリストまたはブラックリストに登録する方法はありますか?
nocache
ユーティリティがあり、ionice
やNice
などのコマンドの前に追加できます。オープンコールにposix_fadvise
フラグ付きのPOSIX_FADV_DONTNEED
を追加するライブラリをプリロードすることで機能します。
簡単に言えば、その特定のファイルにはキャッシングは不要であることをカーネルにアドバイスします。カーネルはファイルをキャッシュしません通常。技術的な詳細については here をご覧ください。
E。巨大なコピージョブについては驚異的です。 g。実行中のシステムへの影響を最小限に抑えてバックグラウンドでマルチテラバイトのディスクをバックアップしたい場合は、Nice -n19 ionice -c3 nocache cp -a /vol /vol2
に沿って何かを行うことができます。
パッケージはUbuntu 13.10以降で利用可能になります。以前のリリースを使用している場合は、 13.10パッケージ をインストールするか、FrançoisMarierによる this 12.04 backport を選択できます。
dd
でdirectI/Oを使用してファイルキャッシュをバイパスします。1つ(または数個)の大きなマルチギガバイトファイルを転送する場合は、dd
を使用すると簡単です。
dd if=/path/to/source of=/path/to/destination bs=4M iflag=direct oflag=direct
direct
フラグは、読み取りおよび書き込み中にカーネルの直接I/Oオプション(O_DIRECT
)を使用するようにdd
に指示するため、ファイルキャッシュを完全にバイパスします。bs
blocksizeオプションは、物理ディスク操作の数を最小限に抑えるためにdd
が実行する必要があるため、かなり大きな値に設定する必要があります。深刻な減速。4M
)です。複数/再帰的なディレクトリコピーの場合、残念ながら、簡単に利用できるツールはありません。通常のcp
などは直接I/Oをサポートしません。
/ e iflags&oflagsが正しいiflag&oflagに変更されました
dd
およびfind
を使用して、mkdir
を使用してディレクトリを再帰的にコピーできます。2つの問題を回避する必要があります:
dd
はディレクトリをどうするかわかりませんdd
は一度に1つのファイルのみをコピーできますまず、入力ディレクトリと出力ディレクトリを定義しましょう。
SOURCE="/media/source-dir"
TARGET="/media/target-dir"
次に、cd
をソースディレクトリに入れて、find
が、簡単に操作できる相対ディレクトリを報告します。
cd "$SOURCE"
ディレクトリツリーを$SOURCE
から$TARGET
に複製します
find . -type d -exec mkdir -p "$TARGET{}" \;
$SOURCE
から$TARGET
にファイルを複製して、書き込みキャッシュを省略しています(ただし、読み取りキャッシュを使用しています!)
find . -type f -exec dd if={} of="$TARGET{}" bs=8M oflag=direct \;
ファイルの変更時間、所有権、その他の属性は保持されないことに注意してください。