ディスクフルになった場合の挙動確認

初期の環境。

OLP02:~# mount /dev/sda6 /mnt/nilfs/ -t nilfs2
OLP02:~# cd /mnt/nilfs
OLP02:/mnt/nilfs# df /mnt/nilfs
Filesystem           1K-ブロック    使用   使用可 使用% マウント位置
/dev/sda6             10002428   1064956   8429568  12% /mnt/nilfs
OLP02:/mnt/nilfs# ls -l
合計 401596
drwxr-xr-x 97 root root      8192 2008-03-06 19:11 clients
-rw-r--r--  1 root root 307200000 2008-03-07 14:36 dd.text
-rw-r--r--  1 root root 102400000 2008-03-07 13:13 dd.text2
# cp dd.text dd.text3
OLP02:/mnt/nilfs# df /mnt/nilfs
Filesystem           1K-ブロック    使用   使用可 使用% マウント位置
/dev/sda6             10002428   1359868   8134656  15% /mnt/nilfs
# cat dd.text dd.text dd.text dd.text dd.text dd.text dd.text dd.text dd.text dd.text >> dd.text4
# cp dd.text4 dd.text5
OLP02:/mnt/nilfs# df /mnt/nilfs
Filesystem           1K-ブロック    使用   使用可 使用% マウント位置
/dev/sda6             10002428   7462908   2031616  79% /mnt/nilfs


新しいファイルが増えていっぱいになる場合。

OLP02:/mnt/nilfs# cp dd.text4 dd.text6
cp: writing `dd.text6': デバイスに空き領域がありません
OLP02:/mnt/nilfs# df /mnt/nilfs
Filesystem           1K-ブロック    使用   使用可 使用% マウント位置
/dev/sda6             10002428   9486332      8192 100% /mnt/nilfs
# dmesg
segctord starting. Construction interval = 5 seconds, CP frequency < 30 seconds
NILFS warning (device sda6): nilfs_sync_super: barrier-based sync failed. disabling barriers
# cat /var/log/messages
Mar 11 15:21:27 OLP02 kernel: segctord starting. Construction interval = 5 seconds, CP frequency < 30 seconds
Mar 11 15:21:27 OLP02 kernel: NILFS warning (device sda6): nilfs_sync_super: barrier-based sync failed. disabling barriers

マウントは維持されている。
これ以上はサイズゼロでも書けない。

OLP02:/mnt/nilfs# touch test
touch: cannot touch `test': デバイスに空き領域がありません


ファイルを消してみる。

OLP02:/mnt/nilfs# rm dd.text6
OLP02:/mnt/nilfs# df /mnt/nilfs
Filesystem           1K-ブロック    使用   使用可 使用% マウント位置
/dev/sda6             10002428   9502716         0 100% /mnt/nilfs

消しても減らないので、何もできない。
ガベコレを明示的に指示する方法はないのかな。
設定を変更してマウントし直してみる。

OLP02:/mnt/nilfs# cd /
OLP02:/# umount /mnt/nilfs
OLP02:/# vi /etc/nilfs_cleanerd.conf
    protection_period       60
OLP02:~# mount /dev/sda6 /mnt/nilfs/ -t nilfs2
OLP02:/# mkcp -s
OLP02:/# umount /mnt/nilfs
OLP02:/# mount /dev/sda6 /mnt/nilfs/ -t nilfs2
OLP02:/# df /mnt/nilfs
Filesystem           1K-ブロック    使用   使用可 使用% マウント位置
/dev/sda6             10002428   9396220     98304  99% /mnt/nilfs

ちょっとあいた。
でも、この方法は運用中は使えない。
cleandに何かメッセージ送れるといいのに。


既存のファイルが追記されていっぱいになる場合。

OLP02:/# ls -l /mnt/nilfs
合計 6726424
drwxr-xr-x 97 root root       8192 2008-03-06 19:11 clients
-rw-r--r--  1 root root  307200000 2008-03-07 14:36 dd.text
-rw-r--r--  1 root root  102400000 2008-03-07 13:13 dd.text2
-rw-r--r--  1 root root  307200000 2008-03-11 15:26 dd.text3
-rw-r--r--  1 root root 3072000000 2008-03-11 15:33 dd.text4
-rw-r--r--  1 root root 3072000000 2008-03-11 15:39 dd.text5
OLP02:/# cd /mnt/nilfs
OLP02:/mnt/nilfs# cat dd.text4 >> dd.text5
cat: 書き込みエラー: デバイスに空き領域がありません
# dmesg
segctord starting. Construction interval = 5 seconds, CP frequency < 30 seconds
NILFS warning (device sda6): nilfs_sync_super: barrier-based sync failed. disabling barriers
# cat /var/log/messages
Mar 11 16:10:18 OLP02 kernel: segctord starting. Construction interval = 5 seconds, CP frequency < 30 seconds
Mar 11 16:10:18 OLP02 kernel: NILFS warning (device sda6): nilfs_sync_super: barrier-based sync failed. disabling barriers
Mar 11 16:10:18 OLP02 kernel:

結果は追記でも新規でも同じだ。