About multiboot

When I bought rock pi 4, the first thing I did was look for ways to load different operating systems from one device. Booting each OS from a separate microsd is a cave age :wink: . I used pinn and noobs on raspberries, there are no such packages
But it turned out not so bad, and now I’m loading several different systems. I would like to share my experience until I forgot;). I won’t write all at once, I’ll add here in parts
But this is not for beginners! You must have Linux experience!

Somesing theory

Boot sequence from wiki here
We conclude from this. If Android is flashed on emms, and on Linux microsd: Then, idbloader from emms will be loaded first, which will load uboot from microsd, which will look partitions with the boot flag and try to run os from here. If the attempt is unsuccessful, the next partition with the boot flag will be loaded.
The situation is different with android, it will not be searched for partitions with the flag of boot, but immediately loads the android.
Therefore, if idbloader from emms does not detect uboot on microsd, then the android from emms will boot. Such a situation arises if none radxa Linux is flashed on the microsd. They have a different structure, and idbloader does not understand it and cannot deliver the load there.

From wiki: “5 -The uboot searches for /extlinux/extlinux.conf and load kernel,dtb on first partition or partition which set bootable flag.”
Therefore, it is necessary to mark the microsd in a special way. The first 3 partitions under uboot, then several sections under the boot of different OS. Then, if necessary, several partitions under rootfs. I have only one rootfs on microsd in case of boot without SSD. All other rootfs partitions on SSD.
You can work both on PC and on rock pi, by installing the SD in the card reader, or installed in its regular place, if the system is running from another device. Before work, I enter superuser mode and create variables that select the desired device.
Example here
Multiboot with andtoid on eMMC

3 Likes

good idea to start a topic about it, thank you!

I agree. It’s a bit over my head but I’m still learning! :sweat_smile:

Let’s make for example microSD (or eemmc or ssd) > = 16G with 3 OS

sudo su 
apt install mc parted kpartx
export MYSD=/dev/sdz; export MYSDp=$MYSD  # !!!Replace sdz to yoor SD device!!!  
parted $MYSD p 
### Make sure it's the right device here!!! All previos data on it will be lost!!! ###
umount "$MYSDp"*  # If not all parts are umount, free from use and repeat. 
Selection other devices if you work on rock pi

All partitions of select device are must no use by worked system !!!

#export MYSD=/dev/nvme0n1;export MYSDp="$MYSD"p # SSD
#export MYSD=/dev/mmcblk0;export MYSDp="$MYSD"p # microSD in 4.x kernel OS
#export MYSD=/dev/mmcblk1;export MYSDp="$MYSD"p # EMMC in 4.x kernel OS or microSD in 5.x 
#export MYSD=/dev/mmcblk2;export MYSDp="$MYSD"p #  EMMC in 5.x kernel OS
SD markup commands
# All other strings from here may be copy-paste to terminal window  
# and wait for the end of execution 
umount "$MYSDp"*   
dd if=/dev/zero of=$MYSD bs=1M count=16;sync   
parted $MYSD mktable gpt;sync  
parted $MYSD mkpart idbloader ext2 64s 8063s i;sync # "i" at end is needed 
parted $MYSD mkpart uboot ext2 16384s 24575s;sync 
parted $MYSD mkpart trust ext2 24576s 32767s;sync 

LASTSECT=$(fdisk -l $MYSD|awk '{ print $3 }'|tail -n1)  
parted $MYSD mkpart ubuntu_BOOTUBT ext2 $(($LASTSECT+1))s $(($LASTSECT+2048*256))s 
# "ubuntu_BOOTUBT" is partition name. It need for info. I'm write here OS name and label. 
sync;mkfs.ext2 -FL BOOTUBT "$MYSDp"4;sync # BOOTUBT is partition label 

LASTSECT=$(fdisk -l $MYSD|awk '{ print $3 }'|tail -n1) 
parted $MYSD mkpart none ext2 $(($LASTSECT+1))s $(($LASTSECT+2048*256))s 
# at the end of prev string "256" in partition size in MB. Change possible 
sync;mkfs.ext2 -FL none "$MYSDp"5;sync 

