linux系统的无损备份与恢复

珍爱生命,远离cp

从用上deepin开始,就一发不可收拾。由于deepin的前几个版本(13-14)都是需要从新安装系统的,每个版本必须安装尝鲜,但由于那会儿还在学校,安装的软件基本上是gcc等等,所以每个版本都是重新安装的,但工作以来,需要安装的软件(基本上是一些开发库)越来越多,懒癌重症者,必不想重装系统。15版的deepin系统已经基于debian系统,系统升级上提供了滚动升级的方式,因此新的的15版的升级都无需重新安装格盘,一切重头开始。
自己的一些linux系统安装惯例。根分区/(/dev/sda1)一般划分10G(正是这个可恶的开始),然后/home(/dev/sdb2)单独分区。以后如果重装系统,只格式化跟分区/。继续使用原先的/home分区,这一切在每每deepin发版本时都不存在问题(deepin 13-14无法滚动升级)。但15的发布,游戏规则改变,可以滚动升级。根分区的10个G越发捉襟见肘,终于于昨晚爆发,编译golang程序提示无法分配磁盘空间,一个ls命令下去,一大堆python错误提示。需要下决心了。
电脑的基本情况:

thinkpad sl410(老爷机了), 6G mem, ssd+hd

ssd分区

  1. /dev/sda1 10G 挂载根分区/
  2. /dev/sda2 60G 暂时不用
  3. /dev/sda3 40G ntfs格式,用作安装windows

hd分区

  1. /dev/sdb1 150G ntfs, 平时存放文件
  2. /dev/sdb2 150 ext4, 挂载/home目录
  3. /dev/sdb3 8G swap, 用作交换分区

手术步骤:
(以下操作都是root权限)

  1. 在/home/建立备份目录,然后使用rsync同步文件
blkid #记录/dev/sda1的uuid为$old_sda1, 后文需要用到
mkdir /home/bak_home  #/home/zql的备份目录
mkdir /home/bak  #备份根分区主要文件的目录
rsync -aSvH --delete --exclude=/sys --exclude=/tmp --exclude=/proc --exclude=/mnt --exclude=/media --exclude=/home   /*   /home/bak
rsync -aSvH /home/zql/*  /home/bak_home
  1. 制作deepin U盘启动盘(假设磁盘号为/dev/sdc)
dd if=/home/zql/Downloads/deeepin-15.3-amd.iso of=/dev/sdc bs=1M
  1. 分区以及格式化
    a. 使用U盘启动盘启动系统或者使用linux系统的livecd启动
    b. 切换到console 1(Ctrl+Alt+F1)或者打开终端
    c. fdisk /dev/sda
    d. 删除/dev/sda1和/dev/sda2(按m键提示,d键删除分区)
    e. 基于删除的两个分区的空间新建主分区(按n键新建)
    f. 保存(按w键)
    g. mkfs.ext4 /dev/sda1 #格式化为ext4格式

  2. 恢复文件
    a. 挂载/dev/sda1, 执行 mount /dev/sda1 /mnt
    b. 根分区/文件同步, rsync -aSvH --delete /home/bak/* /mnt

  3. 调整分区UUID
    a. 得到/sda1以及/sdb2和交换分区/dev/sdb3的编号,执行blkid, 记录其编号分别为$sda1, $sdb2, $sdb3
    b. vi /mnt/fstab,分别用$sdb1, $sdb2, $sdb3替换挂载编号($sdb2, $sdb3不改变, 可不动)

  4. 恢复用户目录
    a. mkdir -p /mnt/sys /mnt/proc /mnt/mnt /mnt/media /mnt/tmp /mnt/home/zql
    b. rsync -aSvH --delete /home/bak/* /mnt/home/zql #恢复用户数据

  5. 启动项修复
    a. sed 's/$old_sda1/$sda1/g' /mnt/boot/grub/grub.cfg
    b. grub-install /dev/sda #安装grub到/dev/sda

  6. 重启!

骚文到此结束!!!

推荐阅读Ubuntu 挂载新硬盘并把home目录迁移到新硬盘

你可能感兴趣的:(linux系统的无损备份与恢复)