スワップファイルのfallocate対dd?


18

私はスワップファイルを作成することとの違いは何ですか?

fallocate -l 1G /swapfile

そして

dd if=/dev/zero of=/swapfile bs=1024 count=1024

どちらも正常に動作するように見えますが、一方に他方よりも利点がありますか?

私がオンラインで見つけることができた唯一のものはfallocate、すべてのファイルシステムで動作しないことでした。


1
fallocate通常は高速です(作成されたファイルをゼロで埋めないため)-それ以外は違いはありませんが、最終結果は同じです。参照:antipaucity.com/2017/08/31/...
JonasCz -復活モニカ

1
@JonasCz:はい…でもない!ムーの答えをご覧ください。
デビッドフォースター

回答:


21

以下からのmanページmkswap

Note  that  a  swap  file  must  not contain any holes.  Using cp(1) to
create the file is not acceptable.  Neither is use of  fallocate(1)  on
file  systems  that support preallocated files, such as XFS or ext4, or
on copy-on-write filesystems like btrfs.   It  is  recommended  to  use
dd(1)  and  /dev/zero in these cases.  Please read notes from swapon(8)
before adding a swap file to copy-on-write filesystems.

そしてからのmanページswapon

You should not use swapon on a file with holes.  This can  be  seen  in
the system log as

      swapon: swapfile has holes.

The  swap file implementation in the kernel expects to be able to write
to the file directly, without the assistance of the  filesystem.   This
is  a problem on preallocated files (e.g.  fallocate(1)) on filesystems
like XFS or ext4, and on copy-on-write filesystems like btrfs.

それは、fallocateより速いかもしれませんがdd、スワップファイルの作成には適しておらず、スワップ関連のツールではサポートされていないということです。


1
mkswapのマンページには次のようにも書かれています:スワップファイルをセットアップするには、mkswapで初期化する前に、たとえばfallocate --length 8GiB swapfile私が混乱しているようなコマンドを使用して、そのファイルを作成する必要があります。
タンブルビー

4
@stumblebeeは、fallocateが基本的にddのように機能する事前に割り当てられたファイルをサポートしないファイルシステムでは正常に動作しますが、ext4はデフォルトであり、最も一般的に使用されるLinuxファイルシステムでは動作しません。
ムル

2
なぜfallocate問題になるのか少し混乱しています。まあ、スペースを割り当てるようです。(それはラベルに言うように。)そして、やってfallocate -l 1g /swaptest && mkswap /swaptest && swapon /swaptest上のことはext4何も文句はありません。truncate -l 1gファイルサイズを設定するだけで、ブロックを割り当てないため、異なるでしょう。
-ilkkachu

1
それがそれをしていない場合、誰かがバグを報告する必要があります:)
ウィルクロフォード

1
@ilkkachu誰かが少なくともxfsで問題を再現しています:bugzilla.redhat.com/show_bug.cgi
id

1

Fallocateはより高速です。fallocateのマンページから:

fallocateは、ファイルの割り当て解除または事前割り当てのために、ファイルに割り当てられたディスク領域を操作するために使用されます。 fallocateシステムコールをサポートするファイルシステムの場合、ブロックを割り当てて未初期化としてマークすることにより事前割り当ては迅速に行われ、データブロックへのIOは不要です。これは、ファイルをゼロで埋めて作成するよりもはるかに高速です。

fallocate(1)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.