CentOS7.x パーティションの xfs から ext4 へ手動で移行 で、手こずったので、メモしておきます。
おんちゃんが、xfs から ext4 へ移行する理由は、どうやら、
#shutdown -rF now で、 xfs だと、ファイルチェックが為されないためです。
xfs でもファイルチェックが実行されれば、わざわざ ext4 へ移行する必要はないのですが。
以下の作業の前に、移行するシステムのクローンを作って置くことをお勧めします。
先ず、initramfs に ext4 が組み込まれているかチェックします。
#lsinitrd /boot/initramfs-$(uname -r).img | grep ext4
上記結果で、 ext4 関連の表示が出れば、 ext4 が組み込まれています。
表示が無ければ、 initramfs へ ext4 を組み込みます。
多分、組み込まれていないと思います。
initramfs に関しては、下記ページの
"5.5. 初期 RAM ファイルシステムイメージの確認" が参考になります。
https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/7/html/kernel_administration_guide/ch-manually_upgrading_the_kernel
また、dracut に関しては、下記ページの see man page dracut.conf(5) のリンク先に、
/etc/dracut.conf へのカスタマイズを参考にします。
http://people.redhat.com/harald/dracut-rhel6.html#add_kernel_modules
If you need a special kernel module in the initramfs, which is not automatically picked up by dracut, you have the use the --add-drivers
option on the command line or the drivers vaiable in the /etc/dracut.conf
or /etc/dracut.conf.d/myconf.conf
configuration file (see man page dracut.conf(5)):
1.1 initramfs のバックアップ
#cp /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.bak
1.2 /etc/dracut.conf の変更
#filesystems+=""
↓
filesystems+="ext4"
1.3 initramfs の再作成
#dracut -f
1.4 新しいinitramfs に ext4,xfs が組み込まれたか確認
#lsinitrd /boot/initramfs-$(uname -r).img | grep ext4
#lsinitrd /boot/initramfs-$(uname -r).img | grep xfs
ext4 と xfs 関連ファイルが表示されれば、OK です。
1.5 念のためにシステムをリブートして、問題なければOK です。
2. これからの手順
1) CentOS7 Live USB を用意
2) CentOS7 Live USB で起動して、移転パーティションのバックアップを tar で取る。
3) 移転パーティション を、 mkfs.ext4 でフォーマット
4) ext4 でフォーマットされた、移転パーティション へ、2) でバックアップしたファイルを、
tar で元に戻す。
5) /etc/fstab を変更して、対象のパーティションのファイル形式を、
xfs → ext4 に変更
6) Selinux が有効であれば、/etc/selinux/config を変更して permissive モードにする。
/etc/selinux/config
SELINUX=permissive
7) Live USB を終了して、本来のシステムで、起動できるか試してみる。
8) 正常に起動して、ログイン出来ればOK です。
9) Selinux が有効であれば、再ラベルを実行
#restorecon -vv -RF /
10) 、/etc/selinux/config を元に戻す。
/etc/selinux/config
SELINUX=enforcing
11) システムを再起動して、ログイン出来れば完了です。
試しに /usr (/dev/cl/usr) パーティションだけ、 ext4 に移行して確認してみます。
initramfs の ext4 が組み込まれていなければ、システムの起動途中でエラーになるので、
確認できます。
/usr は、問題なく移行出来ると思います。
次に、/var(/dev/cl/var) パーティションを、 ext4 に移行してみます。
ここで、残念ながらトラブルです。
named-chroot が起動できないようです。
#sysytemctl status named-chroot で確認してみましたが。
/etc/named.conf のパーミッションエラー等がでているみたいです。
時間がかかりましたが、問題が、判明しました。
/var/named drwxrwx--T root:floppy
で、group:owner が root:named -> root:floppy
になっていることが原因んで、/var/named 以下のディレクトリとファイルも全て、
root:floppy に設定されていました。
何故そうなったかは、まだ分かりませんが、
おんちゃんは、仕方がないので、クローンの CentOS7 の /var/named 下の
でバックアップ、ファイルを、LiveUSB からでなくて、実機マシン上から tar でバックアップを取って、
それを、移行マシンの方へ持ってきました。
もちろん、移行マシン の /var/named も 下記に改めました。
/var/named drwxrwx--T root:named
移行前の、移行マシン上でのバックアップ
/var(/dev/cl/var) 移行後の、移行マシン上での復元
結論としては、移行の実機マシン上で、 /var/named 下だけを、別途バックを取って、
LiveUSB 上で、 /dev/cl/var のバックアップを取る2段階のバックアップが必要のようです。
他の方法は、 /var/named 以下のディレクトリー、ファイルで、 root:floppy 全てを root:named にshellプログラムを作って訂正するか、
思い切って、 named,named-chroot パッケージを削除、インストールするかです。
その後、この原因が判明しました。
CentOS7 LiveUSB で起動して、var のバックアップを取る際に、
/dev/cl/var を /media/var にマウントしたのがいけなかったようです。
/mnt 下にマウントすれば(/mnt/var) にすれば、問題無かったようです。(追記 2019.10.26)
この後は、opt(/dev/cl/opt) 、 tmp(/dev/cl/tmp) を同じように移行します。
この2つは、問題なく移行できると思います。
その後、/home (/dev/cl/home) を 移行して、
最後に、 / (/dev/cl/root) を移行します。
/boot は、自信がないのと、ファイルチェックしなくても良いと思うので、そのまま xfs にしておきます。
このあと、 shutdown -rF now で、起動時のファイルチェックを有効にするには、/etc/fstab の pass 欄に、 1,2 をするみたいです、 0 だとファイルチェック が無視されます。
例)
/dev/mapper/cl-root / ext4 defaults,noatime 0 1
/dev/mapper/cl-home /home ext4 defaults,noatime 0 2
/dev/mapper/cl-var /var ext4 defaults,noatime 0 2
...
上記設定をして、
#shutdown -rF now
で再起動させて、実際に、ファイルチェックがされるか確認してみます。
おっと、 /dev/cl/opt がなぜか、 fsck のバージョンが違うといって怒られているようです。
/dev/cl/opt は、Ubuntu MATE 18.04.3 のインストール USB で、mkfs.ext4 を
実行したので、それが原因のようです。必ず CentOS7 Live USB で行う事みたいです。
欲を出して、 /boot (/dev/sda1) も xfs -> ext4 に変換してためしてみたら、起動できなくなったので、元にもどすにに手間取ったので、その方法をメモします。
CentOS7 インストールUSB のレスキューモードに入っていって、システムのHDD に chroot して、
grub2-install を行ってやっと、元に戻りました。
#chroot /mnt/sysimages
#/usr/sbin/grub2-install --target=i386-pc /dev/sda
http://pyopyopyo.hatenablog.com/entry/20160604/p1