PopOS System Recovery and Partition Migration Notes
Background
Yesterday, my PopOS system broke unexpectedly. The refresh install option failed, and attempting to reinstall while preserving the old /var
and /home
partitions was unsuccessful.
Solution: Fresh Custom Installation
Performed a clean custom installation with:
/boot/efi
- formatted/
- formatted/recovery
- formatted
This approach worked successfully, then migrated data from old partitions.
Partition Migration Process
Tools Used
parted --list # Get partition information
blkid # Get partition UUIDs
Note: Couldn't stop GDM or enter single-user mode (system would hang). Performed migration on running system instead.
1. Home Partition Migration (/dev/nvme0n1p8)
sudo mv /home /home.bak # Backup current home
sudo mkdir /home
sudo mount /dev/nvme0n1p8 /home
ls /home # Confirm correct partition
sudo blkid /dev/nvme0n1p8 # Get UUID
sudo vi /etc/fstab
Added to /etc/fstab
:
UUID=32e4ed56-6ed9-4f14-9585-ffff54f997b2 /home ext4 defaults 0 2
Rebooted to verify system stability.
2. Backup Partition Setup (/dev/nvme0n1p10)
sudo parted --list
sudo blkid /dev/nvme0n1p10
sudo vi /etc/fstab
Added to /etc/fstab
:
UUID=8aba0dd5-7058-4036-8a08-fcd1e0e002bc /backup ext4 defaults 0 2
sudo mount -a # Test mount configuration
3. Var Partition Migration (/dev/nvme0n1p7)
# Mount old var partition and backup data
sudo mkdir /mnt/var
sudo mount /dev/nvme0n1p7 /mnt/var
sudo tar -czpvf /backup/old-var-backup.tar.gz -C /mnt var
or backup docker/crontabs only
sudo tar -czpvf /backup/old-docker-backup.tar.gz -C /mnt var/lib/docker
sudo tar -czpvf /backup/old-cron-backup.tar.gz -C /mnt var/spool/cron
# Prepare new var partition
sudo umount /mnt/var
sudo mkfs.ext4 /dev/nvme0n1p7 # Format old var partition
# Copy current var data to new partition
sudo mkdir /mnt/new-var
sudo mount /dev/nvme0n1p7 /mnt/new-var
sudo cp -av /var/* /mnt/new-var/
# Update fstab and switch to new partition
sudo blkid /dev/nvme0n1p7
sudo vi /etc/fstab # Add var partition entry
sudo mv /var /var.old && sudo mkdir /var && sudo mount -a
Restore old var data
# update system
apt update && apt upgrade
sudo apt purge nano # enable vi EDITOR in visudo
sudo apt install curl
# re-enable davidwei ALL=(ALL:ALL) NOPASSWD:ALL
# install docker
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor --yes -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"| sudo tee /etc/apt/sources.list.d/docker.list > /dev/null # add docker apt source
sudo apt update && sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# add current user to docker group
sudo usermod -aG docker davidwei
# restore old docker/cron data
# 1. Stop Docker services properly
sudo systemctl stop docker.socket
sudo systemctl stop docker.service
# 2. Extract docker data in one command
sudo tar -xzpf /backup/old-var-backup.tar.gz -C / var/lib/docker
sudo tar -xzpf /backup/old-var-backup.tar.gz -C / var/spoon/cron
or if there are spearate backups:
sudo tar -xzpf /backup/old-var-backup.tar.gz -C / var/lib/docker
sudo tar -xzpf /backup/old-var-backup.tar.gz -C / var/spool/cron/crontabs
sudo chmod og+rx /var/spool/cron/crontabs/
sudo chown davidwei:davidwei /var/spool/cron/crontabs/davidwei
sudo systemctl restart cron
# 3. Start Docker services
sudo systemctl start docker.service
sudo systemctl start docker.socket
# 4. Verify
docker volume ls
docker images
docker ps -a
# re-install tailscale / set no-expiry / rename to xps / change cloudflare dns to new IP
curl -fsSL https://tailscale.com/install.sh | sh
# re-install google-chrome
sudo dpkg -i ~/Downloads/google-chrome-stable_current_amd64.deb
# reinstall other utils
sudo apt install tree ncdu vim gnome-sushi mc clang ninja-build mesa-utils libgtk-3-dev cmake mysql-client-core-8.0 libstdc++-12-dev build-essential pkg-config htop mc ssh meld
# reinstall fcitx
sudo apt install fcitx5-rime fcitx5-chinese-addons
Key Lessons Learned
- Fresh installation with custom partitioning was more reliable than trying to preserve old partitions during install
- System migration on a running system worked fine when rescue mode wasn't accessible
- Always backup critical data before formatting partitions
- Test each partition mount configuration before proceeding to the next step
Status: Migration completed successfully. System running normally with all data preserved.