名前

fallocate - ファイルに対するディスクスペースの事前割り当てと割り当て解除を行う

書式

fallocate [-c|-p|-z] [-o offset] -l length [-n] filename

fallocate -d [-o offset] [-l length] filename

fallocate -x [-o offset] -l length filename

説明

fallocate は、 ファイルに対して割り当てられたディスクスペースを操作するものであり、 事前割り当てや割り当て解除を行う。 fallocate(2) システムコールをサポートするファイルシステムにおいて、 事前割り当ては、 ブロック割り当てと初期化未済のマークづけを行うだけで、 すばやく割り当てを実現する。 その際には、 データブロックに対する I/O を必要としない。 ファイルを生成して、 中身をゼロで埋めることに比べて高速に処理される。

fallocate の終了ステータスは、 成功時は 0、 失敗時は 1 である。

オプション

引数 lengthoffset の後ろには、KiB (=1024), MiB (=1024*1024) のような乗数を表すサフィックスをつけることができる。 GiB, TiB, PiB, EiB, ZiB, YiB も同様に使える ("iB" を続けるのは任意であり、たとえば、"K" は "KiB" と同じ意味である)。 また、KB (=1000), MB (=1000*1000) のようなサフィックスを付けてもよい。 GB, TB, PB, EB, ZB, YB も同様に使える。

--collapse-range, --dig-holes, --punch-hole, --zero-range は、 どれか一つしか使えない。

-c, --collapse-range

ファイルからバイト範囲を削除する。 ただし穴はあけない。 削除されるバイト範囲は、 offset から始まり、 length バイト分である。 処理が終了すると、 offset の位置に、 offset+length にあったファイル内容が配置される。 したがってこのファイルは length バイトだけ小さくなる。 オプション --keep-size は collapse-range の操作とともに用いることはできない。

Linux 3.15 以降の ext4 (エクステントベースのファイルのみ) と XFS において、 利用可能である。

ファイルシステムの実装の効率性を保証するために、 細かな操作に対しては、 制約が課せられているかもしれない。 通常 offsetlength は、 ファイルシステムの論理ブロックサイズの倍数でなければならない。 これは、 ファイルシステムのタイプや設定に依存する。 ファイルシステムのそのような要件が定められている場合、 この要件にはずれた操作に対しては、 エラー EINVAL が発生して失敗する。

-d, --dig-holes

ファイル内の穴を検出して埋める処理を行う。 これは、 ファイル配置をそのままにして、 スパースファイルを生成する。 したがって余計なディスク領域を必要としない。 穴の最小サイズは、 ファイルシステム I/O ブロックサイズに依存する (普通は 4096 バイト)。 また、 このオプションの利用の際には、 暗に --keep-size の指定が含まれる。 --offset--length による範囲指定がなかった場合、 穴の検出は、 ファイル全体を対象として行われる。

このオプションは、 "cp --sparse" を行ってから、 コピー先を元のファイルにリネームすることと同じ、 と考えればよい。 この場合も、 余計なディスク領域を必要としない。

サポートされているファイルシステムの一覧は、 --punch-hole から参照のこと。

-i, --insert-range

offset から始まる length 分の穴を挿入する。 その分、 既存のデータをずらす。

-l, --length length

範囲の長さをバイト単位で指定する。

-n, --keep-size

ファイルの見かけ上の長さは修正しない。 これは EOF を超えて、 実際にブロック割り当てを行う。 truncate 操作を行えば、 削除することができる。

-o, --offset offset

範囲指定の開始オフセットを、 バイト単位で指定する。

-p, --punch-hole

offset で始まり、 length バイトまで続くバイト範囲を解放する (つまり穴を生成する)。 指定された範囲が、 ファイルシステムブロックの一部分に該当していれば、 ゼロで埋められる。 またブロック全体に該当していれば、 そのファイルから削除される。 この処理が成功した後に、 その範囲を読み込んだ場合は、 ゼロが返される。 このオプションは、 --zero-range オプションと同時に指定することはできない。 なおこのオプションを指定した場合、 暗に --keep-size の指定が含まれる。

これは、 以下においてサポートされている。 XFS (Linux 2.6.38 以降)、 ext4 (Linux 3.0 以降)、 Btrfs (Linux 3.7 以降)、 tmpfs (Linux 3.5 以降)、 gfs2 (Linux 4.16 以降)

-v, --verbose

詳細モードを有効にする。

-x, --posix

POSIX 操作モードを有効にする。 このモードにおいて、 割り当て操作は必ず成功する。 ただし、 対象のファイルシステムにおいて、 高速な割り当てがサポートされていない場合、 処理に時間を要する。

-z, --zero-range

offset で始まり、 length バイト分だけ続くバイト範囲を、 ゼロで埋める。 指定された範囲内において、 ファイル内の穴をつなぐようにして、 ブロックが事前割り当てされる。 この処理が成功した後に、 その範囲を読み込んだ場合は、 ゼロが返される。

ゼロを埋める処理は、 出来り限り、 書き込みが行われていないエクステント (extent) に対して、 対象範囲が変換されるようにして行われる。 この処理方法が意味するのは、 ゼロ埋めされる対象範囲が、 物理的にゼロになるわけではない、ということである (ただしブロックの一部分となる両端は除く)。 そして、 I/O が必要になるのは (それ以外では)、 メタデータの更新のみとなる。

オプション --keep-size を指定すると、 ファイル長さの変更は行われない。

Linux 3.14 以降の ext4 (エクステントベースのファイルのみ) と XFS において、 利用可能である。

-h, --help

ヘルプを表示して終了する。

-V, --version

バージョンを表示して終了する。

作者

関連項目

truncate(1), fallocate(2), posix_fallocate(3)

バグ報告

バグ報告は、 以下にある issue トラッカーを利用すること。 <https://github.com/util-linux/util-linux/issues>.

入手方法

fallocate コマンドは util-linux パッケージの一部であり、 以下からダウンロードできる。 Linux Kernel Archive <https://www.kernel.org/pub/linux/utils/util-linux/>.