系统备份概述##

在前面的一些文章中,我反复提到经常会把系统搞崩溃,所以备份系统就是一件不容忽视的事情。由于 Linux 系统本身的优越性,系统的备份和还原还是比较容易的。主要表现在以下方面:

  • Linux 系统所有的数据都以文件的形式存在,所以备份就是直接拷贝文件;硬盘分区也被当成文件,所以可以直接克隆硬盘数据。
  • Linux 系统自带很多实用工具,比如 tar、dd、rsync 等,备份还原系统不需要购买或下载第三方软件。
  • Linux 系统在运行时其硬盘上的文件可以直接被覆盖,所以还原系统的时候不需要另外的引导盘。(当然,系统完全挂掉到无法启动这种情况还是需要另外的引导盘的。)

备份 Linux 系统的策略有很多,比如使用 dd 命令直接克隆硬盘分区:

sudo dd if=/dev/sda1 of=/dev/sdb1

或者,使用 tar 将硬盘上的文件打包:

cd /
sudo tar cvpzf backup.tgz --exclude=/proc --exclude=/mnt --exclude=/sys --exclude=/backup.tgz /

还原系统的命令是:

sudo dd if=/dev/sdb1 of=/dev/sda1

tar xvpfz backup.tgz -C /

但是我最终选择的是 rsync 命令。rsync 是一个非常优秀的文件同步工具,从它的名字可以看出,它支持远程同步。当然,在备份我的桌面系统时,只需要用到它的本地同步功能就行了。之所以选择 rsync,是因为它具有如下优点:

  • 在备份还原过程中,可以保存文件原有的时间、权限、软硬链接等信息;
  • 首次备份时,需要复制所有文件,但是再次备份或还原系统时,只需要复制修改过的文件。

关于 rsync 的使用方法,其主要参考文档是man rsync,另外,rsync 也可以作为守护进程运行用来建立文件备份服务器,可以参考文档man rsyncd.conf

桌面系统备份实战##

对于我的桌面系统,我选择的备份策略是使用 rsync 命令将硬盘上的所有文件(当然要排除 /proc 和 /sys 目录下的内容)复制到 U 盘上。首先使用df -lh命令查看一下我电脑的系统占多大空间,如下图:

从上图可以看出,根目录所在的分区占用了 14G,而 /boot 目录所在的分区才占用 100 多 M。其实 Linux 系统本来不用这么臃肿,只是因为我安装了太多的软件包,比如一整套的 texlive 啊什么的,才占用了这么多的空间。不过这都不是事儿,反正现在 U 盘也便宜,所以找个 32G 的 USB 3.0 的 U 盘来备份我这个系统,肯定是很轻松愉快的。

新 U 盘插到电脑上会被自动识别,使用不带参数的mount命令可以查看 U 盘的设备文件和挂载路径,使用fdisk命令了解 U 盘的大小和分区情况。如下图:

整个 U 盘分成一个区我没什么意见,不过我不喜欢它的 vfat 文件系统,万一碰到超过 4G 的巨型文件怎么办?so,先umount它,然后使用mkfs.ext3为它重新建立一个文件系统,如下图:

再把 U 盘mount起来,挂载的路径为/media/youxia/usb。如下图:

然后,可以开始备份了,我备份的命令是:

