首页 > 其他分享 >ext4 子目录数量验证

ext4 子目录数量验证

时间:2024-03-14 14:36:21浏览次数:23  
标签:ext4 blocks 验证 Journal 子目录 文件系统 Filesystem inode

ext4 子目录数量验证


背景

最近同事问到一个问题。 
信创linux系统是否默认是ext4的文件系统。

我这边一般是使用iso自行安装, 
文件系统一般是选择xfs后者是ext4
最近安装系统使用ext4比较多一些。

然后突然又问到是不是 ext4 有一个最大子目录 64000的限制。

我当时有点懵, 感觉比较奇怪。
自己之前只是知道ext4 有一个 inode的概念
磁盘空间不满 如果inode耗尽也无法创建新文件。 

但是对单一目录的子目录发现子了解的不够深入。

关于文件系统

文件系统是操作系统的三大子系统之一。
其他两个是进程管理和内存管理。

文件系统管理的是存储设备。 
进程管理管理的是CPU的时间片。
内存管理管理的是虚拟内存资源。

文件系统可以理解为是linux系统 anything is file的载体。
核心其实是VFS的管理。 

他也经历了很多轮次的发展,最新的文件系统有
ext3 ext4 xfs brtfs 以及 windows上面常见的ntfs系统。 

关于文件系统的查看

df -iTH
可以查看inode的使用信息
df -Th 
可以查看磁盘的空间信息。

linux里面每一个文件都需要一个inode进行管理。
每个inode也会占用磁盘空间。 剩下的才是文件自己的内容。 

查看文件系统

ext文件系统使用: dumpe2fs

具体命令为:
dumpe2fs -h /dev/vda2
结果为: 

dumpe2fs 1.45.6 (20-Mar-2020)
Filesystem volume name:   <none>
Last mounted on:          /sysroot
Filesystem UUID:          44877aa0-9554-4e73-8ce7-eba5eaec018f
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery 
                        extent 64bit flex_bg sparse_super large_file huge_file 
                        dir_nlink extra_isize metadata_csum
Filesystem flags:         signed_directory_hash
Default mount options:    user_xattr acl
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              32768000
Block count:              131072000
Reserved block count:     1310720
Free blocks:              126564501
Free inodes:              32418980
First block:              0
Block size:               4096
Fragment size:            4096
Group descriptor size:    64
Reserved GDT blocks:      1024
Blocks per group:         32768
Fragments per group:      32768
Inodes per group:         8192
Inode blocks per group:   512
Flex block group size:    16
Filesystem created:       Mon Feb 19 17:11:05 2024
Last mount time:          Mon Mar 11 22:44:14 2024
Last write time:          Mon Mar 11 22:44:14 2024
Mount count:              6
Maximum mount count:      -1
Last checked:             Mon Feb 19 17:11:05 2024
Check interval:           0 (<none>)
Lifetime writes:          17 GB
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:               256
Required extra isize:     32
Desired extra isize:      32
Journal inode:            8
First orphan inode:       16911295
Default directory hash:   half_md4
Directory Hash Seed:      3b686e3c-0f54-403b-9c8a-3a35808fbe20
Journal backup:           inode blocks
Checksum type:            crc32c
Checksum:                 0x8d62ebfe
Journal features:         journal_incompat_revoke journal_64bit journal_checksum_v3
Journal size:             1024M
Journal length:           262144
Journal sequence:         0x0000954a
Journal start:            216515
Journal checksum type:    crc32c
Journal checksum:         0xc25e3fca

xfs文件系统使用 xfs_info

xfs_info /dev/mapper/centos-root

meta-data=/dev/mapper/centos-root isize=512    agcount=32, agsize=87636224 blks
         =                       sectsz=4096  attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=2804359168, imaxpct=5
         =                       sunit=64     swidth=384 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=521728, version=2
         =                       sectsz=4096  sunit=1 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0


关于inode的理解

Block count / Inode count
得出的结果就是 每个inode使用的大小
比如我刚才的就是 
131072000/32768000=4

也就是 4个block 一个 inode。 每个block的大小为:
Block size: 4096

每个inode的大小为:
Inode size: 256
大概 1.5625%的空间用于存储inode

关于改变大小

通过 -i 指定每个inode对应的大小, 注意需要时字节数, 
为block的本书的大小。
mkfs.ext4 -i 8192 /dev/vda2

也可以通过 -N 指定inode的数量, 
mkfs.ext4 /dev/sdb -N 102400

关于ext4子目录文件数

Filesystem features 的 dir_nlink 非常关键。 
没有这个参数, 最大值是 65000
加上这个参数, 最大值基本上可以理解问事 inode的可用值

