zoukankan      html  css  js  c++  java
  • 使用 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 脚本,按需修改使用即可

  • 相关阅读:
    Entity Framework 学习 Code First(1)
    CLR via C# 读书笔记 运行时序列化
    Entity Framework 学习 Model First
    轻量级开发工具 SharpDevelop
    bit加载失败
    [Reminder] 影响EMIF16异步读写性能因素
    Field Alert: Initial Voltage Level Setting of CVDD rail power supplies
    PHP函数Imap电子邮件系统函数
    PHP函数PHP选项及相关信息函数
    PHP函数Soap函数
  • 原文地址:https://www.cnblogs.com/ash975/p/15209365.html
Copyright © 2011-2022 走看看