028 to 042 kernel upgrade
This article describes a way to upgrade your old OpenVZ system with RHEL5-based (028stabNNN kernel) to RHEL6-based (042stabNNN) kernel, and convert /vz from ext3 to ext4, while keeping RHEL/CentOS 5 as a host OS.
Assumptions:
- systems is CentOS (RHEL) 5.x
- vzkernel is 028stabXXX, i.e. RHEL5-based
- /vz uses ext3
End result should be:
- Same CentOS 5 system
- vzkernel is 042stabXXX
- /vz uses ext4
Contents
Update your system
yum update
Install required software:
yum install e4fsprogs.x86_64
Add rhel6 kernel repos
Disable rhel5 and enable rhel6 OpenVZ kernel repository.
In other words, change /etc/yum.repos.d/openvz.repo
to look like this (changes required are in bold):
[openvz-kernel-rhel6] name=OpenVZ RHEL6-based stable kernels #baseurl=http://download.openvz.org/kernel/branches/rhel6-2.6.32/current/ mirrorlist=http://download.openvz.org/kernel/mirrors-rhel6-2.6.32 enabled=1 gpgcheck=1 gpgkey=http://download.openvz.org/RPM-GPG-Key-OpenVZ #exclude=vzkernel-firmware
[openvz-kernel-rhel5] name=OpenVZ RHEL5-based kernel #baseurl=http://download.openvz.org/kernel/branches/rhel5-2.6.18/current/ mirrorlist=http://download.openvz.org/kernel/mirrors-rhel5-2.6.18 enabled=0 gpgcheck=1 gpgkey=http://download.openvz.org/RPM-GPG-Key-OpenVZ
Install new OpenVZ kernel
# yum install vzkernel.x86_64
Check bootloader configuration
Make sure 042stab kernel is there and will boot by default:
cat /boot/grub/grub.conf timeout 5 default 0 title OpenVZ (2.6.32-042stab081.8) root (hd0,1) kernel /vmlinuz-2.6.32-042stab081.8 ro root=/dev/sda3 vga=0x317 selinux=0 sysfs.deprecated=1 initrd /initrd-2.6.32-042stab081.8.img title OpenVZ (2.6.18-348.16.1.el5.028stab108.1) root (hd0,1) kernel /vmlinuz-2.6.18-348.16.1.el5.028stab108.1 ro root=/dev/sda3 vga=0x317 selinux=0 initrd /initrd-2.6.18-348.16.1.el5.028stab108.1.img ....
Reboot into new kernel
# reboot
and make sure the system is up and running.
== For linux swraid (mdadm) users with bitmap enabled and low IO write speed, you might need to redo bitmap cat /proc/mdstat , if chunk size is small , try (example for internal bitmap) : mdadm --grow --bitmap=none /dev/md2 mdadm --grow --bitmap=internal --bitmap-chunk=16384 /dev/md2
Convert /vz to ext4
If your /vz is a separate file system, you need to stop all containers and umount it first:
for ve in $(vzlist -1); do vzctl stop $ve; done umount /vz
Alternatively, boot the node from a live-CD (such as CentOS 6 live CD).
Check file system:
# fsck.ext3 -f /dev/sdxY
Turn on ext4 features:
# tune4fs -O extents,uninit_bg,dir_index /dev/sdxY
Check the new file system again, as ext4 this time:
# fsck.ext4 -fpD /dev/sdxY
If you have booted from the live CD, you can do the same for root filesystem.
If you have booted from the live CD, do this:
- mount your ROOT and BOOT partitions:
# mkdir /tmp/root # mount /dev/sdaB /tmp/root # mount /dev/sdaC /tmp/root/boot
- chroot into it:
# chroot /tmp/root
Finally, edit /etc/fstab
, replacing ext3
with ext4
for /vz
(and /
if you converted it as well).
# vi /etc/fstab
Create new initrd with proper modules
# KV=042stab083.2 # mkinitrd -v -f --with=ext4 --without-usb /boot/initrd-2.6.32-${KV}.img 2.6.32-${KV}
Notes:
- you have to add ext4 explicitly
- in RHEL6 kernels USB modules are built-in
Reboot and enjoy
End result is:
# cat /etc/issue CentOS release 5.10 (Final) Kernel \r on an \m # uname -a Linux CentOS-58-64-minimal 2.6.32-042stab081.8 #1 SMP Mon Sep 30 16:52:24 MSK 2013 x86_64 x86_64 x86_64 GNU/Linux
# df -Th Filesystem Type Size Used Avail Use% Mounted on /dev/sda3 ext4 259G 1.5G 244G 1% / tmpfs tmpfs 16G 0 16G 0% /dev/shm /dev/sda2 ext3 496M 46M 425M 10% /boot /dev/sdb1 ext4 1.8T 196M 1.7T 1% /vz
Next steps
You can now install ploop and enjoy all its benefits.
Also, it makes sense to convert your containers to VSwap.
See also
Acknowledgements
This article was originally written by Denis Hohryakov.