In a previous blog post (My first Raspberry Pi – day 3) I described how I’d set up my Raspberry Pi to boot from an external hard disc drive. In that setup I created a “spare” partition to allow easy migration to a new operating system. Now, 2½ years later, it’s time to find out just how easy (or not) this is by upgrading the Raspbian OS from “Wheezy” to “Jessie”.
I downloaded the Raspbian “Jessie” image from the raspberrypi.org downloads page and unzipped the file to extract the image file
2016-03-18-raspbian-jessie.img. Then I copied this file to the Raspberry Pi and installed it as follows.
kpartx and then use it to access the two partitions of the image file:
sudo apt-get install kpartx sudo kpartx -a 2016-03-18-raspbian-jessie.img
Create mount points for the two partitions and mount them:
sudo mkdir /mnt/jessie-boot sudo mkdir /mnt/jessie-root sudo mount /dev/mapper/loop0p1 /mnt/jessie-boot sudo mount /dev/mapper/loop0p2 /mnt/jessie-root
Copy the “Jessie” root partition to
/spare. This takes some time as there is over 3 Gigabytes to copy:
sudo rsync -av /mnt/jessie-root/ /spare
Copy the “Jessie” boot partition to
/spare/boot.bak. Note this is not the actual
/boot partition, we don’t want to change that until we’re ready to boot into the new OS.
sudo mkdir /spare/boot.bak sudo rsync -av /mnt/jessie-boot/ /spare/boot.bak
Move the “Jessie” home directory’s contents to the
sudo rsync -av /spare/home/ /home sudo rm -rf /spare/home/pi
/etc/fstab to the “Jessie” partition and edit it:
sudo cp /etc/fstab /spare/etc/ sudo vi /spare/etc/fstab
After editing the
fstab file is as follows:
proc /proc proc defaults 0 0 /dev/mmcblk0p1 /boot vfat defaults,ro 0 2 /dev/sda1 /old_os ext4 defaults,noatime 0 1 /dev/sda2 / ext4 defaults,noatime 0 1 /dev/sda3 none swap sw 0 0 /dev/sda4 /home ext4 defaults,noatime 0 1 tmpfs /tmp tmpfs size=256M 0 0
/dev/sda2, which is currently mounted as
/spare, will be mounted as
/ and that
/dev/sda1, currently mounted as
/, will be mounted as
/old_os. This requires a new mount point to be created:
sudo mkdir /spare/old_os
Since my original Rasbperry Pi setup the network configuration file has changed from
/etc/dhcpcd.conf. As I use a static network address on one of my Pis (because it is my network DHCP server) I needed to edit
/spare/etc/dhcpcd.conf before attempting to reboot.
Edit the new boot command line and set it to use
/dev/sda2 as the root device:
sudo vi /spare/boot.bak/cmdline.txt
Backup the existing
/boot partition, then make it writeable and copy the new boot code to it:
sudo mkdir /boot.bak sudo rsync -av /boot/ /boot.bak sudo mount -o remount,rw /boot sudo rsync -av /spare/boot.bak/ /boot
At this stage it should be possible to boot the Raspberry pi into the new operating system and login as
If I want to go back to the older operating system at any time I should be able to do so by copying
/boot and rebooting.
All that remains to do is to add my normal user account
jim and then install and configure the current versions of all the software I was running —
nfs-kernel-server, etc. Being able to view the old configuration files in
/old_os/etc is a great help when doing this.