LASTSECT=$(fdisk -l $MYSD|awk '{ print $3 }'|tail -n1) 
parted $MYSD mkpart libre_STORAG  ext4 $(($LASTSECT+1))s $(($LASTSECT+2048*256))s 
sync;mkfs.ext4 -FL STORAG "$MYSDp"6;sync  # temporary part for libreelec 

LASTSECT=$(fdisk -l $MYSD|awk '{ print $3 }'|tail -n1) 
parted $MYSD mkpart boot_LIBRE ext2 $(($LASTSECT+1))s $(($LASTSECT+2048*512))s 
sync;mkfs.ext2 -FL LIBRE "$MYSDp"7;sync  

LASTSECT=$(fdisk -l $MYSD|awk '{ print $3 }'|tail -n1)  
parted $MYSD mkpart armbian_BOOTARMB ext2 $(($LASTSECT+1))s $(($LASTSECT+2048*256))s  
sync;mkfs.ext2 -FL BOOTARMB "$MYSDp"8;sync  

LASTSECT=$(fdisk -l $MYSD|awk '{ print $3 }'|tail -n1) 
parted $MYSD mkpart armbian_ROOTARMB ext4 $(($LASTSECT+1))s $(($LASTSECT+2048*8192))s 
# at prev string 8192 is partition size in MB. Change possible 
sync;mkfs.ext4 -FL ROOTARMB "$MYSDp"9;sync  

LASTSECT=$(fdisk -l $MYSD|awk '{ print $3 }'|tail -n1) 
parted $MYSD mkpart ubuntu_ROOTUBT ext4 $(($LASTSECT+1))s $(($LASTSECT+2048*4096))s 
sync;mkfs.ext4 -FL ROOTUBT "$MYSDp"10;sync  

parted $MYSD t 4 boot t 8 boot p 
#Partitions comletehttps://dl.armbian.com/rockpi-4b/Bionic_legacy_desktop
Everything should look like this:
Disk /dev/mmcblk1: 15,7GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 
Number  Start   End     Size    File system  Name            Flags
 1      32,8kB  4129kB  4096kB               idbloader
 2      8389kB  12,6MB  4194kB               uboot
 3      12,6MB  16,8MB  4194kB               trust
 4      16,8MB  285MB   268MB   ext2         ubuntu_BOOTUBT  boot, esp
 5      285MB   554MB   268MB   ext2         none
 6      554MB   822MB   268MB   ext4         libtre_STORAGE
 7      822MB   1359MB  537MB                boot_LIBREELEC
 8      1359MB  1627MB  268MB   ext2         armbian_BOOT    boot, esp
 9      1627MB  10,2GB  8590MB               armbian_ROOTFS
10      10,2GB  14,5GB  4295MB  ext2         ubuntu_ROOTUBT
How to install uboot

Idbloader is starting from 64 sectors, uboot from 16384, trust from 24576. The first partition of the system begins with 32768 sectors. We can assume that all uboot partitions occupy sector from 64 to 32768. You can flash partitions individually, or all at once.
Individually:
cd to dir with files, e.g. cd /usr/lib/u-boot-rockpi4b/ on radxa linux OS , then

dd if=rockpi4b-rk-idbloader.img of="$MYSDp"1;dd if=rockpi4b-rk-uboot.img of="$MYSDp"2;dd if=rockpi4b-rk-trust.img of="$MYSDp"3;sync

All at once, several options, choose any suitable:

dd  if=rockpi4b-ubuntu-bionic-minimal-20190104_2101-gpt.img of=$MYSD skip=64 seek=64 count=$((32768-64));sync # from full image OS
dd if=/dev/mmcblk0  of=$MYSD skip=64 seek=64 count=$((32768-64));sync # from other device
dd if=first16M_of_My_MMC0.img  of=$MYSD skip=64 seek=64;sync # from backup

I backup the first 16 megabytes. This includes the device partition table and the entire uboot.

dd if=/dev/mmcblk0 of=first16M_of_My_MMC0.img bs=1M cunt=16;sync # make backup

Next copy files to $MYSD and configure

Copy radxa ubuntu files

