Linux XFS文件系统的备份与还原

news2024/11/17 7:53:37

文章目录

  • Linux XFS文件系统的备份与还原
    • XFS文件系统备份xfsdump
      • 语法
      • xfsdump备份完整的文件系统
      • 用xfsdump进行增量备份
    • XFS文件系统还原xfsrestore
      • 语法
      • 用xfsrestore观察和xfsdump后的备份数据内容
      • 简单恢复level 0 的文件系统
      • 恢复增量备份数据
      • 仅还原部分文件到xfsrestore交互模式

Linux XFS文件系统的备份与还原

备份与还原是系统管理中非常重要的一部分,保证数据的安全性与可靠性。对于xfs文件系统来说,备份与还原也是必不可少的操作。下面就详细介绍xfs文件系统的备份与还原

XFS文件系统备份xfsdump

其实xfsdump的功能颇为强大,他除了可以进行文件系统完整备份之外,还可以进行增量备份。那么什么是增量备份呢?这么说假设你的/home是独立的一个文件系统,那你在第一次使用xfsdump进行完整备份后,等过一段时间的文件系统自然运行后,你再进行第二次xfsdump时,就可以选择增量备份了。此时新备份的数据只会记录与第一次完整备份所有差异的文件而已,如下图

image-20230416194336902

上方的文件系统是一直随着时间变化的数据,例如在/home里面的文件数据会一直变化一样。而下面的方块则是xfsdump备份起来的数据,第一次备份一定是完整备份,完整备份在xfsdump当中帝国以为level 0。第二次备份时,/home文件系统内的数据已经与level 0 不一样了,而level 1 仅只是比较目前的文件系统与level 0之间的差异后,备份有变化的文件。至于各个level的记录文件则放置于/var/lib/xfsdump/inventory中。

使用xfsdump,注意以下的限制:

  • xfsdump不支持没有挂载的文件系统备份,所以只能备份已挂载的文件系统
  • xfsdump必须使用root的权限才能操作(涉及文件系统的关系)
  • xfsdump只能备份xfs文件系统
  • xfsdump备份下来的数据(文件或储存媒介)只能让xfsrestore解析
  • xfsdump是通过文件系统的UUID来辨别各备份文件,因此不能备份两个具有相同UUID的文件系统

语法

xfsdump [- options] [-f filename] <待备份的数据>

其中,选项包括:
-f filename:指定备份文件的名称和路径;
-L filename:指定日志文件的名称和路径;
-l level:指定备份的级别,包括0、1、2、3、4、5、6、9;
-s 备份时不备份空间;
-M xfsdump可以记录存储媒介的标头,这里可以填写此媒介的简易说明
-I 从/var/lib/xfsdump/inventory列出目前备份的信息状态

特别注意,xfsdump默认仅支持文件系统的备份,并不支持特定目录的备份,所以你不能用xfsdump去备份/etc/,因此/etc从来就不是一个独立的文件系统,注意。

xfsdump备份完整的文件系统

假设你在/boot划分出自己的文件系统,要整个文件系统备份可以这样:

  1. 先确定/boot是独立的文件系统
[root@localhost ~]# df -h /boot/
文件系统        容量  已用  可用 已用% 挂载点
/dev/sda1      1014M  151M  864M   15% /boot   # 挂载/boot的是/dev/sda1设备
# 看到了吗确实是独立的文件系统,/boot是挂载点
  1. 将完整备份的文件名记录成为/srv/boot.dump。
