Ubuntu/Linux使用tar或者cpio工具来备份关键数据

版权声明:个人原创,转载请注明出处,谢谢。 https://blog.csdn.net/weixin_44410537/article/details/86776260

最近从Ubuntu 16.04系统升级到18.04版本的时候出了比较大的问题,所以考虑重新安装回16.04。这样就需要备份一些关键的数据。我主要想备份/home/etc两个目录的数据,比较常用的备份工具有tarcpio

打包命令: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的压缩比比gzipbzip2都要差,解压缩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)

猜你喜欢

转载自blog.csdn.net/weixin_44410537/article/details/86776260