命令を実行するとsudo fallocate -l 2G /swapfile
2GBが生成されますが、その中にはどのような内容やデータが含まれていますか?カスタマイズできますか?それではどうでしょうか?いくつかの調査をしてみましたが、これについての詳細はありません。これfallocate
に良い用途があるのか気になりますswap file
。
たとえば、sudo dd if=/dev/zero of=/swapfile bs=1024 count=N
ゼロで埋められたデータを生成する場合、swap file
ゼロで埋められたデータが必須かどうかはわかりません。swap file
これはチュートリアルでは言及されていません。
答え1
スワップファイルがすべてゼロである必要はありません。カーネルはどのブロックが使用中かを追跡します。
ただし、以下man mkswap
を使用しないように警告することがありますfallocate
。
スワップファイルには脆弱性を含めないでください。ファイル生成の使用は
cp(1)
許可されません。また、fallocate(1)
事前に割り当てられたファイル(XFSやext4など)、または書き込み時にコピーファイルシステム(btrfsなど)をサポートするファイルシステムでは使用できません。そのような場合は、およびを使用することをお勧めしますdd(1)
。書き込み時にコピーファイルシステムにスワップファイルを追加する前に、説明をお読みください/dev/zero
。swapon(8)
(この内容はマンページのすべてのバージョンに含まれていない可能性があります)
さらにswapon
:
カーネルのスワップファイル実装は、ファイルシステムの助けを借りずにファイルに直接書き込むことができると予想します。これは
fallocate(1)
、XFSやext4などのファイルシステム、およびbtrfsなどの書き込み中にコピーファイルシステムから事前に割り当てられたファイル(たとえば)に問題があります。
マニュアルページの他のバージョンでは、次のように言います。
生成された事前割り当てファイルは、
fallocate(1)
ファイルシステムによっては脆弱なファイルとして解釈されることがあります。 Linux 4.18以降、XFSは事前に割り当てられたスワップファイルをサポートしています。
したがって、それを使用fallocate
してスワップファイルを生成できるかどうかは、カーネルとファイルシステムによって大きく異なります。
それに比べて単純なdd
方が良いです。
答え2
バラよりスティーブン・ハリスの答えfallocate
スワップファイル生成の適合性に関する追加情報。
「生成された」データに関するfallocate
技術的な回答は、使用されるファイルシステムによって異なりますが、結果は常にfallocate
ファイルの長さを拡張するときにファイルの新しく割り当てられた部分を読み取るとゼロになります(ディスクにゼロが含まれていない可能性があります)。あります)。これは説明されています関連システムコールに関するドキュメントから:
指定範囲内のすべての小地域オフセットそしてロンドン呼び出し前にデータがないエントリは0に初期化されます。