Download ubuntu from radxa site and unpack.
Go to dir with img and stay there until the end of the installation ubuntu!
Replace path to own in next string!

cd /mnt/dataSSD/img
export DISTR=rockpi4b-ubuntu-bionic-minimal-20190104_2101-gpt.img 
mkdir /mnt/1 /mnt/2 /mnt/3 /mnt/4
kpartx -arv $DISTR  # look to number at "loop" end
mount /dev/disk/by-label/BOOTUBT /mnt/1 
mount /dev/disk/by-label/ROOTUBT /mnt/2 
mount /dev/mapper/loop0p4 /mnt/3
# replace number  at "loop" end if not equal that show in previos kpartx command
mount /dev/mapper/loop0p5 /mnt/4

#Сopy files, make changes and make files for the future.
rm -r /mnt/1/*; rm -r /mnt/2/*
cp -a /mnt/3/* /mnt/1; cp -a /mnt/4/* /mnt/2
sed -i "s%\(root=.*\)%root=${MYSDp}10%g" /mnt/1/extlinux/extlinux.conf
export EXTSH=/mnt/2/usr/local/sbin/return_my_root_to_extlinux.sh
echo '#!/bin/bash' > $EXTSH
echo sudo sed -i "s%root=PARTUUID=B921B045-1DF0-41C3-AF44-4C6F280D3FAE%root=${MYSDp}10%g" /boot/extlinux/extlinux.conf >> $EXTSH
chmod +x  $EXTSH
sed -i 's/# UNCONFIGURED FSTAB FOR BASE SYSTEM//g' /mnt/2/etc/fstab
echo "LABEL=BOOTUBT  /boot   ext2    defaults        0       2"  >> /mnt/2/etc/fstab 
rm /mnt/2/etc/FIRST_BOOT

# Check configs 
cat /mnt/1/extlinux/extlinux.conf
cat /mnt/2/etc/fstab 
cat $EXTSH


###  install ssh trough chroot, run the next 5 lines **manually** if necessary
#chroot /mnt/2
#echo 'nameserver 8.8.8.8' > /etc/resolv.conf
#apt update
#apt install -y ssh
#exit

umount /mnt/1 /mnt/2 /mnt/3 /mnt/4
rmdir /mnt/1 /mnt/2 /mnt/3 /mnt/4
kpartx -dv $DISTR
# end copy ubuntu
Copy armbian files

Download official armbian and unpack.
Go to dir with img and stay there until the end of the installation armbian!
Replace path to own in next string!

cd /mnt/dataSSD/img
export DISTR=Armbian_20.02.0-rc0_Rockpi-4b_bionic_legacy_4.4.210_desktop.img 
mkdir /mnt/1 /mnt/2 /mnt/3
kpartx -arv $DISTR  # look to number at "loop" end
mount /dev/disk/by-label/BOOTARMB /mnt/1 
mount /dev/disk/by-label/ROOTARMB /mnt/2 
mount /dev/mapper/loop0p1 /mnt/3 # replace number  at "loop" end if not equal that show in previos kpartx command

#Сopy files, make configs
rm -r /mnt/1/*; rm -r /mnt/2/*;
cp -a /mnt/3/boot/* /mnt/1; cp -a /mnt/3/* /mnt/2; rm -r /mnt/2/boot/*

mkdir /mnt/1/extlinux
export EXTCFG=/mnt/1/extlinux/extlinux.conf
echo 'LABEL Armbian' > $EXTCFG
echo '  LINUX /Image' >> $EXTCFG
echo '  INITRD /uInitrd' >> $EXTCFG
echo '  FDT /dtb/rockchip/rk3399-rockpi4b.dtb' >> $EXTCFG
echo '  APPEND root=LABEL=ROOTARMB rootflags=data=writeback rw console=uart8250,mmio32,0xff1a0000 console=tty0 no_console_suspend consoleblank=0 fsck.fix=yes fsck.repair=yes net.ifnames=0' >> $EXTCFG
mv /mnt/1/boot.scr /mnt/1/boot.scr.bak

echo 'LABEL=ROOTARMB / ext4 defaults,noatime,nodiratime,commit=600,errors=remount-ro 0 1' > /mnt/2/etc/fstab
echo 'LABEL=BOOTARMB /boot ext2 defaults 0 2' >> /mnt/2/etc/fstab
echo 'tmpfs /tmp tmpfs defaults,nosuid 0 0' >> /mnt/2/etc/fstab

# Check configs 
cat /mnt/1/extlinux/extlinux.conf
cat  /mnt/2/etc/fstab

umount /mnt/1 /mnt/2 /mnt/3
rmdir /mnt/1 /mnt/2 /mnt/3
kpartx -dv $DISTR
# end copy armbian

Default login: root password: 1234

Copy libreelec files

Download LE made by @balbes-150 and unpack.
Go to dir with img and stay there until the end of the installation LE!
Replace path to own in next string!

cd /mnt/dataSSD/img
export DISTR=LibreELEC-ARM-ALL.aarch64-9.80-devel-20200304135927-569f834-rk3399.img 
mkdir /mnt/1 /mnt/2 /mnt/3 
kpartx -arv $DISTR  # look to number at "loop" end
mount /dev/disk/by-label/LIBRE /mnt/1 
mount /dev/disk/by-label/STORAG /mnt/2 
mount /dev/mapper/loop0p1 /mnt/3 # replace number  at "loop" end if not equal that show in previos kpartx command

#Сopy files, make configs
rm -r /mnt/1/*; rm -r /mnt/2/*;
cp -a /mnt/3/* /mnt/1

mkdir /mnt/1/extlinux
export EXTCFG=/mnt/1/extlinux/extlinux.conf
echo 'LABEL LibreELEC' > $EXTCFG
echo '  LINUX /KERNEL' >> $EXTCFG
echo '  FDT /dtb/rockchip/rk3399-rock-pi-4.dtb' >> $EXTCFG
echo '  APPEND boot=LABEL=LIBRE disk=LABEL=STORAG console=tty0 no_console_suspend consoleblank=0 quiet coherent_pool=2M cec.debounce_ms=5000' >> $EXTCFG
mv /mnt/1/boot.scr /mnt/1/boot.scr.bak
# Check configs 
cat /mnt/1/extlinux/extlinux.conf

umount /mnt/1 /mnt/2 /mnt/3
rmdir /mnt/1 /mnt/2 /mnt/3
kpartx -dv $DISTR
# end copy armbian

For ssh entrance need ssh enable from startup dialog.
ssh login: root default password: libreelec


After executing all the previous commands, the device with 3 OS is ready. You can change the boot order using parted. The first partition with the boot flag will be loaded. For example, “parted $MYSD t 4 boot p” will change the boot flag to partition 4 and display the current table. Because earlier, on the 4th partition there was a boot flag, it will be removed and the next time armbian will boot.
If you set the boot flag to LE, then there parted to change the load can be called through ssh. I did not see the terminal plugin there.

Actions after the first start of radxa ubuntu

default login: rock password: rock

Don’t install rockchip-fstab !!!

sudo su
apt update && apt upgrade 
apt install rockchip-overlay   rockpi4b-rk-u-boot-latest  rockpi4-dtbo # On the first question of confirmation of installation, press 'y', on the second question of the bootloader, press 'n' !!! 
apt install ssh parted mc nano kpartx gdisk linux-base linux-4.4-latest
return_my_root_to_extlinux.sh 

# check configs
cat /boot/extlinux/extlinux.conf 
cat /etc/fstab 

If ever a new kernel is installed during an apt upgrade, then always use return_my_root_to_extlinux.sh to restore the correct path to rootfs!



If you have a console cable

If you have a console cable, you can select the partition to boot at startup.
After starting, press Cttl-C many times until the load stops and the message "=> " appears. Then we enter for example:

sysboot mmc 1:b any 0x500000 /extlinux/extlinux.conf

and then will be booted 11 (b hex) partition from microsd. 1 here it is microSD , 0 will be emmc … wise with these 0 1 2 in different places - you won’t figure it out without a bottle ;)))


I made an image according to this scenario.The size of the packed 2G file, unpacked 16G, so it does not need to be unpacked beforehand. Flash either through etcher or

unpigz -c multibot_1.img.gz | dd of=/dev/<yuor media> bs=4M status=progress; sync

then

parted /dev/<your media> p 

if a message appears, you need to fix the increase in size.

1 Like

Hi. I am running Armbian from the multiboot image, and I have tried to create a separate / home partition, so as not to occupy the 8gb of root. But I failed and had to start from 0 a second time. How could I create a new partition on the nvme disk where I am booting from, and make it my / home folder?

Your ssd don’t have free space? Give me out of 2 commands

parted  /dev/nvme0n1 p
blockdev --getsz /dev/nvme0n1

Hello all
@rua1 thanks for posting the instructions. A few questions:

  • As I’m reading it, this should by applicable to any of the following storage devices: NVMe, eMMC, microSD, USB mass storage - is that correct?
  • Any chance of having Android TV and LibreELEC on 1 storage device? (preferably eMMC or NVMe SSD)
  • Is there a reason for leaving sectors 8064-16383 un-allocated?

@myxal rootfs can be located on any device, boot can be on microSD, eMMC and NVMe, if it can boot via SPI. I have a hot bootable NVMe.
With android on one device, you can have bootable partitions for other OSs. I once did. But it’s easier to have an android on eMMC, and the boot partitions for other OSs on microSD. And today I just prepared a guide of this.

Multiboot with android
, if the android is on EMMC, and on the microSD my multiboot image or any Linux from radxa is flashed. SPI flash must be erased!
In this case, when microSD is installed, Linux will boot, when removed, the android will boot.
We insert microSD, load Linux and do the following commands:

Open here
cd ~; sudo su

DevEmmc=/dev/mmcblk$((`uname -r | sed 's/^\([4-5]\).*/\1/'`-3))
DevMicroSD=/dev/mmcblk$((`uname -r | sed 's/^\([4-5]\).*/\1/'`-4))