[root@localhost ~]# xfsdump -l 0 -L boot_all -M boot_all -f /srv/boot.dump /boot
xfsdump: using file dump (drive_simple) strategy
xfsdump: version 3.1.7 (dump format 3.0) - type ^C for status and control
xfsdump: level 0 dump of localhost.localdomain:/boot          # 开始备份本机/boot
xfsdump: dump date: Sun Apr 16 20:02:42 2023                  # 备份的时间
xfsdump: session id: c4840861-e488-4250-b0ba-615900bbc97a     # 这次dump的ID
xfsdump: session label: "boot_all"                            # 简单的给予一个名称
xfsdump: ino map phase 1: constructing initial dump list      # 开始备份程序
xfsdump: ino map phase 2: skipping (no pruning necessary)
xfsdump: ino map phase 3: skipping (only one dump stream)
xfsdump: ino map construction complete
xfsdump: estimated dump size: 123639360 bytes
xfsdump: /var/lib/xfsdump/inventory created
xfsdump: creating dump session media file 0 (media 0, file 0)
xfsdump: dumping ino map
xfsdump: dumping directories
xfsdump: dumping non-directory files
xfsdump: ending media file
xfsdump: media file size 123318136 bytes
xfsdump: dump size (non-dir files) : 123085224 bytes
xfsdump: dump complete: 2 seconds elapsed
xfsdump: Dump Summary:
xfsdump:   stream 0 /srv/boot.dump OK (success)
xfsdump: Dump Status: SUCCESS
# 在命令的执行方面,你也可以不加 -L 和 -M ,只是那就会进入交互模式,要求你回车
# 而执行xfsdump的过程中会出现如上的一些信息,可以仔细的观察以下
[root@localhost ~]# ll -h /srv/boot.dump 
-rw-r--r-- 1 root root 118M 416 20:02 /srv/boot.dump
[root@localhost ~]# ll /var/lib/xfsdump/inventory/
总用量 16
-rw-r--r-- 1 root root 5080 416 20:02 0159f731-2131-473a-8143-34853cd42816.StObj
-rw-r--r-- 1 root root  312 416 20:02 12fbc8e4-fc2b-458d-87ad-15193057ca19.InvIndex
-rw-r--r-- 1 root root  576 416 20:02 fstab
# 使用了xfsdump之后才会有上述/var/lib/xfsdump/inventory内的文件产生

就这样就很简单的建立起来/srv/boot.dump文件,该文件将整个/boot 文件系统都备份下来了。并且将备份的相关信息(文件系统/时间/session ID等)写入/var/lib/xfsdump/inventory中了准备下次备份时可以作为一个参考依据,然后再来做个测试,检查看看能否真的建立level 1的备份?

用xfsdump进行增量备份

一定要记住进行过完整备份后【-l 0】才能够继续由其他增量备份【-l 1~9】的能力,所以得确定上面的实践已经完成才行,接下里进行增量备份功能

  1. 从/var/lib/xfsdump/inventory列出目前备份的信息状态
[root@localhost ~]# xfsdump -I
file system 0:
        fs id:          12fbc8e4-fc2b-458d-87ad-15193057ca19
        session 0:
                mount point:    localhost.localdomain:/boot
                device:         localhost.localdomain:/dev/sda1
                time:           Sun Apr 16 20:02:42 2023
                session label:  "boot_all"
                session id:     c4840861-e488-4250-b0ba-615900bbc97a
                level:          0
                resumed:        NO
                subtree:        NO
                streams:        1
                stream 0:
                        pathname:       /srv/boot.dump
                        start:          ino 69 offset 0
                        end:            ino 1572934 offset 0
                        interrupted:    NO
                        media files:    1
                        media file 0:
                                mfile index:    0
                                mfile type:     data
                                mfile size:     123318136
                                mfile start:    ino 69 offset 0
                                mfile end:      ino 1572934 offset 0
                                media label:    "boot_all"
                                media id:       8f1e4115-90f8-40ff-a620-540b5421ae2a
xfsdump: Dump Status: SUCCESS
# 可以看到目前仅有一个session 0的备份数据而已,而且是level 0
  1. 我们可以先建立一个大小约为10M的文件在/boot内
[root@localhost ~]# dd if=/dev/zero of=/boot/testing.img bs=1M count=10
记录了10+0 的读入
记录了10+0 的写出
10485760字节(10 MB)已复制,0.102866 秒,102 MB/秒
[root@localhost ~]# ll -h /boot/testing.img 
-rw-r--r-- 1 root root 10M 416 20:21 /boot/testing.img
  1. 开始建立差异备份文件,此时我们使用level 1
