当前位置: 首页 > 编程日记 > 正文

backup restore On Ubuntu

详见:https://help.ubuntu.com/community/BackupYourSystem/TAR

在 使用Ubuntu之前,相信很多人都有过使用Windows系统的经历。如果你备份过Windows系统,那么你一定记忆犹新:首先需要找到一个备份工 具(通常都是私有软件),然后重启电脑进入备份工具提供的软件环境,在这里备份或者恢复Windows系统。Norton Ghost是备份Windows系统时经常使用的备份工具。

在备份Windows系统的时候你可能想过,我能不能把整个C盘都放到一个ZIP文件里去呢。这在Windows下是不可能的,因为在Windows中有很多文件在它们运行时是不允许拷贝或覆盖的,因此你需要专门的备份工具对Windows系统进行特殊处理。

和 备份Windows系统不同,如果你要备份Ubuntu系统(或者其它任何Linux系统),你不再需要像Ghost这类备份工具。事实上,Ghost 这类备份工具对于Linux文件系统的支持很糟糕,例如一些Ghost版本只能完善地支持Ext2文件系统,如果你用它来备份Ext3文件系统,你可能会 丢失一些宝贵的数据。

1. 备份系统

我该如何备份我的Ubuntu系统呢?很简单,就像你备份或压缩其它东西一样,使用TAR。和Windows不同,Linux不会限制root访问任何东西,你可以把分区上的所有东西都扔到一个TAR文件里去!

首先成为root用户:
$ sudo su

然后进入文件系统的根目录(当然,如果你不想备份整个文件系统,你也可以进入你想要备份的目录,包括远程目录或者移动硬盘上的目录):
# cd /

下面是我用来备份系统的完整命令:
# tar cvpzf backup.tgz --exclude=/proc --exclude=/lost+found --exclude=/backup.tgz --exclude=/mnt --exclude=/sys /

让我们来简单看一下这个命令:

“tar”当然就是我们备份系统所使用的程序了。

“cvpfz”是tar的选项,意思是“创建档案文件”、“保持权限”(保留所有东西原来的权限)、“使用gzip来减小文件尺寸”。

“backup.gz”是我们将要得到的档案文件的文件名。

“/”是我们要备份的目录,在这里是整个文件系统。

在 档案文件名“backup.gz”和要备份的目录名“/”之间给出了备份时必须排除在外的目录。有些目录是无用的,例如“/proc”、“/lost+ found”、“/sys”。当然,“backup.gz”这个档案文件本身必须排除在外,否则你可能会得到一些超出常理的结果。如果不把“/mnt”排 除在外,那么挂载在“/mnt”上的其它分区也会被备份。另外需要确认一下“/media”上没有挂载任何东西(例如光盘、移动硬盘),如果有挂载东西, 必须把“/media”也排除在外。

有人可能会建议你把“/dev”目录排除在外,但是我认为这样做很不妥,具体原因这里就不讨论了。

执行备份命令之前请再确认一下你所键入的命令是不是你想要的。执行备份命令可能需要一段不短的时间。

备份完成后,在文件系统的根目录将生成一个名为“backup.tgz”的文件,它的尺寸有可能非常大。现在你可以把它烧录到DVD上或者放到你认为安全的地方去。

在备份命令结束时你可能会看到这样一个提示:’tar: Error exit delayed from previous errors’,多数情况下你可以忽略它。

你还可以用Bzip2来压缩文件,Bzip2比gzip的压缩率高,但是速度慢一些。如果压缩率对你来说很重要,那么你应该使用Bzip2,用“j”代替命令中的“z”,并且给档案文件一个正确的扩展名“bz2”。完整的命令如下:
# tar cvpjf backup.tar.bz2 --exclude=/proc --exclude=/lost+found --exclude=/backup.tar.bz2 --exclude=/mnt --exclude=/sys /

2. 恢复系统

在进行恢复系统的操作时一定要小心!如果你不清楚自己在做什么,那么你有可能把重要的数据弄丢,请务必小心!

接着上面的例子。切换到root用户,并把文件“backup.tgz”拷贝到分区的根目录下。

