"fallocate"コマンドはどのようなコンテンツ/データを生成しますか?

"fallocate"コマンドはどのようなコンテンツ/データを生成しますか?

命令を実行するとsudo fallocate -l 2G /swapfile2GBが生成されますが、その中にはどのような内容やデータが含まれていますか?カスタマイズできますか?それではどうでしょうか?いくつかの調査をしてみましたが、これについての詳細はありません。これ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/zeroswapon(8)

(この内容はマンページのすべてのバージョンに含まれていない可能性があります)

さらにswapon:

カーネルのスワップファイル実装は、ファイルシステムの助けを借りずにファイルに直接書き込むことができると予想します。これはfallocate(1)、XFSやext4などのファイルシステム、およびbtrfsなどの書き込み中にコピーファイルシステムから事前に割り当てられたファイル(たとえば)に問題があります。

マニュアルページの他のバージョンでは、次のように言います。

生成された事前割り当てファイルは、fallocate(1)ファイルシステムによっては脆弱なファイルとして解釈されることがあります。 Linux 4.18以降、XFSは事前に割り当てられたスワップファイルをサポートしています。

したがって、それを使用fallocateしてスワップファイルを生成できるかどうかは、カーネルとファイルシステムによって大きく異なります。

それに比べて単純なdd方が良いです。

答え2

バラよりスティーブン・ハリスの答えfallocateスワップファイル生成の適合性に関する追加情報。

「生成された」データに関するfallocate技術的な回答は、使用されるファイルシステムによって異なりますが、結果は常にfallocateファイルの長さを拡張するときにファイルの新しく割り当てられた部分を読み取るとゼロになります(ディスクにゼロが含まれていない可能性があります)。あります)。これは説明されています関連システムコールに関するドキュメントから:

指定範囲内のすべての小地域オフセットそしてロンドン呼び出し前にデータがないエントリは0に初期化されます。

関連情報