[root@localhost ~]# xfsdump -l 1 -L boot_2 -M boot_2 -f /srv/boot.dump1 /boot
.....
....
[root@localhost ~]# ll -h /srv/boot*             
-rw-r--r-- 1 root root 118M 416 20:02 /srv/boot.dump
-rw-r--r-- 1 root root  11M 416 20:24 /srv/boot.dump1
# 看看文件大小,岂不是我们刚刚所建立的大文件容量吗?
  1. 最后再看看是否记录了 level 1备份的时间点
[root@localhost ~]# xfsdump -I
file system 0:
        fs id:          12fbc8e4-fc2b-458d-87ad-15193057ca19
        session 0:
                mount point:    localhost.localdomain:/boot
                device:         localhost.localdomain:/dev/sda1
                time:           Sun Apr 16 20:02:42 2023
                session label:  "boot_all"
                session id:     c4840861-e488-4250-b0ba-615900bbc97a
 ...................
 ..........
 ...
 
        session 1:
                mount point:    localhost.localdomain:/boot
                device:         localhost.localdomain:/dev/sda1
                time:           Sun Apr 16 20:24:00 2023
                session label:  "boot_2"
                session id:     ca7224bf-e1e0-488e-bdd6-91486bb0a6d3
...........................
.......
...

通过这个简单的方式,我们就能够仅备份差异文件的部分

XFS文件系统还原xfsrestore

备份文件在急用时可以恢复系统的重要数据,所以有备份当然就要学学如何恢复了,xfsdump的恢复使用的是xfsrestore这个命令,这个命令的选项也非常多,可以自行查看,在这里简单的介绍一下

语法

[root@localhost ~]# xfsrestore -I        # 查看备份文件
xfsrestore [ -f 备份文件]  [ -L label ] [ -s ] 待恢复目录    <==单一文件全系统恢复
xfsrestore [ -f 备份文件]  -r 待恢复目录      # 通过增量备份文件来恢复系统
xfsrestore [ -f 备份文件]  -i 待恢复目录      # 进入交互模式

选项于参数:
-I   跟xfsdump相同的输出,可查询备份数据,包括Label名称与备份时间等。
-f   指定备份数据的存储位置;
-p   在还原过程中保留权限、所有权和时间戳信息;
-v   显示还原过程中的详细信息;
-r   恢复备份数据;
-t   列出备份数据中的文件和目录。
-L   就是session的Label name,可以用 -I查询到
-s   需要接某特定目录,就是仅恢复某一个文件或目录的意思
-i   进入交互模式,高级管理员使用的,一般我们不需要操作他

用xfsrestore观察和xfsdump后的备份数据内容

要找出xfsdump内容就使用xfsrestore -I 来查看即可,不需要加任何参数,因为xfsdump与xfsrestore 都会到 /var/lib/xfsdumop/inventory/ 里面去取数据来显示,因此两者输出是相同的

[root@localhost ~]# xfsrestore -I
file system 0:
        fs id:          12fbc8e4-fc2b-458d-87ad-15193057ca19
        session 0:
                mount point:    localhost.localdomain:/boot
                device:         localhost.localdomain:/dev/sda1
                time:           Sun Apr 16 20:02:42 2023
                session label:  "boot_all"
                session id:     c4840861-e488-4250-b0ba-615900bbc97a
                level:          0
                        pathname:       /srv/boot.dump
                        start:          ino 69 offset 0
                        end:            ino 1572934 offset 0
                        interrupted:    NO
                        media files:    1
                        media file 0:
                                mfile index:    0
                                mfile type:     data
                                mfile size:     123318136
                                mfile start:    ino 69 offset 0
                                mfile end:      ino 1572934 offset 0

        session 1:
                mount point:    localhost.localdomain:/boot
                device:         localhost.localdomain:/dev/sda1
                time:           Sun Apr 16 20:24:00 2023
                session label:  "boot_2"
                session id:     ca7224bf-e1e0-488e-bdd6-91486bb0a6d3
                level:          1
                                mfile type:     data
                                mfile size:     10510624
                                mfile start:    ino 79 offset 0


