#navi(../)
* 実際にはディスクを消費していないファイル(スパースファイル)を作る方法 [#r3da68d3]
本資料は、サイズは大きいが、実際にはディスクを消費していないファイル(スパースファイル)を作る操作手順を記しています。~
以下の操作によりディスクを消費していないのに大きなファイルを作る(スパースファイル)の作成することができます。

#contents
#htmlinsertpcsp(linux_ads_top.html,linux-sp.html)

* スパースファイルとは [#g5a76460]
Linuxのファイルシステムには、''スパースファイル''というファイルサイズと実際のディスク消費量が異なるファイルを作成する機能があります。~
ファイルの中で、まだ実際にデータが存在していない部分はディスクを使わず、データが書き込まれた時点で初めてディスク上に領域を確保します。

実際に作成したスパースファイルと通常のファイルを比較します。~
名前の通り''file_spase''はスパースファイル~
''file_no_sparse''が通常ファイルです。~
ls -l を実行すると2つのファイルは同じサイズと報告されます。

 % ls -l
 合計 1048580
 -rw-rw-r-- 1 user01 user01 1073741824  8月 22 23:41 file_no_sparse
 -rw-rw-r-- 1 user01 user01 1073741824  8月 22 23:44 file_sparse
 t%

しかし、ls に -sオプションを付けて、ディスク上の割り当てられているブロック数を表示すると、

 % ls -l --size
 合計 1048580
 1048580 -rw-rw-r-- 1 user01 user01 1073741824  8月 22 23:41 file_no_sparse
       0 -rw-rw-r-- 1 user01 user01 1073741824  8月 22 23:44 file_sparse
 %

''file_sparse''はディスク上のブロックを何も使っていません。

* スパースファイルの用途 [#ce7eff22]
以下にスパースファイルの使用用途について記述します。

** プログラムが作成するスパースファイル [#pfbfee3b]
スパースファイルは、コアダンプファイルなどで利用されています。~
メモリダンプのデータが存在していない部分はスパースとして扱えば無駄なディスク領域を消費しません。

また、kvmやxenなどの仮想マシンのマシンイメージにも利用されることがあります。

** ユーザが作成するスパースファイル [#h864fb73]
ユーザが自分でスパースファイルを作るのは、~
ループバックファイル(ファイルをディスクのパーティションのように扱い、そのファイルの中にファイルシステムを作りマウントする)を作成する場合です。~
数十、数百GBのサイズのループバックも一瞬で作成でき、しかも実際にデータを書き込むときまではディスク領域を必要としません。

また、ネットワークのスループットやサーバ性能を計測するときの送受信のファイルを作るのにも使えます。~
ローカルのマシン上では実際のディスク消費はほとんどありませんが、~
ネットワーク上では実際のデータ(スパースな部分は0が書き込まれている)として扱われるからです。


* スパースファイルの作成方法 [#l43dfff7]
スパースファイルを作成するには、''dd''コマンドを利用します。

 % dd if=/dev/zero of=file_sparse bs=1M seek=1024 count=0
 0+0 レコード入力
 0+0 レコード出力
 0 バイト (0 B) コピーされました、 1.788e-05 秒、 0.0 kB/秒
 % ls -l --size
 合計 0
 0 -rw-rw-r-- 1 user01 user01 1073741824  8月 23 00:09 file_sparse
 %

''if''の指定で''/dev/zero''を読み込み元とします。~
''of''が作成するスパースファイル名。''bs''で一度に読み込むデータサイズを指定。~
''seek''でスキップ数、この場合は''bs''指定の何倍かという意味になります。~
そして''count''の読み書き実行の回数を''0''とします。

この組合せで''dd''の作成するファイルがスパースファイルになります。

なお、スパースファイルは実際のディスク容量を越えたサイズも作成できます。

 % df -h
 Filesystem               Size  Used Avail Use% Mounted on
 /dev/mapper/ubuntu-root  7.3G  3.8G  3.1G  55% /
 udev                     489M  4.0K  489M   1% /dev
 tmpfs                    200M  512K  199M   1% /run
 none                     5.0M     0  5.0M   0% /run/lock
 none                     498M     0  498M   0% /run/shm
 cgroup                   498M     0  498M   0% /sys/fs/cgroup
 % ls -lh
 合計 0
 -rw-rw-r-- 1 user01 user01 9.8T  8月 22 23:59 file_sparse
 %

もちろん、実際のディスク容量を越えて、これだけのデータを書き込むことはできません。

以上、サイズは大きいが、実際にはディスクを消費していないファイル(スパースファイル)を作る方法についてでした。

#htmlinsertpcsp(linux_ads_btm.html,linux-sp.html)

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS