Linux LiveCD:本文使用的 archlinuxrsync:同步系统文件lsblk、parted、mkfs:硬盘分区工具grub:系统引导工具注意:接入设备的时候,输入源(待拷贝系统)最好接入在主板 SATA 或者 Nvme 口上,拷贝速度更快。
lsblk 查看分区情况,粗略区分输入源、输出源、LiveCD的硬盘,如 /dev/sda, /dev/sdb 此类信息parted 查看输入源分区详情,如输入源为 sda 参考命令为 parted /dev/sda,主要关注内容为:分区的label(gpt,msdos),有几个分区,各分区的起止位置,分区的文件系统类型ls /sys/firmware/efi/efivars,如果有内容则为UEFI启动,parted选择mklabel gpt;没有此目录或者为空则为BIOS,parted选择mklabel msdosparted进入输出源硬盘,例如输出源为 sdb:parted /dev/sdbmsdos 为例,有两个分区:系统分区以及 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 的配置文件中的磁盘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 脚本,按需修改使用即可
原文:https://www.cnblogs.com/ash975/p/15209365.html