NanoPi Zero2 headache

I recently bought this device because it was the only small board with eMMC and onboard ethernet. Love the hardware, but the BSP support is horrible. They use an ancient U-Boot 2017.09 version, which doesn’t support extlinux. There are 8 (wtf?) different partitions created and their official Alpine image uses an immutable rootfs overlayed with a data partition, so you can’t even run docker on this thing :sob: The kernel is dumpeed onto the disk and doesn’t seem easily upgradable unless you overwrite it with dd :tired_face:

I saw DietPi is the only distro that supports this board. I just flashed the image and examined it. It uses the same weird 8 partitions. I saw that there are some u-boot-current and u-boot-edge packages, which (so I hope) are not this vendor crap.

linux-u-boot-nanopi-zero2-current.deb 2026-03-12 12:10 487K
linux-u-boot-nanopi-zero2-edge.deb 2026-03-12 12:02 487K
linux-u-boot-nanopi-zero2-vendor.deb 2026-03-12 12:00 487K

Did you succeed in building an up-to-date U-Boot image that works with extlinux? I also tried upgrading the kernel and the DietPi wouldn’t boot anymore. What’s the right way of having something newer than the vendor 6.1 kernel?

Best to my knowledge, there is no mainline kernel yet. Something we are working on still.

Guess Iβ€˜ll have to live with it then. I saw the device tree for this board in the mainline kernel tree though.

Is there a way to install DietPi on the eMMC?

Multiple. Depends if it is a new image or the running system. At least an idea you will get from Moving a running DietPi system to a USB stick/disk or an onboard eMMC – DietPi Blog

Greetings!

On a NanoPi Zero2 with an 256 GB emmc, on dietpi v10.2 I get

root@DietPi:\~# lsblk
NAME         MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
mmcblk2      179:0    0   233G  0 disk
β”œβ”€mmcblk2p1  179:1    0     4M  0 part
β”œβ”€mmcblk2p2  179:2    0     4M  0 part
β”œβ”€mmcblk2p3  179:3    0     4M  0 part
β”œβ”€mmcblk2p4  179:4    0    16M  0 part
β”œβ”€mmcblk2p5  179:5    0    40M  0 part
β”œβ”€mmcblk2p6  179:6    0    32M  0 part
β”œβ”€mmcblk2p7  179:7    0    32M  0 part
β”œβ”€mmcblk2p8  179:8    0     1G  0 part /mnt/be95d575-9e1a-4195-a21c-b7599e643c8d
β”œβ”€mmcblk2p9  179:9    0     1G  0 part
└─mmcblk2p10 179:10   0 230.8G  0 part
mmcblk0      179:32   0  29.7G  0 disk
└─mmcblk0p1  179:33   0  29.7G  0 part /
mmcblk2boot0 179:64   0     4M  1 disk
mmcblk2boot1 179:96   0     4M  1 disk

but I dont see it in

dietpi-drive _manager

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ DietPi-Drive_Manager β”œβ”€β”
β”‚ Please select a drive to see available options.                                                                       β”‚
β”‚  - User data location: RootFS (/mnt/dietpi_userdata)                                                             β”‚
β”‚                       ●─ mmcblk0 ------------------------------------------------------------------------------●     β”‚
β”‚     /dev/mmcblk0p1    : / | ext4 | Capacity: 29.1G | Used: 2G (7%)                                           
β”‚                       ●─ mmcblk2 ------------------------------------------------------------------------------●     β”‚
β”‚     /dev/mmcblk2p8    : /mnt/be95d575-9e1a-4195-a21c-b7599e643c8d | ext4 | Capacity: 986.5M | Used: 663.4M (67%)     β”‚
β”‚     /dev/mmcblk2p9    : Not mounted | ext4 | Capacity: 1G                                                            β”‚
β”‚                       ●─ Global Options -----------------------------------------------------------------------●     β”‚
β”‚     Idle Spindown     : Set a global idle duration, before drives power down                                       β”‚
β”‚                       ●─ Add / Refresh Drives -----------------------------------------------------------------●     β”‚
β”‚     Add network drive : Select to mount networked drives                                                             β”‚
β”‚     Refresh           : Scan for recently added/removed drives                                                       β”‚
β”‚           β”‚
└──────────────────────────────────────────────────────────,β”˜

Any ideas on how to see mmcblk2p10 in dietpi-drive _manager ? Thanks in advance.

It seems there’s still a FriendlyELEC image on the eMMC? That doesn’t make any sense, does it? Why not just flash a DietPi image onto the eMMC directly and boot from that? That way you save on the SD card. And if the Zero 2 absolutely has to boot from an SD card, I’d wipe the entire eMMC first and create just one partition.

Just got the NanoPi Zero2 (amazing hardware!) as well with eMMC and flashing DietPi to the eMMC is not straightforward. I’m trying the USB method, with driver. The FriendlyElec provided RKDevTool v3.30 does not accept DietPi_NanoPiZero2-ARMv8-Trixie.img (Loading firmware failed!), but reading this topic, it seems that it expects a specific partition layout.

What is the suggested way? I have a TF to eMMC adapter that I can try (but I need to disassemble the device, inckluding wifi antennae), but if the board expects a specific partition layout on eMMC, I shouldn’t even have to try.

Quite easy to get the NanoPi Zero 2 up from eMMC. Just boot of TF card and flash the image to eMMC using dd commend. Takes less than a couple of minutes.

