Linux基础(八):EXT与XFS文件系统简介

磁盘与文件系统管理

  • 1.文件系统与分区
  • 2. inode、block和superblock
  • 3.EXT2的文件系统
    • 3.1 data block
    • 3.2 inode Table
      • 3.2.1 inode记录的内容
      • 3.2.2 inode特点
    • 3.3 Superblock
    • 3.4 Filesystem Description(文件系统描述说明)
    • 3.5 block bitmap ( 区块对照表)
    • 3.6 inode bitmap ( inode 对照表)
  • 4.查看文件系统信息的指令——dumpe2fs
  • 5.目录文件的inode和block、文件读取、新增过程
    • 5.1 目录文件的inode和block
    • 5.2 文件读取
    • 5.3 文件新增过程
  • 6.clean与dirty
  • 7.挂载点
    • 7.1 挂载的定义
    • 7.2 挂载的意义
  • 8.VFS( Virtual Filesystem Switch)
  • 9.XFS文件系统
    • 9.1 XFS的优势
    • 9.2 XFS文件系统框架

1.文件系统与分区

①磁盘分区完毕后还需要进行格式化( format) , 之后操作系统才能够使用这个文件系统。 为什么需要进行“格式化”呢? 这是因为每种操作系统所设置的文件属性/权限并不相同, 为了存放这些文件所需的数据, 因此就需要将分区进行格式化, 以成为操作系统能够利用的“文件系统格式( filesystem) ”。
②每种操作系统能够使用的文件系统并不相同。 举例来说, windows 98以前的微软操作系统主要利用的文件系统是 FAT ( 或 FAT16) , windows 2000 以后的版本有所谓的 NTFS 文件系统, 至于 Linux 的正统文件系统则为 Ext2 ( Linux second extendedfile system, ext2fs) 这一个。 此外, 在默认的情况下, windows 操作系统是不会认识 Linux的 Ext2 的。
③传统的磁盘与文件系统之应用中, 一个分区就是只能够被格式化成为一个文件系统, 所以我们可以说一个 filesystem 就是一个 partition。 但是由于新技术的利用, 例如我们常听到的LVM与软件磁盘阵列( software raid) , 这些技术可以将一个分区格式化为多个文件系统( 例如LVM) , 也能够将多个分区合成一个文件系统( LVM, RAID) ! 所以说, 目前我们在格式化时已经不再说成针对 partition 来格式化了, 通常我们可以称呼一个可被挂载的数据为一个文件系统而不是一个分区喔!。

2. inode、block和superblock

superblock: 记录此 filesystem 的整体信息, 包括inode/block的总量、 使用量、 剩余量,以及文件系统的格式与相关信息等;
inode: 记录文件的属性, 一个文件占用一个inode, 同时记录此文件的数据所在的 block号码;
block: 实际记录文件的内容, 若文件太大时, 会占用多个 block 。

Tips:常见的文件系统

文件系统特点
FAT32 (File Allocation Table 32)主要用于U盘、SD卡等小容量存储设备,兼容性好;单个文件最大只能为4GB,不适合存储大文件;常用于需要跨操作系统使用的场景,比如Windows、Linux和macOS。
exFAT (Extended File Allocation Table)由微软开发,用于替代FAT32,支持更大的文件(不受4GB限制);适用于大容量U盘和SD卡,兼容Windows、macOS和部分Linux系统;不如FAT32广泛兼容,但更适合存储大文件。
NTFS (New Technology File System)Windows的默认文件系统,支持较大的文件和分区;具备文件权限、加密、压缩等高级功能;在Linux和macOS上读写支持有限,通常需要安装第三方工具。
HFS+ (Hierarchical File System Plus)主要用于macOS系统,提供良好的性能和数据保护功能;现在逐渐被APFS取代,但在旧版本macOS和部分存储设备上仍然使用。
APFS (Apple File System)苹果在macOS High Sierra及以上版本使用的文件系统,优化了SSD的读写性能;提供快照、加密和空间共享功能,适合现代存储需求;仅在macOS和iOS上有完全支持。
EXT (Extended File System)ext2:Linux最早的文件系统之一,不支持日志功能,数据恢复困难;ext3:在ext2的基础上增加了日志功能,数据可靠性提高;ext4:目前大部分Linux发行版的默认文件系统,支持更大的分区和文件,性能和稳定性更好。
Btrfs (B-tree File System)主要用于Linux系统,支持快照、压缩、多设备存储和子卷管理;提供了更高的容错和恢复能力,适合大型数据存储和服务器。
XFS高性能的64位日志文件系统,常用于Linux中的大型存储和数据库应用;支持高并发和大文件,适合需要高速读写的场景。
ZFS (Zettabyte File System)支持快照、数据完整性检查、自修复等功能,数据保护和恢复能力强;适用于数据中心和高可靠性需求的存储环境;最初由Sun Microsystems开发,广泛应用于FreeBSD和Linux。

