2012-02-06 6 views
1

まず、私はなぜこれが必要かを説明したいと思います。 仮想マシンのディスクイメージファイルを作成する必要があります。そのファイルは本当に巨大(100GB〜1.5TB)のファイルで、0で埋められます。非常に短時間で作成する必要があります(少なくともできるだけ "/ dev/zero"の "dd"コマンドよりも速くすべきです)。必要なサイズはさまざまです(これは私がそれを以前に作成することはできません)。 簡単な解決策(わかっている限り)は、ファイルをスパースファイルとして作成しています。 しかし、なぜ私は解決策を変更したいスパースファイルのいくつかの種類の欠点です。非常に短い時間に非常に大きな(〜TByte)ファイルを連結します

私の考えでは、inodeを直接編集することで解決できます。 私のアイデアは、ゼロで満たされた本当に大きなファイルを作成し、それをinodeレベルで分割することです。または、100Gバイトのファイルをたくさん作成してから、そのファイルを結合して目的のファイルサイズを作成することもできます。 "debugfs"はiノードのダイレクトブロックを編集できることを知っています。 "debugfs"はファイルを回復するために使用されるため、ファイルを作成するために使用することができます。今まではinodeの間接ブロックを編集する方法を見つけることはできません。間接ブロックの編集のほかに、inodeを直接編集することの副作用についてはわかりません。

とにかく、巨大なファイルを「縫う」、またはゼロフィルファイルを作成するためのクールなソリューションやツール(存在する場合)はありますか? "cat"コマンドまたは他の単なる読み書き可能なソリューションかもしれないが、私の問題を遂行することはできません。

+2

あなたは説明したいと思いますが、説明はしません...しかし、ゼロで埋められたファイルが必要な場合は、/ dev/zeroから必要な量を読んでみてください。 – Kimvais

+0

/dev/zeroはまさに私が提案しようとしていたものです:) – paulsm4

+0

// kimvais返信ありがとうございます。そのファイルはディスクイメージです。そのイメージを仮想マシンにマウントします。 – jinhwan

答えて

4

ゼロ充填ファイルのみを作成したい場合は、退避を行うと便利です。マニュアルページより

ファイルにブロックを事前に割り当てるには、fallocateを使用します。ファイルシステムでは、ブロックを割り当て、初期化されていないとマークすることで、データブロックにIOを必要としません。これは、ファイルをゼロで埋めて作成するよりはるかに高速です。

Linuxカーネルv2.6.31から、fallocateシステムコールは、btrfs、ext4、ocfs2、およびxfsファイルシステムでサポートされています。

+0

お返事ありがとうございますが、悲しいことに、私はその解決策を使用することはできませんdf – jinhwan

関連する問題