Manjaro Root Migration, from an SSD to another
Background
My old SSD failed to keep my capacity demandsm though it is still very healthy. (89% remaining in SMART report)
With the price of TLC SSDs dropping below my old SSD’s price while doubling storage capacity, I have been tempted to upgrade my existing one. Eventually, the urge was triggered by the Black Friday sale!
Partitioning and Formatting
Enough talking, let’s get our hands dirty.
I like the simplcity of fdisk
.
fdisk /dev/nvme0n1
# nvme0n1p1: efi
# nvme0n1p2: swap 32GB
nvme01p3: /
Next, we need to create filesystems for those partitions.
The default inode ratio
for ext4
is quite small. It might not be significant for small partitions (tens of Gigibytes, yes, not Gigabytes),
but the space waste is considerable for big partitions. A typical Linux root filesystem will be unlikely to
use-up all the available inodes.
The ratio for huge
type is defined in /etc/mke2fs.conf
.
It is 65536 Bytes = 64KiB.
mkfs.etx4 -T huge /dev/nvme0n1p3
We also need to create a vfat
FS for UEFI booting.
mkfs.vfat /dev/nvme0n1p1
Finally, swap
FS for system swap usage.
mkfs.swap /dev/nvmen1p2
Migrate Data in the Root Filesystem
First, mount the old root FS and the empty new one.
mount /dev/nvme0n1p3 /mnt/new_root
mount /dev/nvme1n1p3 /mnt/old_root
mount /dev/nvme0n1p1 /mnt/new_efi
mount /dev/nvme1n1p1 /mnt/old_efi
Root FS Data Transfer
Next, we use rsync
to copy everything, literally everything
(hardlink, symbolic link,
-a
: archive mode, the mode for our purpuse. Equal to-rlptgoD
-r
: recurse into directories-l
: copy symlinks as symlinks-p
: perseve permissions-t
: preserve modification times-g
: preserve group-o
: preserve owner-D
:--devices
and--specials
, preserve device and special files
-h
: output numbers in human-readable format-H
: preserve hardlinks-A
: preserve ACLs (Access Control List)-X
: preserve extended attributes-x
:--one-file-system
, don’t cross filesystem boundaries-P
:--partial
and--progress
- keep partially transferred files
- show progress during transfer (for every files, can be annoying and taxing to performance)
rsync -ahHAXx /mnt/old_root/ /mnt/new_root
Update fstab and grub config
Use blkid
to list UUID for the new root filesystem.
The output looks something like this:
/dev/nvme0n1p1: UUID="<efi-uuid>" TYPE="..." PARTUUID="..."
/dev/nvme0n1p3: UUID="<rootfs-uuid>" TYPE="..." PARTUUID="..."
...
In /etc/fstab
, update the UUID for /
to the new one. (<rootfs-uuid>)
In /etc/default/grub
:
default: resume=<efi-uuid> ...
Finally, regenerate GRUB in the EFI partition.
To change root. Luckily, Mnajaro architect installation media provides
manjaro-chroot
to properly setup mount points.
grub-install
update-grub
If nothing goes wrong, we can now reboot into our new home. Oh, remember to change the boot order in your BIOS/UEFI.