Armbian provides a utility called *nand-sata-install* to transfer OS from SD card to other device such as USB, SATA, or NVMe. The utility can be invoke directly, ``` sudo nand-sata-install ``` or the recommended way, through *armbian-config* ``` sudo armbian-config ``` Helios64 support following boot mode | Boot Device | System / Rootfs Device | |-------------|------------------------| | eMMC | eMMC
SATA Drive
USB Drive| Boot device contains bootloader and other boot files such as kernel and DTB. It will be mounted under **/boot/** if it reside on separate device. !!! Notes *nand-sata-install* requires the target device already partitioned! If you have installed and configured OMV, please read [Existing OS Has OMV Installed](#existing-os-has-omv-installed) section before transferring the OS. ## System on eMMC ***Step 1 - Run Armbian Configuration Utility*** ![emmc step 0](/helios64/install/img/transfer/emmc_00_config_main.png) ***Step 2 - Select Install Menu*** ![emmc step 1](/helios64/install/img/transfer/emmc_01_config_system.png) ***Step 3 - Select Boot from eMMC - system on eMMC*** ![emmc step 2](/helios64/install/img/transfer/emmc_02_install_main.png) ***Step 4 - Confirm that the process will erase data on eMMC*** ![emmc step 3](/helios64/install/img/transfer/emmc_03_install_erase_confirm.png) ***Step 5 - Select filesystem type for eMMC*** ![emmc step 4](/helios64/install/img/transfer/emmc_04_install_fstype.png) ***Step 6 - Wait for transfer process completed*** ![emmc step 5](/helios64/install/img/transfer/emmc_05_install_transfer.png) ***Step 7 - Power Off Helios64 if you don't have OMV Installed*** **DO NOT** power off if you have installed OMV. There are several OMV files & folders not transferred by *nand-sata-install*. Please refer to [After running *nand-sata-install*](#existing-os-has-omv-installed) section before continue to next step. ![emmc step 6](/helios64/install/img/transfer/emmc_06_install_poweroff.png) ***Step 8 - Remove Micro SD card and power on the system*** ***Step 9 - Verify if the system transferred correctly*** ``` lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 111.8G 0 disk └─sda1 8:1 0 111.8G 0 part sdb 8:16 0 111.8G 0 disk └─sdb1 8:17 0 111.8G 0 part sdc 8:32 1 28.7G 0 disk └─sdc1 8:33 1 28.4G 0 part mmcblk1 179:0 0 14.6G 0 disk └─mmcblk1p1 179:1 0 14.4G 0 part / mmcblk1boot0 179:32 0 4M 1 disk mmcblk1boot1 179:64 0 4M 1 disk zram0 251:0 0 50M 0 disk /var/log zram1 251:1 0 1.9G 0 disk [SWAP] ``` You should see **mmcblk1p1** has MOUNTPOINT **/** ## System on USB or SATA (Including M.2 SATA) List available block devices and determine the type by running ``` lsblk ls -l /sys/block/ ``` Example output: ``` dev@helios64:~# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 111.8G 0 disk └─sda1 8:1 0 111.8G 0 part sdb 8:16 0 111.8G 0 disk └─sdb1 8:17 0 111.8G 0 part sdc 8:32 1 28.7G 0 disk └─sdc1 8:33 1 28.4G 0 part mmcblk0 179:0 0 14.9G 0 disk └─mmcblk0p1 179:1 0 14.7G 0 part / mmcblk1 179:32 0 14.6G 0 disk └─mmcblk1p1 179:33 0 14.4G 0 part mmcblk1boot0 179:64 0 4M 1 disk mmcblk1boot1 179:96 0 4M 1 disk zram0 251:0 0 50M 0 disk /var/log zram1 251:1 0 1.9G 0 disk [SWAP] dev@helios64:~# ls -l /sys/block/ total 0 lrwxrwxrwx 1 root root 0 Nov 5 10:13 loop0 -> ../devices/virtual/block/loop0 lrwxrwxrwx 1 root root 0 Nov 5 10:13 loop1 -> ../devices/virtual/block/loop1 lrwxrwxrwx 1 root root 0 Nov 5 10:13 loop2 -> ../devices/virtual/block/loop2 lrwxrwxrwx 1 root root 0 Nov 5 10:13 loop3 -> ../devices/virtual/block/loop3 lrwxrwxrwx 1 root root 0 Nov 5 10:13 loop4 -> ../devices/virtual/block/loop4 lrwxrwxrwx 1 root root 0 Nov 5 10:13 loop5 -> ../devices/virtual/block/loop5 lrwxrwxrwx 1 root root 0 Nov 5 10:13 loop6 -> ../devices/virtual/block/loop6 lrwxrwxrwx 1 root root 0 Nov 5 10:13 loop7 -> ../devices/virtual/block/loop7 lrwxrwxrwx 1 root root 0 Nov 5 10:13 mmcblk0 -> ../devices/platform/fe320000.mmc/mmc_host/mmc0/mmc0:aaaa/block/mmcblk0 lrwxrwxrwx 1 root root 0 Nov 5 10:13 mmcblk1 -> ../devices/platform/fe330000.sdhci/mmc_host/mmc1/mmc1:0001/block/mmcblk1 lrwxrwxrwx 1 root root 0 Nov 5 10:13 mmcblk1boot0 -> ../devices/platform/fe330000.sdhci/mmc_host/mmc1/mmc1:0001/block/mmcblk1/mmcblk1boot0 lrwxrwxrwx 1 root root 0 Nov 5 10:13 mmcblk1boot1 -> ../devices/platform/fe330000.sdhci/mmc_host/mmc1/mmc1:0001/block/mmcblk1/mmcblk1boot1 lrwxrwxrwx 1 root root 0 Nov 5 10:13 sda -> ../devices/platform/f8000000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/ata1/host0/target0:0:0/0:0:0:0/block/sda lrwxrwxrwx 1 root root 0 Nov 5 10:13 sdb -> ../devices/platform/f8000000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb lrwxrwxrwx 1 root root 0 Nov 5 10:13 sdc -> ../devices/platform/usb@fe900000/fe900000.usb/xhci-hcd.0.auto/usb2/2-1/2-1.3/2-1.3:1.0/host5/target5:0:0/5:0:0:0/block/sdc lrwxrwxrwx 1 root root 0 Nov 5 10:13 zram0 -> ../devices/virtual/block/zram0 lrwxrwxrwx 1 root root 0 Nov 5 10:13 zram1 -> ../devices/virtual/block/zram1 lrwxrwxrwx 1 root root 0 Nov 5 10:13 zram2 -> ../devices/virtual/block/zram2 ``` From output above, the types are: | Block Device | Physical drive | Remarks | |--------------|----------------|---------| | **mmcblk0** | micro SD card | | | **mmcblk1** | eMMC | | | **sda** | SATA or M.2 drive connected to Port 1 | *../devices/platform/f8000000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/***ata1***/* | | **sdb** | SATA drive connected to Port 4 | *../devices/platform/f8000000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/***ata4***/* | | **sdc** | USB drive connected to USB Port 3 (Front Panel) | *../devices/platform/usb@fe900000/fe900000.usb/xhci-hcd.0.auto/usb2/2-1/2-1***.3***/* | ***Step 1 - Run Armbian Configuration Utility*** ``` sudo armbian-config ``` ![sata step 0](/helios64/install/img/transfer/sata_usb_00_config_main.png) ***Step 2 - Select Install Menu*** ![sata step 1](/helios64/install/img/transfer/sata_usb_01_config_system.png) ***Step 3 - Select Boot from eMMC - system on SATA, USB or NVMe*** ![sata step 2](/helios64/install/img/transfer/sata_usb_02_install_main.png) **Step 4 - Select storage device and partition for rootfs*** *SATA drive at port 1 as System drive* ![sata step 3a](/helios64/install/img/transfer/sata_usb_03_select_target_sata.png) --- *USB drive as System drive* ![sata step 3b](/helios64/install/img/transfer/sata_usb_03_select_target_usb.png) ***Step 5 - Confirm that the process will erase data on eMMC and system partition*** ![sata step 4](/helios64/install/img/transfer/sata_usb_04_install_erase_confirm.png) **Step 6 - Select filesystem type for eMMC*** ![sata step 5](/helios64/install/img/transfer/sata_usb_05_install_boot_fstype.png) Wait until formatting process completed ![sata step 6](/helios64/install/img/transfer/sata_usb_06_install_format_boot.png) ***Step 7 - Select filesystem type for system partition*** ![sata step 7](/helios64/install/img/transfer/sata_usb_07_install_system_fstype.png) Wait until formatting process completed ![sata step 8](/helios64/install/img/transfer/sata_usb_08_install_format_system.png) ***Step 8 - Wait for transfer process completed*** ![sata step 9](/helios64/install/img/transfer/sata_usb_09_install_transfer.png) ***Step 9 - Power Off Helios64 if you don't have OMV Installed*** **DO NOT** power off if you have installed OMV. There are several OMV files & folders not transferred by *nand-sata-install*. Please refer to [After running *nand-sata-install*](#existing-os-has-omv-installed) section before continue to next step. ![sata step 10](/helios64/install/img/transfer/sata_usb_10_install_poweroff.png) ***Step 10 - Remove Micro SD card and power on the system*** ***Step 11 - Verify if the system transferred correctly*** *System on SATA or M.2* ``` lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 111.8G 0 disk └─sda1 8:1 0 111.8G 0 part / sdb 8:16 0 111.8G 0 disk └─sdb1 8:17 0 111.8G 0 part sdc 8:32 1 28.7G 0 disk └─sdc1 8:33 1 28.4G 0 part mmcblk1 179:0 0 14.6G 0 disk └─mmcblk1p1 179:1 0 14.4G 0 part /media/mmcboot mmcblk1boot0 179:32 0 4M 1 disk mmcblk1boot1 179:64 0 4M 1 disk zram0 251:0 0 50M 0 disk /var/log zram1 251:1 0 1.9G 0 disk [SWAP] ``` You should see SATA drive at Port 1 has MOUNTPOINT **/** and eMMC has MOUNTPOINT **/media/mmcboot** --- *System on USB* ``` lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 111.8G 0 disk └─sda1 8:1 0 111.8G 0 part sdb 8:16 0 111.8G 0 disk └─sdb1 8:17 0 111.8G 0 part sdc 8:32 1 28.7G 0 disk └─sdc1 8:33 1 28.4G 0 part / mmcblk1 179:0 0 14.6G 0 disk └─mmcblk1p1 179:1 0 14.4G 0 part /media/mmcboot mmcblk1boot0 179:32 0 4M 1 disk mmcblk1boot1 179:64 0 4M 1 disk zram0 251:0 0 50M 0 disk /var/log zram1 251:1 0 1.9G 0 disk [SWAP] ``` You should see USB drive has MOUNTPOINT **/** and eMMC has MOUNTPOINT **/media/mmcboot** ## Transfer rootfs from eMMC to SATA or USB List available block devices and determine the type by running ``` lsblk ls -l /sys/block/ ``` Example output: ``` dev@helios64:~$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 111.8G 0 disk └─sda1 8:1 0 111.8G 0 part sdb 8:16 0 111.8G 0 disk └─sdb1 8:17 0 111.8G 0 part sdc 8:32 1 28.7G 0 disk └─sdc1 8:33 1 28.4G 0 part mmcblk1 179:0 0 14.6G 0 disk └─mmcblk1p1 179:1 0 14.4G 0 part / mmcblk1boot0 179:32 0 4M 1 disk mmcblk1boot1 179:64 0 4M 1 disk dev@helios64:~$ ls -l /sys/block total 0 lrwxrwxrwx 1 root root 0 Nov 11 04:19 loop0 -> ../devices/virtual/block/loop0 lrwxrwxrwx 1 root root 0 Nov 11 04:19 loop1 -> ../devices/virtual/block/loop1 lrwxrwxrwx 1 root root 0 Nov 11 04:19 loop2 -> ../devices/virtual/block/loop2 lrwxrwxrwx 1 root root 0 Nov 11 04:19 loop3 -> ../devices/virtual/block/loop3 lrwxrwxrwx 1 root root 0 Nov 11 04:19 loop4 -> ../devices/virtual/block/loop4 lrwxrwxrwx 1 root root 0 Nov 11 04:19 loop5 -> ../devices/virtual/block/loop5 lrwxrwxrwx 1 root root 0 Nov 11 04:19 loop6 -> ../devices/virtual/block/loop6 lrwxrwxrwx 1 root root 0 Nov 11 04:19 loop7 -> ../devices/virtual/block/loop7 lrwxrwxrwx 1 root root 0 Nov 11 04:19 mmcblk1 -> ../devices/platform/fe330000.sdhci/mmc_host/mmc1/mmc1:0001/block/mmcblk1 lrwxrwxrwx 1 root root 0 Nov 11 04:19 mmcblk1boot0 -> ../devices/platform/fe330000.sdhci/mmc_host/mmc1/mmc1:0001/block/mmcblk1/mmcblk1boot0 lrwxrwxrwx 1 root root 0 Nov 11 04:19 mmcblk1boot1 -> ../devices/platform/fe330000.sdhci/mmc_host/mmc1/mmc1:0001/block/mmcblk1/mmcblk1boot1 lrwxrwxrwx 1 root root 0 Nov 11 04:19 sda -> ../devices/platform/f8000000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/ata1/host0/target0:0:0/0:0:0:0/block/sda lrwxrwxrwx 1 root root 0 Nov 11 04:19 sdb -> ../devices/platform/f8000000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb lrwxrwxrwx 1 root root 0 Nov 11 04:19 sdc -> ../devices/platform/usb@fe900000/fe900000.usb/xhci-hcd.0.auto/usb2/2-1/2-1.3/2-1.3:1.0/host5/target5:0:0/5:0:0:0/block/sdc ``` From output above, the types are: | Block Device | Physical drive | Remarks | |--------------|----------------|---------| | **mmcblk1** | eMMC | | | **sda** | SATA or M.2 drive connected to Port 1 | *../devices/platform/f8000000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/***ata1***/* | | **sdb** | SATA drive connected to Port 4 | *../devices/platform/f8000000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/***ata4***/* | | **sdc** | USB drive connected to USB Port 3 (Front Panel) | *../devices/platform/usb@fe900000/fe900000.usb/xhci-hcd.0.auto/usb2/2-1/2-1***.3***/* | ***Step 1 - Run Armbian Configuration Utility*** ``` sudo armbian-config ``` ![emmc step 0](/helios64/install/img/transfer/emmc_sata_00_config_main.png) ***Step 2 - Select Install Menu*** ![emmc step 1](/helios64/install/img/transfer/emmc_sata_01_config_system.png) ***Step 3 - Select Boot from SD - system on SATA, USB or NVMe*** ![emmc step 2](/helios64/install/img/transfer/emmc_sata_02_install_menu.png) !!! Info The utility has flaw that it mistakenly read current boot device as SD card instead of eMMC. But it actually set the eMMC as boot device and system on SATA or USB device. ***Step 4 - Select storage device and partition for rootfs*** *SATA drive at port 1 as System drive* ![emmc step 3a](/helios64/install/img/transfer/emmc_sata_03_install_select_target_sata.png) --- *USB drive as System drive* ![emmc step 3b](/helios64/install/img/transfer/emmc_sata_03_install_select_target_usb.png) ***Step 5 - Confirm that the process will erase data on eMMC and system partition*** ![emmc step 4](/helios64/install/img/transfer/emmc_sata_04_install_erase_confirmation.png) **Step 6 - Select filesystem type for eMMC*** ![emmc step 5](/helios64/install/img/transfer/emmc_sata_05_install_fstype.png) Wait until formatting process completed ![emmc step 6](/helios64/install/img/transfer/emmc_sata_06_install_format.png) ***Step 7 - Wait for transfer process completed*** ![emmc step 9](/helios64/install/img/transfer/emmc_sata_07_install_transfer.png) ***Step 8 - Reboot Helios64 if you don't have OMV Installed*** **DO NOT** reboot if you have installed OMV. There are several OMV files & folders not transferred by *nand-sata-install*. Please refer to [After running *nand-sata-install*](#existing-os-has-omv-installed) section before continue to next step. ![emmc step 10](/helios64/install/img/transfer/emmc_sata_08_install_reboot.png) ***Step 9 - Power on the system*** ***Step 10 - Verify if the system transferred correctly*** *System on SATA or M.2* ``` lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 111.8G 0 disk └─sda1 8:1 0 111.8G 0 part / sdb 8:16 0 111.8G 0 disk └─sdb1 8:17 0 111.8G 0 part sdc 8:32 1 28.7G 0 disk └─sdc1 8:33 1 28.4G 0 part mmcblk1 179:0 0 14.6G 0 disk └─mmcblk1p1 179:1 0 14.4G 0 part /media/mmcboot mmcblk1boot0 179:32 0 4M 1 disk mmcblk1boot1 179:64 0 4M 1 disk zram0 251:0 0 50M 0 disk /var/log zram1 251:1 0 1.9G 0 disk [SWAP] ``` You should see SATA drive at Port 1 has MOUNTPOINT **/** and eMMC has MOUNTPOINT **/media/mmcboot** --- *System on USB* ``` lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 111.8G 0 disk └─sda1 8:1 0 111.8G 0 part sdb 8:16 0 111.8G 0 disk └─sdb1 8:17 0 111.8G 0 part sdc 8:32 1 28.7G 0 disk └─sdc1 8:33 1 28.4G 0 part / mmcblk1 179:0 0 14.6G 0 disk └─mmcblk1p1 179:1 0 14.4G 0 part /media/mmcboot mmcblk1boot0 179:32 0 4M 1 disk mmcblk1boot1 179:64 0 4M 1 disk zram0 251:0 0 50M 0 disk /var/log zram1 251:1 0 1.9G 0 disk [SWAP] ``` You should see USB drive has MOUNTPOINT **/** and eMMC has MOUNTPOINT **/media/mmcboot** ## Existing OS Has OMV Installed Transferring rootfs using *nand-sata-install* will break OMV due to missing files. To prevent this, you need to proceed following section. ### Preparation before running *nand-sata-install* If you have configured NFS share located on SATA drive(s), you might like to prevent the content to be copied over to eMMC. run following command to prevent it ``` echo "/export/*" | sudo tee -a /usr/lib/nand-sata-install/exclude.txt ``` Lastly, if you're using ZFS, which by default mounts to **/**, make sure to add its mountpoint to **/usr/lib/nand-sata-install/exclude.txt** before running *nand-sata-install* as well. ### After running *nand-sata-install* OMV 5 stores part of its config (**salt** and **pillar** folders) in **/srv/** which are excluded by *nand-sata-install*. Before power off the system to finalize the system transfer, we need to mount system partition and copy those folders into it and finally power off the system. ``` sudo mkdir -p /mnt/system sudo mount /dev/sda1 /mnt/system sudo cp -rf -t /mnt/system/srv/ /srv/salt /srv/pillar sudo poweroff ``` !!! Note Pay attention to block device of system partition at second command. In this case /dev/sda1 is SATA drive at Port 1. Now you can continue to remove the micro SD card and power on the system. ## References - [Armbian Documentation](https://docs.armbian.com/User-Guide_Getting-Started/#how-to-install-to-emmc-nand-sata-usb) - [Tips from antsu at Armbian Forum](https://forum.armbian.com/topic/15431-helios64-support/?do=findComment&comment=110715)