ひとりごと

新しい記事:[2414]  古い記事:[2412] 表示単位 :

ついったー[おとなり日記] かがみさん Y.Kumagaiさん

2009/01/11 (日)

・ 謎ファイル

iSCSIの実験中に気がついたこと。

iscsi-target を動かすと、指定した大きさファイルが即座に作成されます。Windowsのインストールを行うにはそこそこの空き容量が必要ですが、作成場所のファイルシステムの空きは30GB弱でした。

toriyu# df /var/smb
Filesystem  1K-blocks     Used    Avail Capacity  Mounted on
/dev/ad1s1e  50777034 17653268 29061604    38%    /var/smb

そこで、iSCSIのドライブを25GBで指定してファイル iscsi-target を起動しました。

toriyu# ls -l
total 48
-rw-r--r--  1 root  wheel  26843545600 Jan 11 14:26 iscsi-target0

念のために空き容量を確認するために df コマンドを再度実行してみました。

toriyu# df /var/smb
Filesystem  1K-blocks     Used    Avail Capacity  Mounted on
/dev/ad1s1e  50777034 17653316 29061556    38%    /var/smb

えーと、えーと、48KBしか減ってません

あり? 操作を間違えたのでしょうか? 桁を間違えてないか、単位を間違えてないか何度も何度も確認しました。でも間違っていませんでした。別の方法でも確認してみました。

toriyu# ls -s
total 48
48 iscsi-target0

toriyu# du -ks /var/smb/iscsi
50     /var/smb/iscsi

ファイルシステムが壊れてるのでしょうか? 一度 umount して fsck してみましたが、特にエラーは表示されません。はて? なんじゃこりゃ? と困っていたのですが、調べてみるとこういうのは穴あきファイル(sparse file)というのだそうです。

穴あきファイルとは、内部に NULL データを含むファイルで、なおかつディスク上には一部データの実体が存在しないファイル、である。

だそうで、ファイルサイズを超えてシークしたあと書き込みすれば作成されるとか。そんなとこにシークしたらエラーにになったり、書き込み出来たとしたら間のデータは不定になるような気がしますが、「何もない」ことがちゃんと管理されてるのですな。

てことで実験。

toriyu# dd if=/dev/zero of=Hugefile seek=1 bs=1000G count=0
0+0 records in
0+0 records out
0 bytes transferred in 0.000019 secs (0 bytes/sec)

toriyu# ls -l
total 64
-rw-r--r--  1 root  wheel  1073741824000 Jan 11 14:55 Hugefile

toriyu# ls -s
total 64
 64 Hugefile

ほほぉ、こんなのがあったのですねー。知っててもあまり得することは無いかもしれませんが、知らないとおもっきりハマるわけで(←経験者)、良い勉強になりました。

[つっこみ]
01/11( かがみ )
そういえば、昔、フロッピーディスク上に 2G のファイルを作ってみた記憶が。このフロッピーは最新型なので 2G まで OK ですなんて嘘つきました (^^
01/12( たかたに )
なんと極悪・・・いえ何でもないです(^_^)。
余談ですが、上の Hugefile を置いたまま ZFS 化の為に dump/restore したところ、このファイルのとこで詰まって進まなくなっちゃいました。共用サーバーで同じことやるとすんごい迷惑でしょうね(^_^)。
[つっこみ]

新しい記事:[2414]  古い記事:[2412] 表示単位 :
※このページへのリンクは自由です。リンクの方法については[つっこみ]で表示されるページの最後をごらんください。
たかたに(takatani@mars.dti.ne.jp)