# 以上内容是简化的结果
# 我们可以看到整个文件系统是/boot的挂载点,然后又两个备份,一个 level 0 一个level 1
# 我们也可以看到备份文件的数据他的大小内容,更重要的就是那个session label

查询的重点就是要找出到底是哪个文件是哪个挂载点,而备份文件又是上面level 等,接下来让我们从备份还原系统

简单恢复level 0 的文件系统

先来处理一个简单的任务,就是让/boot整个恢复到最原本的状态,你该如何处理呢?其实很简单,我们只要知道想要被恢复的那个文件,以及该文件的session label name 就可以恢复,我们从上面观察已经知道了 level 0 的 session label 是【boot_all】 那整个流程是这样的

  1. 直接将数据给他覆盖回去即可
[root@localhost ~]# xfsrestore -f /srv/boot.dump -L boot_all /boot
xfsrestore: using file dump (drive_simple) strategy
xfsrestore: version 3.1.7 (dump format 3.0) - type ^C for status and control
xfsrestore: using online session inventory
xfsrestore: searching media for directory dump
xfsrestore: examining media file 0
xfsrestore: reading directories
xfsrestore: 9 directories and 324 entries processed
xfsrestore: directory post-processing
xfsrestore: restoring non-directory files
xfsrestore: restore complete: 0 seconds elapsed
xfsrestore: Restore Summary:
xfsrestore:   stream 0 /srv/boot.dump OK (success)
xfsrestore: Restore Status: SUCCESS
  1. 将备份数据在/tmp/boot 下面解开
[root@localhost ~]# mkdir /tmp/boot
[root@localhost ~]# xfsrestore -f /srv/boot.dump -L boot_all /tmp/boot/
xfsrestore: using file dump (drive_simple) strategy
xfsrestore: version 3.1.7 (dump format 3.0) - type ^C for status and control
xfsrestore: using online session inventory
xfsrestore: searching media for directory dump
xfsrestore: examining media file 0
xfsrestore: reading directories
xfsrestore: 9 directories and 324 entries processed
xfsrestore: directory post-processing
xfsrestore: restoring non-directory files
xfsrestore: restore complete: 1 seconds elapsed
xfsrestore: Restore Summary:
xfsrestore:   stream 0 /srv/boot.dump OK (success)
xfsrestore: Restore Status: SUCCESS
[root@localhost ~]# du -sh /boot/  /tmp/boot/
128M    /boot/
118M    /tmp/boot/
# 可以看到两个文件大小不一致,没关系我们来检查一下
[root@localhost ~]# diff -r /boot/ /tmp/boot/
只在 /boot/ 存在:testing.img
# 原来是们在/boot 增加过一个文件

因为原本/boot 里面的东西我们没有删除,直接恢复的结果就是:同名的文件会被覆盖,其他系统内新的文件会被保留。所以,那个/boot/testing.img 就会一直在里面,如果备份的目的就是新的位置,当然就只有原本备份的数据而已,而diff -r 可以比较两个目录内的文件差异,通过该命令我们可以找到两个目录之间的差异

  1. 仅恢复备份文件内的grub2到/tmp/boot2里面去
[root@localhost ~]# xfsrestore -f /srv/boot.dump -L boot_all  -s grub2 /tmp/boot2
[root@localhost ~]# ll  /tmp/boot2/
总用量 0
drwx------. 5 root root 97 45 20:12 grub2

恢复增量备份数据

其实恢复增量备份与恢复单一文件系统相似。如果备份数据是有level 0 ==> level 1 ==> level 2 去进行的,当然恢复就得要相同的流程来恢复了。因此当我们恢复了level 0 之后,接下来当然就要恢复 level 1 到系统内,我们可以从前一个案例恢复 /tmp/boot 的情况来继续往下处理