linux支持的文件系统:
在这里插入图片描述
分别在Ubuntu22和Centos7中查看文件系统类型:

fle@fle-virtual-machine:~$ lsb_release -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 22.04.4 LTS
Release:	22.04
Codename:	jammy
fle@fle-virtual-machine:~$ df -T
文件系统       类型      1K的块     已用     可用 已用% 挂载点
tmpfs          tmpfs     808408     2112   806296    1% /run
/dev/sda3      ext4    50770432 25839172 22319856   54% /
tmpfs          tmpfs    4042028        0  4042028    0% /dev/shm
tmpfs          tmpfs       5120        4     5116    1% /run/lock
tmpfs          tmpfs    4042028        0  4042028    0% /run/qemu
/dev/sda2      vfat      524252     6220   518032    2% /boot/efi
tmpfs          tmpfs     808404      120   808284    1% /run/user/1000
/dev/sr0       iso9660  4899762  4899762        0  100% /media/fle/Ubuntu 22.04.4 LTS amd64
[fle@CentOS7 ~]$ lsb_release -a
LSB Version:	:core-4.1-amd64:core-4.1-noarch
Distributor ID:	CentOS
Description:	CentOS Linux release 7.9.2009 (Core)
Release:	7.9.2009
Codename:	Core
[fle@CentOS7 ~]$ df -T
文件系统                类型        1K-块    已用    可用 已用% 挂载点
devtmpfs                devtmpfs   480824       0  480824    0% /dev
tmpfs                   tmpfs      497848       0  497848    0% /dev/shm
tmpfs                   tmpfs      497848    8752  489096    2% /run
tmpfs                   tmpfs      497848       0  497848    0% /sys/fs/cgroup
/dev/mapper/centos-root xfs      10475520 7756292 2719228   75% /
/dev/sda2               xfs       1038336  177032  861304   18% /boot
/dev/mapper/centos-home xfs       5232640  128248 5104392    3% /home
tmpfs                   tmpfs       99572      36   99536    1% /run/user/1000
/dev/sr0                iso9660   9961428 9961428       0  100% /run/media/fle/CentOS 7 x86_64

从上面可以看到,Ubuntu的文件系统为ext4,而Centos7的文件系统为xfs.
ext文件系统有inode,而FAT系统是没有的,下图显示了ext和FAT在读取文件时的不同:
在这里插入图片描述
从上图可以看到,ext文件系统根据inode中记录的block号码进行索引,而FAT因为没有inode只能进行类似链表的操作。这也导致了ext系统读取文件可以比FAT快得多。

3.EXT2的文件系统

Ext2 文件系统在格式化的时候基本上是区分为多个区块群组 ( block group) 的, 每个区块群组都有独立的inode/block/superblock 系统
在这里插入图片描述
文件系统最前面有一个开机扇区( boot sector) , 这个开机扇区可以安装开机管理程序, 这是个非常重要的设计, 因为如此一来我们就能够将不同的开机管理程序安装到个别的文件系统最前端, 而不用覆盖整颗磁盘唯一的 MBR, 这样也才能够制作出多重开机的环境啊!
下面介绍一个block group的6个组成部分:

3.1 data block

首先需要说明的是,一旦格式化之后,data block的大小和数量就已经固定了,除非重新格式化。
在这里插入图片描述
对于data block,存在以下特点:
①原则上, block 的大小与数量在格式化完就不能够再改变了( 除非重新格式化) ;
②每个 block 内最多只能够放置一个文件的数据;
③承上, 如果文件大于 block 的大小, 则一个文件会占用多个 block 数量;
④承上, 若文件小于 block , 则该 block 的剩余容量就不能够再被使用了( 磁盘空间会浪费) 。