测试:
time for i in {1..1000000} ; do mkdir -p  $i ; done
real    80m3.601s
user    5m44.859s
sys     73m47.206s

然后:
time ll |wc -l
1000002

验证一下删除时间:
rm -rf  /Testdir/
real    0m24.673s
user    0m3.997s
sys     0m17.431s

dir_nlink的验证

现在磁盘默认就已经带了 dir_nlink的设置. 

所以不会有 64k 子目录的限制了. 

标签:ext4,blocks,验证,Journal,子目录,文件系统,Filesystem,inode
From: https://www.cnblogs.com/jinanxiaolaohu/p/18072767

相关文章

  • UVM - 4 (UVM验证平台)
    Reviewthis-指的是当前的类双冒号进行索引-静态方法或者是静态变量在类之外写函数也可以使用双冒号进行索引,双冒号指定作用域所有的phaze是UVM中已经定义好的,不需要显式调用TLM-事务级传输UVM中组件之间的通信使用的是TLM,不使用mailboxuvm_sequence_itemcla......
  • 在springboot中使用拦截器+JWT验证token的流程
    我的计算机设计大赛的项目需要用到JWT来进行用户身份验证,项目采用springboot技术,因为我没学过springSrcurity所以只能用原生的拦截器+JWT技术进行验证,我是跟着【SpringBoot整合JWT】这篇文章做的,老师讲的很详细跟着一步一步来也可以实现JWT身份验证,但是对于验证过程的整个流程......
  • Tiktok/抖音旋转验证码识别方案
    一、引言在数字世界的飞速发展中,安全防护成为了一个不容忽视的课题。Tiktok/抖音,作为全球最大的短视频平台之一,每天都有数以亿计的用户活跃在其平台上。为了保护用户的账号安全,Tiktok/抖音引入了一种名为“旋转验证码”的安全验证方式。本文将深入解析Tiktok/抖音旋转验证码......
  • 2024-03-11-Nodejs(3-数据库与身份验证)
    3.数据库与身份验证3.1数据库基本概念数据库是用来组织、存储和管理数据的仓库;传统数据库中,数据结构分为数据库(database)、数据表(table)、数据行(tow)、字段(field)四大部分。3.2配置mysql模块安装mysql模块npminstallmysql建立连接constmysql=require('mysql')......
  • 使用Docker部署带密码验证的Redis
    使用Docker部署Redis时使用的是默认配置文件不带鉴权需要鉴权可以把设置写到配置文件后通过Dockerfile生成新的镜像redis配置文件#catredis.confbind0.0.0.0port6379timeout0tcp-keepalive300daemonizenodatabases16save9001save30010save6010000#......
  • 解决尚品甄选验证码图片无法显示bug
    按照他的视频要求去做发现图片无法正常显示,通过查看浏览器网络错误,发现请求验证码的网址是重叠的http://localhost:3001/admin/system/index/login/admin/system/index/generateValidateCode是这样的,说明baseUrl是/admin/system/index/login导致的,所以我对前端文件api/login.js......
  • 使用Golong轻松实现JWT身份验证
    使用Golong轻松实现JWT身份验证JSON Web Tokens (JWT)是一种流行的安全方法,用于在两个方之间表示声明。在Web应用程序领域,它们通常用作从客户端向服务器传输身份信息(声明)的方式。本教程将引导您逐步实现Go应用程序中的JWT身份验证过程。什么是JWT?JSONWebToken(JWT......
  • UVM - 3 (UVM验证平台)
    内容UVM-统一的验证方法学UVM演进什么是验证?验证计划验证目标RTL代码覆盖率功能覆盖率功能覆盖率和代码覆盖率的关系覆盖率驱动的验证CDV验证阶段随机大量测试加定向边界测试UVM提供了哪些内容UVM基础类库和宏定义UVM编码原则更多的测试案例和......
  • pillow创建验证码图片
    目录一、登录-随机生成图片验证码1、创建图片2、创建画笔3、画点-point()方法4、画线-line()5、画圆-arc()方法6、写文本-text()方法7、特殊字体文件8、随机生成图片验证码一、登录-随机生成图片验证码环境:python10,pillow==10.2.0pipinstallpillow1、创建图片fromPIL......
  • 【IC验证】数组
    一、非组合型数组1.声明logic[31:0]array[1024];或者logic[31:0]array[1023:0];或者logicarray[31:0][1023:0];理解成一维数组就表示array数组中有1024个数据,每个数据32bit。也可以理解为二维数组。int[1:0][2:0]a1[3:0][4:0]这是一个4×5×2×3维(高维-......