在 Linux中有一件很美妙的事情,就是你可以在一个运行的系统中恢复系统,而不需要用boot-cd来专门引导。当然,如果你的系统已经挂掉不能启动了, 你可以用Live CD来启动,效果是一样的。你还可以用一个命令把Linux系统中的所有文件干掉,当然在这里我不打算给出这个命令!

使用下面的命令来恢复系统:
# tar xvpfz backup.tgz -C /

如果你的档案文件是使用Bzip2压缩的,应该用:
# tar xvpfj backup.tar.bz2 -C /

注意:上面的命令会用档案文件中的文件覆盖分区上的所有文件。

执行恢复命令之前请再确认一下你所键入的命令是不是你想要的,执行恢复命令可能需要一段不短的时间。

恢复命令结束时,你的工作还没完成,别忘了重新创建那些在备份时被排除在外的目录:
# mkdir proc
# mkdir lost+found
# mkdir mnt
# mkdir sys
等等

当你重启电脑,你会发现一切东西恢复到你创建备份时的样子了!



archLinux同样可以这样做


本人辣鸡,主要方便自己查询和刚入坑经常玩挂的朋友,这里主要以自己使用的Arch为例,其他发行版应该大同小异。Btrfs用snapper的同学可以无视~~~


Linux上主要的备份方式 我知道的有 dd 和 tar
相比来说 tar打包显得比较灵活,可以用于本机备份恢复,也可以恢复到其他计算机,打包的目录可以完全按自己需要。这里主要介绍tar打包以及本机的恢复。

tar打包 可以只打包不压缩,速度会比较快,但是你可能会面对一个 好几十G的系统备份包,并不推荐。
压缩 可以用gzip或者Bzip2 (好像还有其他的,不熟悉,就不做介绍了) 二者相比,gzip速度相对较快,但压缩比率比Bzip2略低。
我这里并不用这两个软件打包,因为两个都是单线程,打包速度会非常慢。。。曾经用bzip2打包等到天荒地老都没好。。。
那么重头戏来了! 偶然的机会知道了一个叫pigz的多线程压缩软件,采用与gzip相同的压缩方式,默认以逻辑CPU的个数的线程进行压缩,具体线程还可以自定义,速度飞快,详细可以百度 pigz。
那么 tar能不能调用pigz进行压缩呢? 答案是肯定的!

看一下tar的man手册


-I, --use-compress-program=COMMAND
Filter data through COMMAND. It must accept the -d option,
for decompression. The argument can contain command line
Options.
发现tar是可以指定其他压缩程序进行压缩的。
于是直接 sudo pacman -S pigz 安装(arch官方源就有)下面就可以开始打包了!
进入根目录 然后执行:
sudo tar --use-compress-program=pigz -cvpf arch-backup.tgz --exclude=/proc --exclude=/lost+found --exclude=/arch-backup.tgz --exclude=/mnt --exclude=/sys --exclude=/run/media /


简单介绍一下命令,--use-compress-program=pigz 是用pigz压缩,arch-backup.tgz是打包之后的文件名,--exclude=/xxx是打包时排除的目录,这里简单的排除了一些不需要的目录,具体排除的内容可以根据自己的发行版和需要设定,--exclude=/arch-backup.tgz 是排除根目录下的自身,因为我是在根目录下进行的操作,如果不排除自身的话,打包可能会进入一个死循环。。。你可能会打出一个巨型包。


这样就开始进行压缩打包了
用htop 可以看到 CPU满载,大概3-5分钟左右完成,比起单线程10%多的占用 速度快了不知道多少倍!





完成候可以看到 28G左右的分区 打包完 是一个15G的压缩包,个头还是很大。。。也算可以接受。。不知道有没有其他办法能够再小点


打包完成后,你可能会看到一条错误信息,具体原因小白不懂,不过并没有什么影响。然后将备份的包放到一个你觉得安全的地方。
至此,所有备份工作都已经完成,系统挂了可以用下面的方法恢复


首先需要准备一个能够引导的liveCD的U盘 

然后重启进liveCD开始恢
进入liveCD之后 先用wifi-menu联网,因为liveCD上没有pigz,如果不想解压恢复的时候用半年的话就联网装上再解压吧