mkdir /mnt/1
mount ${DevEmmc}p13 /mnt/1
dd if=${DevMicroSD}p2 of=/mnt/1/2.img; sync
echo '#!/system/bin/sh' > /mnt/1/system/bin/re2
echo 'dd if=/2.img of=/dev/block/mmcblk0p2; sync' >> /mnt/1/system/bin/re2
echo 'reboot'  >> /mnt/1/system/bin/re2
echo >> /mnt/1/system/bin/re2
chmod +x /mnt/1/system/bin/re2
umount /mnt/1
rmdir /mnt/1

echo '#!/bin/bash' > rebootToAndroid.sh
echo "sudo dd if=/dev/zero of=${DevMicroSD}p2; sync" >> rebootToAndroid.sh
echo 'sudo reboot' >> rebootToAndroid.sh
echo >> rebootToAndroid.sh
chmod +x rebootToAndroid.sh

In android, we allow su, go to the terminal application, type su and then re2 and reboot into Linux.
In Linux, run rebootToAndroid.sh.

Make shortcut on mate

reboot

Thanks, very helpful.
Some possible nitpicks/optimisations for you to consider:

  • If the first 3 partitions are always the same, may as well use sgdisk to create all 3 in one step:
    sgdisk --backup=/tmp/rockpi4-base.out /dev/???
    sgdisk --restore=/tmp/rockpi4-base.out /dev/???
  • No need to install/use kpartx. losetup comes default with mount package.
    losetup -P /dev/loop0 /tmp/some_image.img
    losetup -D /dev/loop0
  • mkdir /mnt/1 /mnt/2 /mnt/3 /mnt/4 ahem…
    mkdir /mnt/{1..4}
  • If possible, could you post the partition table as displayed by gdisk -l? (I find the output of parted print for GPT disks quite convoluted, but maybe I’m just not used to it yet.)
  • As I understand the mnt/rm/cp part - you’re copying the root and boot partitions from the image to the target device. If that is the case, I reckon it would be better to just block-copy the partition (like you’re already doing with uboot), and then run resize2fs after you’re done (part of e2sfprogs package). You’d save some time on the copy, and wouldn’t even need to format the partitions in the previous step.
