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. (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
.