ClusterCTRL: How do I USBBOOT a Compute Module and use eMMC as local storage/swap?
A Compute Module will boot as a USB device if either USBBOOT is enabled or it can't find bootcode.txt in the first FAT partition on the eMMC.
Replace X in the following steps with X of the pX device you're configuring (for X=1 for p1, X=5 for p5, etc).
First setup the filesystem and Compute Module to boot as a USB Device.
Once USBBOOT is working power on the Compute Module "clusterctrl on pX" and wait for it to boot - (until you can "ping pX.local", etc).
On the controller you will now need to disable USBBOOT.
clusterctrl usbboot off pX
To permanently allow access to the eMMC as local storage you will need to save the power on state (see the USBBOOT instructions on how to do this).
Log into the Compute Module node (via either "ssh pi@pX.local" or "screen /dev/ttypiX").
You can now access the eMMC as /dev/mmcblk0 which can be partitioned with fdisk/etc.
The existing partitions can be viewed with fdisk
sudo fdisk -l /dev/mmcblk0
To ensure the Compute Module boots as a USB Device (and not from the eMMC) you will need to ensure the first FAT partition does not contain bootcode.bin file (either by removing the file or not having a FAT partition at all).
For example to use it as a 1GB swap partition and the rest as a /data partition you could do the following.
Using fdisk remove the existing partitions (this will remove all existing data so backup first).
sudo fdisk /dev/mmcblk0
Press "p" and return to see the exising partitions.
For each existing partition press "d" and return, enter the partition number or press enter to delete the last one each time.
Once the existing partitions are removed you can add the new partitions.
Type "n" and return, use "p" for a primary partition, use parition number 1, it will start with the first available sector so you can press enter, for the size enter "+1G". To set the type to "Linux Swap" press "t" return, then type "82" (Linux Swap) and press return.
Then add the data partition, again type "n" and return, use "p" for a primary partition, use parition number 2, go with the default first and end sectors by pressing enter twice.
You can then use "p" and enter to see the partitions.
If you're happy use "w" and return to write the changes and exit or "q" to quit without changing the partition table.
Reload the partition table
sudo partprobe
Setup swap and create the filesystem
sudo mkswap /dev/mmcblk0p1
This will show you the UUID for the swap partition, keep this for later.
sudo mke2fs -j /dev/mmcblk0p2
Again this will show the UUID you will need later.
Create the mount point for the filesystem, here I'm using /data
sudo mkdir /data
Edit /etc/fstab to setup using both swap and the new filesystem
sudo nano /etc/fstab
Append new lines for both swap and data partitions (replacing with your UUID from above).
UUID=029577ad-b1d2-43ad-b1f9-348e37969049 swap swap defaults 0 0
UUID=e5dd1581-8baf-43d7-b49b-a24cb93da970 /data ext4 defaults 0 0
Write the file and exit nano.
Check the swap partition is setup OK in /etc/fstab
sudo swapon -a
You should now see the added swap space if you run "free".
Mount the filesystem.
sudo mount -a
You should see the mounted filesystem by running "df -h".
After rebooting the Compute Module it will still boot via USBBOOT and use the new local swap and /data filesystem.
Tags: clusterctrl, cm, compute module, emmc, local, swap, triple, usbboot