RHEL5/CentOS5 の ext3 を ext4 に変換する

RHEL5/CentOS5 を使ってるシステムがあって。未だにそんな古いOSを使っているのかといわれてしまうと思うのですけどOS入れ替えるのなかなか面倒なんですよ。こいつの ext3 な領域を ext4 にすることにしました。

RHEL5.6/CentOS5.6 以降、カーネルext4 のドライバが入りましたので安心して使えます。

RHEL5/CentOS5 系に限っていえば、e2fsprogs じゃなくて、e4fsprogs のパッケージを使えば良いのかな。yum で e4fsprogs をインストールしておこう。

ここから先は、以下の文書が参考になります。

UpgradeToExt4 - Ext4

参考の文書よりもちょっぴり多めにオプションを付けます。

 

# umount /dev/DEV
# tune4fs -O extents,uninit_bg,dir_index,extent,flex_bg,huge_file,dir_nlink,extra_isize /dev/DEV
# e4fsck -fDC0 /dev/DEV

 

せっかくなので、新規作成時 ( mkfs.ext4 ) に付加されるパラメータと同じのを付けておきましょうということで、tune4fs にて flex_bg,huge_file,dir_nlink などを足しています。

tune4fs は一瞬で終わります。ファイルシステムの最初のところに情報を書き込むだけですから。

次の e4fsck が非常に時間がかかります。

手元の、数万個のファイルが入ってる 1TB ほどの領域は e4fsck に 1時間ほどかかりました。実行すると、Pass1、Pass2、Pass3、Pass3A、Pass4、Pass5、と処理が進んでいくのですが、Pass1 の処理が全体の7~8割の時間がかかりますので、 Pass1 が終わればあとはすぐといった感じです。Pass1 が終わるのを根気よく待ちましょう。

コレが終われば後は mount して使うだけです。ext4 の書き込みはクソ遅いので書き込みバリアを無効にしてマウントしてやると良いでしょう。

書き込みバリアについてはこちらの文書に説明があります → Red Hat ストレージ管理ガイド - 書き込みバリアを有効または無効にする

もしストレージの書き込みキャッシュが飛んだらデータがロストするのでそれを保護するためファイルシステム側で書き込みバリアが有効になっています。ですがご想像の通りいちいちフラッシュするので遅いです。というわけでストレージ側でキャッシュのバッテリバックアップなどの保護対策がされているのであれば、ファイルシステム側の書き込みバリアを無効にしても良いでしょうという話です。

マウントのオプションに nobarrier もしくは barrier=0 を付けてやれば良いです。