Linux系统盘迁移
由于旧系统盘故障需要迁移,而且是大硬盘换小硬盘所以这里采用rsync拷贝的方式进行迁移是最简单的
准备
先清理一下系统盘上的空间
shelldocker system prune -a --volumes # 删除没用的镜像和卷 sudo apt clean sudo apt autoremove- 关机把新旧硬盘都接上后开机进系统
lsblk查看所有硬盘信息- nvme硬盘会被识别成nvme0n1之类的,如果是sata会被识别sda/sdb之类
新硬盘分区
fdisk给新盘分区(UEFI/GPT)
shell
fdisk /dev/nvme0n1
# 创建新的gpt分区表
g
# 创建EFI分区(512M)
n
Partition number: 1
First sector: (直接回车)
Last sector: +512M
# 把分区1类型改为EFI System
t
1
1
# 创建root分区
n
Partition number: 2
First sector: (直接回车)
Last sector: (直接回车)
# 打印分区表并确认
p
Device Size Type
/dev/nvme0n1p1 512M EFI System
/dev/nvme0n1p2 ~230G Linux filesystem
# 写入分区表并退出
w格式化新分区
shell
mkfs.fat -F32 /dev/nvme0n1p1
mkfs.ext4 nvme0n1p2挂载新系统盘
shell
mkdir -p /mnt/newroot
mount /dev/nvme0n1p2 /mnt/newroot
mkdir -p /mnt/newroot/boot/efi
mount /dev/nvme0n1p1 /mnt/newroot/boot/efi
# 确认挂载
lsblk
mount | grep /mnt/newroot拷贝数据
shell
# 这里要注意排除掉其他的数据盘挂载目录 比如我这里的/repo
rsync -aAXH --numeric-ids \
--exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/repo/*","/media/*","/lost+found"} \
/ /mnt/newroot修改fstab
shell
blkid /dev/nvme0n1p1 /dev/nvme0n1p2
vim /mnt/newroot/etc/fstab
# 示例
UUID=NVME-EFI-UUID /boot/efi vfat umask=0077 0 1
UUID=NVME-ROOT-UUID / ext4 defaults 0 1
UUID=77231e5e-8a4a-45ec-ab5f-9842d90292ed /mnt ext4 defaults 0 0
UUID=506ed1d0-bc35-4585-8496-1ff4de100982 /repo ext4 defaults 0 0配置新系统环境并安装引导
shell
mount --bind /dev /mnt/newroot/dev
mount --bind /dev/pts /mnt/newroot/dev/pts
mount -t proc proc /mnt/newroot/proc
mount -t sysfs sys /mnt/newroot/sys
# 验证挂载
mount | grep /mnt/newroot
# 进入chroot
chroot /mnt/newroot /bin/bash
# 安装并配置grub(UEFI)
apt update
apt install -y grub-efi-amd64 efibootmgr
grub-install \
--target=x86_64-efi \
--efi-directory=/boot/efi \
--bootloader-id=debian \
--recheck
update-grub(可选)创建swapfile 修改fstab
shell
fallocate -l 16G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
echo '/swapfile none swap sw 0 0' >> /etc/fstab退出chroot 关机
shell
exit
poweroff验证
- 拔掉旧系统盘后启动,进BIOS修改启动顺序