继续恢复level 1到 /tmp/boot当中

[root@localhost ~]# xfsrestore -f /srv/boot.dump1 /tmp/boot

仅还原部分文件到xfsrestore交互模式

刚刚的 -s可以接部分数据来还原,但是,如果我就根本不知道备份文件里面有啥文件,那该如何选择呢?我猜吗?又如果要恢复的文件数量太多,用 -s 似乎太笨,那怎么办呢?有没有比较好的方式?有的,我们可以用-i这个交互式界面。举例来说,我们想要知道 level 0的备份数据里面有哪些东西,如何再少了的还原回来的话。

  1. 先进入备份文件内,准备找出需要备份的文件,同时预计还原到/tmp/boot3中
[root@localhost ~]# xfsrestore -f /srv/boot.dump -i /tmp/boot3/
xfsrestore: using file dump (drive_simple) strategy
xfsrestore: version 3.1.7 (dump format 3.0) - type ^C for status and control
xfsrestore: searching media for dump
xfsrestore: examining media file 0
xfsrestore: dump description: 
xfsrestore: hostname: localhost.localdomain
xfsrestore: mount point: /boot
xfsrestore: volume: /dev/sda1
xfsrestore: session time: Sun Apr 16 20:02:42 2023
xfsrestore: level: 0
xfsrestore: session label: "boot_all"
xfsrestore: media label: "boot_all"
xfsrestore: file system id: 12fbc8e4-fc2b-458d-87ad-15193057ca19
xfsrestore: session id: c4840861-e488-4250-b0ba-615900bbc97a
xfsrestore: media id: 8f1e4115-90f8-40ff-a620-540b5421ae2a
xfsrestore: using online session inventory
xfsrestore: searching media for directory dump
xfsrestore: reading directories
xfsrestore: 9 directories and 324 entries processed
xfsrestore: directory post-processing

 ========================== subtree selection dialog ==========================

the following commands are available:
        pwd 
        ls [ <path> ]
        cd [ <path> ]
        add [ <path> ]
        delete [ <path> ]
        extract 
        quit 
        help 

 -> ls
              78 initramfs-3.10.0-1160.el7.x86_64kdump.img 
              75 initramfs-3.10.0-1160.el7.x86_64.img 
              77 vmlinuz-0-rescue-567928b865d945a8a3c7211006b3ba40 
              76 initramfs-0-rescue-567928b865d945a8a3c7211006b3ba40.img 
              74 vmlinuz-3.10.0-1160.el7.x86_64 
              73 symvers-3.10.0-1160.el7.x86_64.gz 
              72 config-3.10.0-1160.el7.x86_64 
              71 System.map-3.10.0-1160.el7.x86_64 
              70 .vmlinuz-3.10.0-1160.el7.x86_64.hmac 
              68 grub/
         1572928 grub2/
              67 efi/
              
 -> add  config-3.10.0-1160.el7.x86_64 
 -> add  grub/
 -> add grub2/
 -> extract
 --------------------------------- end dialog ---------------------------------

xfsrestore: restoring non-directory files
xfsrestore: restore complete: 80 seconds elapsed
xfsrestore: Restore Summary:
xfsrestore:   stream 0 /srv/boot.dump OK (success)
xfsrestore: Restore Status: SUCCESS
[root@localhost ~]# ll -h /tmp/boot3/
总用量 152K
-rw-r--r--. 1 root root 150K 1020 2020 config-3.10.0-1160.el7.x86_64
drwxr-xr-x. 2 root root   27 45 20:08 grub
drwx------. 5 root root   97 45 20:12 grub2

这个-i是很有帮助的一个选项。可以从备份文件里面找出你所需要的数据来恢复,当然,如果你已经知道了文件名,使用 -s 不需要进入备份文件就能处理掉这部分了

此文章内容参考《鸟哥Linux私房菜》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/419779.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深入剖析Android视图层次结构,为什么UI界面如此多样化?