sudo rsync -Pa / /media/youxia/usb/backup_20141216 --exclude=/media/* --exclude=/sys/* --exclude=/proc/* --exclude=/mnt/* --exclude=/tmp/*

如下图:

下图是备份完成后的效果,可以看到整个备份过程花了 59 分多钟,U 盘被占用 15G,如下图:

如果哪天系统再崩溃了的话,只需要使用sudo rsync -Pa /media/youxia/usb/backup_20141216/ /即可恢复系统。

(京山游侠于2014-12-18发布于博客园,转载请注明出处。)

另:该文章使用 Markdown 写作,写起来挺舒服的。而且我的博客开启了数学公式支持,所以各位评论的朋友们注意了,如果评论中用到$字符,请使用\$这种形式。

最新进展##

从 Ubuntu 15.04 开始,init 系统使用了和 Fedora 一样的 systemd,于是备份命令变得和前面写的不一样了,主要是--exclude=?的区别。先看图:

在上图中,我使用不带参数的mount命令查看文件系统,发现有四大虚拟的挂载点,它们分别是/sys/proc/dev/run。这四个虚拟的挂载点是和硬盘没有关联的,所以在备份的时候需要排除掉,再加上我们挂载 U 盘的/media,所以备份命令应该这样写:

sudo time rsync -Pa / /media/youxia/usb/backup_20160816 --exclude=/media/* --exclude=/sys/* --exclude=/proc/* --exclude=/dev/* --exclude=/run/*

命令中加入time是为了统计备份一次系统花费多少时间,如下图:

从下图可以看出,我的 Dell XPS 15 上的 Ubuntu 系统备份一次花费大约 37 分钟,占用了 U 盘的 8G 空间。如下图:

上图大家需要仔细看看,从图中可以看出,硬盘的设备名不再是 /dev/sda,而是 /dev/nvme0n1p,反倒是 U 盘的设备名是 /dev/sda1。原因应该有两点,一是我的 Dell XPS 15 使用的是 M.2 接口的固态硬盘,不同于 SATA 接口的硬盘,另外一个原因恐怕就是 systemd 的功劳了,使用 systemd 后系统初始化时能够非常准确地识别硬件的型号,所以它就给我的硬盘起了一个非常详细的设备名。从上图还可以看出,我的硬盘被分成了两个区/dev/nvme0n1p1/dev/nvme0n1p2,而其中的第一个分区是 EFI 专用的分区。了解上面的细节对后面系统的恢复很重要。

关于系统恢复的注意事项##

恢复系统,可不仅仅是运行 sudo time rsync -Pa /media/youxia/usb/backup_20160816/ /这么简单,还是有一些注意事项的。

1.要记得恢复 Grub 的启动菜单。Ubuntu 系统在安装玩后,Grub 的启动菜单会自动隐藏,这给需要选择多系统的用户带来了困难,对于需要启动进入 rescue 模式的朋友来说就更加是一个障碍了。所以我们要恢复 Grub 的启动菜单。删除 /etc/default/grub 文件中的如下两行:

然后调用 sudo update-grub 命令更新 Grub 的配置,如下图:

如果没有办法进入 rescue 模式,那就只有从 Ubuntu 的安装盘启动了。

2.尽量不要在不同质的电脑之间备份和恢复系统。什么意思呢?比如说,我曾经把这台 Dell XPS 15 上的系统搞崩溃了,然后我拿另一台 Acer 的备份文件来恢复系统,本以为可以像 Ghost 安装 WinXP 一样方便,哪知恢复完成后连 Grub 都进不去,更别提启动系统了。后来仔细想想,这就是在不同质的电脑之间备份和恢复系统惹的祸。前面提过,我的 Dell XPS 15 的硬盘设备名是 /dev/nvme0n1p,而 Acer 的 SATA 硬盘的设备名是 /dev/sda,而且我的 Dell XPS 15 使用的是 EFI 方式安装的 Ubuntu,而 Acer 是用 Legacy BIOS 方式安装的 Ubuntu。这就是两台电脑不同质。后来想了一下,即使是同质的电脑,直接使用 sudo time rsync -Pa /media/youxia/usb/backup_20160816/ /命令进行恢复,应该也是进不了系统,原因有二:

  • Grub在启动 Linux 内核的时候,是使用硬盘分区的 UUID 来寻找 Linux 内核的,即使是同质的电脑,其硬盘分区的 UUID 应该也不同;
  • 系统启动后,挂载文件系统的时候,也是使用硬盘分区的 UUID 来寻找硬盘分区的,具体内容可以查看/etc/fstab文件。所以两台电脑的硬盘分区的 UUID 不同,自然系统不能顺利运行。

所以我们在恢复系统的时候,不能简单的使用sudo time rsync -Pa /media/youxia/usb/backup_20160816/ /命令就完了,而是应该具体问题具体分析。如果能够定位到具体的目录,只恢复相应的目录应该是最好的,精准恢复,既节约时间,又避免副作用。如果真的想全盘恢复的话,先想想 /boot 分区有无破坏,或 /boot/grub2/grub.cfg 这个配置文件有无受损,以及/etc/fstab文件是否有变动,如果没有的话,可以使用 --exclude=/boot/*--exclude=/etc/fstab 选项来避免覆盖这些内容,应该是可以做到在不同的电脑之间互相备份和恢复。

但是最佳的做法,应该还是针对每一台电脑做一个单独的备份,而且是定期备份。有备无患。

(京山游侠于2016-08-30更新于博客园,转载请注明出处。)

Linux 中我该如何备份系统的更多相关文章

  1. 5 个在 Linux 中管理文件类型和系统时间的有用命令

    对于想学习 Linux 的初学者来说要适应使用命令行或者终端可能非常困难.由于终端比图形用户界面程序更能帮助用户控制 Linux 系统,我们必须习惯在终端中运行命令.因此为了有效记忆 Linux 不同 ...

  2. Linux中mongodb定时远程备份

    下载mongodb https://www.cnblogs.com/tartis/p/5291580.html mongodb定时备份文档 虚拟机报错要改BIOS 虚拟技术开启 进入root账户  s ...

  3. Arch Linux中禁用UTC解决双系统时间问题

    原因 Windows双系统时间不统一在于时间表示有两个标准:localtime 和 UTC(Coordinated Universal Time) .UTC 是与时区无关的全球时间标准.尽管概念上有差 ...

  4. linux中网络存储与考试系统搭建(实现多用户可以共享文件)

    上期内容回顾 1.数据备份的方式有哪些 全量和增量 2.数据备份的命令有哪些 都有哪些优点缺点 cp : 本地复制,全量复制 scp : 远程复制,全量复制 rsync : 远程复制,增量复制 3.r ...

  5. Linux中CentOS6.5 64位 系统下安装docker步骤

    CentOS6.5 64位    (docker目前仅支持64位)内核必须在3.10及以上 1. uname -r  查看内核版本 2. 升级内核到3.10版本(带aufs模块)    cd /etc ...

  6. linux 中,mysql数据库备份操作

    1.新建一个sh脚本(可以先建一个txt文本,然后改为sh文件). 代码如下: #!/bin/bash #设置mysql备份目录 folder=/**/** cd $folder day=`date ...

  7. Linux基础知识第九讲,linux中的解压缩,以及软件安装命令

    目录 Linux基础知识第九讲,linux中的解压缩,以及软件安装命令 一丶Linux Mac Windows下的压缩格式简介 2.压缩以及解压缩 3.linux中的软件安装以及卸载 1.apt进行安 ...

  8. Linux中用户及用户组

    Linux用户只有两个等级:root及非root.Linux中还有一部分用户,如:apache.mysql.nobody.ftp等,这些也都是非root用户,即普通用户.Linux的权限实际是上不同用 ...

  9. linux中FTP自动备份VPS脚本

    服务器多了,网站也越来越多,总觉得不整个备份心里放不下心,并且有好几次rm的操作失误,造成难以挽回的损失.并且大多数的VPS提供商是不提供自动备份功能或者此功能收费价格略高.所以自己还是有必要把这个工 ...

随机推荐

  1. Windows2012R2备用域控搭建

    Windows2012R2备用域控搭建 前置操作 域控主域控的主dns:自己的ip,备dns:备域控的ip备域控的主dns:自己的ip,备dns:主域控的ip 客户端主dns:主域控的ip,备dns: ...

  2. Dapper where Id in的解决方案

    简单记一下,一会出去有点事情~ 我们一般写sql都是==>update NoteInfo set NDataStatus=@NDataStatus where NId in (@NIds) Da ...

  3. Redis数据库

    Redis是k-v型数据库的典范,设计思想及数据结构实现都值得学习. 1.数据类型 value支持五种数据类型:1.字符串(strings)2.字符串列表(lists)3.字符串集合(sets)4.有 ...

  4. ASP.NET Core中如影随形的”依赖注入”[下]: 历数依赖注入的N种玩法

    在对ASP.NET Core管道中关于依赖注入的两个核心对象(ServiceCollection和ServiceProvider)有了足够的认识之后,我们将关注的目光转移到编程层面.在ASP.NET ...

  5. EditText 基本用法

    title: EditText 基本用法 tags: EditText,编辑框,输入框 --- EditText介绍: EditText 在开发中也是经常用到的控件,也是一个比较必要的组件,可以说它是 ...

  6. Python自然语言处理工具小结

    Python自然语言处理工具小结 作者:白宁超 2016年11月21日21:45:26 目录 [Python NLP]干货!详述Python NLTK下如何使用stanford NLP工具包(1) [ ...

  7. 深入解析Sqlite的完美替代者,android数据库新王者——Realm

    写在前面: 又到一年一度七夕虐狗节,看着大家忍受着各种朋友圈和QQ空间还有现实生活中的轮番轰炸,我实在不忍心再在这里给大家补刀,所以我觉得今天不虐狗,继续给大家分享有用的. 如果你比较关心androi ...

  8. RIFF和WAVE音频文件格式

    RIFF file format RIFF全称为资源互换文件格式(Resources Interchange File Format),是Windows下大部分多媒体文件遵循的一种文件结构.RIFF文 ...

  9. [原] KVM 虚拟化原理探究(4)— 内存虚拟化

    KVM 虚拟化原理探究(4)- 内存虚拟化 标签(空格分隔): KVM 内存虚拟化简介 前一章介绍了CPU虚拟化的内容,这一章介绍一下KVM的内存虚拟化原理.可以说内存是除了CPU外最重要的组件,Gu ...

  10. 【uwp】浅谈China Daily 中划词翻译的实现

    学习uwp开发也有一段时间了,最近上架了一个小应用(China Daily),现在准备将开发中所学到的一些东西拿出来跟大家分享交流一下. 先给出应用的下载链接:China Daily , 感兴趣的童鞋 ...