ext3でフォーマットされたアーカイブ用hddの予約ブロックを減らす
普通にmksfでフォーマットしたhddの状態を確認すると、以下のようになる。ブロック数的には約95%使用済みなのに、useは100%になっている。この5%分がreserved blocksと呼ばれるもの。
# df -aT /dev/sdz1 Filesystem Type 1K-blocks Used Available Use% Mounted on /dev/sdz1 ext3 2884284060 2737719028 51756 100% /****************
アーカイブ用なので、書き換え頻度が低く、読み出しすることが多い。こういう場合は予約ブロックの一つの機能であるフラグメンテーションの抑制を無視しても領域がほしい。というわけで以下のようにして予約ブロックを減らす。終わればuseがブロック数の割合と同じ95%になる。事前unmountは不要。詳細確認すると、reserved block count の値が0になっていることがわかる。
# time tune2fs -m 0 /dev/sdz1 tune2fs 1.42.5 (29-Jul-2012) Setting reserved blocks percentage to 0% (0 blocks) real 0m1.142s user 0m0.008s sys 0m0.012s # df -aT /dev/sdz1 Filesystem Type 1K-blocks Used Available Use% Mounted on /dev/sdz1 ext3 2884284060 2737719028 146565032 95% /**************** # tune2fs -l /dev/sdz1 tune2fs 1.42.5 (29-Jul-2012) Filesystem volume name: <none> Last mounted on: ***************** Filesystem UUID: ************************************ Filesystem magic number: 0xEF53 Filesystem revision #: 1 (dynamic) Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery extent sparse_super large_file uninit_bg Filesystem flags: signed_directory_hash Default mount options: user_xattr acl Filesystem state: clean Errors behavior: Continue Filesystem OS type: Linux Inode count: 183148544 Block count: 732566385 Reserved block count: 0 Free blocks: 10028 Free inodes: 183132167 First block: 0 Block size: 4096 Fragment size: 4096 Reserved GDT blocks: 849 Blocks per group: 32768 Fragments per group: 32768 Inodes per group: 8192 Inode blocks per group: 512 Filesystem created: *** Feb 8 21:14:32 **** Last mount time: *** Jul 21 16:25:21 **** Last write time: *** Jul 21 16:25:21 **** Mount count: 2 Maximum mount count: -1 Last checked: *** Jul 8 12:06:51 **** Check interval: 0 (<none>) Lifetime writes: 281 GB Reserved blocks uid: 0 (user root) Reserved blocks gid: 0 (group root) First inode: 11 Inode size: 256 Required extra isize: 28 Desired extra isize: 28 Journal inode: 8 Default directory hash: half_md4 Directory Hash Seed: ************************************ Journal backup: inode blocks
ext3フォーマットHDDのフラグメンテーション
せっかく5%~140GB程度の領域ができたので、ここにファイルを詰め込みたい。そこでまずは fsck でフラグメンテーションの状況チェック。3TBのディスクで2時間程度かかる。fsckの前にumountを忘れずに。断片化しているファイルの割合は 52.5%。
# umount /dev/sdz1
# time fsck -nvf /dev/sdz1
fsck from util-linux 2.20.1
e2fsck 1.42.5 (29-Jul-2012)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
21524 inodes used (0.01%, out of 183148544)
11310 non-contiguous files (52.5%)
1 non-contiguous directory (0.0%)
# of inodes with ind/dind/tind blocks: 21512/21463/0
695925127 blocks used (95.00%, out of 732566385)
0 bad blocks
1 large file
21511 regular files
4 directories
0 character device files
0 block device files
0 fifos
0 links
0 symbolic links (0 fast symbolic links)
0 sockets
------------
21515 files
real 141m57.259s
user 18m55.175s
sys 11m32.167s
ext3からext4への変換とデフラグ
フラグメンテーションの大きさは50%程度だけど、アーカイブ用なのでデフラグをしておきたい。ext3には標準的なデフラグソフトがないのでフォーマットをext4に変換してデフラグする。フォーマット変換の前にumount、フォーマット変換、ファイルシステムチェック。fstab のエントリをext4に書き換え、マウント。
# umount /dev/sdz1 # time tune2fs -O extents,uninit_bg,dir_index /dev/sdz1 tune2fs 1.42.5 (29-Jul-2012) real 0m1.099s user 0m0.012s sys 0m0.300s # time e2fsck -fDC0 /dev/sdz1 e2fsck 1.42.5 (29-Jul-2012) Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 3A: Optimizing directories Pass 4: Checking reference counts Pass 5: Checking group summary information /dev/sdz1: ***** FILE SYSTEM WAS MODIFIED ***** /dev/sdz1: 21524/183148544 files (52.6% non-contiguous), 695925074/732566385 blocks real 141m57.639s user 19m31.989s sys 11m17.946s # vi /etc/fstab # mount /dev/sdz1 # df -aT /dev/sdz1 Filesystem Type 1K-blocks Used Available Use% Mounted on /dev/sdz1 ext4 2884284060 2737718816 146565244 95% /****************
フラグメンテーションのチェックと、デフラグ。オンラインでデフラグできるので便利。残念ながらフラグメンテーションは解決されず。
# time e4defrag -c /dev/sdz1
Filesystem is not mounted
real 0m0.101s
user 0m0.004s
sys 0m0.000s
# mount /dev/sdz1
# time e4defrag -c /dev/sdz1
<Fragmented files> now/best size/ext
1. /***********************************************************
3/1 84 KB
2. /*****************************************************************
3/1 298 KB
3. /****************************************************************
3/1 386 KB
4. /*************************************************
3/1 394 KB
5. /******************************************************************
3/1 492 KB
Total/best extents 737501/32438
Average size per extent 3708 KB
Fragmentation score 1
[0-30 no problem: 31-55 a little bit fragmented: 56- needs defrag]
This device (/dev/sdz1) does not need defragmentation.
Done.
real 83m4.445s
user 0m1.732s
sys 1m33.290s
# time e4defrag /dev/sdz1
ext4 defragmentation for device(/dev/sdz1)
Total extents: 737501->737501
Fragmented percentage: 100%->100%
real 114m7.063s
user 0m8.365s
sys 4m56.339s
# time e4defrag -c /dev/sdz1
<Fragmented files> now/best size/ext
1. /***********************************************************
3/1 84 KB
2. /*****************************************************************
3/1 298 KB
3. /****************************************************************
3/1 386 KB
4. /*************************************************
3/1 394 KB
5. /******************************************************************
3/1 492 KB
Total/best extents 737501/32438
Average size per extent 3708 KB
Fragmentation score 1
[0-30 no problem: 31-55 a little bit fragmented: 56- needs defrag]
This device (/dev/sdz1) does not need defragmentation.
Done.
real 83m21.468s
user 0m1.708s
sys 1m34.202s
最初からext4フォーマット、reserved block countを0にしてフォーマット
# time mkfs -t ext4 -m 0 -c -c /dev/sdz1
mke2fs 1.42.5 (29-Jul-2012)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
61054976 inodes, 244190385 blocks
0 blocks (0.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=0
7453 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, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
102400000, 214990848
Testing with pattern 0xaa: done
Reading and comparing: done
Testing with pattern 0x55: done
Reading and comparing: done
Testing with pattern 0xff: done
Reading and comparing: done
Testing with pattern 0x00: done
Reading and comparing: done
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
real 2196m10.328s
user 289m24.601s
sys 98m22.093s
# tune2fs -l /dev/sdz1
tune2fs 1.42.5 (29-Jul-2012)
Filesystem volume name: <none>
Last mounted on: <not available>
Filesystem UUID: ************************************
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal ext_attr resize_inode dir_index filetype extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags: signed_directory_hash
Default mount options: user_xattr acl
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 61054976
Block count: 244190385
Reserved block count: 0
Free blocks: 240307294
Free inodes: 61054965
First block: 0
Block size: 4096
Fragment size: 4096
Reserved GDT blocks: 965
Blocks per group: 32768
Fragments per group: 32768
Inodes per group: 8192
Inode blocks per group: 512
Flex block group size: 16
Filesystem created: *** Jul 22 01:10:05 ****
Last mount time: n/a
Last write time: *** Jul 23 13:46:11 ****
Mount count: 0
Maximum mount count: -1
Last checked: *** Jul 22 01:10:05 ****
Check interval: 0 (<none>)
Lifetime writes: 134 MB
Reserved blocks uid: 0 (user root)
Reserved blocks gid: 0 (group root)
First inode: 11
Inode size: 256
Required extra isize: 28
Desired extra isize: 28
Journal inode: 8
Default directory hash: half_md4
Directory Hash Seed: ************************************
Journal backup: inode blocks