Linux学习笔记:文件与文件系统的压缩、打包和备份
一、压缩
压缩、解压缩、压缩比
常见的压缩文件扩展名
打包软件tar:将很多文件集结成一个文件
应用度最广的压缩指令gzip
能解开compress、zip和gzip等软件压缩的文件
压缩后的文件为*.gz
(ls -ldSr按文件大小从小到大列出)
-v:显示压缩比等信息 -#:#为数字表示压缩等级,越高越好,默认为6
-d:解压缩
若要保留源文件:gzip -v -c 文件名 > 文件名.gz
读取压缩后的文件;zcat、zmore、zless、zgrep
将.Z文件转成gzip格式:znew
gzip的改进版bzip2
参数与gzip基本完全一致
读取压缩后的文件:bzcat、bzmore、bzless、bzgrep
压缩比更高的xz
用法与gzip/bzip2几乎一模一样
压缩比更高
-l:列出该压缩文件的相关信息 -k:保留源文件不删除(比以上俩种方便)
缺点:压缩时间久
二、打包
打包指令tar
以上的压缩软件对目录压缩指的是是将目录中的文件分别压缩
打包:
tar -zpcv -f 文件名.tar.gz 源文件夹
tar -jpcv -f 文件名.tar.bz2 源文件夹
tar -Jpcv -f 文件名.tar.xz 源文件夹
查看源文件的大小
xz耗时27秒 gzip2耗时8秒左右
-p的作用是保存文件的权限和属性
查看:
tar -jtv -f 文件名.tar.bz2
tar -ztv -f 文件名.tar.gz
tar -Jtv -f 文件名.tar.xz
-v:会列出文件权限和属性,若只需要文件名可去掉v
去掉根目录是为了解压安全,不会覆盖源文件
查看打包文件中的关键字:tar -jtv -f /root/etc.tar.bz2 | grep 'shadow'
解打包:
tar -jxv -f 文件名.tar.bz2 -C 目标文件夹
解压到当前文件夹的话不加-C
解打包一个文件:tar -jxv -f /root/etc.tar.bz2 etc/shadow
仅备份比某个时刻还要新的文件
两个选项:--newer或者--newer-mtime
tar -jcv -f /root/etc.never.then.passwd.tar.bz2 --newer-mtime="2018/12/29" /etc/*
将/etc/中2018/12/29以后的文件备份
not dumped未被备份的文件
tar打包出来的文件没有进行压缩例如:tar -cv -f file.tar 这个文件称呼为tarfile
如果压缩的话例如:tar -jcv -f file.tar.bz2 这个文件称呼为tarball
tar除了可以将资料打包成文件之外还能降文件打包到某些特别的装置去,如磁带机
//特殊应用:管线命令和数据流
系统备份范例:
重要的目录:
/home/loop*不用备份 /root底下的压缩文件也不需要备份
系统备份:tar -jcv -f /backups/backup-system-20190114.tar.bz2 --exclude=/root/*.bz2 --exclude=/root/*.gz --exclude=/root/*.xz --exclude=/home/loop* /etc/ /home /var/spool/mail/ /var/spool/cron/ /root/
三、XFS文件系统的备份与还原
tar通常是针对目录树系统来进行备份 如果要针对整个文件系统进行备份和还原
XFS文件系统备份 xfsdump
不仅可以进行完整备份,还能进行累计备份(只备份有差异的文件)
level的记录文件放置于 /var/lib/xfsdump/inventory中
注意:不能用xfsdump去备份/etc,因为/etc不是一个独立的文件系统
备份整个/boot:xfsdump -l 0 -L boot_all -M boot_all -f /srv/boot.dump /boot
不加-L及-M的话会进入互动模式,要一直按enter
查看备份文件记录:
以上就完成了完整备份(-l 0),可以进行其他累计备份(-l 1~9)
查看备份的文件夹有没有新的文件:xfsdump -I
在/boot下新建一个10M的文件夹:dd if=/dev/zero of=/boot/testing.img bs=1M count=10
进行差异备份:
可以看到备份了11M的文件
查看level1的时间点:开始用xfsdump -I
XFS文件系统还原 xfsrestore
1、用xfsrestore -I查看xfsdump备份后数据内容
2、简单复原level 0的文件系统
重要信息有三个:存放备份的那个文件(/srv/boot.dump)、session label name(boot_all)、要还原的那个文件夹(/boot)
将备份资料在/tmp/boot下面解开
xfsrestore -f /srv/boot.dump -L boot_all /tmp/boot
备份还原:原本/boot中的东西并没有删除,之间复原的结果就是--同名的文件会被覆盖,其他系统内新的文件会被保留
diff -r可以比较两个文件夹的不同处
加-s可以选择复原某一目录或文件:
复原累计备份资料:
xfsrestore -f /srv/boot.dump1 /tmp/boot
四、光盘写入工具
mkisofs建立光盘映像
光盘的格式一般称为iso9660这种格式一般仅支持旧版的DOS文件名,只能以8.3(文件名8个字符,拓展名3个),加上-r选项后信息能够被较完整的记录
-graft-point这个选项可以定义映像文件中的目录
不使用:mkisofs -r -v -o /tmp/system.img /boot /home /etc
制作的备份一团糟,三个文件夹的内容放到了一起
使用:mkisofs -r -V 'linux_file' -o /tmp/system.img -m /root/etc -graft-point /root=/root /home=/home /etc=/etc
制作修改可开机光盘映像
五、其他常见的压缩与备份工具
dd
可以读取磁盘装置的内容(几乎是直接读取扇区),然后将装置备份成一个文件
if为输入文件 of为输出文件
很简单好用
直接备份整个/boot
可以看出是把整个分区都复制了,包括空的区域,所以效率并不高
cpio
cpio可以备份任何东西,包括设备文件,不过有个问题是cpio不会主动去找文件来备份,要配合类似find等可以找到文件名的指令来告知cpio该被备份的数据在哪里
备份:find boot | cpio -ocvB > /tmp/boot.cpio
要在根目录下进行,因为cpio很笨,它不会理会你给的是绝对路径还是相对路径的文件名,所以如果加上绝对路径/开头,未来解开是它就一定会覆盖掉原本的/boot
还原:cpio -idvc < /tmp/boot.cpio
还原出一个目录
查看:cpio -ivct < /tmp/boot/cpio
所以说cpio与管线命令及数据流导向的相关性就相当重要了