Skip to content

SSD Cloning Guide: SATA to NVMe

Overview

This guide will help you clone your Kingston SH103S3 (120GB SATA SSD) to your Kingston SNV2S500G (500GB NVMe) drive.

Estimated Time: 45-60 minutes
Downtime Required: Yes (30-60 minutes)


⚠️ CRITICAL WARNINGS

  1. BACKUP YOUR DATA FIRST - Always have a backup before cloning
  2. Double-check drive names - dd will completely overwrite the target drive
  3. Verify source/target - Wrong drive selection = data loss
  4. Do NOT clone while OS is running - Boot from Live USB

Prerequisites

  • USB drive (4GB+) for Live Linux
  • Backup of important data
  • 45-60 minutes of server downtime scheduled
  • Access to BIOS/UEFI settings

Step 1: Create Live USB

# Download Ubuntu Live ISO (or SystemRescue)
# On another computer:
wget https://releases.ubuntu.com/22.04/ubuntu-22.04.3-desktop-amd64.iso

# Create bootable USB (replace sdX with your USB drive)
sudo dd if=ubuntu-22.04.3-desktop-amd64.iso of=/dev/sdX bs=4M status=progress
sync

Alternative: Use Rufus (Windows) or Etcher (cross-platform) to create bootable USB


Step 2: Boot from Live USB

  1. Insert the USB drive into your server
  2. Reboot and enter BIOS/UEFI (usually F2, F12, or DEL key)
  3. Set USB as first boot device
  4. Boot into "Try Ubuntu" (not Install)

Step 3: Identify Your Drives

# Open terminal in Live USB environment
# List all drives
lsblk

# Example output:
# NAME        SIZE  TYPE MOUNTPOINT
# sda         120G  disk              <- Your current OS drive (SATA)
# ├─sda1      512M  part              <- EFI partition (if UEFI)
# └─sda2      119G  part              <- Root partition
# nvme0n1     500G  disk              <- Target drive (NVMe)
# nvme1n1     512G  disk              <- Other NVMe
# nvme2n1     512G  disk              <- Other NVMe

# Verify which drive has your OS
sudo fdisk -l /dev/sda

⚠️ CRITICAL: Confirm /dev/sda is your source and /dev/nvme0n1 is your target!


Step 4: Clone the Drive

# Clone SATA SSD to NVMe
# This copies EVERYTHING: partitions, bootloader, data
sudo dd if=/dev/sda of=/dev/nvme0n1 bs=64K status=progress conv=noerror,sync

# Explanation:
# if=/dev/sda         <- Source drive (input file)
# of=/dev/nvme0n1     <- Target drive (output file)
# bs=64K              <- Block size (faster than default)
# status=progress     <- Show progress
# conv=noerror,sync   <- Continue on errors, pad with zeros

# Expected time: 20-40 minutes for 120GB

During cloning, you'll see:

5368709120 bytes (5.4 GB) copied, 45 s, 119 MB/s

Step 5: Verify the Clone

# After cloning completes, verify partition table
sudo fdisk -l /dev/nvme0n1

# Check filesystems
sudo fsck -n /dev/nvme0n1p2  # -n = no changes, just check

Step 6: Expand Partition (Optional)

Your NVMe is 500GB but the clone is only 120GB. To use the extra space:

# Install parted if not available
sudo apt install parted

# Expand the partition table
sudo parted /dev/nvme0n1
(parted) print                    # Show current partitions
(parted) resizepart 2 100%        # Resize partition 2 to use all space
(parted) quit

# Resize the filesystem
sudo e2fsck -f /dev/nvme0n1p2     # Check filesystem first
sudo resize2fs /dev/nvme0n1p2     # Expand filesystem

Step 7: Update BIOS Boot Order

  1. Shutdown the system: sudo shutdown -h now
  2. Remove the Live USB
  3. Enter BIOS/UEFI settings (F2, F12, or DEL during boot)
  4. Change boot order:
  5. First boot device: Kingston SNV2S (NVMe0)
  6. Second boot device: Kingston SH103S3 (SATA) - as backup
  7. Save and exit

Step 8: Test the New Drive

  1. System should boot from NVMe
  2. Verify you're on the right drive:

    lsblk
    df -h
    # Root (/) should be mounted on /dev/nvme0n1p2
    
  3. Check system logs for errors:

    sudo journalctl -b -p err
    dmesg | grep -i error
    
  4. Test critical services:

    systemctl status <your-important-services>
    

Step 9: Monitor for a Few Days

# Check NVMe health
sudo smartctl -a /dev/nvme0n1

# Monitor system logs
sudo journalctl -f

Run the system on NVMe for 2-3 days to ensure stability


Step 10: Repurpose Old SATA Drive

Once you're confident the NVMe works perfectly:

Option A: Keep as backup (recommended for 1-2 weeks)

# Just leave it connected, don't mount it

Option B: Wipe and use for storage

# Wipe the old drive
sudo dd if=/dev/zero of=/dev/sda bs=1M count=100 status=progress

# Create new partition
sudo fdisk /dev/sda
# (n = new partition, w = write)

# Format
sudo mkfs.ext4 /dev/sda1

# Mount
sudo mkdir /mnt/storage
sudo mount /dev/sda1 /mnt/storage

Method 2: Single-User Mode (If No Live USB Available)

Step 1: Backup Important Data

# Backup critical data first!
rsync -av /home /path/to/backup
rsync -av /etc /path/to/backup

Step 2: Enter Rescue Mode