可以注意到,因为现在硬盘容量都非常大了,所以一般都直接选用最大的4KB.
可以使用ls -l来查看文件大小,除以4KB就是占用的data block个数:

fle@fle-virtual-machine:/$ ls -l
总计 2097232
lrwxrwxrwx   1 root root          7  2月 29  2024 bin -> usr/bin
drwxr-xr-x   4 root root       4096 11月  6 16:22 boot
drwxrwxr-x   2 root root       4096  2月 29  2024 cdrom
drwxr-xr-x  19 root root       4340 11月  6 15:11 dev
drwxr-xr-x 136 root root      12288 11月  6 16:22 etc
drwxr-xr-x   3 root root       4096  2月 29  2024 home
lrwxrwxrwx   1 root root          7  2月 29  2024 lib -> usr/lib
lrwxrwxrwx   1 root root          9  2月 29  2024 lib32 -> usr/lib32
lrwxrwxrwx   1 root root          9  2月 29  2024 lib64 -> usr/lib64
lrwxrwxrwx   1 root root         10  2月 29  2024 libx32 -> usr/libx32
drwx------   2 root root      16384  2月 29  2024 lost+found
drwxr-xr-x   3 root root       4096  3月  1  2024 media
...

3.2 inode Table

3.2.1 inode记录的内容

inode记录的内容如下:
①该文件的存取模式( read/write/excute) ;
②该文件的拥有者与群组( owner/group) ;
③该文件的容量;
④该文件创建或状态改变的时间( ctime) ;
⑤最近一次的读取时间( atime) ;
⑥最近修改的时间( mtime) ;
⑦定义文件特性的旗标( flag) , 如 SetUID…;
⑧该文件真正内容的指向 ( pointer) ;
Tips:inode的大小和数量也是在格式化的时候就已经固定了。

3.2.2 inode特点

对于inode,存在以下特点:
①每个 inode 大小均固定为 128 Bytes ( 新的 ext4 与 xfs 可设置到 256 Bytes) ;
②每个文件都仅会占用一个 inode 而已;
③承上, 因此文件系统能够创建的文件数量与 inode 的数量有关;
④系统读取文件时需要先找到 inode, 并分析 inode 所记录的权限与使用者是否符合, 若符合才能够开始实际读取 block 的内容。
一个data block大小为4KB,如果一个文件400M,那么需要400*1024/4=102400个data block,inode需要记录每个data block的号码,显然128B的大小是不够的,所以有了下图所示这样的直接,间接,双间接,三间接的方式,其实就是拿一些data block也来记录data block的号码。
在这里插入图片描述
可以用ls -li来显示每个文件的inode:

fle@fle-virtual-machine:~$ ls -li
总计 44
1484035 drwxr-xr-x 2 fle fle 4096  3月  1  2024 公共的
1484034 drwxr-xr-x 2 fle fle 4096  3月  1  2024 模板
1484039 drwxr-xr-x 2 fle fle 4096  3月  1  2024 视频
1484038 drwxr-xr-x 2 fle fle 4096  3月  1  2024 图片
1484036 drwxr-xr-x 2 fle fle 4096  3月  1  2024 文档
1484033 drwxr-xr-x 2 fle fle 4096 11月  3 13:18 下载
1484037 drwxr-xr-x 2 fle fle 4096  3月  1  2024 音乐
1484032 drwxr-xr-x 8 fle fle 4096 11月  3 13:19 桌面
1605322 drwxrwxr-x 2 fle fle 4096  3月  5  2024 calTool
1574661 drwxrwxr-x 3 fle fle 4096  4月  7  2024 eqmu_8.2.0
1483948 drwx------ 6 fle fle 4096  3月  7  2024 snap

上面中第一个参数就是文件的inode号码

3.3 Superblock