1 Like

Thanks for answering
These are the results of the requested commands:

gh@rockpi:~$ sudo parted /dev/nvme0n1 p
[sudo] contraseña para gh:
Modelo: NVMe Device (nvme)
Disco /dev/nvme0n1: 250GB
Tamaño de sector (lógico/físico): 512B/512B
Tabla de particiones: gpt
Indicadores de disco:

Numero Inicio Fin Tamaño Sistema de archivos Nombre Banderas
1 32.8kB 4129kB 4096kB idbloader
2 8389kB 12.6MB 4194kB uboot
3 12.6MB 16.8MB 4194kB trust
4 16.8MB 285MB 268MB ext2 ubuntu_BOOTUBT
5 285MB 554MB 268MB ext2 none
6 554MB 822MB 268MB ext4 libre_STORAG
7 822MB 1359MB 537MB ext2 boot_LIBRE
8 1359MB 1627MB 268MB ext2 armbian_BOOTARMB arranque, esp
9 1627MB 10.2GB 8590MB ext4 armbian_ROOTARMB
10 10.2GB 15.7GB 5438MB ext2 ubuntu_ROOTUBT
11 15.7GB 198GB 182GB ext4

gh@rockpi:~$ sudo blockdev --getsz /dev/nvme0n1
488397168

