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
というわけで,少し調べて見たところ,すぐに原因と解決法が分かりました.
- How to Block Calls and Texts on iPhone
- Linuxファイルシステム比較 – ディスク容量使用効率編
- http://www.linux.or.jp/JF/JFdocs/Filesystems-HOWTO-6.html
- Linuxファイルシステムを最適化する | OSDN Magazine
単純化してしまうと,デフォルトの設定では,いざというときのために全容量の 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