Superblock对文件系统尤为重要,因为其记录了文件系统的整体信息:
①block 与 inode 的总量;
②未使用与已使用的 inode / block 数量;
③block 与 inode 的大小 ( block 为 1, 2, 4K, inode 为 128Bytes 或 256Bytes) ;
④filesystem 的挂载时间、 最近一次写入数据的时间、 最近一次检验磁盘 ( fsck) 的时间等文件系统的相关信息;
⑤一个 valid bit 数值, 若此文件系统已被挂载, 则 valid bit 为 0 , 若未被挂载, 则 valid bit为 1 。
Tips:前面我们提到,一个文件系统有多个block group,但是一个文件系统只会有一种Superblock信息,所以没有block group可能含有或不含有Superblock,就算有,它们记录的信息也是一样的。

3.4 Filesystem Description(文件系统描述说明)

Filesystem Description对于所在的block group是重要的,因为Filesystem Description描述了block group 的开始与结束的 block 号码, 以及说明每个区段( superblock, bitmap, inodemap, data block) 分别介于哪一个 block 号码之间。

3.5 block bitmap ( 区块对照表)

如果你想要新增文件时总会用到 block 吧! 那你要使用哪个 block 来记录呢? 当然是选择“空的 block ”来记录新文件的数据啰。 那你怎么知道哪个 block 是空的? 这就得要通过 block bitmap 的辅助了。 从 block bitmap 当中可以知道哪些 block 是空的, 因此我们的系统就能够很快速的找到可使用的空间来处置文件啰。同样的, 如果你删除某些文件时, 那么那些文件原本占用的 block 号码就得要释放出来, 此时在 block bitmap 当中相对应到该 block 号码的标志就得要修改成为“未使用中”啰! 这就是bitmap 的功能。

3.6 inode bitmap ( inode 对照表)

这个其实与 block bitmap 是类似的功能, 只是 block bitmap 记录的是使用与未使用的 block号码, 至于 inode bitmap 则是记录使用与未使用的 inode 号码啰!

4.查看文件系统信息的指令——dumpe2fs

查看EXT文件系统的Superblock——dumpe2fs

[root@study ~]# dumpe2fs [-bh] 设备文件名
選項與參數:
-b :列出保留為壞軌的部分(一般用不到吧!?)
-h :僅列出 superblock 的資料,不會列出其他的區段內容!範例:鳥哥的一塊 1GB ext4 檔案系統內容
[root@study ~]# blkid   <==這個指令可以叫出目前系統有被格式化的裝置
/dev/vda1: LABEL="myboot" UUID="ce4dbf1b-2b3d-4973-8234-73768e8fd659" TYPE="xfs"
/dev/vda2: LABEL="myroot" UUID="21ad8b9a-aaad-443c-b732-4e2522e95e23" TYPE="xfs"
/dev/vda3: UUID="12y99K-bv2A-y7RY-jhEW-rIWf-PcH5-SaiApN" TYPE="LVM2_member"
/dev/vda5: UUID="e20d65d9-20d4-472f-9f91-cdcfb30219d6" TYPE="ext4"  <==看到 ext4 了![root@study ~]# dumpe2fs /dev/vda5
dumpe2fs 1.42.9 (28-Dec-2013)
Filesystem volume name:   <none>           # 檔案系統的名稱(不一定會有)
Last mounted on:          <not available>  # 上一次掛載的目錄位置
Filesystem UUID:          e20d65d9-20d4-472f-9f91-cdcfb30219d6
Filesystem magic number:  0xEF53           # 上方的 UUID 為 Linux 對裝置的定義碼
Filesystem revision #:    1 (dynamic)      # 下方的 features 為檔案系統的特徵資料
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype extent 64bit flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags:         signed_directory_hash
Default mount options:    user_xattr acl   # 預設在掛載時會主動加上的掛載參數
Filesystem state:         clean            # 這塊檔案系統的狀態為何,clean 是沒問題
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              65536            # inode 的總數
Block count:              262144           # block 的總數
Reserved block count:     13107            # 保留的 block 總數
Free blocks:              249189           # 還有多少的 block 可用數量
Free inodes:              65525            # 還有多少的 inode 可用數量
First block:              0
Block size:               4096             # 單個 block 的容量大小
Fragment size:            4096
Group descriptor size:    64
....(中間省略)....
Inode size:               256              # inode 的容量大小!已經是 256 了喔!
....(中間省略)....
Journal inode:            8
Default directory hash:   half_md4
Directory Hash Seed:      3c2568b4-1a7e-44cf-95a2-c8867fb19fbc
Journal backup:           inode blocks
Journal features:         (none)
Journal size:             32M              # Journal 日誌式資料的可供紀錄總容量
Journal length:           8192
Journal sequence:         0x00000001
Journal start:            0Group 0: (Blocks 0-32767)                  # 第一塊 block group 位置Checksum 0x13be, unused inodes 8181Primary superblock at 0, Group descriptors at 1-1   # 主要 superblock 的所在喔!Reserved GDT blocks at 2-128Block bitmap at 129 (+129), Inode bitmap at 145 (+145)Inode table at 161-672 (+161)                       # inode table 的所在喔!28521 free blocks, 8181 free inodes, 2 directories, 8181 unused inodesFree blocks: 142-144, 153-160, 4258-32767           # 底下兩行說明剩餘的容量有多少Free inodes: 12-8192
Group 1: (Blocks 32768-65535) [INODE_UNINIT]          # 後續為更多其他的 block group 喔!
....(底下省略)....
# 由於資料量非常的龐大,因此鳥哥將一些資訊省略輸出了!上表與你的螢幕會有點差異。
# 前半部在秀出 supberblock 的內容,包括標頭名稱(Label)以及inode/block的相關資訊
# 後面則是每個 block group 的個別資訊了!您可以看到各區段資料所在的號碼!
# 也就是說,基本上所有的資料還是與 block 的號碼有關就是了!很重要!