简述 在Android Framework中&#xff0c;渲染机制是指如何为应用程序的用户界面绘制和布局视图&#xff08;View&#xff09;。Android的视图层次结构&#xff08;View Hierarchy&#xff09;是由视图树中的每个节点表示的 。当更新视图树时&#xff0c;Android会执行以下流程…

记一次内存泄漏问题的排查

阶段一&#xff1a; 前段时间&#xff0c;突然发现服务在毫无征兆的情况下发生了重启。去看了一下容器退出的日志&#xff0c;发现内存利用率超过了100%&#xff0c;导致容器重启&#xff0c;进一步看了skyWalking&#xff0c;发现heap内存超了&#xff0c;当时只是简单的以为是…

HTML2.1列表标签

列表标签种类 无序列表 有序列表 自定义列表 使用场景&#xff1a;在列表中按照行展示关联性内容。 特点&#xff1a;按照行的形式&#xff0c;整齐显示内容。 一、无序列表 标签名说明ul无序列表整体&#xff0c;用于包裹li标签li表示无序列表的每一项&#xff0c;用于包…

【iOS】—— 消息传递和消息转发

消息传递和消息转发 文章目录消息传递和消息转发消息传递&#xff08;方法调用&#xff09;IMP指针IMP与SEL的区别与联系SEL是通过表取对应关系的IMP&#xff0c;进行方法的调用快速查找imp过程汇编代码查找过程总结消息发送快速查找imp(汇编):方法缓存慢速查找总结慢速查找消息…

全链路日志追踪

背景 最近线上的日志全局追踪 traceId 不好使了&#xff0c;不同请求经常出现重复的 traceId&#xff0c;或者通过某个请求的 traceId 追踪搜索&#xff0c;检索出了与该请求完全不相干的日志。我领导叫我去排查解决这个问题&#xff0c;这里我把我排查的过程思路以及如何解决…

真题详解(单元测试)-软件设计(五十)

真题详解(0/1背包)-软件设计&#xff08;四十九)https://blog.csdn.net/ke1ying/article/details/130163955 单元测试 五个特征&#xff1a;模块接口、局部数据结构、重要执行路径、出错处理、边界条件。 模块接口&#xff0c;保证测试模块数据流正确的流入和流出。 测试模块用…

大数据相关知识

1、大数据整体简介 1、1 简介 百度百科这样写道 大数据&#xff08;big data&#xff09;&#xff0c;IT行业术语&#xff0c;是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合&#xff0c;是需要新处理模式才能具有更强的决策力、洞察发现力和流程优…

C++类的学习1

类的定义一般包括两部分&#xff0c;一是类的属性&#xff0c;二是他所拥有的方法。类的实例化是指给类的加载并初始化过程&#xff0c;比如一个people类&#xff0c;我们具体到每一个人就是类的实例化&#xff0c;此外一个类可以在此类上进行扩展。比如people类&#xff0c;我…

vue项目使用luckyexcel预览excel表格

场景 最近工作中在开发文档上传并能在新窗口打开预览的功能。在此记录下心路历程。 方法 我总共尝试了2种方法预览excel&#xff0c;均可实现。还发现一种方法可以实现&#xff0c;需要后端配合&#xff0c;叫做KKfileview。 1.使用luckyexcel插件实现xlsx的预览 2.使用fi…

组合式升降压PFC的分析方法

1. 组合式升降压PFC的基本原理 组合式升降压PFC采用两组储能元件&#xff0c;基本单元为Cuk&#xff0c;Sepic和Zeta。参考论文《New Efficient Bridgeless Cuk Rectifiers for PFC Applications》中的三种拓扑进行分析。   Cuk型PFC的TypeI如下图所示&#xff0c;正半周Dp一…

Jef-log-tail日志采集工具使用说明

