Umbrel migration case: Fixing boot errors after moving from 1TB HDD to 2TB SSD
Introduction
I recently migrated my Umbrel node from a 1TB HDD to a 2TB SSD to improve performance and storage capacity. While cloning the disk, I ran into boot errors caused by partition mismatches and PARTUUID conflicts that prevented Umbrel from booting properly.
After troubleshooting, I found a reliable step-by-step method to migrate Umbrel without breaking the boot sequence or Docker environment. I’m sharing this to help anyone facing similar cloning issues.
The Problem
Cloning from a smaller HDD to a larger SSD isn’t always straightforward. After cloning, I encountered:
- Boot failures with the error:
bash
Gave up waiting for root file system device. Common problems:
Boot args (cat /proc/cmdline)
Check rootdelay= (did the system wait long enough?)
Missing modules (cat /proc/modules; ls /dev)
ALERT! PARTUUID=d2a8e92e-02 does not exist. Dropping to shell!
- Partition layout and UUID mismatches
- Unused space not recognized or usable
The Solution (Step-by-step)
Step 1: Clone the original 1TB HDD to the 2TB SSD
Use a cloning tool like dd, (I used “MiniTool Partition Wizard Free” for windows):
bash
sudo dd if=/dev/sdX of=/dev/sdY bs=64K status=progress
- Replace
sdXwith the source HDD - Replace
sdYwith the target SSD
This clones all partitions, the partition table, and the bootloader. However, leftover layout gaps and old UUID references will need fixing.
Step 2: Resize partitions on the SSD with GParted
- Boot into a GParted Live USB with the 2TB SSD connected.
- Use GParted to:
- Shrink any leftover/unallocated space that came to SSD from the old HDD layout to zero
- Expand the last partition to fill the rest of the SSD
- Apply changes and shut down.
Step 3: Fix PARTUUID mismatch error
Umbrel on x86 uses GRUB as the bootloader instead of a cmdline.txt file.
Step 3.1 — Mount the boot partition
- Boot into a live Linux session (Ubuntu Live or GParted Live or any Linux).
- Plug in the 2TB SSD and open a terminal.
- Create a mount point and mount the boot partition (usually
/dev/sdX1):
bash
sudo mkdir /mnt/boot
sudo mount /dev/sdX1 /mnt/boot
Replace
sdX1with your actual partition fromlsblk.
Step 3.2 — Edit the GRUB configuration
- Navigate to the GRUB folder:
bash
cd /mnt/boot/grub
- Edit the GRUB config file (
grub.cfgor similar):
bash
sudo nano grub.cfg
- Find all occurrences of
PARTUUID=...in the boot parameters. - Replace the old
PARTUUIDvalues with the new ones you find by running:
bash
lsblk -o NAME,FSTYPE,FSVER,LABEL,UUID,PARTUUID,FSAVAIL,FSUSE%,MOUNTPOINTS
This command lists the new PARTUUIDs for all partitions.
- Save and exit the editor (
Ctrl+O, Enter,Ctrl+X). - Unmount the boot partition:
bash
sudo umount /mnt/boot
Step 4: Correct all /etc/fstab files with the new PARTUUIDs
Some Umbrel partitions have an fstab file referencing old PARTUUIDs. All must be updated.
Step 4.1 — Identify partitions and UUIDs
- Run:
bash
lsblk -o NAME,FSTYPE,FSVER,LABEL,UUID,PARTUUID,FSAVAIL,FSUSE%,MOUNTPOINTS
- Note the new PARTUUIDs for each partition.
Step 4.2 — Find and edit all fstab files
- Mount each partition that contains an
fstabfile, for example:
bash
sudo mkdir /mnt/part2
sudo mount /dev/sdX2 /mnt/part2
sudo nano /mnt/part2/etc/fstab
- Replace all old PARTUUID references with the new ones.
- Save and unmount:
bash
sudo umount /mnt/part2
- Repeat for all partitions containing
fstabfiles.
Final Step: Reboot and verify
- Power off the live USB environment.
- Boot from the 2TB SSD.
- Umbrel should boot normally without PARTUUID errors.
- Verify that all apps (Bitcoin Core, LND, etc.) are running as expected.
Conclusion
Migrating Umbrel from a smaller HDD to a larger SSD requires careful handling of partitions and UUIDs. Cloning alone isn’t enough; you must update bootloader configs and fstab files to reflect new UUIDs.
I hope this helps others avoid the frustration I faced! Feel free to ask questions or share alternative solutions.