在这里插入图片描述

5.目录文件的inode和block、文件读取、新增过程

5.1 目录文件的inode和block

当我们在 Linux 下的文件系统创建一个目录时, 文件系统会分配一个 inode 与至少一块 block给该目录。 其中, inode 记录该目录的相关权限与属性, 并可记录分配到的那块 block 号码;而 block 则是记录在这个目录下的文件名与该文件名占用的 inode 号码数据。也就是说目录所占用的 blockn内容在记录如下的信息:
在这里插入图片描述
也就是说,目录文件的 inode 本身并不记录文件名, 文件名的记录是在目录的 block 当中。其实这也就是为什么在目录权限中,w的含义是“新增/删除/更名文件了”,因为w指的是data block可写。

5.2 文件读取

下面通过一个例子来直观理解文件搜索过程中是如何通过inode和block来操作的(读取passwd文件):在这里插入图片描述

5.3 文件新增过程

在这里插入图片描述
用于防止新增文件错误的日志系统:
在一般正常的情况下, 上述的新增动作当然可以顺利的完成。 但是如果有个万一怎么办? 例如你的文件在写入文件系统时, 因为不知名原因导致系统中断( 例如突然的停电啊、 系统核心发生错误啊~等等的怪事发生时) , 所以写入的数据仅有 inode table 及 data block 而已,最后一个同步更新中介数据的步骤并没有做完, 此时就会发生 metadata 的内容与实际数据存放区产生不一致 ( Inconsistent) 的情况了。
如果要针对 metadata 区域与实际数据存放区来进行比对,那太费时了,这个时候就需要用到日志系统了:
在我们的 filesystem 当中规划出一个区块, 该区块专门在记录写入或修订文件时的步骤, 那不就可以简化一致性检查的步骤了? 也就是说:
1、预备: 当系统要写入一个文件时, 会先在日志记录区块中纪录某个文件准备要写入的信
息;
2、实际写入: 开始写入文件的权限与数据; 开始更新 metadata 的数据;
3、结束: 完成数据与 metadata 的更新后, 在日志记录区块当中完成该文件的纪录。
在这样的程序当中, 万一数据的纪录过程当中发生了问题, 那么我们的系统只要去检查日志记录区块, 就可以知道哪个文件发生了问题, 针对该问题来做一致性的检查即可, 而不必针对整块 filesystem 去检查, 这样就可以达到快速修复 filesystem 的能力了! 这就是日志式文件最基础的功能啰~
Tips:EXT2没有日志功能,EXT3/4才有。

6.clean与dirty