How change fs from fat to ext2 with this metod? … and with it uuid and partuuid will be cloned. It’s bad when use one OS multiple.
I am now thinking of redoing the script and using UUID instead of LABEL.

@aguapi what out :

lsblk | grep -E '(/boot| /$)'

Oh, right - just noticed that as I was looking at the downloaded image - is this (change FAT -> EXT) actually intended? (If it’s for the label-matched cmdline, then admit I’m not sure if the boot process can match and mount FAT label or UUID, but those fields definitely exist on a FAT filesystem as well.)

Hello, here is the console output:

gh@rockpi:~$ sudo su
[sudo] contraseña para gh:
root@rockpi:/home/gh# lsblk | grep -E ‘(/boot| /$)’
├─nvme0n1p8 259:8 0 256M 0 part /boot
├─nvme0n1p9 259:9 0 8G 0 part /
root@rockpi:/home/gh#

This is not the point. This forum discussed kernel update errors, which were due to the boot loader located on the fat partition … well, in general, why do we need this fat, if uboot allows ext parttions to be loaded.

@aguapi I correctly understood that you planned the 11th partition to home dir? Then you need to reboot into ubuntu

 sudo parted /dev/nvme0n1 t 4 boot p
 sudo reboot

In ununtu transfer the armbian home folder there and add a line to /etc/fstab

