028 to 042 kernel upgrade

From OpenVZ Virtuozzo Containers Wiki
Revision as of 04:03, 21 November 2013 by Kir (talk | contribs) (Create new initrd with proper modules: simplify mkinitrd command)
Jump to: navigation, search

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

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.

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 -fD /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.