ext3 にアーカイブを保存するとき

ウェブコーパスを保存するファイルシステムに XFS を使っていたのですが,互換性の問題があることが分かったため,ext3 に切り替えることにしました.しかし,試してみると,(デフォルトの設定では)XFS よりも使える領域が小さくなってしまうことに気づきました.

例えば,10GB のパーティションext3, ext4, XFS にした場合,df -T の出力は以下のようになりました.xfs と比べると,ext3, ext4 の Available は約 92% になっています.ひどく損をした気分です.Amazon EBS なら余計にお金を払うことになりますから,本当に損します.

Filesystem Type 1K-blocks   Used Available Use% Mounted on
/dev/sdf1  ext3  10317828 154232   9639480   2% /mnt/ebs # mkfs.ext3
/dev/sdf1  ext4  10317828 154100   9639612   2% /mnt/ebs # mkfs.ext4
/dev/sdf1   xfs  10472140   4256  10467884   1% /mnt/ebs # mkfs.xfs

というわけで,少し調べて見たところ,すぐに原因と解決法が分かりました.

純化してしまうと,デフォルトの設定では,いざというときのために全容量の 5% を予約しているので,使える領域が小さくなるというわけです.

今回は,大きなファイルを容量のギリギリまで詰め込んで,それから後は編集しないという用途なので,バッサリと予約なし(0%)にしてみました.mkfs.ext3 のオプションでは -m 0 に相当します.後,大きなファイルを保存するので,-T largefile も付けることにしました.inode が少なくなるので,初期化にかかる時間が短くなるという特典も付きます.

# mkfs.ext3 についての話になっていますが,mkfs.ext4 でも同様のオプションがあります.

mkfs.ext3 と mkfs.ext4 に上記のオプションを付けてみたところ,以下のようになりました.XFS との差はほとんどなくなっています.

Filesystem Type 1K-blocks   Used Available Use% Mounted on
/dev/sdf1  ext3  10479108 154232  10324876   2% /mnt/ebs # mkfs.ext3 -T largefile -m 0
/dev/sdf1  ext4  10479108 154100  10325008   2% /mnt/ebs # mkfs.ext4 -T largefile -m 0
/dev/sdf1   xfs  10472140   4256  10467884   1% /mnt/ebs # mkfs.xfs

めでたしめでたし….

以下は,mkfs.ext3 をオプションなしで実行したときと,オプションありで実行したときの出力です.

## オプションなし

$ time sudo mkfs.ext3 /dev/sdf1 
mke2fs 1.41.11 (14-Mar-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
655360 inodes, 2620595 blocks
131029 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2684354560
80 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 35 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

real	0m10.115s
user	0m0.000s
sys	0m0.200s
## オプションあり

$ time sudo mkfs.ext3 /dev/sdf1 -T largefile -m 0
mke2fs 1.41.11 (14-Mar-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
10240 inodes, 2620595 blocks
0 blocks (0.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2684354560
80 block groups
32768 blocks per group, 32768 fragments per group
128 inodes per group
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 26 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

real	0m4.319s
user	0m0.000s
sys	0m0.130s