所有的数据都得要载入到内存后 CPU 才能够对该数据进行处理。 想一想, 如果你常常编辑一个好大的文件, 在编辑的过程中又频繁的要系统来写入到磁盘中, 由于磁盘写入的速度要比内存慢很多, 因此你会常常耗在等待磁盘的写入/读取上。 真没效率!
为了解决这个效率的问题, 因此我们的 Linux 使用的方式是通过一个称为非同步处理( asynchronously) 的方式。 所谓的非同步处理是这样的:当系统载入一个文件到内存后, 如果该文件没有被更动过, 则在内存区段的文件数据会被设
置为干净( clean) 的。 但如果内存中的文件数据被更改过了( 例如你用 nano 去编辑过这个文件) , 此时该内存中的据会被设置为脏的 ( Dirty) 。 此时所有的动作都还在内存中执行, 并没有写入到磁盘中! 系统会不定时的将内存中设置为“Dirty”的数据写回磁盘, 以保持磁盘与内存数据的一致性。

7.挂载点

7.1 挂载的定义

挂载(Mount)是在操作系统中将一个存储设备(例如硬盘分区、光盘、U盘、网络文件系统等)连接到目录树的过程,使得用户可以通过文件系统路径访问该设备上的内容。挂载之后,设备上的文件和目录将被映射到操作系统的文件系统结构中,从而变得可访问。
Tips:挂载点必须是目录。

7.2 挂载的意义

在安装CentOS7的时候,对储存设备的分区是这样的:
在这里插入图片描述
也就是说/boot、/、/home均设置为了挂载点。

[root@CentOS7 ~]# ls -lid / /boot /home
64 dr-xr-xr-x. 17 root root  244 6月  21 16:56 /
64 dr-xr-xr-x.  6 root root 4096 5月  18 21:03 /boot
64 drwxr-xr-x.  7 root root   73 9月  29 16:55 /home

可以看到,64这个位置表示的是目录的inode号码,/boot、/、/home作为xfs系统最顶层的目录,其inode是一样的。17、6、7位置表示的是有多少个inode链接到该目录(对于文件来说,该位置为1,因为一个文件对应一个inode,对于目录来说,则是该目录的block记录了多少个文件,即多少个inode)。

8.VFS( Virtual Filesystem Switch)

了解了我们使用的文件系统之后, 再来则是要提到, 那么 Linux 的核心又是如何管理这些认识的文件系统呢? 其实, 整个 Linux 的系统都是通过一个名为 Virtual Filesystem Switch 的核心功能去读取 filesystem 的。 也就是说, 整个 Linux 认识的 filesystem 其实都是 VFS 在进行管理, 我们使用者并不需要知道每个 partition 上头的 filesystem 是什么~ VFS 会主动的帮我们做好读取的动作呢~

9.XFS文件系统

9.1 XFS的优势

CentOS 7 开始, 默认的文件系统已经由原本的 EXT4 变成了 XFS 文件系统了! 为啥CentOS 要舍弃对 Linux 支持度最完整的 EXT 家族而改用 XFS :
①EXT 家族当前较伤脑筋的地方: 支持度最广, 但格式化超慢
Ext 文件系统家族对于文件格式化的处理方面, 采用的是预先规划出所有的 inode/block/metadata 等数据, 未来系统可以直接取用, 不需要再进行动态配置的作法。
②XFS 文件系统的配置
基本上 xfs 就是一个日志式文件系统, 而 CentOS 7.x 拿它当默认的文件系统, 自然就是因为最早之前, 这个 xfs 就是被开发来用于大容量磁盘以及高性能文件系统之用, 因此, 相当适合现在的系统环境。 此外, 几乎所有 Ext4 文件系统有的功能, xfs 都可以具备。

9.2 XFS文件系统框架

①数据区(data section)
数据区就跟我们之前谈到的 ext 家族一样, 包括 inode/data block/superblock 等数据, 都放置在这个区块。不同的是,inode与 block 都是系统需要用到时, 这才动态配置产生, 所以格式化动作超级快
②文件系统活动登录区 (log section)
在登录区这个区域主要被用来纪录文件系统的变化, 其实有点像是日志区啦! 文件的变化会在这里纪录下来, 直到该变化完整的写入到数据区后, 该笔纪录才会被终结。
③实时运行区 ( realtime section)
当有文件要被创建时, xfs 会在这个区段里面找一个到数个的 extent 区块, 将文件放置在这个区块内, 等到分配完毕后, 再写入到 data section 的 inode 与 block 去! 这个 extent 区块的大小得要在格式化的时候就先指定。
Tips:XFS 文件系统的描述数据观察指令——xfs_info。

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

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