Thank you for the reply. Do you speak from personal experience or is the dd method linked earlier possible more complicated than just the straightforward approach? The article and latest comment mention specific difficulties with NanoPi device and eMMC.

(I’ve already spent 3 hours on just getting DietPi to run from microSD, failed twice, now running a stock image on eMMC and I’m about to go mad, lol.)

I have a NanoPi Zero 2 running from SD card as well es from eMMC. No issues at all

Doesn’t matter what image you run from SD card, you are able to flash a DietPi image to eMMC. It can’t be easier and more straightforward.

─────────────────────────────────────────────────────
 DietPi v10.2.3 : 21:20 - Fri 04/17/26
 ─────────────────────────────────────────────────────
 ____   _        _    ____   _  _____ ____
|  _ \ (_)  ___ | |_ |  _ \ (_)|__  /|___ \
| | | || | / _ \| __|| |_) || |  / /   __) |
| |_| || ||  __/| |_ |  __/ | | / /_  / __/
|____/ |_| \___| \__||_|    |_|/____||_____|


 - Device model : NanoPi Zero2 (aarch64)
 - Uptime : up 1 minute
 - Kernel : 6.18.21-current-rockchip64
 - CPU temp : N/A
 - LAN IP : 192.168.0.89 (eth0)
 ─────────────────────────────────────────────────────

root@DietPiZ2:~#
root@DietPiZ2:~# lsblk -o name,fstype,label,size,ro,type,mountpoint,partuuid,uuid
NAME         FSTYPE LABEL  SIZE RO TYPE MOUNTPOINT PARTUUID                             UUID
mmcblk0                   57.6G  0 disk
└─mmcblk0p1  ext4         57.6G  0 part /          2120620e-87bb-4a85-82e3-383120c3d0ba e6a2f6a2-8f94-4c53-8265-9d7d6f5b1b95
mmcblk0boot0                 4M  1 disk
mmcblk0boot1                 4M  1 disk
root@DietPiZ2:~#

Reading Moving a running DietPi system to a USB stick/disk or an onboard eMMC – DietPi Blog , it says that I need to set the file system to read only before copying the microSD card’s contents to eMMC. It also warns me that β€˜If you set the file system to read only, an access via SSH is not possible after the reboot, i.e. in this case you need access to the local console (via keyboard and monitor).β€˜

After the dd copy, I need to shutdown the system and start it without the microSD and then β€˜change the root filesystem back to read/writeβ€˜.

Wouldn’t that be impossible over SSH, since SSH access is not possible after the reboot? I don’t have UART access.

I decided to go ahead without the RO step. Everything worked fine!

root@DietPi:~# lsblk
NAME         MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
mmcblk0      179:0    0 14.5G  0 disk
└─mmcblk0p1  179:1    0 14.4G  0 part /
mmcblk2      179:32   0 58.2G  0 disk
β”œβ”€mmcblk2p1  179:33   0    4M  0 part
β”œβ”€mmcblk2p2  179:34   0    4M  0 part
β”œβ”€mmcblk2p3  179:35   0    4M  0 part
β”œβ”€mmcblk2p4  179:36   0   16M  0 part
β”œβ”€mmcblk2p5  179:37   0   40M  0 part
β”œβ”€mmcblk2p6  179:38   0   32M  0 part
β”œβ”€mmcblk2p7  179:39   0   32M  0 part
β”œβ”€mmcblk2p8  179:40   0  1.7G  0 part
└─mmcblk2p9  179:41   0 56.4G  0 part
mmcblk2boot0 179:64   0    4M  1 disk
mmcblk2boot1 179:96   0    4M  1 disk
root@DietPi:~# dd if=/dev/mmcblk0 of=/dev/mmcblk2 bs=1M status=progress
15514730496 bytes (16 GB, 14 GiB) copied, 300 s, 51.7 MB/s
14804+0 records in
14804+0 records out
15523119104 bytes (16 GB, 14 GiB) copied, 302.183 s, 51.4 MB/s
root@DietPi:~# lsblk
NAME         MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
mmcblk0      179:0    0 14.5G  0 disk
└─mmcblk0p1  179:1    0 14.4G  0 part /
mmcblk2      179:32   0 58.2G  0 disk
└─mmcblk2p1  179:33   0 14.4G  0 part
mmcblk2boot0 179:64   0    4M  1 disk
mmcblk2boot1 179:96   0    4M  1 disk

^ I had to expand the 14.4G mmcblk2p1 partition to fully use the 64G eMMC.

the ro is needed if you transfer a running system itself. It basically should ensure a consistent status. It is not needed if you flash an image directly from a running SD card.

Which image did you used to boot of your SD card? I can try to replicate your steps. The wifi module should not have an effect to the system, if you still try to use ethernet.

This is a reaction to my deleted post, I think. I thought DietPi wasn’t booting well, but my Unify clients list is just unreliably slow. I think it only lists DietPi after the initial setup fully finishes, even though the Zero2 had gotten an IP address for quite a while. So in the end, everything works as described. Thanks for your help!

Am I not doing exactly that with dd if=/dev/mmcblk0 of=/dev/mmcblk2 bs=1M status=progress from a running system that booted from SD? Afaik I’m not flasing an image, but copying the SD card to eMMC.

Asking this, because I’m setting up a second Zero2 and had an issue that could be related to consistency.