# Reboot to single-user mode
sudo systemctl isolate rescue.target
# Enter root password when prompted

Step 3: Remount Root as Read-Only

# Remount root filesystem as read-only
mount -o remount,ro /

# Verify
mount | grep " / "

Step 4: Clone the Drive

dd if=/dev/sda of=/dev/nvme0n1 bs=64K status=progress conv=noerror,sync

Step 5: Reboot

reboot

Then follow Steps 6-10 from Method 1.


Method 3: LVM Snapshots (Zero Downtime - Advanced)

Only if you're using LVM!

Check if you're using LVM:

sudo lvdisplay
# If no output, you're not using LVM - use Method 1

If using LVM:

# Create snapshot (10GB should be enough for changes during clone)
sudo lvcreate -L 10G -s -n root_snapshot /dev/vg0/root

# Clone the snapshot (system keeps running!)
sudo dd if=/dev/vg0/root_snapshot of=/dev/nvme0n1 bs=64K status=progress

# Remove snapshot after cloning
sudo lvremove /dev/vg0/root_snapshot

# Still need brief downtime to install bootloader - see Method 1, Step 7

Troubleshooting

Clone fails with "No space left on device"

  • Cause: Target drive is smaller than source
  • Solution: Your NVMe (500GB) is larger than SATA (120GB), so this shouldn't happen
  • If it does: Check you have the right source/target drives

System won't boot from NVMe

  1. Check BIOS boot order - Ensure NVMe is first
  2. Bootloader issue - May need to reinstall GRUB:
    # Boot from Live USB
    sudo mount /dev/nvme0n1p2 /mnt
    sudo mount /dev/nvme0n1p1 /mnt/boot/efi  # if UEFI
    sudo grub-install --target=x86_64-efi --efi-directory=/mnt/boot/efi --boot-directory=/mnt/boot /dev/nvme0n1
    

Filesystem errors after clone

# Boot from Live USB
sudo fsck -y /dev/nvme0n1p2

Clone is very slow

  • Check if you're cloning the right direction (should be SATA→NVMe, not NVMe→SATA)
  • Try larger block size: bs=128K or bs=1M

Expected Performance Improvement

After moving to NVMe, you should see:

Metric SATA SSD NVMe SSD Improvement
Sequential Read ~550 MB/s ~3,500 MB/s 6.4x faster
Sequential Write ~520 MB/s ~3,000 MB/s 5.8x faster
Random Read IOPS ~90K ~500K 5.6x faster
Boot Time 30s 10-15s 2-3x faster

Quick Reference Commands

# List drives
lsblk

# Clone drive (replace with your actual device names!)
sudo dd if=/dev/sda of=/dev/nvme0n1 bs=64K status=progress conv=noerror,sync

# Check clone progress (from another terminal)
sudo kill -USR1 $(pgrep ^dd)

# Verify filesystem
sudo fsck -n /dev/nvme0n1p2

# Check NVMe health
sudo smartctl -a /dev/nvme0n1

# Expand partition after clone
sudo parted /dev/nvme0n1
(parted) resizepart 2 100%
(parted) quit
sudo resize2fs /dev/nvme0n1p2

Checklist

  • Backup important data
  • Create Live USB
  • Schedule maintenance window
  • Boot from Live USB
  • Verify source/target drives with lsblk
  • Clone with dd command
  • Verify clone completed successfully
  • Expand partition to use full 500GB (optional)
  • Change BIOS boot order
  • Test boot from NVMe
  • Monitor for 2-3 days
  • Repurpose or wipe old SATA drive

Additional Notes

  • Time estimate: 20-40 min for cloning + 10-15 min for setup = 45-60 min total
  • Your current drives:
  • Source: /dev/sda - Kingston SH103S3 120GB SATA (92% life, 3.9 years old)
  • Target: /dev/nvme0n1 - Kingston SNV2S500G 500GB NVMe (99% life, 2.4 months old)
  • Power stability: Address the 254 unsafe shutdowns on the NVMe after cloning
  • Consider UPS or check PSU
  • Review system logs: journalctl -b -p err

Support Resources

  • smartmontools documentation: https://www.smartmontools.org/
  • dd manual: man dd
  • GRUB troubleshooting: https://www.gnu.org/software/grub/manual/
  • NVMe tools: man nvme

Last Updated: November 8, 2025
Guide Version: 1.0

Full CLone Guide.

`

Clone System Disk from /dev/sda to /dev/nvme3n1

1. Prepare Target Disk

# Clear partition table and filesystem signatures
sudo wipefs -a /dev/nvme3n1

2. Sync Filesystems Before Cloning

sync && sync && sync

3. Clone the Disk

sudo dd if=/dev/sda of=/dev/nvme3n1 bs=64K status=progress conv=sync,noerror

4. Sync After Cloning

sync && sync && sync

5. Check Filesystem on Clone

# Unmount if mounted
sudo umount /mnt/nvme3-root

# Force filesystem check
sudo e2fsck -f /dev/nvme3n1p1

6. Change UUIDs on Clone

Change ext4 root partition UUID

sudo tune2fs -U random /dev/nvme3n1p1

Change FAT32 EFI partition UUID

sudo mlabel -N $(uuidgen | cut -c1-8 | tr '[:lower:]' '[:upper:]') -i /dev/nvme3n1p2 ::

7. Verify New UUIDs

lsblk -f

Confirm that nvme3n1p1 and nvme3n1p2 have different UUIDs than sda1 and sda2.