This is relatively straightforward if you follow the steps carefully. It is recommended you have a good backup and a suitable rescue disk handy just in case.
The "normal" way of running an LVM root file system is to have a single non-LVM partition called /boot which contains the kernel and initial RAM disk needed to start the system. The system I upgraded was as follows:
# df Filesystem 1k-blocks Used Available Use% Mounted on /dev/rootvg/root 253871 93384 147380 39% / /dev/hda1 17534 12944 3685 78% /boot /dev/rootvg/home 4128448 4568 3914168 0% /home /dev/rootvg/usr 1032088 332716 646944 34% /usr /dev/rootvg/var 253871 31760 209004 13% /var
# ls /boot System.map lost+found vmlinux-2.2.16lvm map module-info boot.0300 boot.b os2_d.b chain.b initrd.gz # tail /etc/lilo.conf image=/boot/vmlinux-2.2.16lvm label=lvm08 read-only root=/dev/rootvg/root initrd=/boot/initrd.gz append="ramdisk_size=8192"
Build LVM kernel and modules
Build the LVM user tools
Follow the steps in Section 6.2 to build and install the user tools for LVM.
Install the new tools. Once you have done this you cannot do any LVM manipulation as they are not compatible with the kernel you are currently running.
Rename the existing initrd.gz
This is so it doesn't get overwritten by the new one
# mv /boot/initrd.gz /boot/initrd08.gz
Make the existing boot entry point to the renamed file. You will need to reboot using this if something goes wrong in the next reboot. The changed entry will look something like this:
image=/boot/vmlinux-2.2.16lvm label=lvm08 read-only root=/dev/rootvg/root initrd=/boot/initrd08.gz append="ramdisk_size=8192"
Run lvmcreate_initrd to create a new initial RAM disk
# lvmcreate_initrd 2.4.9
Add a new entry into /etc/lilo.conf
This new entry is to boot the new kernel with its new initrd.
image=/boot/vmlinux-2.4.9lvm label=lvm10 read-only root=/dev/rootvg/root initrd=/boot/initrd.gz append="ramdisk_size=8192"
This will install the new boot block
When you get the LILO prompt select the new entry name (in this example lvm10) and your system should boot into Linux using the new LVM version.
If the new kernel does not boot, then simply boot the old one and try to fix the problem. It may be that the new kernel does not have all the correct device drivers built into it, or that they are not available in the initrd. Remember that all device drivers (apart from LVM) needed to access the root device should be compiled into the kernel and not as modules.
If you need to do any LVM manipulation when booted back into the old version, then simply recompile the old tools and install them with
# make install