NVME SSD won't boot as internal storage - only as external

I’m having trouble with my Manjaro install. I had installed this system on an M.2 NVME SSD in a PC, then took it out and put it into a USB-C enclosure, the system boots and works perfectly fine. I have used this system this way for a few months but yesterday I tried to put the SSD back into the PC, and now it won’t boot. I get to unlock the LUKS disk, but then I get this message:

Skipping fsck.
mount: /new_root: no filesystem specified.
You are now being dropped into an emergency shell.
sh: can't access tty; job control turned off
[rootfs ]# _

So I put the SSD back into the USB-C enclosure and it boots normally while it is in there. I repeated the above procedure for sanity check and the SSD only boots while in the enclosure, not while it’s an internal drive. I assume it’s an fstab issue? Any ideas how to fix this?

My fstab:

# <file system>             <mount point>  <type>  <options>  <dump>  <pass>
UUID=DAD5-B02F                            /boot/efi      vfat    umask=0077 0 2
/dev/mapper/luks-ac7c561e-98e4-4bdb-a3d5-e2f2dfcb2e61 /              ext4    defaults,noatime 0 1
tmpfs                                     /tmp           tmpfs   defaults,noatime,mode=1777 0 0
/dev/disk/by-uuid/a807f328-80d2-41f8-bb35-2b78ac41691a /run/media/daniel3984/a807f328-80d2-41f8-bb35-2b78ac41691a auto nosuid,nodev,nofail,x-gvfs-show,noauto 0 0

My crypttab:

# <name>               <device>                         <password> <options>
luks-ac7c561e-98e4-4bdb-a3d5-e2f2dfcb2e61 UUID=ac7c561e-98e4-4bdb-a3d5-e2f2dfcb2e61     /crypto_keyfile.bin luks

Updated: formatting and UUID names

Please format your post correctly with the features of this forum.

You don’t need to censor UUIDs, they are random characters local to your machine. It makes it harder to see a difference.

Hi and welcome to the Forum :+1:

This will change the device names and UUID’s used:

  • The NVMe = /dev/nvme#n# with a UUID for the device.
  • The HD in the USB-C enclosure will most likely become something like /dev/sda with a different UUID for the device.

That’s why the encrypted container will not be recognized, because of difference in configuration inside /etc/crypttab

  • You should use a simple name in the first column instead of luks-ac7c561e-98e4-4bdb-a3d5-e2f2dfcb2e61
  • Plus instead of UUID= in the second column use PARTUUID= or LABEL= or device name like /dev/nvme#n# or similar as appropriate for the device enclosure.

Ofcourse relecting the name in the first column in your fstab and maybe your kernel command line also…
See: man crypttab

Please edit your OP to use codeblocks for the output of your commands, see:

Do NOT mount under /run/media/ like that via fstab…

I did not make this name or fstab/crypttab myself, Manjaro did it automatically when I installed the OS with full disk encryption. If this naming is incorrect then the standard naming scheme Manjaro does when installing the OS is wrong?

Again, I simply mounted a LUKS volume in Dolphin when I plugged it in, and that’s where it puts the volume automatically. Then I used the Manjaro Settings Manager to auto-unlock and auto-load that
LUKS volume if it is attached. I did not do any manual edits here. This install is maybe 6 months old and I don’t do fstab/crypttab tinkering, I stick to default behaviours and use GUI apps to mount drives.


Short: I ended up fixing the problem by running mkinitcpio -P, then the drive booted in the internal M.2 slot normally.

Long: I managed to fix the problem but the solution is not conclusive. I plugged the SSD (in the USB enclosure still) to my work system, did some more digging and ran mkinitcpio -P as I saw this suggestion come up regularly on forums for this error message for others, but their problems were not the same as mine though. Then plugged in the SSD into yet another system’s M.2 slot (so internally) and booted it without any problem (I just used whatever system was available at the moment for tinkering). Then I plugged it into my original PC’s M.2 slot and it booted there too normally. So, as far as I can tell, mkinitpcio -P was the only change I have made and it now works as expected. I hope this helps or explains why it works, but I don’t know the details.

This topic was automatically closed 2 days after the last reply. New replies are no longer allowed.