cmdlines
sudo su
mkdir /mnt/1 /mnt/2
mount /dev/nvme0n1p9  /mnt/1
mount /dev/nvme0n1p11 /mnt/2
rm -r /mnt/2/*
cp -a  /mnt/1/home/* /mnt/2
rm -r /mnt/1/home/*
echo "/dev/nvme0n1p11     /home     ext4    defaults        0       2" >> /mnt/1/etc/fstab
umount /mnt/1 /mnt/2
rmdir /mnt/1 /mnt/2
# Then reboot to armbian
parted /dev/nvme0n1 t 4 boot p
reboot

Hi. Thanks for the instructions.
The command " sudo parted /dev/nvme0n1 t 4 boot p" returns me to Armbian, not Ubuntu.

@aguapi

sudo nanddump /dev/mtd0 | grep -Eao '(fdtfile=.*dtb)'

?

gh@rockpi:~$ sudo nanddump /dev/mtd0 | grep -Eao ‘(fdtfile=.*dtb)’
/dev/mtd0: No such file or directory

(Am I wrong, or I don’t have flash-spi working?)

sudo parted /dev/nvme0n1 t 4 boot p
Modelo: NVMe Device (nvme)
Disco /dev/nvme0n1: 250GB
Tamaño de sector (lógico/físico): 512B/512B
Tabla de particiones: gpt
Indicadores de disco:

Numero Inicio Fin Tamaño Sistema de archivos Nombre Banderas
1 32.8kB 4129kB 4096kB idbloader
2 8389kB 12.6MB 4194kB uboot
3 12.6MB 16.8MB 4194kB trust
4 16.8MB 285MB 268MB ext2 ubuntu_BOOTUBT
5 285MB 554MB 268MB ext2 none
6 554MB 822MB 268MB ext4 libre_STORAG
7 822MB 1359MB 537MB ext2 boot_LIBRE
8 1359MB 1627MB 268MB ext2 armbian_BOOTARMB arranque, esp
9 1627MB 10.2GB 8590MB ext4 armbian_ROOTARMB
10 10.2GB 15.7GB 5438MB ext2 ubuntu_ROOTUBT
11 15.7GB 198GB 182GB ext4

Información: Puede que sea necesario actualizar /etc/fstab.

I have noticed that by doing
sudo parted / dev / nvme0n1 t 4 boot p,
the console suggests me to update etc / fstab

My fstab looks like this:

LABEL=ROOTARMB / ext4 defaults,noatime,nodiratime,commit=600,errors=remount-ro 0 1
LABEL=BOOTARMB /boot ext2 defaults 0 2
tmpfs /tmp tmpfs defaults,nosuid 0 0

I did it, with sudo mount -a, but I’m still booting into Armbian

I think you are using uboot-spi from balbes-150 or the latest from radxa. There is a modified fdtfile variable. When uboot cannot find fdtfile, then it proceeds to load the next partition with boot flag. Therefore, you are booted with armbian.
Another way to fix the situation can still be done:

sudo su
mkdir /mnt/1 
mount /dev/nvme0n1p4  /mnt/1
sed -i "s%\(/dtbs/.*\)%\1\n    fdt \1/rockchip/rockpi-4b-linux.dtb%g" /mnt/1/extlinux/extlinux.conf
umount /mnt/1 
rmdir /mnt/1

try then check boot flag on partition 4 and if it bee set, then reboot

1 Like

Hi. The Ubuntu boot flag was marked after the command in question, but also that of Armbian. I clarify this, because I even thought about deactivating the Armbian boot flag with Gparted, booting with Ubuntu, but I did not know if I could reboot with Armbian from Ubuntu with the command that you suggested, so I decided to wait for new instructions, which is Incidentally, I just saw, and I’m going to try immediately. Then, I’ll be back to report the results. Thank you

Hi. I have followed the last instructions, but unfortunately they have not worked. I have decided to start from 0, burning the multiboot image from 0 and activating only the Ubuntu startup input, disabling the Armbian one, and it doesn’t start anything directly. I get a black screen.
So I’m stuck on this about creating a new partition and making it my default / home folder.
I edit:
I am trying and here I have arrived:
I have created an extra partition on my nvme disk, and managed to configure it to mount at startup with the disk utility. As a result my /etc/fstab looks like this:

LABEL=ROOTARMB / ext4 defaults,noatime,nodiratime,commit=600,errors=remount-ro 0 1
LABEL=BOOTARMB /boot ext2 defaults 0 2
tmpfs /tmp tmpfs defaults,nosuid 0 0
/dev/disk/by-uuid/35fbc645-a3ff-4851-9cba-98e3f13e7121 /mnt/35fbc645-a3ff-4851-9cba-98e3f13e7121 auto nosuid,nodev,nofail,x-gvfs-show 0 0

now my doubt on how to mount the / home folder in said partition. I’m following a guide I found on google (https://lavidaestux.wordpress.com/2015/03/28/mover-el-home-a-otra-particion-o-disco/), and I understand the whole procedure, but I get stuck on the etc/fstab edit. I’m afraid to screw up with mounting options. That is, the mount options of the partition where the / home folder is by default have different properties than those of the partition that I managed to mount with the Disks application, and at the moment I have to edit the new mount point, I don’t know how it should look. Sorry for such a long explanation to describe such a simple problem for you I imagine. Thanks in advance.

Edit 2:

I tried and half succeeded, because it seems to me that I was wrong in the address of the / HOME folder, so I did not have an operating desktop, and I had to start from 0 again. Now I have concluded that it is not worth creating the home on another partition. with creating another partition that is mounted at the beginning, with rights to write, and linking the chromium downloads folder to that partition it seems to me that it reaches me for now.