ファイル操作による残量の変化

容量の増減については、仕組みの違いから、伝統的なFSと違った挙動になるので要注意。
消しても減らないというのが大きく違うところだ。
減るときはガベコレによって勝手に減る。


コピーした場合のファイルの増える様子。
元のサイズ。

# df
Filesystem           1K-ブロック    使用   使用可 使用% マウント位置
/dev/sda6             10002428    843772   8650752   9% /mnt/nilfs

ファイルを別の名前にコピーする。

# cp /mnt/nilfs/dd.text /mnt/nilfs/dd.text3
# df
Filesystem           1K-ブロック    使用   使用可 使用% マウント位置
/dev/sda6             10002428    942076   8552448  10% /mnt/nilfs

削除する。

# rm /mnt/nilfs/dd.text3
# df
Filesystem           1K-ブロック    使用   使用可 使用% マウント位置
/dev/sda6             10002428    950268   8544256  11% /mnt/nilfs

消してもファイルは減らない。
むしろ増える。これは変だな。なんか別のオペレーションと重なった?

# df /mnt/nilfs; cp /mnt/nilfs/dd.text /mnt/nilfs/dd.text3; df /mnt/nil
fs/; rm /mnt/nilfs/dd.text3; df /mnt/nilfs
Filesystem           1K-ブロック    使用   使用可 使用% マウント位置
/dev/sda6             10002428   1155068   8339456  13% /mnt/nilfs
Filesystem           1K-ブロック    使用   使用可 使用% マウント位置
/dev/sda6             10002428   1458172   8036352  16% /mnt/nilfs
Filesystem           1K-ブロック    使用   使用可 使用% マウント位置
/dev/sda6             10002428   1458172   8036352  16% /mnt/nilfs

減らないのは特徴だが、増えるのはおかしいので、これが正しい。
面白い。


ファイル移動の様子。

# df
Filesystem           1K-ブロック    使用   使用可 使用% マウント位置
/dev/sda6             10002428    950268   8544256  11% /mnt/nilfs
# mv /mnt/nilfs/dd.text2 /mnt/nilfs/dd.text3
# df
Filesystem           1K-ブロック    使用   使用可 使用% マウント位置
/dev/sda6             10002428    950268   8544256  11% /mnt/nilfs
# mv /mnt/nilfs/dd.text3 /mnt/nilfs/dd.text2
# df
Filesystem           1K-ブロック    使用   使用可 使用% マウント位置
/dev/sda6             10002428    950268   8544256  11% /mnt/nilfs

これは、通常のファイルシステムと同じ感覚。
cpが増えた部分については、ここに現れない程度の小さいサイズの変更になるようだ。

# lscp
                 461  2008-03-07 14:28:59  cp     -         25       1433
                 462  2008-03-07 14:30:00  cp     -         25       1433


ファイル末尾に追記した場合。

# df
Filesystem           1K-ブロック    使用   使用可 使用% マウント位置
/dev/sda6             10002428    950268   8544256  11% /mnt/nilfs
# cat /mnt/nilfs/dd.text2 >> /mnt/nilfs/dd.text
# df
Filesystem           1K-ブロック    使用   使用可 使用% マウント位置
/dev/sda6             10002428   1040380   8454144  11% /mnt/nilfs
# ls -l /mnt/nilfs/dd.text
-rw-r--r-- 1 root root 204800000 2008-03-07 14:33 /mnt/nilfs/dd.text

あれ?減った。
これは変だな。途中でgcが起きたかな?

# df /mnt/nilfs; cat /mnt/nilfs/dd.text2 >> /mnt/nilfs/dd.text; df /mnt/nilfs; ls -l /mnt/nilfs/dd.text
Filesystem           1K-ブロック    使用   使用可 使用% マウント位置
/dev/sda6             10002428   1056764   8437760  12% /mnt/nilfs
Filesystem           1K-ブロック    使用   使用可 使用% マウント位置
/dev/sda6             10002428   1146876   8347648  13% /mnt/nilfs
-rw-r--r-- 1 root root 307200000 2008-03-07 14:36 /mnt/nilfs/dd.text

うまくいった。
通常と同じように1つ分だけ増えたようだけど、全部上書きされていれば2つ分増えるはずなのに1つしか増えていないということは、もとのdd.textにあった部分はcp/ssで共有されているということだ。
シンボルはファイル名を基準にしているので、dd.text2で使われている部分がdd.textの領域に再利用されて増分ゼロになるということはない。


が〜ん!

The df command displays the wrong amount of disk space available on the NILFS file system.

だって...
dfの値はアテにならないってことか...
まぁ、変な値になる場合の理由がわかってよかったってことで。


他にも

Deletion a large file takes very long time.

でかいファイルの削除には時間がかかるってのがある。