使用 rsync 备份/复制 系统

使用到的软件

  1. Linux LiveCD:本文使用的 archlinux
  2. rsync:同步系统文件
  3. lsblk、parted、mkfs:硬盘分区工具
  4. grub:系统引导工具

预先准备

  1. 下载 archlinux 映像
  2. Windows下推荐使用 Rufus 制作启动映像,具体可参考此文
  3. 开机引导至制作好的 LiveCD

注意:接入设备的时候,输入源(待拷贝系统)最好接入在主板 SATA 或者 Nvme 口上,拷贝速度更快。

硬盘分区

  1. 使用 lsblk 查看分区情况,粗略区分输入源、输出源、LiveCD的硬盘,如 /dev/sda, /dev/sdb 此类信息
  2. 使用 parted 查看输入源分区详情,如输入源为 sda 参考命令为 parted /dev/sda,主要关注内容为:分区的label(gpt,msdos)有几个分区各分区的起止位置分区的文件系统类型
  3. 查看系统是否为 UEFI 启动:参考命令ls /sys/firmware/efi/efivars,如果有内容则为UEFI启动,parted选择mklabel gpt;没有此目录或者为空则为BIOSparted选择mklabel msdos
  4. 记住之前输入源的分区信息,然后使用parted进入输出源硬盘,例如输出源为 sdbparted /dev/sdb
  5. 开始分区,以 msdos 为例,有两个分区:系统分区以及 swap 分区,硬盘总大小为 64GB, 内存为 4G
# 进入输出源硬盘
parted /dev/sdb
# 标记分区类型
mklabel msdos
# 分配系统分区
mkpart 1 primary ext4 2M 58G
# 设置分区1为启动分区
set boot 1 on
# 分配swap分区
mkpart 2 primary linux-swap 58G 100%
# 退出 parted
q
  1. 格式化分区,parted 只是构建分区表信息,格式化需要手动执行,接上面代码格式化分区
# 格式化 ext4
mkfs.ext4 /dev/sdb1
# 格式化 swap 分区
mkswap /dev/sdb2
# 激活 swap 分区
swapon /dev/sdb2

至此,硬盘分区完成;接下来就使用 rsync 复制硬盘数据吧

拷贝系统

  1. 首先挂载输入源和输出源
# 挂载输入源到 /root/media
mount /dev/sda1 /root/media
# 挂载输出源到 /mnt
mount /dev/sdb1 /mnt
  1. 使用 rsync 拷贝系统,使用 -a 选项可以保留文件的属性信息,并保留软连接。使用 -v 选项可以查看拷贝的日志,但是会大大降低拷贝速度。拷贝时需要使用 --exclude=XXX 过滤掉一些特殊的系统文件夹,此参数的路径是相对于输入源的路径,使用时需要注意,参考指令如下:
# rysnc 命令格式
rsync [OPTION...] SRC... [DEST]

# 从输入源拷贝系统至输出源,注意 /root/media/ 的 / 必须有, /mnt 没有 /
rsync -a /root/media/ --exclude=proc/ --exclude=lost+found/ --exclude=tmp/ --exclude=sys/ --exclude=media/ --exclude=mnt/ /mnt
  1. 创建系统文件夹,使用脚本 genfstab 更新硬盘分区表,这个是 Archlinux LiveCD 才有的,如果没有可以自己手动写入
# 创建文件夹
for dir in /proc /tmp /sys/ /media /mnt
do
    mkdir /mnt$dir
done

# 生成磁盘分区表,-U 为使用 UUID 的形式
genfstab -U /mnt > /mnt/etc/fstab

重建引导(Grub)

  1. 在上一小节,已经拷贝完系统并生成了磁盘分区表,此时新的系统还是启动不了的,需要更新 Grub 的配置文件中的磁盘UUID信息,具体使用 grub-mkconfig 命令即可
  2. 首先需要挂载系统文件夹到新系统,然后使用 chroot 切换到新系统下生成引导信息
# 挂载系统文件夹到新系统
mount /proc -t proc -o nosuid,noexec,nodev /mnt/proc
mount /sys -t sysfs -o nosuid,noexec,nodev,ro /mnt/sys
mount /dev -t devtmpfs -o mode=0755,nosuid /mnt/dev
mount /dev/pts -t devpts -o mode=0620,gid=5,nosuid,noexec /mnt/dev/pts
mount /dev/shm -t tmpfs -o mode=1777,nosuid,nodev /mnt/dev/shm
mount /run -t tmpfs -o nosuid,nodev,mode=0755 /mnt/run
mount /tmp -t tmpfs -o mode=1777,strictatime,nodev,nosuid /mnt/tmp

# 切换到新系统
chroot /mnt /bin/bash

# 如果出现 ls 等命令都无法使用的情况,更新环境变量
export PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin"

# 生成 grub 引导,/dev/sdb1 为新系统所在分区,具体以 lsblk 为准
grub-install --target=i386-pc /dev/sdb1
grub-mkconfig -o /boot/grub/grub.cfg
  1. 全部操作完成,新系统已拷贝完成,退出 chroot 环境, 卸载已挂载分区,重启电脑即可
# 退出 chroot (也可ctrl+d)
exit

# 卸载分区,随手释放资源好习惯
umount -R /mnt
umount -R /root/media

# 重启验证
reboot

附加

以上命令写成了 shell 脚本,按需修改使用即可

posted @ 2021-08-31 11:04  ASH975  阅读(2117)  评论(0编辑  收藏  举报