Google cloud instances run on top of KVM hypervisor. In newer KVM versions, such as the one used in Google Cloud, virtio-scsi is used instead of an older virtio-blk storage backend. The virtio-scsi disk devices looks like: [code language="bash"] virtio-scsi vendor='Google' product='PersistentDisk' rev='1' type=0 removable=0 [/code] In RHEL6, a module is added in 2.6.32-244.el6 kernel. But virtio-scsi is not shipped in RHEL5 or Centos5. [code language="bash"] * Tue Feb 28 2012 Aristeu Rozanski <arozansk@redhat.com> [2.6.32-244.el6] - [virt] virtio-scsi: add power management (Paolo Bonzini) [782027] - [virt] virtio-scsi: add driver (Paolo Bonzini) [782027] [/code] Legacy Centos5/RHEL5 servers moved using Lift and Shift to Google Cloud will fail to boot with an error similar to the following: [code language="bash"] Unable to access resume device (LABEL=ROOT) Creating root device. Mounting root filesystem. mount: could not find filesystem '/dev/root' Setting up other filesystems. Setting up new root fs setuproot: Kernel panic - not syncing: Attempted to kill init! moving /dev failed: No such file [/code] Google has graciously backported the kernel code for 2.6.18* kernels. To fix the issue, we need to build and use virtio_scsi driver from backported code.
Build kernel module
Get the backported kernel code to a RHEL5/Centos5 system. [code language="bash"] git clone https://github.com/GoogleCloudPlatform/compute-centos5-drivers.git [/code] Get the src package for the kernel version (this might need .redhat.com access) The following are other locations: https://ftp.redhat.com/pub/redhat/linux/enterprise/5Server/en/os/SRPMS/ https://vault.centos.org/5.5/centosplus/x86_64/RPMS/ Install the package. [code language="bash"] rpm -ivh kernel-2.6.18-194.el5.src.rpm [/code] Build the kernel source code. [code language="bash"] cd /usr/src/redhat/SPECS rpmbuild -bp --target=x86_64 kernel.spec cd /usr/src/redhat/BUILD/kernel-2.6.18/linux-2.6.18.x86_64 make oldconfig make prepare make scripts make modules [/code] Build the virtio_scsi module. [code language="bash"] make M=/root/compute-centos5-drivers-master/third_party/virtio_scsi [/code]Install module in the source system
The easiest way to install the module is to upload the module to Google Cloud Storage and use it to build initrd in the source system. Then the source system could be synced to Google Cloud. Create a new bucket and upload the module: [code language="bash"] # gsutil cp 2.6.18-194.el5-virtio_scsi.ko gs://rhel5test/ [/code] In the source system, download and copy the module to the relevant kernel module path: [code language="bash"] wget https://storage.googleapis.com/rhel5test/`uname -r`-virtio_scsi.ko cp `uname -r`-virtio_scsi.ko /lib/modules/`uname -r`/extra/virtio_scsi.ko [/code] Run depmod to generate modules.dep and map files: [code language="bash"] depmod -a [/code] Create initrd file using the virtio modules: [code language="bash"] mkinitrd -f --with=virtio_pci --with=virtio_scsi --preload virtio --preload scsi_mod /boot/initrd-gcp-$(uname -r).img $(uname -r) [/code] Update grub.conf with new initrd. For example, [code language="bash"] title GCP Red Hat Enterprise Linux Server (2.6.18-194.el5) root (hd0,0) kernel /vmlinuz-2.6.18-194.el5 ro root=UUID=eff36034-b712-468f-8e6e-0816973a866d rhgb edd=off quiet console=ttyS0 initrd /initrd-gcp-2.6.18-194.el5.img [/code] Update the default parameter to boot from the new kernel: [code language="bash"] default=1 [/code] Once the initrd is built and the grub configuration is made, the system can be synced to Google Cloud. Both RHEL5 and Centos5 have reached End of Life. It is strongly suggested to move them to later operating system releases. The above workaround is a good method to migrate the systems to the cloud until the application is refactored to run in later operating system releases.Share this
Previous story
← What to expect at FOSDEM 2019
Next story
How to creates Kubernetes jobs with Python →
You May Also Like
These Related Stories
Build an 11gR2 RAC Cluster in VirtualBox in 1 Hour Using OVM Templates
Build an 11gR2 RAC Cluster in VirtualBox in 1 Hour Using OVM Templates
Dec 21, 2012
19
min read
Build an EBS 12.1.3 Sandbox in VirtualBox in 1 Hour
Build an EBS 12.1.3 Sandbox in VirtualBox in 1 Hour
Nov 29, 2012
34
min read
Install EBS 12.2.2 Vision in Virtualbox from OVM templates
Install EBS 12.2.2 Vision in Virtualbox from OVM templates
Dec 20, 2013
40
min read
No Comments Yet
Let us know what you think