//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
====== Copying ======
Now you have to copy everything from the SD card to the disk. ([[https://wiki.archlinux.org/index.php/Full_system_backup_with_rsync#With_a_single_command|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.
====== Rebooting ======
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''.