版权声明:个人原创,转载请注明出处,谢谢。 https://blog.csdn.net/weixin_44410537/article/details/86776260
最近从Ubuntu 16.04系统升级到18.04版本的时候出了比较大的问题,所以考虑重新安装回16.04。这样就需要备份一些关键的数据。我主要想备份/home
和/etc
两个目录的数据,比较常用的备份工具有tar
和cpio
。
打包命令:tar
tar
参数比较多,这里列举一些常用的参数:
参数 | 说明 |
---|---|
-c |
新建打包文件 |
-t |
查看打包文件的内容含有哪些文件名 |
-x |
解压缩 |
-j |
通过bzip2 进行压缩/解压缩,文件名最好为*.tar. bz2 。 |
-z |
通过gzip 进行压缩/解压缩,文件名最好为*.tar. gz 。 |
-v |
在压缩/解压缩的过程中,将全部文件名显示出来 |
-f 文件名 |
-f 后面接要处理的文件名 |
-C 目录 |
解压缩的时候,指定在特定目录解压缩 |
-p |
保留备份数据的权限和属性 |
使用tar
命令来备份etc
目录:
# sudo su
# mkdir backup
# cd backup
# tar -zcpvf etc.tar.gz /etc
也可以使用下面这个打包命令:
# tar -jcpvf etc.tar.bz2 /etc
打包好了检查下备份文件:
# ll -lh etc*
-rw-rw-r-- 1 root root 2.0M 2月 8 15:50 etc.tar.bz2
-rw-rw-r-- 1 root root 2.3M 2月 8 15:50 etc.tar.gz
从结果看到,使用 bzip2
即-j
这个参数打包文件时,可以得到更好的压缩比。
解压缩这两个包之前先查看下tar
文件的内容:
# tar -jtvf etc.tar.bz2
或者
# tar -ztvf etc.tar.gz
...省略...
-rw-r--r-- root/root 391 2013-10-26 17:05 etc/xinetd.d/discard
-rw-r--r-- root/root 422 2013-10-26 17:05 etc/xinetd.d/echo
-rw-r--r-- root/root 1417 2018-04-08 08:29 etc/lintianrc
可以看到每个文件名都没有根目录/
,所以不用担心解包会覆盖系统的/etc
目录,可以放心的解包到当前目录了
# tar -jxvf etc.tar.bz2
或者
# tar -zxvf etc.tar.gz
压缩和备份命令:cpio
cpio
是非常优秀的备份工具,不过这个工具有个小问题:那就是cpio
不会主动找文件来备份,需要配合类似find
等命令来告知cpio
该被备份的数据在哪里。常用的语法如下:
# 备份
find path/to/directory | cpio -ovcB > archive.cpio
# 还原
cpio -ivcdu < archive.cpio
# 查看
cpio -ivct < archive.cpio
常用的参数:
参数 | 说明 |
---|---|
-o |
将数据复制输出到cpio 文件 |
-B |
使默认的Blocks 从512bytes 怎加到5120bytes |
-i |
把数据从cpio 文件中复制到当前目录 |
-d |
还原数据时自动新建目录 |
-u |
自动将较新的文件覆盖较旧的文件 |
-t |
配合-i 参数一起使用查看cpio 文件具体内容 |
-v |
备份和还原过程中打印所有文件信息 |
-c |
一种较新的可移植格式来存储数据 |
使用cpio
命令来备份etc
目录:
# cd backup
# find /etc | cpio -ovcB > etc.cpio
打包好了检查下备份文件:
$ ll etc*
-rw-r--r-- 1 f1dev f1dev 7.0M 2月 8 18:03 etc.cpio
-rw-rw-r-- 1 root root 2.0M 2月 8 15:50 etc.tar.bz2
-rw-rw-r-- 1 root root 2.3M 2月 8 15:50 etc.tar.gz
看出来cpio
的压缩比比gzip
和bzip2
都要差,解压缩cpio
包之前先查看下包里的内容:
# cpio -ivct < etc.cpio
...省略...
-rw-r--r-- 1 root root 391 Oct 26 2013 /etc/xinetd.d/discard
-rw-r--r-- 1 root root 422 Oct 26 2013 /etc/xinetd.d/echo
-rw-r--r-- 1 root root 1417 Apr 8 2018 /etc/lintianrc
14290 blocks
可以看到每个文件名都有根目录/
,这意味着解包后会覆盖当前的/etc
目录
# cpio -ivcdu < etc.cpio
可以看到这个cpio
命令相当难用,而且压缩比也不高,但是,由于它可以备份任何文件,包括/dev
目录下面的任何设备文件,所以cpio
还是非常重要的,其实系统里面的/boot/initrd-xxx
就是一个cpio
文件:
$ file /boot/initrd.img-4.15.0-43-generic
/boot/initrd.img-4.15.0-43-generic: ASCII cpio archive (SVR4 with no CRC)