Virtualization, especially with nice virtualizers like VirtualBox and KVM, makes it easy to run multiple guest operating systems and not have to hassle with rebooting, like you do with a multi-boot setup. But I still favor multi-booting for testing new Linux distributions. There are fewer hassles with networking and file-sharing, and when there are problems I don’t have to figure out if it’s something weird with the VM.
The common wisdom is to have a shared home directory in a multiboot setup, but this has its own set of potential problems because it mixes data files and configuration files. So when you’re trying out different distributions, your desktop settings may not translate gracefully across all of them. So what’s the answer?
The answer is simple: create a separate data partition, and let every distro that you install have its own unique ~/home for your dotfiles. You’ll jump through a couple of extra hoops to make your data directory accessible across all of your installed Linuxes, but it’s no big deal, and it’s easier than trying to make your dotfiles work across multiple distros and desktop versions.
Your data directory has to go somewhere other than ~/home. I put it on its own partition or on a separate hard drive. You could even use a nice USB stick.
You must start from already having at least one Linux installed. In this example I will use the partition (block device) /dev/sda5 for data storage. GParted and Parted are very nice for graphical partitioning and creating filesystems.
Once the partition is created and formatted with a filesystem, mount it temporarily in your own home directory. To do this first create a mountpoint:
[email protected]:~$ mkdir mydata
Then you’ll need rootly powers to mount your new partition there. Technically you’re mounting a filesystem; whatever you call it this is how you do it:
[email protected]:~$ su
xena:/home/carla# mount /dev/sda5 /home/carla/mydata
Ubuntu’s sudo command works too, for this and all the root commands in this article:
[email protected]:~$ sudo mount /dev/sda5 /home/carla/mydata
Now you need to give yourself ownership of this directory, since root owns it:
xena:/home/carla# chown -R carla:carla /home/carla/mydata
Now you should have full read/write access to this directory as your ordinary unprivileged user, and should be able to copy files to it.
The final step, since this is going to function as your home data files directory, is to have it mount automatically at boot. We’ll do this by editing good old /etc/fstab. Add a line like this to /etc/fstab, using your own filenames and filesystem type:
/dev/sda5 /home/carla/mydata ext3 user,defaults 0 0
I prefer to use the block device UUIDs since those are unique and can’t be messed up by hotplug or udev or anything else, especially for a USB stick. Find your UUID with the vol_id command, which requires rootly powers:
xena:/home/carla# vol_id --uuid /dev/sda2
Then use the UUID in place of /dev/sda5, or whatever your block device is, like this:
UUID=40295806-448b-4fdf-9ce8-5f5fc7984c9b /home/carla/mydata ext3 user,defaults 0 0
Now every time you boot up your new data directory will be there all ready to use.
Now all you need to do is create the same mountpoint and use the same line in /etc/fstab in every Linux that you install on your multiboot machine, and your data directory will appear in your home directory in every one of them. Your dotfiles will be unique to each Linux, so you won’t have any configuration conflicts.
Tips: use the mount command with no options to see your mounted filesystems and what block devices they are on. umount manually unmounts a filesystem. If you get a “device busy” error with umount it means something is reading the filesystem, like your file manager. Close any documents or change your file manager to a different directory. lsof mydata, or whatever your directory name, lists any open files.