Pi 4 - m.2 won't boot when another usb attached, aarch64

Hello,

I boot my raspberry pi 4 from a 1 TB m.2 external usb drive (no microsd).
It won’t boot when another 6 TB (seagate HDD) is attached.

The m.2:

$ lsusb
`ID 0bda:9210 Realtek Semiconductor Corp. RTL9210 M.2 NVME Adapter`

Pi 4 firmware:

$ rpi-eeprom-update
   CURRENT: 000138c0
    LATEST: 000138c0
$ uname -a
Linux emby 6.1.37-1-MANJARO-ARM-RPI #1 SMP PREEMPT Mon Jul  3 12:19:05 UTC 2023 aarch64 GNU/Linux

Anyone have any ideas how to fix this?
Cheers!

please post the output of

lsblk -f

seems your drive is not set in fstab

https://wiki.archlinux.org/title/Fstab

Hi Olli,

Appreciate the swift reply.

I cloned from a (working) usb stick to the m.2, so the /etc/fstab will be the same. I use partuid to mount

PARTUUID=9fc161bc-e459-4166-9628-cf588e4071dd /mnt/lydon btrfs defaults,noatime,nofail 0 1

I set it so the device not being found would not impede boot.

Anyway, to answer your request:

$ lsblk -f
NAME   FSTYPE FSVER LABEL      UUID                                 FSAVAIL FSUSE% MOUNTPOINTS
sda                                                                                
├─sda1 vfat   FAT16 BOOT_MNJRO A170-35A0                             397.4M    13% /boot
└─sda2 ext4   1.0   ROOT_MNJRO de46d6b1-424d-487e-bb3a-3876a741b741    5.9G    53% /
zram0                                                                              [SWAP]

The 6 TB drive is not mounted here, of course.
(I will soon create a partition to use the rest of the m.2 1 TB)

Cheers!

Is the 6 TB drive self powered.

Hi Darksky.

Yes, it is powered. If related, the pi 4 will not power fully off to allow rebooting with the powered 6 TB drive attached.

As a workaround, with the usb stick (non m.2) - to reboot I used ‘poweroff’, then an ewelink plug to kill power (to both the pi 4 and the 6 TB drive). Upon turning the plug back on, the pi 4 would boot OK and the 6 TB would be mounted.

This is not the case for the m.2 boot - as the 6 TB being present prevents boot.

Cheers!

Looks like to me you are using UUID to mount the drive instead of PARTUUID.

[ray@jellyfin ~]$ sudo blkid /dev/sda2
/dev/sda2: LABEL=“ROOT_MNJRO” UUID=“dea345de-98de-49de-bec5-26feb3c2742f” BLOCK_SIZE=“4096” TYPE=“ext4” PARTUUID="b75fdbb1-02"

perhaps an uuid clash - uuid is universal unique identifer - thus you cannot have more than one partition with any given uuid

I use a rpi 4b 2G with an nvme attached using USB3 - not trouble booting.

Whether the connection ends up in a nvme or m2 doesn’t matter.

 $ cat /boot/cmdline.txt
root=PARTUUID=0746bbbc-02 rw rootwait console=serial0,115200 console=tty3 selinux=0 quiet splash plymouth.ignore-serial-consoles smsc95xx.turbo_mode=N dwc_otg.lpm_enable=0 kgdboc=serial0,115200 usbhid.mousepoll=8 audit=0 zswap.enabled=1 zswap.compressor=lz4 zswap.max_pool_percent=20 zswap.zpool=z3fold
$ cat /etc/fstab
# Static information about the filesystems.
# See fstab(5) for details.

# <file system> <dir> <type> <options> <dump> <pass>
PARTUUID=0746bbbc-01  /boot   vfat    defaults,noexec,nodev,showexec        0       0
PARTUUID=0746bbbc-02   /   ext4     defaults    0   1
$ lsblk -o path,uuid,partuuid
PATH       UUID                                 PARTUUID
/dev/sda                                        
/dev/sda1  1DE9-CB3F                            0746bbbc-01
/dev/sda2  c0f69054-ce52-4c0c-924e-a170f53fc610 0746bbbc-02
/dev/zram0  

Hi DS,

Not sure why that would be.
/boot/cmdline.txt
has
root=PARTUUID=8425215f-02 ----------

and
/etc/fstab
has

PARTUUID=8425215f-01  /boot   vfat    defaults,noexec,nodev,showexec     0   0
PARTUUID=8425215f-02   /   ext4     defaults    0   1
PARTUUID=9fc161bc-e459-4166-9628-cf588e4071dd /mnt/lydon btrfs defaults,noatime,nofail 0 1

I think
blkid
just gives UUID and PARTUID as an output.

@linux-aarhus
I will try using UUID and see if that resolves it - thanks.

My point I was trying to make is you are mixing up the PARTUUID= with the UUID= as specified with the command sudo blkid /dev/device#. The print out is as the system see’s your device.

You can use LABEL=??? or UUID=??? or PARTUUID=??? but use their values as your system goes by. Don’t try to swap one value for another.

[ray@jellyfin ~]$ sudo blkid /dev/sda2
/dev/sda2: LABEL=“ROOT_MNJRO” UUID=“dea345de-98de-49de-bec5-26feb3c2742f” BLOCK_SIZE=“4096” TYPE=“ext4” PARTUUID=“b75fdbb1-02”

Using above you can use:

LABEL=ROOT_MNJRO
UUID=dea345de-98de-49de-bec5-26feb3c2742f
PARTUUID=b75fdbb1-02

Notice the PARTUUID=b75fdbb1-02 value is in a different shorter format than the UUID= one. You had specified UUID= values in the PARTUUID= line in your fstab which does not exist.

Hi Darksky,

Firstly - I’d like to thank you for all the help you’ve given over the years in the archlinux forum. Sometimes to me directly, but often to someone who had the same issue as I had.

Secondly, while I understand it looks like a UUID I think it’s a PARTUID:

$ sudo lsblk
/dev/sda1: LABEL="lydon" UUID="c3cbf909-752f-494a-8691-7c2cb829281c" UUID_SUB="f3af839a-2635-486c-bede-331ee9e4e52a" BLOCK_SIZE="4096" TYPE="btrfs" PARTLABEL="lydon" PARTUUID="9fc161bc-e459-4166-9628-cf588e4071dd"

By the way, if I plug in the 6 TB to a booted pi4, I get I/O errors /usr/bin/ls not recognised etc, and need to unplug the pi4. At this point I’m thinking to set the 6 TB up on a NAS and point to that. Cheers!