介绍 jef-log-tail是一款基于netty实现的日志采集工具&#xff0c;支持指定目录、指定文件、指定后缀的动态持续日志采集&#xff0c;日常使用场景如&#xff1a;集群部署后将多台主机的日志集中存放到一台日志服务器上&#xff0c;或者将日志统一输出到数据库、redis、kafka、…

STM32实战项目-温湿度传感器

程序功能&#xff1a; 1、软件模拟I2C协议与SHT30数字温湿度传感器通讯&#xff1b; 2、数码管显示环境温湿度&#xff1b; 3、串口打印环境温湿度。 目录 一、硬件电路 二、技术讲解 2.1IIC简介 2.2 IIC总线协议 2.2设备接入 三、SHT30数字温湿度传感器 3.1性能介绍 …

Rollup 实践:插件生态和实用技巧(续)

在前面的文章中&#xff0c;我们已经了解了 Rollup 的性能优化和高级用法。本篇文章将继续探讨 Rollup 的插件生态和实用技巧。 插件生态 Rollup 拥有一个丰富的插件生态&#xff0c;下面我们介绍几个实用的插件&#xff1a; rollup-plugin-terser&#xff1a;使用 Terser 压…

FlowForge 使用教程 团队资源管理

前言 本篇文章结合FF的操作来给大家解释一下,FF在团队管理上都与那些资源可以操作。 团队创建 使用超管第一次登录FF平台,默认什么资源都没有,你只能先去创建一个团队才能继续往下操作。 在FF平台上,团队就代表一个租户,也是一种资源隔离的手段。 创建团队可以通过右上…

Rollup 实践:性能优化和高级用法(续)

在前面的文章中&#xff0c;我们已经了解了 Rollup 的基本概念和配置。本篇文章将继续探讨 Rollup 的性能优化和高级用法。 懒加载 通过 Rollup 的代码分割功能&#xff0c;我们可以实现懒加载&#xff0c;从而减小初始页面加载时间。假设我们有一个动态导入的模块 dynamic.j…

vue项目用后端返回的文件流实现docx和pdf文件预览

前端docx和pdf文件预览实现效果图docx-preview文件预览pdf文件预览写这篇文章的目的&#xff0c;是因为我比较懒&#xff0c;想把代码记录一下&#xff0c;方便日后使用&#xff1b;哈哈&#xff0c;如果你也需要&#xff0c;也可以复制粘贴啊&#xff0c;为了方便自己和需要的…

windows10开发环境下部署kafka消息服务

下载kafka&#xff0c;官方地址https://kafka.apache.org/downloads 百度网盘链接&#xff1a;https://pan.baidu.com/s/1h3iXtfzEIBoajGPId5Dcag?pwd0000 提取码&#xff1a;0000直接把下载的文件解压到某个盘的根目录&#xff0c;要不然后面的命令就会遇到“命令行过长”的报…

linux 系统的一些使用小技巧

实现RedHat非正常关机的自动磁盘修复 先登录到服务器&#xff0c;然后在/etc/sysconfig里增加一个文件autofsck,内容如下&#xff1a; AUTOFSCK_DEF_CHECKyes PROMPTyes 改变文件或目录之最后修改时间(变为当前时间) 执行格式&#xff1a;touch name ( name 可为文件或目录名称…

Matlab vs Python:哪个更适合数据分析和可视化?

当谈到数据分析和可视化时&#xff0c;许多人会思考使用哪种编程语言来实现这一目标。在IT行业&#xff0c;最流行的两种编程语言是Matlab和Python。这两种语言都有广泛的应用&#xff0c;但是对于初学者来说&#xff0c;选择哪种语言可能会有些困难。在本文中&#xff0c;我们…

【ENVI】监督分类

好久没用ENVI了&#xff0c;用起来有点生疏&#xff0c;这里记录一下操作流程。。。 基础数据&#xff1a;从91卫图下载相应地区影像数据。 下载影像推荐&#xff1a;地理空间数据云、91卫图、水经注等。 1、加载tif数据 2、样本选择 &#xff08;1&#xff09;在图层管理器…