CentOS5のrootパーティションをext3からext4に変換

古いCentOS5をP2VAWSに持って行きました。

P2Vはこちらの方法で行いました。この後、vmdkをova方式に変換してAWSに持って行ってました。 yomon.hatenablog.com

その際、せっかくなのでファイルシステムext3からext4に変更したので、その手順です。

CentOS5をext3からext4に/(root)パーティションが結構ハマりポイントあったので誰かの参考になれば。

はじめに

CentOSの古いKernelはrootパーティションext3でMountしにいくので、できればCentOS5の最新CentOS5.11に上げておいた方ば無難です。Kernelをリコンパイルしてext3を無効にする方法もあるよなのですが、試せてないです。

環境

こちらのLVMで着られているrootパーティションext4に変更します。

# cat /etc/redhat-release
CentOS release 5.11 (Final)

# df -hT
Filesystem    Type  サイズ  使用  残り 使用% マウント位置
/dev/mapper/VolGroup00-LogVol00
              ext3     53G   18G   32G  37% /
/dev/hda1     ext3    3.0G   98M  2.8G   4% /boot
tmpfs        tmpfs    3.7G     0  3.7G   0% /dev/shm

手順

ext4用のツールが入っているパッケージをインストールします。

# yum install e4fsprogs

fstabを変更しておきます。

# vi /etc/fstab
#(変更前)/dev/VolGroup00/LogVol00    /   ext3    defaults    1 1
/dev/VolGroup00/LogVol00    /   ext4    defaults    1 1

ここがハマりポイントの一つです。initrdもext4用のモジュールが必要です。以下の通り組み込みます。

# mv /boot/initrd-`uname -r`.img{,.org}
# mkinitrd -v --with=ext4 -f /boot/initrd-`uname -r`.img `uname -r`
--省略
Adding module ext4
--省略

fuserコマンドでACCESSの項目が 「F」や「f」になっている(ファイルオープンしている)プロセスを停止、またはkillしていきます。

# fuser -v -m /

ファイルをオープンしているプロセスが消えたところで、rootパーティションをreadonlyでマウントし直します。

# mount -o remount,ro /

ext4を有効化し、整合性チェックをかけます。tune4fsは一瞬、e4fsckは時間がかかります。

# tune4fs -O extents,uninit_bg,dir_index /dev/mapper/VolGroup00-LogVol00

# e4fsck -fDC0 /dev/mapper/VolGroup00-LogVol00
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/mapper/VolGroup00-LogVol00: ***** FILE SYSTEM WAS MODIFIED *****
/dev/mapper/VolGroup00-LogVol00: ***** REBOOT LINUX *****
/dev/mapper/VolGroup00-LogVol00: 211967/152320608 files (0.8% non-contiguous), 9451397/18611200 blocks

最後に再起動をかけます。

# reboot

無事にext4に変更されました。

# df -Th
Filesystem    Type  サイズ  使用  残り 使用% マウント位置
/dev/mapper/VolGroup00-LogVol00
              ext4     53G   18G   32G  37% /
/dev/hda1     ext3    3.0G  101M  2.8G   4% /boot
tmpfs        tmpfs    3.7G     0  3.7G   0% /dev/shm

後は/bootがext3ですが、こちらも同じ方法で変換可能です。

fstabの/bootのファイルシステムext4に直します。

# vi /etc/fstab

後はrootパーティションと一緒の手順です。すぐに完了すると思います。

# mount -o remount,ro /boot
# tune4fs -O extents,uninit_bg,dir_index /dev/hda1
# e4fsck -fDC0 /dev/hda1
# reboot
# df -Th
Filesystem    Type  サイズ  使用  残り 使用% マウント位置
/dev/mapper/VolGroup00-LogVol00
              ext4     53G   18G   32G  37% /
/dev/hda1     ext4    3.0G  101M  2.8G   4% /boot
tmpfs        tmpfs    3.7G     0  3.7G   0% /dev/shm

補則

CentOS5でext4を扱うにはext4用のコマンドを利用します。 例えばresize2fsはresize4fsといった感じです。

参考情報

fuserコマンドの説明 www.digitalocean.com

rootパーティションext3からext4に変換 www.fractalizer.ru