Disclaimer: what follows is true for LIME and LIME2 hardware.

Installing the system on a SATA drive is not straightforward, mainly for one reason : the LIME(2) cannot boot from the SATA port. To make it work, you need to leave a minimal system on the SD card (the /boot folder) so the bootloader can find a kernel to boot, then the kernel will seek the rest of the system on the SATA drive.

Let's start with a working cube, with the system running from the SD card and a SATA drive plugged. You are logged in as root on your cube.

Partitionning and formatting

First, you have to prepare the drive. You will need at least one partition for the system (the root or / partition), and possibly others for folders containing user data, such as /home and /var. Let's keep it simple for now, with everything (except /boot of course) on the same partition.

to create a partition on your disk, run cfdisk /dev/sda. The tool should be self explanatory - you should remove any existing partition, then create a primary partition with the number 1. When asking for the start and end of the partition, just use the default values and the partition will fill the whole disk.

Now, you should have a file called /dev/sda1

To format your new partition, just run mkfs.ext4 /dev/sda1

Changing the boot configuration

When booting, your cube needs to know where to find the root partition. To do so, edit the file /etc/default/flash-kernel

in this file, replace root=/dev/mmcblk0p1 (“the root partition is on the SD card”) with root=/dev/sda1 (“the root partition is on the drive”).

Now, run flash-kernel. This will regenerate the /boot/boot.scr file. You may open this file and check if the line root=/dev/sda1 is in there.

You will also need to modify /etc/fstab to match the desired configuration:

/dev/mmcblk0p1 /boot ext4       defaults        0       1 # /boot on the SD card
/dev/sda1 / ext4                defaults        0       1 # root on SATA drive

Stop services

You should stop this service before to proceed the copy, else there is a risk your mysql database to be corrupted.

root@yunohost:/media# service nginx stop
root@yunohost:/media# service mysql stop
root@yunohost:/media# service postfix stop
root@yunohost:/media# service rmilter stop
root@yunohost:/media# service dovecot stop


Now you have to copy everything from the SD card to the disk. (source)

mkdir -p /tmp/sata
mount /dev/sda1 /tmp/sata
rsync -aAXv --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} / /tmp/sata

Now, your SATA drive contains a complete copy of your system, but one important thing is missing: your kernel is in /tmp/sata/boot, but this folder should actually mount /dev/mmcblk0p1, which already contains the system you are currently running.

cd /tmp/sata
mv boot boot.old
mkdir boot
mount /dev/mmcblk0p1 boot
rsync -av boot.old/ boot/

Now, the /boot of the new system exists alongside the / of the old system.


Now, cross your fingers and reboot your cube. Or the other way around if it's too hard to type.

Can you log into your cube ? Congratulations ! It worked !

Cleaning up

Now, your old system is cluttering the /boot folder. To clean it up, you can remove everything in this folder, and reuse the /boot.old copy we did earlier.

cd /boot
rm -rf * # /!\ proceed carefully /!\
mv /boot.old/* .
rmdir /boot.old

Everything should be fine now !

An alternative approach: remove everything from /boot, then run update-initramfs -u. This will regenerate everything necessary inside /boot.

  • howto/install_sata.txt
  • Last modified: 2018/12/08 22:28
  • (external edit)