Filesystem Size Used Avail Use% Mounted on
/dev/root 629G 134G 496G 22% /
/dev/nvme0n1p16 881M 159M 660M 20% /boot
/dev/nvme0n1p15 105M 6.2M 99M 6% /boot/efi
Filesystem Size Used Avail Use% Mounted on
/dev/root 629G 134G 496G 22% /
/dev/nvme0n1p16 881M 159M 660M 20% /boot
/dev/nvme0n1p15 105M 6.2M 99M 6% /boot/efi
Filesystem Size Used Avail Use% Mounted on
/dev/root 629G 134G 496G 22% /
/dev/nvme0n1p16 881M 159M 660M 20% /boot
/dev/nvme0n1p15 105M 6.2M 99M 6% /boot/efi
nvme0n1 259:0 0 650G 0 disk
├─nvme0n1p1 259:1 0 649G 0 part /
├─nvme0n1p14 259:2 0 4M 0 part
├─nvme0n1p15 259:3 0 106M 0 part /boot/efi
└─nvme0n1p16 259:4 0 913M 0 part /boot
nvme0n1 259:0 0 650G 0 disk
├─nvme0n1p1 259:1 0 649G 0 part /
├─nvme0n1p14 259:2 0 4M 0 part
├─nvme0n1p15 259:3 0 106M 0 part /boot/efi
└─nvme0n1p16 259:4 0 913M 0 part /boot
nvme0n1 259:0 0 650G 0 disk
├─nvme0n1p1 259:1 0 649G 0 part /
├─nvme0n1p14 259:2 0 4M 0 part
├─nvme0n1p15 259:3 0 106M 0 part /boot/efi
└─nvme0n1p16 259:4 0 913M 0 part /boot
# Boost old volume (source reads)
aws ec2 modify-volume --volume-id vol-OLD --iops 16000 --throughput 1000 # Boost new volume (destination writes)
aws ec2 modify-volume --volume-id vol-NEW --iops 16000 --throughput 1000
# Boost old volume (source reads)
aws ec2 modify-volume --volume-id vol-OLD --iops 16000 --throughput 1000 # Boost new volume (destination writes)
aws ec2 modify-volume --volume-id vol-NEW --iops 16000 --throughput 1000
# Boost old volume (source reads)
aws ec2 modify-volume --volume-id vol-OLD --iops 16000 --throughput 1000 # Boost new volume (destination writes)
aws ec2 modify-volume --volume-id vol-NEW --iops 16000 --throughput 1000
lsblk /dev/nvme1n1
# NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
# nvme1n1 259:5 0 200G 0 disk
lsblk /dev/nvme1n1
# NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
# nvme1n1 259:5 0 200G 0 disk
lsblk /dev/nvme1n1
# NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
# nvme1n1 259:5 0 200G 0 disk
sudo sgdisk -R /dev/nvme1n1 /dev/nvme0n1
sudo sgdisk -R /dev/nvme1n1 /dev/nvme0n1
sudo sgdisk -R /dev/nvme1n1 /dev/nvme0n1
Problem: partition 1 is too big for the disk.
Aborting write operation!
Problem: partition 1 is too big for the disk.
Aborting write operation!
Problem: partition 1 is too big for the disk.
Aborting write operation!
sudo sgdisk -p /dev/nvme0n1
sudo sgdisk -p /dev/nvme0n1
sudo sgdisk -p /dev/nvme0n1
Number Start (sector) End (sector) Size Code Name 1 2099200 1363148766 649.0 GiB 8300 14 2048 10239 4.0 MiB EF02 15 10240 227327 106.0 MiB EF00 16 227328 2097152 913.0 MiB EA00
Number Start (sector) End (sector) Size Code Name 1 2099200 1363148766 649.0 GiB 8300 14 2048 10239 4.0 MiB EF02 15 10240 227327 106.0 MiB EF00 16 227328 2097152 913.0 MiB EA00
Number Start (sector) End (sector) Size Code Name 1 2099200 1363148766 649.0 GiB 8300 14 2048 10239 4.0 MiB EF02 15 10240 227327 106.0 MiB EF00 16 227328 2097152 913.0 MiB EA00
sudo sgdisk --zap-all /dev/nvme1n1 # p14 - BIOS boot (exact same sectors)
sudo sgdisk -n 14:2048:10239 -t 14:EF02 /dev/nvme1n1 # p15 - EFI (exact same sectors)
sudo sgdisk -n 15:10240:227327 -t 15:EF00 /dev/nvme1n1 # p16 - Boot (exact same sectors)
sudo sgdisk -n 16:227328:2097152 -t 16:EA00 /dev/nvme1n1 # p1 - Root — fill all remaining space on the new disk
sudo sgdisk -n 1:2099200:0 -t 1:8300 /dev/nvme1n1
sudo sgdisk --zap-all /dev/nvme1n1 # p14 - BIOS boot (exact same sectors)
sudo sgdisk -n 14:2048:10239 -t 14:EF02 /dev/nvme1n1 # p15 - EFI (exact same sectors)
sudo sgdisk -n 15:10240:227327 -t 15:EF00 /dev/nvme1n1 # p16 - Boot (exact same sectors)
sudo sgdisk -n 16:227328:2097152 -t 16:EA00 /dev/nvme1n1 # p1 - Root — fill all remaining space on the new disk
sudo sgdisk -n 1:2099200:0 -t 1:8300 /dev/nvme1n1
sudo sgdisk --zap-all /dev/nvme1n1 # p14 - BIOS boot (exact same sectors)
sudo sgdisk -n 14:2048:10239 -t 14:EF02 /dev/nvme1n1 # p15 - EFI (exact same sectors)
sudo sgdisk -n 15:10240:227327 -t 15:EF00 /dev/nvme1n1 # p16 - Boot (exact same sectors)
sudo sgdisk -n 16:227328:2097152 -t 16:EA00 /dev/nvme1n1 # p1 - Root — fill all remaining space on the new disk
sudo sgdisk -n 1:2099200:0 -t 1:8300 /dev/nvme1n1
sudo mkfs.ext4 /dev/nvme1n1p1 # Root
sudo mkfs.ext4 /dev/nvme1n1p16 # Boot
sudo mkfs.fat -F32 /dev/nvme1n1p15 # EFI
# p14 is BIOS boot — no filesystem needed
sudo mkfs.ext4 /dev/nvme1n1p1 # Root
sudo mkfs.ext4 /dev/nvme1n1p16 # Boot
sudo mkfs.fat -F32 /dev/nvme1n1p15 # EFI
# p14 is BIOS boot — no filesystem needed
sudo mkfs.ext4 /dev/nvme1n1p1 # Root
sudo mkfs.ext4 /dev/nvme1n1p16 # Boot
sudo mkfs.fat -F32 /dev/nvme1n1p15 # EFI
# p14 is BIOS boot — no filesystem needed
LABEL=cloudimg-rootfs / ext4 discard,commit=30,errors=remount-ro 0 1
LABEL=BOOT /boot ext4 defaults 0 2
LABEL=UEFI /boot/efi vfat umask=0077 0 1
LABEL=cloudimg-rootfs / ext4 discard,commit=30,errors=remount-ro 0 1
LABEL=BOOT /boot ext4 defaults 0 2
LABEL=UEFI /boot/efi vfat umask=0077 0 1
LABEL=cloudimg-rootfs / ext4 discard,commit=30,errors=remount-ro 0 1
LABEL=BOOT /boot ext4 defaults 0 2
LABEL=UEFI /boot/efi vfat umask=0077 0 1
sudo e2label /dev/nvme1n1p1 cloudimg-rootfs
sudo e2label /dev/nvme1n1p16 BOOT
sudo fatlabel /dev/nvme1n1p15 UEFI
sudo e2label /dev/nvme1n1p1 cloudimg-rootfs
sudo e2label /dev/nvme1n1p16 BOOT
sudo fatlabel /dev/nvme1n1p15 UEFI
sudo e2label /dev/nvme1n1p1 cloudimg-rootfs
sudo e2label /dev/nvme1n1p16 BOOT
sudo fatlabel /dev/nvme1n1p15 UEFI
sudo mkdir /mnt/newvol
sudo mount /dev/nvme1n1p1 /mnt/newvol
sudo mkdir -p /mnt/newvol/boot/efi
sudo mount /dev/nvme1n1p16 /mnt/newvol/boot
sudo mount /dev/nvme1n1p15 /mnt/newvol/boot/efi
sudo mkdir /mnt/newvol
sudo mount /dev/nvme1n1p1 /mnt/newvol
sudo mkdir -p /mnt/newvol/boot/efi
sudo mount /dev/nvme1n1p16 /mnt/newvol/boot
sudo mount /dev/nvme1n1p15 /mnt/newvol/boot/efi
sudo mkdir /mnt/newvol
sudo mount /dev/nvme1n1p1 /mnt/newvol
sudo mkdir -p /mnt/newvol/boot/efi
sudo mount /dev/nvme1n1p16 /mnt/newvol/boot
sudo mount /dev/nvme1n1p15 /mnt/newvol/boot/efi
# Root filesystem
sudo rsync -axHAWXS --numeric-ids --info=progress2 / /mnt/newvol/ # Boot and EFI
sudo rsync -axHAWXS --numeric-ids --info=progress2 /boot/ /mnt/newvol/boot/
sudo rsync -axHAWXS --numeric-ids --info=progress2 /boot/efi/ /mnt/newvol/boot/efi/
# Root filesystem
sudo rsync -axHAWXS --numeric-ids --info=progress2 / /mnt/newvol/ # Boot and EFI
sudo rsync -axHAWXS --numeric-ids --info=progress2 /boot/ /mnt/newvol/boot/
sudo rsync -axHAWXS --numeric-ids --info=progress2 /boot/efi/ /mnt/newvol/boot/efi/
# Root filesystem
sudo rsync -axHAWXS --numeric-ids --info=progress2 / /mnt/newvol/ # Boot and EFI
sudo rsync -axHAWXS --numeric-ids --info=progress2 /boot/ /mnt/newvol/boot/
sudo rsync -axHAWXS --numeric-ids --info=progress2 /boot/efi/ /mnt/newvol/boot/efi/
sudo mount --bind /dev /mnt/newvol/dev
sudo mount --bind /proc /mnt/newvol/proc
sudo mount --bind /sys /mnt/newvol/sys
sudo mount --bind /sys/firmware/efi/efivars /mnt/newvol/sys/firmware/efi/efivars sudo chroot /mnt/newvol grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=ubuntu
update-grub
exit
sudo mount --bind /dev /mnt/newvol/dev
sudo mount --bind /proc /mnt/newvol/proc
sudo mount --bind /sys /mnt/newvol/sys
sudo mount --bind /sys/firmware/efi/efivars /mnt/newvol/sys/firmware/efi/efivars sudo chroot /mnt/newvol grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=ubuntu
update-grub
exit
sudo mount --bind /dev /mnt/newvol/dev
sudo mount --bind /proc /mnt/newvol/proc
sudo mount --bind /sys /mnt/newvol/sys
sudo mount --bind /sys/firmware/efi/efivars /mnt/newvol/sys/firmware/efi/efivars sudo chroot /mnt/newvol grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=ubuntu
update-grub
exit
VFS: Cannot open root device "PARTUUID=ede263c9-faae-4d70-b586-306f8f26c5d3"
Kernel panic - not syncing: VFS: Unable to mount root fs
VFS: Cannot open root device "PARTUUID=ede263c9-faae-4d70-b586-306f8f26c5d3"
Kernel panic - not syncing: VFS: Unable to mount root fs
VFS: Cannot open root device "PARTUUID=ede263c9-faae-4d70-b586-306f8f26c5d3"
Kernel panic - not syncing: VFS: Unable to mount root fs
/etc/default/grub.d/40-force-partuuid.cfg
/etc/default/grub.d/40-force-partuuid.cfg
/etc/default/grub.d/40-force-partuuid.cfg
GRUB_FORCE_PARTUUID=ede263c9-faae-4d70-b586-306f8f26c5d3
GRUB_FORCE_PARTUUID=ede263c9-faae-4d70-b586-306f8f26c5d3
GRUB_FORCE_PARTUUID=ede263c9-faae-4d70-b586-306f8f26c5d3
mkdir /mnt
mount /dev/nvme0n1p1 /mnt cat /mnt/etc/default/grub.d/40-force-partuuid.cfg
# GRUB_FORCE_PARTUUID=ede263c9-faae-4d70-b586-306f8f26c5d3 ← old PARTUUID # Update it with the new partition's PARTUUID
echo 'GRUB_FORCE_PARTUUID=651df20d-498a-4d06-aeaf-1ddc1fc22872' \ > /mnt/etc/default/grub.d/40-force-partuuid.cfg
mkdir /mnt
mount /dev/nvme0n1p1 /mnt cat /mnt/etc/default/grub.d/40-force-partuuid.cfg
# GRUB_FORCE_PARTUUID=ede263c9-faae-4d70-b586-306f8f26c5d3 ← old PARTUUID # Update it with the new partition's PARTUUID
echo 'GRUB_FORCE_PARTUUID=651df20d-498a-4d06-aeaf-1ddc1fc22872' \ > /mnt/etc/default/grub.d/40-force-partuuid.cfg
mkdir /mnt
mount /dev/nvme0n1p1 /mnt cat /mnt/etc/default/grub.d/40-force-partuuid.cfg
# GRUB_FORCE_PARTUUID=ede263c9-faae-4d70-b586-306f8f26c5d3 ← old PARTUUID # Update it with the new partition's PARTUUID
echo 'GRUB_FORCE_PARTUUID=651df20d-498a-4d06-aeaf-1ddc1fc22872' \ > /mnt/etc/default/grub.d/40-force-partuuid.cfg
mount /dev/nvme0n1p16 /mnt/boot
mount /dev/nvme0n1p15 /mnt/boot/efi
mount --bind /dev /mnt/dev
mount --bind /proc /mnt/proc
mount --bind /sys /mnt/sys
mount --bind /sys/firmware/efi/efivars /mnt/sys/firmware/efi/efivars chroot /mnt update-grub
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=ubuntu
exit reboot
mount /dev/nvme0n1p16 /mnt/boot
mount /dev/nvme0n1p15 /mnt/boot/efi
mount --bind /dev /mnt/dev
mount --bind /proc /mnt/proc
mount --bind /sys /mnt/sys
mount --bind /sys/firmware/efi/efivars /mnt/sys/firmware/efi/efivars chroot /mnt update-grub
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=ubuntu
exit reboot
mount /dev/nvme0n1p16 /mnt/boot
mount /dev/nvme0n1p15 /mnt/boot/efi
mount --bind /dev /mnt/dev
mount --bind /proc /mnt/proc
mount --bind /sys /mnt/sys
mount --bind /sys/firmware/efi/efivars /mnt/sys/firmware/efi/efivars chroot /mnt update-grub
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=ubuntu
exit reboot
sudo blkid /dev/nvme0n1p1
# ... PARTUUID="651df20d-498a-4d06-aeaf-1ddc1fc22872" ...
sudo blkid /dev/nvme0n1p1
# ... PARTUUID="651df20d-498a-4d06-aeaf-1ddc1fc22872" ...
sudo blkid /dev/nvme0n1p1
# ... PARTUUID="651df20d-498a-4d06-aeaf-1ddc1fc22872" ...
echo 'GRUB_FORCE_PARTUUID=651df20d-498a-4d06-aeaf-1ddc1fc22872' \ > /etc/default/grub.d/40-force-partuuid.cfg update-grub
echo 'GRUB_FORCE_PARTUUID=651df20d-498a-4d06-aeaf-1ddc1fc22872' \ > /etc/default/grub.d/40-force-partuuid.cfg update-grub
echo 'GRUB_FORCE_PARTUUID=651df20d-498a-4d06-aeaf-1ddc1fc22872' \ > /etc/default/grub.d/40-force-partuuid.cfg update-grub
Filesystem Size Used Avail Use% Mounted on
/dev/root 196G 134G 55G 71% /
/dev/nvme0n1p16 881M 159M 660M 20% /boot
/dev/nvme0n1p15 105M 6.2M 99M 6% /boot/efi
Filesystem Size Used Avail Use% Mounted on
/dev/root 196G 134G 55G 71% /
/dev/nvme0n1p16 881M 159M 660M 20% /boot
/dev/nvme0n1p15 105M 6.2M 99M 6% /boot/efi
Filesystem Size Used Avail Use% Mounted on
/dev/root 196G 134G 55G 71% /
/dev/nvme0n1p16 881M 159M 660M 20% /boot
/dev/nvme0n1p15 105M 6.2M 99M 6% /boot/efi - Instance: t3.large (Ubuntu 24.04 Noble Numbat)
- Current volume: 650GB gp3, 22% used (~134GB actual data)
- Target volume: 200GB (plenty of headroom)
- Boot setup: GPT + UEFI with 4 partitions - Attach a new 200GB volume to the running instance
- Recreate the partition table manually
- Format all partitions
- Copy all data with rsync
- Reinstall GRUB
- Swap the volumes - Delete the old 650GB volume — it's just costing money now
- Revert EBS throughput on the new volume back to 3000 IOPS / 125 MB/s (unless you actually need the boost)
- Tag the new volume clearly so future-you knows what it is - [ ] Confirm actual used space with df -h
- [ ] Scale up instance type for faster copy (optional but worth it)
- [ ] Create and attach new volume in the same AZ
- [ ] Boost EBS throughput on both volumes
- [ ] Wipe new disk: sgdisk --zap-all
- [ ] Recreate partitions manually using exact sector positions from old disk
- [ ] Format all partitions (ext4 for root/boot, FAT32 for EFI, skip BIOS boot)
- [ ] Set filesystem labels to match old disk
- [ ] Mount all partitions in correct order
- [ ] rsync root, boot, and EFI separately
- [ ] Update /etc/default/grub.d/40-force-partuuid.cfg with the new PARTUUID ← don't skip this
- [ ] Chroot, run update-grub and grub-install
- [ ] Unmount cleanly
- [ ] Stop instance, swap volumes, start instance
- [ ] Verify disk size, mounts, and services
- [ ] Delete old volume
- [ ] Revert EBS throughput to baseline