使用 rsync 备份/复制 系统
使用到的软件
Linux LiveCD:本文使用的 archlinuxrsync:同步系统文件lsblk、parted、mkfs:硬盘分区工具grub:系统引导工具
预先准备
注意:接入设备的时候,输入源(待拷贝系统)最好接入在主板 SATA 或者 Nvme 口上,拷贝速度更快。
硬盘分区
- 使用
lsblk查看分区情况,粗略区分输入源、输出源、LiveCD的硬盘,如/dev/sda,/dev/sdb此类信息 - 使用
parted查看输入源分区详情,如输入源为sda参考命令为parted /dev/sda,主要关注内容为:分区的label(gpt,msdos),有几个分区,各分区的起止位置,分区的文件系统类型 - 查看系统是否为 UEFI 启动:参考命令
ls /sys/firmware/efi/efivars,如果有内容则为UEFI启动,parted选择mklabel gpt;没有此目录或者为空则为BIOS,parted选择mklabel msdos - 记住之前输入源的分区信息,然后使用
parted进入输出源硬盘,例如输出源为sdb:parted /dev/sdb - 开始分区,以
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
- 格式化分区,
parted只是构建分区表信息,格式化需要手动执行,接上面代码格式化分区
# 格式化 ext4
mkfs.ext4 /dev/sdb1
# 格式化 swap 分区
mkswap /dev/sdb2
# 激活 swap 分区
swapon /dev/sdb2
至此,硬盘分区完成;接下来就使用 rsync 复制硬盘数据吧
拷贝系统
- 首先挂载输入源和输出源
# 挂载输入源到 /root/media
mount /dev/sda1 /root/media
# 挂载输出源到 /mnt
mount /dev/sdb1 /mnt
- 使用
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
- 创建系统文件夹,使用脚本
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)
- 在上一小节,已经拷贝完系统并生成了磁盘分区表,此时新的系统还是启动不了的,需要更新
Grub的配置文件中的磁盘UUID信息,具体使用grub-mkconfig命令即可 - 首先需要挂载系统文件夹到新系统,然后使用
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
- 全部操作完成,新系统已拷贝完成,退出
chroot环境, 卸载已挂载分区,重启电脑即可
# 退出 chroot (也可ctrl+d)
exit
# 卸载分区,随手释放资源好习惯
umount -R /mnt
umount -R /root/media
# 重启验证
reboot
附加
以上命令写成了 shell 脚本,按需修改使用即可
浙公网安备 33010602011771号