Ping一下百度看看是否联网成功,之后简单配置下源 就可以安装pigz了



sudo nano /etc/pacman.d/mirrorlist 配置源
安装pigz


要用到的pigz准备好之后就可以挂载磁盘 进行恢复了。
lsblk简单看下各个分区情况


我这里sdc1是boot分区 sdc2是/分区 sdb3是保存备份的分区
直接新建了一个目录挂载 sdb3
mkdir /f
mount /dev/sdb3 /f


然后挂载 目标linux根分区到/mnt目录, 我的arch只分了 boot和/分区,并且备份的时候 忘记排除boot目录了,所以这里索性都挂载上干掉。挂载之后如图

现在就可以干掉已经损坏的系统了
rm -rf /mnt/* 
命令很危险,一定要看清楚,想清楚了之后再执行,我真是怕小手一抖就把不想干掉的分区干掉了


这里zsh提示是否确定干掉/mnt上的所有文件 直接y
boot目录因为是分区挂载点提示设备忙,这个目录并没有被删掉,不过ls一下可以看见/mnt下只剩boot目录,/mnt/boot下所有的引导文件也都没有了
万事俱备,下面进行解压恢复 还是使用pigz进行多线程解压
#tar --use-compress-program=pigz -xvpf /f/sysbackup/arch-backup-20160331.tgz -C /mnt
这里自行把备份路径替换掉。接下来就是解压过程如图:

这个时间如果你手痒蛋疼的话,在tty2用pacman装个htop看看pigz对cpu的利用率吧


并没有满载,如果并发更多线程是不是可以更快


用不了多久 也就2-3分钟 解压完成!
ls看看 干掉的文件是不是都回来了呢




OK,問題ない!
到这里,恢复工作已经接近尾声,还记得备份的时候排除掉的目录么,重建排除的目录


然后直接reboot重启
这个时候我的小心脏有点方。。。前面干掉了 / 分区所有文件真的 大丈夫?
大不了重装


重启之后 可爱的grub菜单出现了!因为我之前把boot一起干掉了,所以看到这里就表面恢复成功了!

所有备份恢复工作全部完成!总结起来,主要是利用了 pigz 的多线程提高 压缩解压的效率,比普通的gzip或者bzip2快很多!缺点还是比较明显,就是备份的包个头略大,不知道怎么能够再小点。而且我只涉及了本机恢复,如果恢复到其他机子,还涉及到fstab修改之类的一些收尾工作。
抛砖引玉,如果有其他好的方法 希望大神不吝赐教!
最后强行晒一波桌面,说了这么多不就是为了最后这一下?ff

相关文章:

.net 连接ORACLE 数据库的例子

利用 System.Data.OracleClient.Dll 的组件进行连接&#xff1a; 首先配置WebConfig 文件&#xff1b; <connectionStrings> <add name"oracleconn" connectionString"Data Source"";User IDryq;Password123456" providerName&quo…

什么是SESSION?(一)

本图文通过三个问题的回答&#xff0c;详细介绍了Session的机制。本图文由钟锦提供。

linux下字符串处理工具一:grep

grep常见选项 grep -A &#xff1a;显示匹配行和之后的几行 grep -A 4 "NullPointerException" test.log 找到NullPointerException之后的几行-c &#xff1a;打印匹配到的行数 c:count[adminv069164233.sqa.<pre name"code" class"html"&…

Matlab与随机变量和样本的数字特征

本文主要介绍了常见分布的期望和方差以及样本的数字特征。贡献人为孔令才。

C#的方法的参数修饰符详解

方法参数修饰 (啥也没有) 如果参数的修饰是啥也没有&#xff0c;那么其参数传递的方式是值传递&#xff0c;接受方收到的是原始数据的拷贝 out 说明了参数是引用传递。 params 可变参&#xff0c;注意了这种修饰符针对的参数一定是最后一个参数 ref 引用传递&#xff0c;参数的…

wps 2016 个人版 重新开始编号

wps文档重新开始编号&#xff0c;继续编号&#xff0c;自定义编号 首先选中这一行鼠标右键选中项目符号和编号单击项目符号和编号&#xff0c;你可以重新开始编号为1&#xff0c;继续前一列表&#xff0c;还可自定义&#xff0c;单击确定按钮就可以实现你想要的结果效果图转载于…

Sublime Text保存文件时自动去掉行末空格

1.安装DeleteBlankLines 插件 通过ctrlshiftp组合键打开命令面板 输入install packge后回车 输入DeleteBlankLines后回车进行安装 Sublime Tex去除空白行插件DeleteBlankLines 上文所述安装DeleteBlankLines插件的前提&#xff1a;Package Control已经安装好。 3.Subl…

六步使用ICallbackEventHandler实现无刷新回调

AJAX技术所提倡的无刷新回调&#xff0c;在原来的技术中需要写大量的JavaScript代码或使用一些AJAX框架&#xff0c;使得开发效率和可维护性大大降低。其实ASP.NET2.0中&#xff0c;已经提供了这样的接口&#xff0c;这就是ICallbackEventHandler。关于ICallbackEventHandler网…

Matlab与线性代数 -- 矩阵的特征值与特征向量

本图文详细介绍了Matlab中求方阵特征值与特征向量的方法。

mybatis3进行模糊查询的总结

一种直接采用函数进行模糊查询&#xff0c;直接在映射文件中书写对应的like语句。 例如&#xff1a; select * from u_tree ut where ut.node_name like concat(concat(‘%,#{text}),’%&#xff09; 第二种方式&#xff1a; 使用 ${...} 代替 #{...} SELECT * FROM tableName …

linux下字符串处理工具二:awk(1)

awk工作原理 原理图 第一步&#xff1a;awk对文件或管道的内容一次只处理一次&#xff0c;将获取到的这一行赋给内部变量$0。 第二步&#xff1a;这一行的内容按awk内部变量FS定义的分隔符&#xff0c;缺省为空格(包括tab制表符)分解成字段&#xff0c;每一段存储在从$1开…

后台接口向数据库录入汉字时乱码以及自动过滤文字经验总结

本人第一次写博客&#xff0c;而且是一个菜鸟&#xff0c;如果有什么不完善的地方请前辈们多多指教。 2017-06-01 21:56:05 因为公司功能的需求&#xff0c;需要写一个溯源信息的接口&#xff0c;下面的代码是前台的一个用户评论的界面。所谓溯源就是追溯源头&#xff0c;有点类…

PHP新手上路(六)

5.5 计数器 让我们在首页上加上一个计数器。这个例子已经被讲过多次了&#xff0c;但是还是有利于演示怎样读写文件以及创建自己的函数。counter.inc包含以下代码&#xff1a; <? /* || 一个简单的计数器 */ function get_hitcount($counter_file) { /…

如何教计算机认识手写数字(下)

本文详细介绍了如何利用C#语言编写KDTree结构加速KNN算法来处理手写字符的识别问题。本文由安晟提供。

linux下字符串处理工具二:awk( 二),awk脚本

awk脚本 awk脚本是一个可执行的文件&#xff0c;常习惯以.awk命名。 结构&#xff1a; $test.awk #!/bin/awk -f #脚本系统中awk的位置BEGIN{} #脚本主体之前&#xff0c;执行些什么。该行内的语句&#xff0c;可以只执行一次{} #脚本主体,此中的语句&am…

JavaScript正则表达式test的用法

<script LANGUAGE"javascript">function checkStr( s)...{var regu /abc/gi;var re new RegExp(regu);return re.test(s);}checkMobile(vabceeabc);</script>用途&#xff1a;检查输入的字符串是否含有abc,如果有返回true,否则返回false方法test(string…

如何利用C#开发“通讯录”小程序

本文介绍了数理系15级魏道鑫同学汇报的成果&#xff0c;利用C#开发的通讯录小程序。

Ubuntu 16.04 install NVDIA display driver

2019独角兽企业重金招聘Python工程师标准>>> 1. search and download the driver http://www.nvidia.cn/Download/ 2. vim /etc/modprobe.d/blacklist.conf append this lines to the file blacklist vga16fb blacklist nouveau blacklist rivafb blacklist rivatv …

C#Hello World

自己是做java开发的&#xff0c;但是有时候有些问题用java解决起来很不方便&#xff0c;比如调用windows系统的东西&#xff0c;所以要快速自学一下C#&#xff0c;快速解决一个问题。 下面是一个简单的控制台程序。 using System; //using 关键字的作用是导入命名空间 using Sy…

如何利用离散Hopfield神经网络进行高校科研能力评价(1)

如何利用离散Hopfield神经网络进行高校科研能力评价(1)代码部分

OpenDNS 不再向用户展示广告

OpenDNS是流行的免费域名解析服务提供商&#xff0c;它的收入一度主要来自广告&#xff0c;当用户输入的网址无法解析它会将用户重定向到广告页。在OpenDNS诞生前&#xff0c;ISP提供的域名解析是用户唯一的选择。但ISP的DNS服务称不上有多好&#xff0c;不怎么可靠。但如今&am…

winform配置文件的简单使用(转载)

1&#xff0e; 首先创建一个winform解决方案2&#xff0e; 与添加类文件相同的方法添加配置文件&#xff0c;比如&#xff1a;右击解决方案下的项目名称—>添加—>新建项—>选择 “应用程序配置文件”&#xff0c;.net默认文件名为app.config&#xff0c;点击确定 打开…

C#版及nodejs版的com端口监听程序

感受: 写监听程序的感受&#xff1a;原来有些事情并不是想象的那么难&#xff0c;难和简单就只在一个点上&#xff0c;一个点突破了&#xff0c;后面就豁然开朗了。所以有些问题&#xff0c;不能死闷&#xff0c;要先思考&#xff0c;然后查资料&#xff0c;然后问有经验的人…

C++各大有名库的介绍之C++标准库

C各大有名库的介绍之C标准库标准库中提供了C程序的基本设施。虽然C标准库随着C标准折腾了许多年&#xff0c;直到标准的出台才正式定型&#xff0c;但是在标准库的实现上却很令人欣慰得看到多种实现&#xff0c;并且已被实践证明为有工业级别强度的佳作。1、Dinkumware C Libra…

自己动手——实现 Dustjs 中间件

Dustjs是我个人比较喜欢的一个JS模版引擎&#xff0c;原因有两个&#xff0c;一是&#xff0c;同时支持客户端和服务端渲染&#xff0c;模版编译成JS后使用&#xff0c;性能好&#xff1b;二是&#xff0c;有大公司的支持&#xff0c;Linkedin有专门的Dustjs版本&#xff08;本…

如何利用离散Hopfield神经网络进行高校科研能力评价(2)

如何利用离散Hopfield神经网络进行高校科研能力评价&#xff0c;应用部分

yyyy-MM-dd HH:mm:ss和yyyy-MM-dd hh:mm:ss

做项目&#xff0c;需要24小时制式的时间&#xff0c;误用了yyyy-MM-dd hh:mm:ss&#xff0c;导致出现一个很难发现的bug&#xff0c;现记录下,方便以后查阅。 yyyy-MM-dd hh:mm:ss 12小时制 yyyy-MM-dd HH:mm:ss 24小时制

Asp.Net开发架构设计(二)

上回说到&#xff0c;我们配置了一下UnityConfig层&#xff0c;在这个层中定义了一个IContainerAccessor的接口和一个返回IUnityContainer类型的方法&#xff0c;这个方法的主要作用就是把Service层中的接口类和Business层中的接口实现类装配到UnityContainer中并返回&#xff…

Matlab与线性代数 -- 稀疏矩阵的创建

本文详细介绍了在Matlab中创建稀疏矩阵的三种方法。

uva 10491 Cows and Cars

https://vjudge.net/problem/UVA-10491 题意&#xff1a; a头牛&#xff0c;b辆车&#xff0c;每扇门后面都有一头牛或一辆车 开始选手选择一扇门 然后主持人打开c扇有牛的门&#xff08;选中的除外&#xff09; 然后选手换一扇门 问最后选手选的门后面是车的概率 开始选牛的概…