相关文章

clion远程配置docker ros2

CLION与docker中的ROS2环境构建远程连接 设备前提开启SSH服务CLION配置CLION配置CLION IDE远程连接过程实现CLION SSH 远程部署 开启fastlio2debug之旅 设备前提 本地宿主机&#xff1a;UBUNTU 20.04 docker container:ros2_container (内置环境ROS2 humble) 通过之前的tcp连接…

Midjourney从入门到精通教程,10分钟让你从小白变大神!【珍藏版】

前言&#xff1a; 《Midjourney使用教程&#xff1a;从入门到精通》旨在带领你一步步掌握这款强大的AI创作工具。无论你是设计小白还是有一定基础的创作者&#xff0c;本教程都将为你揭开Midjourney的神秘面纱。从基本操作到高级技巧&#xff0c;我们将逐一解析&#xff0c;让…

JAVA开源项目 网上租赁系统 计算机毕业设计

本文项目编号 T 050 &#xff0c;文末自助获取源码 \color{red}{T050&#xff0c;文末自助获取源码} T050&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析5.4 用例设计5.4.1 用…

面试经典 150 题:189、383

189. 轮转数组 【参考代码】 class Solution { public:void rotate(vector<int>& nums, int k) {int size nums.size();if(1 size){return;}vector<int> temp(size);//k k % size;for(int i0; i<size; i){temp[(i k) % size] nums[i];}nums temp; }…

基于MATLAB的混沌序列图像加密程序

设计目的 图像信息生动形象&#xff0c;它已成为人类表达信息的重要手段之一&#xff0c;网络上的图像数据很多是要求发送方和接受都要进行加密通信&#xff0c;信息的安全与保密显得尤为重要&#xff0c;因此我想运用异或运算将数据进行隐藏&#xff0c;连续使用同一数据对图…

史上最大应用层DDoS攻击 H2 Rapid Reset攻击研究

前言 2023年10月Cloudflare、Google、AWS等厂商公布了一种利用HTTP/2快速重置进行应用层DDoS攻击的0day漏洞(CVE-2023-44487)[1][2]&#xff0c;即H2 Rapid Reset DDoS。Google宣传其监控到此种攻击峰值超过每秒3.98亿个请求&#xff0c;打破互联网历史最大应用层DDoS攻击记录…

Python 如何在 Web 环境中使用 Matplotlib 进行数据可视化

Python Matplotlib 在 Web 环境中的可视化 数据可视化是数据科学和分析中一个至关重要的部分&#xff0c;它能帮助我们更好地理解和解释数据。在现代应用中&#xff0c;越来越多的开发者希望能够将数据可视化结果展示在网页上。Matplotlib 是 Python 中最常用的数据可视化库之…

JavaWeb项目-----博客系统

一.设计数据库 1.创建数据库 create database if not exists java108_blog_system character set utf8; drop table if exists user; drop table if exists blog;2.创建博客列表 create table blog(blogId int primary key auto_increment,title varchar(20),content varcha…

算法练习——双指针

前言&#xff1a;大佬写博客给别人看&#xff0c;菜鸟写博客给自己看&#xff0c;我是菜鸟。 学前须知&#xff08;对自己&#xff09;&#xff1a;这里的指针不一定指地址&#xff01;也可能是数组下标。 1&#xff1a;移动零(双指针) 题目要求&#xff1a; 解题思路&#x…

vue3实现一个无缝衔接、滚动平滑的列表自动滚屏效果,支持鼠标移入停止移出滚动

文章目录 前言一、滚动元素相关属性回顾一、实现分析二、代码实现示例&#xff1a;2、继续添加功能&#xff0c;增加鼠标移入停止滚动、移出继续滚动效果2、继续完善 前言 列表自动滚屏效果常见于大屏开发场景中&#xff0c;本文将讲解用vue3实现一个无缝衔接、滚动平滑的列表自…

vscode翻译插件

vscode翻译插件 需求 &#xff1a; 在编写代码的时候&#xff0c; 打印或者定义变量的时候总是想不起来英文名称&#xff0c; 所有就开发了一款中文转换为英文的插件。 功能 1、目前支持选中中文&#xff0c;右键选择打印或者变量进行转换。 2、目前支持选中中文&#xff0…

Linux -- 初识线程

目录 线程的初步认识 为什么需要线程 怎么让代码分成多个执行流并发执行呢&#xff1f; 管理线程 线程的初步认识 线程是进程内部的一个执行分支&#xff0c;线程是CPU调度的基本单位。 在Linux操作系统中&#xff0c;线程是程序执行流的最小单位。一个进程可以包含多个线…

基于IM场景下的Wasm初探:提升Web应用性能|得物技术

一、何为Wasm &#xff1f; Wasm&#xff0c;全称 WebAssembly&#xff0c;官网描述是一种用于基于堆栈的虚拟机的二进制指令格式。Wasm被设计为一个可移植的目标&#xff0c;用于编译C/C/Rust等高级语言&#xff0c;支持在Web上部署客户端和服务器应用程序。 Wasm 的开发者参…

Linux SSH免密登入以及配置脚本

一、ssh原理简单介绍 客户端生成一对公钥和私钥&#xff0c;并将自己的公钥发送到服务器上 其中公钥用来加密&#xff0c;私钥用来解密。 二、ssh免密登入实现步骤详解 我这就以服务器controller和客户端compute来做为例子 2.1、首先在controller上输入ssh-keygen -t rsa …

Flutter 获取照片权限的时候是否要获取存储权限?

获取存储权限 Permission.storage.request(); 获取照片权限通常意味着访问相册&#xff0c;而访问相册可能还需要外部存储权限&#xff0c;因为照片通常存储在设备的外部存储中。所以&#xff0c;当你请求照片权限时&#xff0c;你也需要检查并请求外部存储权限。 是不是所有…

一个基于Rust适用于 Web、桌面、移动设备等的全栈应用程序框架

大家好&#xff0c;今天给大家分享一个用 Rust 语言编写的、受 React 启发的前端框架Dioxus&#xff0c;旨在为构建跨平台的用户界面提供高效、高性能的解决方案。 项目介绍 Dioxus项目的诞生源于开发者们对于更高效、更灵活的跨平台UI解决方案的渴望。 随着技术的发展&#…

IntelliJ Idea设置自定义快捷键

我IDEA的快捷键是自己修改成了和Eclipse相似&#xff0c;然后想要跳转到某个方法的上层抽象方法没有对应的快捷键&#xff0c;IDEA默认的是Ctrl U &#xff08;Windows/Linux 系统&#xff09; 或 Command U &#xff08;Mac 系统&#xff09;&#xff0c;但是我的不起作用&a…

前深度学习时代-经典的推荐算法

参考自《深度学习推荐系统》—— 王喆&#xff0c;用于学习记录。 1.协同过滤 “协同过滤”就是协同大家的反馈、评价和意见一起对海量的信息进行过滤&#xff0c;从中筛选出目标用户可能感兴趣的信息的推荐过程。 基于用户相似度进行推荐的协同过滤算法 UserCF 用户相似度…

达梦数据守护集群_动态增加实时备库

目录 1、概述 2、实验环境 2.1环境信息 2.2配置信息 2.3 查看初始化参数 3、动态增加实时备库 3.1数据准备 3.2配置新备库 3.3动态增加MAL配置 3.4 关闭守护进程及监视器 3.5修改归档&#xff08;方法1&#xff1a;动态添加归档配置&#xff09; 3.6 修改归档&…

6.qsqlquerymodel源码分析

目录 继承关系入口浅析qsqlquery刷新数据 扩展列或者移除列以及取别名读取数据与增减行读取数据 下一章节&#xff1a;如何使用qsqlquerymodel 与 qtableview实现自定义表格 继承关系 qsqlquerymodel 继承与qabstracttablemodel 入口 负责填充数据 void QSqlQueryModel::s…