this is obsolete doc -- see http://doc.nethence.com/ instead

Migrating and re-building Linux systems (P2V) with cpio 

 

On the source server 

On the source server, check out the mount points and finely select only the needed folders from the root directory, 

mount 

df -h 

cd / 

ls -1 

 

Proceed with the system live backup, 

srvname=DEFINE_SERVER_NAME 

unalias ls 

ls 

folders=`ls -1 | egrep -v '^mnt_srvinstall|^net|^proc|^sys'` 

time find $folders -depth | grep -v lost+found | cpio -o > /mnt_srvinstall/$srvname.rootdir.cpio 

unset folders 

Write down the number of blocks that have been copied. 

 

On the destination server 

Create the virtual machine with same hardware attributes, but disable the network at power on. Start the emtpy VM, load the SystemRescueCD image and enable networking for this run. 

 

Once SystemRescueCD has started on the destination server, eventually access it remotely, 

  net-setup 

  ifconfig 

  passwd root 

You can now connect remotely as root. 

 

Then look for available disks, 

  fdisk -l 

 

Create partitions on the system disk (at least / and a swap partition and eventually a first one for /boot), 

cfdisk /dev/sda 

Create /dev/sda1 for / 

Create /dev/sda2 for swap 

Make /dev/sda2 type swap 

Make /dev/sda1 bootable 

 

Format the partitions and swap, 

  mke2fs -I 128 /dev/sda1 

  mkfs.ext3 /dev/sda2 

  mkswap /dev/sda3 

Note. not using ext4 because of an error when initramfs is trying to load ext, see troubleshooting. 

Note. using inode size 128 otherwise we get a error at grub-install, see troubleshooting. 

 

Mount the filesystems, 

  mount /dev/sda2 /mnt/ 

  mkdir -p /mnt/boot/ 

  mount /dev/sda1 /mnt/boot/ 

 

Restore the archive on the new server, 

  srvname=DEFINE_SERVER_NAME 

mkdir -p /mnt_srvinstall/ 

mount -t nfs4 srvinstall:/var/ftp /mnt_srvinstall/ 

cd /mnt/ 

time cpio -id < /mnt_srvinstall/$srvname.rootdir.cpio 

Check that the number of blocks corresponds. 

 

Create the folders that have been excluded, 

  mkdir -p net/ proc/ sys/ 

 

Check the time on the lost+found folder -- it should be the new one the local file system and not the one from the cpio archive (this has been taken care of at archive's creation stage anyway), 

  find . -type d | grep lost+found 

  ls -ld ./lost+found 

 

Enter the freaking chroot, 

  mount -o bind /proc /mnt/proc 

  mount -o bind /dev /mnt/dev 

  chroot /mnt/ /bin/bash 

 

Reinstall GRUB (fstab and initrd can be fixed afterwards), 

  grub-install /dev/sda 

 

Edit the fstab, 

cd /etc/ 

cp fstab fstab.beforep2v 

vi fstab 

proc /proc proc defaults 0 0 

/dev/sda1 /boot ext2 defaults 1 2 

/dev/sda2 / ext3 defaults 1 1 

/dev/sda3 none swap sw 0 0 

/dev/cdrom /media/cdrom0 udf,iso9660 user,noauto 0 0 

#srvinstall:/var/ftp /mnt_srvinstall nfs4 defaults 0 0 

note. also the cdrom device has been tuned. 

get rid of the old mtab TODO CHECK CREATED, 

  mv mtab mtab.beforep2v 

 

Rebuild the initramfs, 

  mkdir -p ~/.trash/ 

  ls -l /boot/vmlinuz* 

  mv -f /boot/initrd* ~/.trash/ 

  update-initramfs -c -k 2.6.26-2-686 

Note. no need to re-update grub after that. 

 

Fix the (old) GRUB configuration, 

  cd /boot/grub/ 

  cp menu.lst menu.lst.beforep2v 

  vi menu.lst 

  Remove the old kernels from the list 

  Fix the kernel and initrd path (remove /boot) 

  Fix the rootdir path (switch to /dev/sda2) 

for example as a result, 

title Debian GNU/Linux, kernel 2.6.26-2-686 

root (hd0,0) 

kernel /vmlinuz-2.6.26-2-686 root=/dev/sda2 ro 

initrd /initrd.img-2.6.26-2-686 

 

title Debian GNU/Linux, kernel 2.6.26-2-686 (recovery mode) 

root (hd0,0) 

kernel /vmlinuz-2.6.26-2-686 root=/dev/sda2 ro single 

initrd /initrd.img-2.6.26-2-686 

 

Ready to reboot, but make sure you disable network first, 

  umount /mnt_srvinstall/ 

  DISABLE NETWORK UNLESS THE SOURCE SERVER IS OFFLINE ALREADY 

  sync 

  shutdown -r now 

 

Troubleshooting 

An alternate way to re-install grub on the device, 

  grub 

  root (hd0,0) 

  setup (hd0) 

 

If you need to re-install the grub package itself, 

  #apt-get install --reinstall grub 

 

If you get this error message at grub-install stage, 

  The file /boot/grub/stage1 not read correctly. 

==> use inode size 128 on the boot partition. 

Refs. 

http://kb.kristianreese.com/index.php?View=entry&EntryID=113 

https://wiki.archlinux.org/index.php/Talk:GRUB_Legacy 

 

At startup even before grub loads the system, if you get this error, 

  Error 15: File not found 

==> fix menu.lst or the menu at boot time to get rid of /boot 

 

At startup at initramfs stage, if you get this error, 

  mount: mountint /dev/ on /root/dev failed: No such file or directory 

==> make sure the root= argument points to the right partition in menu.lst or the grub menu 

 

At startup at initramfs stage, if you get this error, 

  ext3-fs couldn't mount because of unsupported optional features (240) 

==> As a workaround I used ext3 for the root device instead of ext4. I tried to add rootfstype=ext4 to the boot options but that did not work. 

Ref. https://forums.gentoo.org/viewtopic-p-7259024.html