Introducing: Omega2

Using USB Storage as Rootfs (extroot)

Last edited by I like Linux, 2016-05-31 15:24:23

This tutorial is on how to use the USB storage device as the rootfs. If you simply want to use the USB storage device to store files (i.e., you won't be installing anything to it), then read Tutorials/Using-USB-Storage.

The Omega comes with 16MB of flash storage. While this is enough for the majority of hardware-related tasks, having extra storage space is always better. Even though you can plug in external USB storage devices to the Omega, but because application packages are typically designed to be installed in the root filesystem (rootfs), those of you who want to install larger opkg packages would still be limited by the 16MB flash size.

Luckily, with extroot, you can mount your USB storage device to the rootfs. There are two approaches to this:

  • With pivot-overlay, you can mount your USB storage device to /overlay, which is the writable part of your filesystem that's merged with /rom (the read-only part of your filesystem) to generate /.
  • With pivot-root, you can mount your USB storage device to both /overlay and /rom, which essentially allows you to replace Omega's on-board flash with your USB storage device.

extroot with pivot-overlay

Pivot-overlay is the recommended extroot implementation because it is easier to set up and future firmware upgrade will still be written to Omega's flash (instead of your USB storage device).

Step 1. Prerequisites

Using extroot requires the following packages, all of them should already be installed on the default Omega firmware. But just in case you are using your own firmware, here they are again:

  • block-mount
  • kmod-fs-[filesystem of choice], typically kmod-fs-ext4
  • kmod-usb-storage-extras

Install the packages with opkg:

opkg update
opkg install block-mount kmod-fs-ext4 kmod-usb-storage-extras

Step 1.1 (Important to avoid errors)

You also need to have a USB storage device formatted to ext4 (important to avoid errors). You can learn how to format a USB drive following the steps outlined in the How to format a USB drive to ext4 addendum section below.

Step 2. Mounting the USB Storage Device

Next, plug in your USB storage device. If your device is detected correctly by the Omega, it will show up at a device under the /dev directory, usually /dev/sda1.

Then, create a mount point for your device if you don't already have one with the following command:

mkdir /mnt/sda1

Finally, mount the device:

mount /dev/sda1 /mnt/sda1

Your USB storage device should now be accessible at /mnt/sda1.

Step 3. Duplicating the /overlay Directory

Now, we are ready to move the /overlay directory into the USB storage device.

mount /dev/sda1 /mnt ; tar -C /overlay -cvf - . | tar -C /mnt -xf - ; umount /mnt

Step 4. Setting up the /overlay Directory to Automount on Startup

First, we are going to generate the fstab template:

block detect > /etc/config/fstab

Then, we are going to edit the /etc/config/fstab file, which we have just created, to enable auto-mounting the /overlay directory. Look for the line

option  target  '/mnt/sda1'

and change it to:

option target '/overlay'

Then, look for the line:

option  enabled '0'

and change it to

option  enabled '1'

Save the file and restart the Omega:

reboot

And voilà! Your Omega should automatically mount the /overlay directory. From this point on, all changes to your filesystem will be made on your USB storage device. Please remember that if you startup your Omega with out plugging in the USB storage device, some settings may be different because all the settings will be saved on your USB device.

exroot with pivot-root

Pivot-root is the extroot implementation that completely replaces the flash storage on the Omega with your USB storage device. Using pivot-root method means that all fugure firmware upgrade (unless it is done by uboot) will be done to your USB storage device.

Step 1. Prerequisites

Using extroot requires the following packages, all of them should already be installed on the default Omega firmware. But just in case you are using your own firmware, here they are again:

  • block-mount
  • kmod-fs-[filesystem of choice], typically kmod-fs-ext4
  • kmod-usb-storage-extras

Install the packages with opkg:

opkg update
opkg install block-mount kmod-fs-ext4 kmod-usb-storage-extras

You also need to have a USB storage device formatted to ext4 (or another filesystem you chose above).

Step 2. Mounting the USB Storage Device

Next, plug in your USB storage device. If your device is detected correctly by the Omega, it will show up at a device under the /dev directory, usually /dev/sda1.

Then, create a mount point for your device if you don't already have one with the following command:

mkdir /mnt/sda1

Finally, mount the device:

mount /dev/sda1 /mnt/sda1

Your USB storage device should now be accessible at /mnt/sda1.

Step 3. Duplicating your rootfs

Next, we must make a complete copy of the of the root filesystem to the external rootfs device. To do this, we will first create a temporary directory that acts as the mount point for the current / directory:

mkdir -p /tmp/cproot

Then, we will create a bind mount of / at /tmp/cproot:

mount --bind / /tmp/cproot

Now, we will make a complete copy of the rootfs to your USB storage device:

tar -C /tmp/cproot -cvf - . | tar -C /mnt/sda1 -xf -

Finally, we will unmount the bind mount:

umount /tmp/cproot

Great! Now you have created a complete copy of your current rootfs on your USB storage device!

Step 4. Configure Omega to Automount USB Storage Device on Boot

We will now configure the Omega to automatically mount your USB storage device to / on startup. This essentially means that we will be using the firmware on Omega's own flash storage as a "bootloader" that run the filesystem on your USB storage as rootfs. To do this, we will open up /etc/config/fstab, and add the following lines to it:

config mount
    option target        /
    option device        /dev/sda1
    option fstype        ext4
    option options       rw,sync
    option enabled       1
    option enabled_fsck  0

Save the file and reboot:

reboot

And voilà! Your Omega should automatically mount your USB storage device as its rootfs. From this point on, all changes to your filesystem, including firmware upgrades, will be made on your USB storage device. If you change your mind and want to revert back to running the firmware off Omega's flash storage, simply unplug the USB storage and reboot the Omega.

Happy hacking!

Addendum Procedures

How to format a USB drive to ext4

In this short additional tutorial you'll learn how to format a USB drive to ext4 so it can be used as rootfs or additional storage. This is handly as USB drives typically arrive pre-formatted with fat32!

Run these commands on the Omega's terminal:

opkg update
opkg install kmod-usb-storage-extras e2fsprogs kmod-fs-ext4

This installs the required tools, next plug in your USB drive.

Next we need to format the USB drive with ext4, typically the drive is mounded as "sda1" (change the value if required):

mkfs.ext4 /dev/sda1

Now you can mount the USB drive and use it for either general storage, extroot with pivot-overlay or exroot with pivot-root.