压缩文件的用途与技术


压缩文件的用途自然不用提, 压缩文件的技术可以谈一下:
在计算机中, 每个数字都是用B来表示的, 而计算机最小的单位为bit, 因此在存储时很多bit位其实是浪费的, 压缩技术可以将这些浪费的空间都去除掉, 另外一种压缩技术就是将重复的数据进行统计处理, 例如100个1直接可以用[100个1]来表示.

压缩后与压缩的文件所占用的磁盘空间大小, 可以被称为压缩比.

Linux系统常见的压缩命令


压缩文件扩展名:

  1. *.Z compress程序压缩的文件
  2. *.zip zip程序压缩的文件
  3. *.gz gzip压缩的文件
  4. *.bz2 bzip2程序压缩的文件
  5. *.xz xz程序压缩的文件
  6. *.tar tar程序打包的文件, 并没有被压缩过
  7. *.tar.gz tar程序打包, gz压缩
  8. *.tar.bz2 同理
  9. *.tar.xz

打包的意思就是将多个文件放在一块进行压缩.

gzip, zcat/zmore/zless/zgrep


gzip压缩的文件为*.gz, gzip可以解开compress, zip与gzip等软件压缩的压缩包.

语法:

gzip [-cdtv#] 文件名
选项与参数:
-c : 将压缩的数据输出到屏幕上, 可通过数据流来进行处理
-d : 解压缩
-t : 检验压缩文件的一致性
-v : 可以显示源文件/压缩文件的压缩比等信息
-# : #为数字, -1最快,但是压缩比最差; -9最慢, 但是压缩比好,默认是-6.

# 范例, 找事/etc目录下容量最大的文件, 并将它复制到/tmp, 然后以gzip压缩.
ls -ldSr /etc/*
# 得到/etc/services文件最大.
cd /tmp
cp /etc/services .
gzip -v services
ll /etc/services services.gz

当使用gzip压缩时, 默认原来的文件会被压缩成.gz后缀的文件, 源文件被删除.

#范例, 请将范例一的压缩文件的内容读出来
zcat services.gz
# 解压缩文件
gzip -d services.gz
# 压缩文件, 使用最佳压缩比, 并保留原来的文件
gzip -9 -c services > services.gz
# 筛选services文件中关键字
zgrep -n 'http' services.gz

compress程序几乎没人用, 对于.Z文件可以使用znew转换成.gzip的文件

bzip2, bzcat/bzmore/bzless/bzgrep


bzip2有着比gzip更好的压缩比, 但是压缩时间消耗的更久.

语法:

bzip2 [-cdkzv#] 文件名
选项与参数
-k : 保留原始文件而不删除
-z : 压缩的参数

#范例, 将/tmp/services压缩
bzip2 -v services
ll services*
# 将压缩文件的内容读出来
bzcat services.bz2
# 解压缩
bzip2 -d services.bz2
# 最佳性能压缩并保留原来文件
bzip2 -9 -c services > services.bz2

xz, xzcat/xzmore/xzless/xzgrep


性能比bzip2还高, 但消耗的时间更久

语法:

xz [-dtlkc#] 文件名
选项与参数:
-l : 列出文件的相关信息

#范例, 将services通过xz压缩
xz -v services
ll services*
# 列出压缩文件的信息
xz -l services.xz
# 读取压缩文件内容
xzcat services.xz
# 解压缩
xzcat -d services.xz
# 保留原来文件并压缩
xzcat -k servicesta

打包命令: tar


tar命令用于将多个文件或目录打包成一个文件然后在压缩进行处理.

tar


tar的语法:

tar [-z | -j | -J] [cv] [-f 待建立的新文件名] filename... #打包压缩
tar [-z | -j | -J] [tv] [-f 已存在的tar文件名]
tar [-z | -j | -J] [xv] [-f 已存在的文件名] [-C 目录] #解压缩
选项与参数:
-c 建立打包文件
-t 查看打包文件的内容
-x 解压缩的方法
-z gzip
-j bz2
-J xz
-v 处理文件显示文件名
-f filename
-C 目录 解压的目录
-p 保留备份数据的原本权限与属性
-P 保留绝对路径, 允许根目录
--exclude=FILE 压缩的过程排除FILE

使用tar加入-z, -j或-J的参数备份/etc/目录:

time tar -zpcv -f /root/etc.tar.gz /etc
# tar 去除根目录
time tar -jpcv -f /root/etc.tar.bz2 /etc
time tar -Jpcv -f /root/etc.tar.xz /etc
# 其中xz方式压缩花的时间最多, 压缩率最高

注意-p与-P的区别

查看tar文件的数据内容:

tar -jtv -f /root/etc.tar.bz2

将备份的数据解压缩, 解压到指定目录:

tar -jxv -f /root/etc.tar.bz2 -C /tmp

仅解开单一文件的方法: 使用-jtv找到文件名,将文件名解开解开即可

tar -jtv -f /root/etc.tar.bz2 | grep 'shadow'
tar -jxv -f 打包文件.tar.bz2 待解开文件名
tar -jxv -f /root/etc.tar.bz2 /etc/shadow

打包目录, 但不含该目录下的某些文件:

tar -jcv -f /root/system.tar.bz2 --exclude=/root/etc* --exclude=/root/system.tar.bz2 /etc /root

仅备份比某个时刻还要新的文件:
备份新文件可以使用—newer和—newer-mtime. —newer表示日期包含mtime和ctime; —newer-mtime包含mtime.

find /etc -newer /etc/passwd
ll /etc/passwd
tar -jcv -f /root/etc.newer.then.passwd.tar.bz2 --newer-mtime="2015/06/17" /etc/*
tar -jtv -f /root/etc.newer.then.passwd.tar.bz2 | grep -v '/$'

基本名称 : tarfile, tarball ?
打包的文件称为tarfile, 打包压缩后的文件称为tarball

tar命令可以将文件打包到特别的设备中:tape

tar -cv -f /dev/st0 /home /root /etc

特殊应用 : 利用管道命令与数据流
可以将多个文件打包然后解包到别的目录下

cd /tmp
tar -cvf - /etc | tar -xvf -
# 第一个-表示stdout, 第二个表示stdin

这会带来一个问题, 解压后的目录带有/etc/父目录

解压缩后的SELinux问题:
备份配置文件然后恢复时, SELinux可能会让系统无法读写某些配置文件内容, 影响系统的正常使用.
处理方式有三:

  • 通过各种可行方式登录系统, 修改/etc/selinux/config文件, 将SELinux改成permissive模式, 重启.
  • 第一次恢复系统后, 不要立即重启, 执行restorecon -Rv 自动修复以下SELinux的类型即可.
  • 登录系统建立./autorelabel, 重启.

XFS文件系统的备份与还原


利用xfsdump与xfsrestore完成XFS文件系统的备份与还原.
安装:
yum install xfsdump -y

XFS文件系统备份xfsdump


xfs文件系统可用进行完整备份和增量备份.

其中, 增量备份分1-9等级, 0为完整备份, 增量备份就是备份与上一次备份有差异的文件, 所以第一次备份一定是完整备份.

各个level的记录文件再/var/lib/xfsdump/inventory中.

使用xfsdump的限制:

  • xfsdump不支持没有挂载的文件系统备份, 所以只能备份挂载的文件系统
  • root权限
  • 只能备份xfs文件系统
  • 备份的数据只能使用xfsrestore解析
  • 通过文件系统的UUID来辨别备份文件.

xfsdump的语法:

xfsdump [-L S_label] [-M M_label] [-l #] [-f 备份文件] 待备份数据
xfsdump -I
选项与参数:
-L xfsdump会记录每次备份的session标头
-M xfsdump会记录存储媒介的标头
-l L的小写, 指定等级, 0-9共10个等级
-f 类似tar后面接的文件
-I 从/var/lib/xfsdump/inventory列出目前备份的信息状态

xfsdump备份完整的文件系统:

[root@kuaicdn file]# df -h
文件系统        容量  已用  可用 已用% 挂载点
devtmpfs        449M     0  449M    0% /dev
tmpfs           460M     0  460M    0% /dev/shm
tmpfs           460M  6.2M  454M    2% /run
tmpfs           460M     0  460M    0% /sys/fs/cgroup
/dev/sda3        16G  7.8G  7.7G   51% /
/dev/sda2       506M  119M  388M   24% /boot
/dev/sda1       128M   12M  117M    9% /boot/efi
tmpfs            92M     0   92M    0% /run/user/0
overlay          16G  7.8G  7.7G   51% /data/docker-root/overlay2/8e8682292ee5e96af18e535ea06b54f8d25bfc570d2946cfea2363b110595c17/merged
/dev/loop0      509M   36M  473M    8% /data/file

# 备份/data/file文件系统的内容

[root@kuaicdn file]# xfsdump -l 0 -L loop_all -M loop_all -f /srv/loop.dump /data/file

[root@kuaicdn file]# ll /srv/loop.dump
-rw-r--r-- 1 root root 21872 11月  1 14:26 /srv/loop.dump

[root@kuaicdn file]# ll /var/lib/xfsdump/inventory/
总用量 16
-rw-r--r-- 1 root root 5760 11月  1 14:32 0fcb3cf0-bf00-404e-b12a-186e32583542.StObj
-rw-r--r-- 1 root root  312 11月  1 14:32 7efaed0d-d06b-470a-a3dc-9eb364f34b82.InvIndex
-rw-r--r-- 1 root root  576 11月  1 14:26 fstab

[root@kuaicdn file]# xfsdump -I
file system 0:
    fs id:        7efaed0d-d06b-470a-a3dc-9eb364f34b82
    session 0:
        mount point:    kuaicdn:/data/file
        device:        kuaicdn:/dev/loop0
        time:        Mon Nov  1 14:26:30 2021
        session label:    "loop_all"
        session id:    a9cca386-02bf-4c88-8825-0e65f374cf6b
        level:        0
        resumed:    NO
        subtree:    NO
        streams:    1
        stream 0:
            pathname:    /srv/loop.dump
            start:        ino 67 offset 0
            end:        ino 68 offset 0
            interrupted:    NO
            media files:    1
            media file 0:
                mfile index:    0
                mfile type:    data
                mfile size:    21872
                mfile start:    ino 67 offset 0
                mfile end:    ino 68 offset 0
                media label:    "loop_one"
                media id:    30f0d6a3-c705-4c6b-9cc2-09e2e526d594

xfsdump进行增量备份:

# 文件系统中新增文件
[root@kuaicdn file]# dd if=/dev/zero of=/data/file/test.img bs=1M count=10

[root@kuaicdn file]# xfsdump -l 1 -L loop_2 -M loop_2 -f /srv/loop.dump1 /data/file

[root@kuaicdn file]# ll /srv/loop*
-rw-r--r-- 1 root root 536870912 11月  1 14:50 /srv/loopdev
-rw-r--r-- 1 root root     21872 11月  1 14:26 /srv/loop.dump
-rw-r--r-- 1 root root  10510624 11月  1 14:32 /srv/loop.dump1

[root@kuaicdn file]# xfsdump -I
file system 0:
    fs id:        7efaed0d-d06b-470a-a3dc-9eb364f34b82
    session 0:
        mount point:    kuaicdn:/data/file
        device:        kuaicdn:/dev/loop0
        time:        Mon Nov  1 14:26:30 2021
        session label:    "loop_all"
        session id:    a9cca386-02bf-4c88-8825-0e65f374cf6b
        level:        0
        resumed:    NO
        subtree:    NO
        streams:    1
        stream 0:
            pathname:    /srv/loop.dump
            start:        ino 67 offset 0
            end:        ino 68 offset 0
            interrupted:    NO
            media files:    1
            media file 0:
                mfile index:    0
                mfile type:    data
                mfile size:    21872
                mfile start:    ino 67 offset 0
                mfile end:    ino 68 offset 0
                media label:    "loop_one"
                media id:    30f0d6a3-c705-4c6b-9cc2-09e2e526d594
    session 1:
        mount point:    kuaicdn:/data/file
        device:        kuaicdn:/dev/loop0
        time:        Mon Nov  1 14:32:55 2021
        session label:    "loop_2"
        session id:    d49a4fa5-2395-4175-a69c-493d3e145f8c
        level:        1
        resumed:    NO
        subtree:    NO
        streams:    1
        stream 0:
            pathname:    /srv/loop.dump1
            start:        ino 68 offset 0
            end:        ino 69 offset 0
            interrupted:    NO
            media files:    1
            media file 0:
                mfile index:    0
                mfile type:    data
                mfile size:    10510624
                mfile start:    ino 68 offset 0
                mfile end:    ino 69 offset 0
                media label:    "loop_m2"
                media id:    d3912b25-7ccd-4917-a8fd-fab3b383e9ba
xfsdump: Dump Status: SUCCESS

XFS文件系统还原xfsrestore


语法:

xfsrestore -I
xfsrestore [-f 备份文件] [-L S_label] [-s] 待恢复目录 # 单一文件系统全恢复
xfsrestore [-f 备份文件] -r 待恢复目录 # 通过增量备份文件恢复系统
xfsrestore [-f 备份文件] -i 待恢复目录 # 进入交互模式

xfsrestore观察xfsdump备份后的备份数据内容:
观察/var/lib/xfsdump/inventory中的内容

[root@kuaicdn file]# xfsrestore -I
file system 0:
    fs id:        7efaed0d-d06b-470a-a3dc-9eb364f34b82
    session 0:
        mount point:    kuaicdn:/data/file
        device:        kuaicdn:/dev/loop0
        time:        Mon Nov  1 14:26:30 2021
        session label:    "loop_all"
        session id:    a9cca386-02bf-4c88-8825-0e65f374cf6b
        level:        0
        resumed:    NO
        subtree:    NO
        streams:    1
        stream 0:
            pathname:    /srv/loop.dump
            start:        ino 67 offset 0
            end:        ino 68 offset 0
            interrupted:    NO
            media files:    1
            media file 0:
                mfile index:    0
                mfile type:    data
                mfile size:    21872
                mfile start:    ino 67 offset 0
                mfile end:    ino 68 offset 0
                media label:    "loop_one"
                media id:    30f0d6a3-c705-4c6b-9cc2-09e2e526d594
    session 1:
        mount point:    kuaicdn:/data/file
        device:        kuaicdn:/dev/loop0
        time:        Mon Nov  1 14:32:55 2021
        session label:    "loop_2"
        session id:    d49a4fa5-2395-4175-a69c-493d3e145f8c
        level:        1
        resumed:    NO
        subtree:    NO
        streams:    1
        stream 0:
            pathname:    /srv/loop.dump1
            start:        ino 68 offset 0
            end:        ino 69 offset 0
            interrupted:    NO
            media files:    1
            media file 0:
                mfile index:    0
                mfile type:    data
                mfile size:    10510624
                mfile start:    ino 68 offset 0
                mfile end:    ino 69 offset 0
                media label:    "loop_m2"
                media id:    d3912b25-7ccd-4917-a8fd-fab3b383e9ba
xfsrestore: Restore Status: SUCCESS

注意观察文件系统的挂载点, 备份文件level, 这些与恢复文件系统相关

简单恢复level0的文件系统:

[root@kuaicdn file]# xfsrestore -f /srv/loop.dump -L loop_all /data/file
[root@kuaicdn file]# mkdir /tmp/loop
[root@kuaicdn file]# xfsrestore -f /srv/loop.dump -L loop_all /tmp/loop

恢复增量备份数据:
备份是level0 -> level1 -> level2
恢复level0 -> level1 -> level2

xfsrestore -f /srv/loop.dump1 /tmp/boot

仅还原部分文件的xfsrestore交互模式:
-s 可以实现部分数据的还原, 但-s需要指定文件名, 想要动态完成的话可以使用交互模式

mkdir /tmp/loop3
xfsrestore -f /srv/boot.dump -i /tmp/loop3

光盘写入工具


命令行模式下镜像文件刻录到CD/DVD中操作:

  • 现将所需要备份的数据创建成为一个镜像文件(iso), 利用mkisofs来处理
  • 将镜像文件刻录至CD或DVD当中, 利用cdrecord命令来处理

mkisofs : 建立镜像文件


刻录可启动与不可启动的光盘使用的方法不一样

制作一般数据光盘镜像文件

将数据刻录到DVD前需要将数据制作成镜像文件, 通过mkisofs命令实现

mkisofs安装:

yum install xorriso -y

mkisofs语法:

mkisofs [-o 镜像文件] [-Jrv] [-V vol] [-m file] 待备份文件... -graft-point isodir=systemdir..
选项与参数:
-r : 文件信息如UID/GID与权限等保留完整.(必要)
-grant-points : 定义本地目录与镜像目录的对应(必要)
-v : 显示创建ISO文件的过程
-V vol : 建立Volume, 类似卷标
-m file : -m 排除文件
-graft-point 映射文件

光盘的格式为iso9660, 该格式一般仅支持旧版的DOS文件名, 亦即文件名只能以8.3(文件名8个字符, 扩展名3个字符)的方式存在.

注意, 默认情况下本地目录文件会放置到镜像文件中的根目录, 这可能会导致冲突.

mkisofs -r -v -o /tmp/system.img /root /home /etc
# 当多个目录下存在相同路径的文件时可能会导致冲突
mount -o loop /tmp/system.img /mnt
df -h /mnt
ls /mnt
umount /mnt

使用-graft-point指定文件映射路径

mkisofs -r -V 'linux_file' -o /tmp/system.img -m /root/etc -graft-point /root=/root /home=/home /etc=/etc

制作/修改可启动光盘镜像文件

下载启动镜像后可以修改镜像文件改成可以自动加载某些程序的流程, 将镜像文件刻录到光盘中, 设置光盘启动即可, 需要kickstart的相关技术.

案例: 安装镜像文件将其放到/home目录下, 修改数据内容后将镜像文件放到/srv/newcd下.

isoinfo -d -i /home/*.iso # 需要安装genisoimage包

#挂载光盘到/mnt
mount /home/*.iso /mnt

mkdir /srv/newcd

rsync -a /mnt /srv/newcd # 同步数据, 完整的复制权限等数据

[root@kuaicdn home]# ll /mnt/isolinux/
总用量 60819
-r--r--r-- 1 root root     2048 11月  3 2020 boot.cat # 启动的安全编录文件
-rw-r--r-- 2 root root       84 10月 27 2020 boot.msg
-rw-r--r-- 2 root root      281 10月 27 2020 grub.conf
-rw-r--r-- 4 root root 55129656 10月 27 2020 initrd.img
-rw-r--r-- 2 root root    24576 11月  3 2020 isolinux.bin # 启动引导程序
-rw-r--r-- 2 root root     3032 10月 27 2020 isolinux.cfg
-rw-r--r-- 3 root root   190896 11月  6 2016 memtest
-rw-r--r-- 5 root root      186 10月  1 2015 splash.png
-r--r--r-- 1 root root     2215 11月  3 2020 TRANS.TBL
-rw-r--r-- 3 root root   153104 10月 31 2018 vesamenu.c32
-rwxr-xr-x 4 root root  6769256 10月 20 2020 vmlinuz    # Linux内核文件

cd /srv/newcd

mkisofs -o /custom.iso -b isoLinux.bin -c isolinux/boot.cat -no-emul-body -V 'CentOS 7 x86_64' -boot-load-size 4 -boot-info-table -R -J -v -T .

cdrecord: 光盘刻录工具


旧版CentOS采用cdrecord命令, CentOS7使用wodim命令来进行刻录. 建议使用wodim命令.

安装wodim

yum install wodim -y

wodim常见用法:

wodim --devices dev=/dev/sr0... #查询刻录机的bus位置
wodim -v dev=/dev/sr0 blank=[fast|all] #抹除重复读写盘
wodim -v dev=/dev/sr0 -format #格式化DVD+RW
wodim -v dev=/dev/sr0 [可用选项与功能] file.iso

检测刻录机所在位置

早期刻录机使用SCSI接口

ll /dev/sr0

注意, 虚拟光盘是无法刻录数据的

进行DVD/CD的刻录操作

# 1. 抹除光盘的原始内容
wodim -v dev=/dev/sr0 blank=fast
# 2. 开始刻录
wodim -v dev=/dev/sr0 speed=4 -dummy -eject /tmp/system.img

# 3. 挂载
mount /dev/sr0/mnt
df -h /mnt
umount /mntum

其他常见的压缩与备份工具


dd


dd可以直接读取磁盘扇区的数据, 所以dd可以直接复制数据进行备份.

dd的语法:

dd if="input_file" of="output_file" bs="block_size" count="number"
选项与参数:

示例:

# 备份/tmp/passwd到/tmp/passwd.copy中
[root@kuaicdn ~]# dd if=/etc/passwd of=/tmp/passwd.copy
记录了2+1 的读入
记录了2+1 的写出
1181字节(1.2 kB)已复制,0.000104403 秒,11.3 MB/秒
[root@kuaicdn ~]# ll -h /tmp/passwd.copy
-rw-r--r-- 1 root root 1.2K 11月  3 12:26 /tmp/passwd.copy

# 将刚刚刻录的光盘的内容, 再次备份下来成为镜像文件
[root@kuaicdn ~]# dd if=/dev/sr0 of=/tmp/system.iso

# 将system.iso刻录到/dev/sdb中, 不想要使用DVD作为启动设备, 可以将镜像文件使用dd写入USB来启动
[root@kuaicdn ~]# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sdb      8:16   0    2G  0 disk 
sr0     11:0    1 1024M  0 rom  
loop0    7:0    0  512M  0 loop /data/file
sda      8:0    0   16G  0 disk 
├─sda2   8:2    0  512M  0 part /boot
├─sda3   8:3    0 15.4G  0 part /
└─sda1   8:1    0  128M  0 part /boot/efi
[root@kuaicdn ~]# mkisofs -o /tmp/system.iso -r -V 'linux_file' -graft-point /root=/root /home=/home /etc=/etc
[root@kuaicdn ~]# ll -h /tmp/system.iso 
-rw-r--r-- 1 root root 1.1G 11月  3 12:40 /tmp/system.iso
[root@kuaicdn ~]# dd if=/tmp/system.iso of=/dev/sdb
记录了2122600+0 的读入
记录了2122600+0 的写出
1086771200字节(1.1 GB)已复制,35.0868 秒,31.0 MB/秒
[root@kuaicdn ~]# mount /dev/sdb /mnt
mount: /dev/sdb 写保护,将以只读方式挂载
[root@kuaicdn ~]# ll /mnt
总用量 34
dr-xr-xr-x 91 root root 28672 11月  2 13:22 etc
dr-xr-xr-x  2 root root  2048 11月  2 13:16 home
dr-xr-xr-x  8 root root  4096 11月  1 12:41 root
[root@kuaicdn ~]# df -h /mnt
文件系统        容量  已用  可用 已用% 挂载点
/dev/sdb        1.1G  1.1G     0  100% /mnt

#备份/boot
df -h /boot
dd if=/dev/sda2 of=/tmp/vda2.img

示例: 将/dev/sda2完整复制到另一个硬盘分区/dev/sdb1上

# 1. 划分分区/dev/sdb1
gdisk /dev/sdb
[root@kuaicdn ~]# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sdb      8:16   0    2G  0 disk 
└─sdb1   8:17   0    1G  0 part 
sr0     11:0    1 1024M  0 rom  
loop0    7:0    0  512M  0 loop /data/file
sda      8:0    0   16G  0 disk 
├─sda2   8:2    0  512M  0 part /boot
├─sda3   8:3    0 15.4G  0 part /
└─sda1   8:1    0  128M  0 part /boot/efi

# 2. 复制数据
[root@kuaicdn ~]# dd if=/dev/sda2 of=/dev/sdb1
记录了1048576+0 的读入
记录了1048576+0 的写出
536870912字节(537 MB)已复制,17.6431 秒,30.4 MB/秒

# 3. 修改分区uuid和清除log
[root@kuaicdn ~]# xfs_repair -L /dev/sdb1 # 清除xfs log
[root@kuaicdn ~]# uuidgen
3d889739-e0f1-4b2e-9a35-3ce55e79f835
[root@kuaicdn ~]# blkid
/dev/sda1: SEC_TYPE="msdos" UUID="E0F7-209C" TYPE="vfat" PARTLABEL="EFI System Partition" PARTUUID="eada01c9-c9e1-4650-b98d-d7079983d8c2" 
/dev/sda2: UUID="30fec928-14ec-4c64-b829-f754df889eef" TYPE="xfs" PARTUUID="21a8e35a-6bb6-4439-b09a-51fd8aaa0c5a" 
/dev/sda3: UUID="6e615d41-1941-45ef-a398-27d641ebbb74" TYPE="xfs" PARTUUID="135a7598-e654-417a-9f28-09519db0601a" 
/srv/loopdev: UUID="7efaed0d-d06b-470a-a3dc-9eb364f34b82" TYPE="xfs" 
/dev/loop0: UUID="7efaed0d-d06b-470a-a3dc-9eb364f34b82" TYPE="xfs" 
/dev/sdb1: UUID="30fec928-14ec-4c64-b829-f754df889eef" TYPE="xfs" PARTLABEL="Linux filesystem" PARTUUID="eddab6de-b71c-4298-9463-ecea71dcaeec" 
[root@kuaicdn ~]# xfs_admin -U 3d889739-e0f1-4b2e-9a35-3ce55e79f835 /dev/sdb1
Clearing log and setting UUID
writing all SBs
new UUID = 3d889739-e0f1-4b2e-9a35-3ce55e79f835

# 4. 挂载
[root@kuaicdn ~]# mount /dev/sdb1 /mnt
[root@kuaicdn ~]# df -h /boot /mnt
文件系统        容量  已用  可用 已用% 挂载点
/dev/sda2       506M  119M  388M   24% /boot
/dev/sdb1       506M  119M  388M   24% /mnt
[root@kuaicdn ~]# xfs_growfs /mnt
meta-data=/dev/sdb1              isize=512    agcount=4, agsize=32768 blks
         =                       sectsz=4096  attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=131072, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=1605, version=2
         =                       sectsz=4096  sunit=1 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 131072 to 262144
[root@kuaicdn ~]# umount /mnt

cpio


可以备份设备文件.

重点


  • 压缩命令通过一些计算方法将原本的文件进行压缩, 以减少文件所占用的磁盘容量, 压缩前与压缩后的文件所占用的磁盘容量比值, 就可以被称为压缩比.
  • 压缩文件的扩展名: .gz, .bz2, .xz, .tar.gz, .tar.bz2, .tar.xz
  • 常见的压缩命令有gzip, bzip2, xz, 压缩率最高的是xz, 时间消耗最多的也是xz.
  • tar用来文件打包, 支持gzip, bzip2, xz的压缩.
  • 压缩: tar -Jcv -f filename.tar.xz 要被压缩的文件或目录名称
  • 查询: tar -Jtv -f filename.tar.xz
  • 解压缩: tar -Jxv -f filename.tar.xz -C 欲解压缩的目录
  • xfsdump可以备份文件系统或单一目录
  • xfsdump的备份针对文件系统, 可以进行0-9的level差异备份, 其中level 0 为完整备份
  • xfsrestore命令可还原被xfsdump创建的备份文件
  • 建立光盘刻录数据时可通过mkisofs命令来创建
  • 可通过wodim来写入CD或DVD刻录机
  • dd可备份完整的硬盘或硬盘分区, 因为dd可读取磁盘的上去表面数据
  • cpio为相对优秀的备份命令, 不过要搭配类似find的命令来读入欲备份的数据方可进行备份.