ext4
1. 简介
Ext4,全称为第四扩展文件系统(Fourth Extended File System),是Linux操作系统中最常用的文件系统之一。它是对先前的Ext2和Ext3文件系统进行改进和增强而设计的。
相较于ext2/ext3,ext4添加了日志功能来增强文件系统的可靠性和稳定性。
相较于ext3的最多支持3级索引导致文件大小和总文件数都受限制,ext4添加了extent数据结构(类似于NTFS中的run list,是一种B+树结构),可以支持更大的文件和理论上无限的文件数量。并且extend结构相比ext3的多级索引结构,检索速度也更快。
ext4增加了flex_bg特性来将多个块组中的Data Bitmap、Inode Bitmap和Inode Table集成到一起,来加速检索的功能。
ext4还增加了sparse_super特性,来稀疏超级块的备份分布,提升性能。
2. 结构
整个磁盘由MBR/GPT和ext4分区组成。ext4分区则由多个块组(Block Group,BG)组成。块组则由Super Block,GPT、Reserved GPT、Data Bitmap、Inocde Bitmap、Inode Table、Data构成。
● Block,ext文件系统中最小操作单位(类似NTFS/FAT中的簇),默认4KB,其大小记录在Super Block上。
● Inode, 索引节点(Index node),每个文件、目录和系统文件(如journal)都有唯一的索引节点号。Inode Table结构体上有记录其对应文件的创建时间、大小、权限以及内容块地址等信息。
● BG,块组(Block Group),为了提升索引的速度,会将多个块归为一组,称为块组。
● Super Block,记录着ext4分区的全局信息,文件系统特性,Block大小,Block数量,GDT大小,Inode数量,Inode大小,BG包含的Block数量,GDT大小,保留GPT块数,Flex Block数,Journal Inode等信息。
● GDP,块组描述表(Group Descriptor Table),记录每个块组(block group)开始和结束的block号码,以及说明每个区段(inodemap、blockmap、inode table)分别介于哪些block号码之间。
● Reserved GDT,其会备份GDP、Super Block、Inode Table等信息,用以在文件系统损坏时进行恢复。
● Data Bitmap,用Bit来标记Block是否使用。在启用了flex_bg特性后,Data Bitmap区描述多个块组中的Block对应的使用与否。
● Inode Bitmap,用Bit来标记Inode Table项是否使用。在启用了flex_bg特性后,Inode Bitmap区描述多个块组中的Inode使用与否。
● Inode Table,Inode Table区记录所有的Inode Table项,每一项对应一个文件/文件夹。Inode Table数量与Data Block数量在文件系统创建时,按一定比例分配,相关信息记录在Super Block上。比例关系可以在创建时设置。
● Data Block区,存储文件夹和文件的内容。
● journal,Journal Inode一般为8,其记录着文件的操作记录,用以在发生异常时通过回滚来恢复数据完整性等,Journal一般会采用缓存机制来提升性能。
● bg_count=(sb.block_count + sb.blocks_of_group - 1)/sb.blocks_of_group
● GDT_block_count=(bg_count*sb.gdt_size + sb.block_size - 1)/sb.block_size
● 特殊Inode
1 损坏数据块链表
2 根目录
3 ACL索引
4 ACL数据
5 引导装载程序
6 未删除的目录
7 预留的块组描述符inode
8日志inode
11 第一个非预留的inode,通常是lost + found目录
ext4的基本结构如下图:
3. extent
/*
* This is the extent on-disk structure.
* It's used at the bottom of the tree.
*/
struct ext4_extent {
__le32 ee_block; /* first logical block extent covers */
__le16 ee_len; /* number of blocks covered by extent */
__le16 ee_start_hi; /* high 16 bits of physical block */
__le32 ee_start_lo; /* low 32 bits of physical block */
};
/*
* This is index on-disk structure.
* It's used at all the levels except the bottom.
*/
struct ext4_extent_idx {
__le32 ei_block; /* index covers logical blocks from 'block' */
__le32 ei_leaf_lo; /* pointer to the physical block of the next *
* level. leaf or next index could be there */
__le16 ei_leaf_hi; /* high 16 bits of physical block */
__u16 ei_unused;
};
/*
* Each block (leaves and indexes), even inode-stored has header.
*/
struct ext4_extent_header {
__le16 eh_magic; /* probably will support different formats */
__le16 eh_entries; /* number of valid entries */
__le16 eh_max; /* capacity of store in entries */
__le16 eh_depth; /* has tree real underlying blocks? */
__le32 eh_generation; /* generation of the tree */
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
extend特性是通过ext4_extent结构体来记录实际文件内容存放信息。
Inode Table结构体上存放着4个ext4_extent,每个ext4_extent结构体对应1个BG(1个Block的Bit总共有40968)的32768个Block,327684KB=128MB。4个ext4_extent对应4个BG,总共512MB。除去元文件信息,剩余的数据信息480MB左右。
超过480MB的文件则会启用树形结构,Inode Table上则存放ext4_extent_idx,其指向Data Block。Data Block上记录ext4_extent信息,总共可以存放340个ext4_extent结构,则340*128MB=42.5GB,4个Data Block则是170GB。添加一级索引就可以描述170GB文件,一般情况都够用。
4. 示例
遍历硬盘所有文件。
获取GDT信息,GDT在Block 2,偏移为1。
读取Inode Table block号。
读取Inode Table
根据ext4_extent获取ee_start_hi=0x2426,此Block对应根目录的内容。
获取根目录信息
上述信息记录的是ext4_dir_entry_2结构信息
参考结构体,解决inode和文件/文件夹名如下:
检索小文文件
abc.txt的Inode为13,Inode Table Block为0x426,那么13对应的实际偏移应该是:
0x4264096 + 12256=4353024 # 因为inode是从1开始的,所以13应对的偏移为12
上面256的数据即为ext4_inode结构体(相关结构体的详细描述见Linux内核代码),绿线框12Byte即为ext4_extent。
可以获取Inode13对应的内容Block为1,对应的地址为0x8601,获取内容如下,正是写入的内容。
检索大文件
file.txt为1GB的文件,其Inode为12。计算其ext4_inode偏移为:
0x4264096 + 11256=4352768 # 因为inode是从1开始的,所以12应对的偏移为11
红线对应的内容为ext4_extent_header,eh_entries为1表示当前只有1项有效,eh_depth为1,表示有子项,则当前内容为ext4_extent_idx。
解析ext4_extent_idx结构体,指向的物理块地址为0x3fbf01,这个块上描述的就是ext4_extent_header+大量的ext4_extent。
上图绿线为ext4_extent_header,后面的红线及其他的都是ext4_extent。
检索目录
qerdir目录的Inode为131073,通过sb.Inodes_per_group=8192,可以(131073+8191)/8192=17,偏移为131073%8192=1。再通过GDT中记录的Group17对应的Inode table at 524320-524831 。
上图红线对应ext4_extent即为目录的内容信息,其物理块地址为0x82020,其内容如下,只有bbb.txt一个文件,符合预期。
bbb.txt对应的Inode为0x20003(131075)。
其对应的Inode table中ext4_extent如下,其物理地址为0x88001:
0x88001的内容如下,符合预期:
5. 总结
写文件操作时,除了更新Data区处,还会相应更新GDT、Inode Bitmap、Block Bitmap、目录区、Inode Table区。
● 针对小于480MB的文件,GDT、目录区、Inode Bitmap,更新较少。Block Bitmap会不停记录使用了的Block,更新较多,Inode Table会不停记录已经使用了的Block数,也更新较多。
● 针对超过480MB的文件,尤其是更大的文件,其会启用extent子节点表。也即在文件大小超过480MB时,会将文件数据块地址信息记录在extent块上,extent块上会不停地更新新占用的Block地址信息。extent块一般分配在分区中间。
6. 代码
代码会显示每个Flex Group的大小,以及文件系统所占大小。
代码
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/feihe0755/article/details/135978078
============================
Linux磁盘及文件系统管理 CPU,memory(RAM),I/O i/o: disks,ehtercard disks:持久存储数据 接口类型: IDE(ata): 并口,133MB/s;并行总线,双向四车道;并行数据容易产生干扰,导致数据损坏重传,因此效率低;并行越高,干扰频率越高 SCSI:并口,Ultrascsi320,320MB/s,UltraSCSI640,640MB/s;SCSI的费用更高; SATA: 串口,6Gbps;串行总线,有前后,不能并行传输; SAS:串口,6Gbps; USB:串口,480MB/s; 并口:同一线缆可以接多块设备; IDE:两个,主,从 SCSI: 宽带:16-1 窄带:8-1 串口:同一线缆只可以接一设备; IOps : IO per second IDE:100次左右IO SCSI:150左右 SATA:100多 SAS:100多到200 SSD固态硬盘:400左右 7200 rpm的磁盘 IOPS = 1000 / (9 + 4.17) = 76 IOPS 10000 rpm的磁盘IOPS = 1000 / (6+ 3) = 111 IOPS 15000 rpm的磁盘IOPS = 1000 / (4 + 2) = 166 IOPS PCI-E接口的固态硬盘IOPS都是 440k IOPS // 44万 硬盘:机械硬盘,固态硬盘SSD; 固态硬盘:类似于U盘,内部是多个并行 机械硬盘: track:磁道一个同心圆,角速度一致;每一个盘片的双面都可以读取;每一个盘片的每一面都有磁头; sector:扇区就是每一个磁道中被分成若干等分的区域.相邻磁道是有间隔的,这是因为磁化单元太近会产生干扰;512bytes; Cylinder:柱面;分区划分基于柱面;越靠近外部磁道的分区,性能越好; rpm:rotation per minute 每分钟多数转 5400rpm,7200rpm,10000rpm,15000rpm 硬盘的容量=柱面数(CYLINDER)*磁头数(HEAD)*扇区数(SECTOR)*512B 存储容量=磁头数×磁道(柱面)数×每道扇区数×每扇区字节数 Linux的哲学思想:一切皆文件; 设备类型: 块(block):随机访问,数据交换单位是"块"; sda,sdb 字符(character):线性访问,数据交换单位是"字符"; tty1,tty2,pts 设备文件:FHS /dev 设备文件:关联至设备的驱动程序;设备的访问入口; 设备号: major:主设备,区分设备类型;用于标明设备所需要的驱动程序; minor:次设备号,区分同种类型下的不同设备;是特定设备的访问入口 mknod命令:创建块设备和字符设备 mknod [OPTION] ... NAME TYPE [MAJOR MINOR] 如: mknod /dev/testdev c 111 1 -m MODE : 直接指定其权限 //调用系统调用来实现权限修改 TYPE: b 块设备 c,u 字符设备,(unbuffered) p FIFO设备 设备文件名:是统一定义的,ICANN 磁盘: IDE: /dev/hd[a-z] 例如:/dev/hda,/dev/hdb SCSI,SATA,USB,SAS:/dev/sd[a-z] 引用设备的方式: 设备文件名 卷标 UUID //128位 分区: /dev/sda[1-4] 注意:Centos6和7统统将硬盘设备文件表示为/dev/sd[a-z]# 磁盘分区:MBR,GPT MBR:0 sector //0扇区 master boot record //主引导记录 分为三部分:512字节 446bytes:bootloader,程序,引导启动操作系统的程序 64bytes:分区表,每16bytes标识一个分区,最多4个分区 4主分区 3主1扩展: n逻辑分区 2bytes :MBR区域的有效性,55AA为有效 主分区和扩展分区的标识:1-4 逻辑分区:5+ GPT: fdisk命令:分区 fdisk -l [-u] [device...] 1.查看磁盘分区信息 -l 列出信息 centos6:start。。end:柱面 centos7:start。。end:扇区 2.管理分区 fdisk /dev/sdb fdisk提供了交互式接口来管理分区,它有很多子命令,分别用于不同的管理功能,所有操作均在内存中完成,没有直接同步磁盘,直到w保存; n:创建新分区 d:删除新分区 t:修改分区类型 l:查看所有已经id w:保存并退出 q:不保存并退出 m:查看帮助 p:显示现有分区信息 注意: 在已经分区并已经挂载其中某个分区的磁盘设备上建立的新分区,内核可能在创建完成后无法直接识别; 查看:cat /proc/partitions 通知内核强制重读磁盘分区表: centos5: partprobe [device] centos6,7: partx,kpartx partx -a [device] //多次执行确认是否重读 kpartx -af [device] 分区创建工具:parted,sfdisk 创建文件系统: 格式化:低级格式化(分区之前,划分磁道),高级格式化(分区之后对分区进行,创建文件系统) 元数据区,数据区 元数据区:inode(index node) 文件元数据:大小,权限,属主属组 ,时间戳,数据块指针, 链接文件:存储数据指针的空间当中存储的真实文件的访问路径: 设备文件:存储数据指针的空间当中存心的设备号(major,minor): bitmap index:位图索引 参考:http://www.cnblogs.com/LBSer/p/3322630.html VFS: Virtual File System Linux 的文件系统:ext2 ,ext3,ext4,xfs,reiserfs 光盘:Iso9660 网络文件系统:nfs, clfs 集群文件系统:gfs2,ocfs2 内核级分布式文件系统:ceph windows的文件系统:proc,sysfs, tmpfs,hugepagefs Unix的文件系统:UFS, FFS, JFS 交换文件系统:swap 用户空间的分布式文件系统:mogilefs, moosefs,glusterfs 文件系统管理工具: 创建文件系统管理工具 mkfs mkfs.ext2(无日志功能),mkfs.ext3, mkfs.ext4, mkfs.xfs,mkfs.vfat,… 检测及修复文件系统的工具 fsck fsck.ext2,fsck,ext3,…. 查看其属性的工具 dumpe2fs, tune2fs 调整文件系统特性: tune2fs 链接文件:访问同一个文件不同路径; 硬连接:指向同一个inode的多个文件路径; 特性: (1)目录不支持硬连接; (2)硬连接不能跨文件系统; (3)创建硬连接会增加inode路径; 创建:ln命令 ln source_file link_file 符号连接(软连接):指向一个文件路径的另一个文件路径; (1)符号链接与原文件是两个各自独立的文件,各有自己的inode;对原文件创建符号链接不会增加引用计数; (2)支持对目录创建符号链接,可跨文件系统; (3)删除符号链接文件不影响原文件;但删除原文件,符号指定的路径即不存在,此时会变成无效链接; 注意:符号链接文件的大小是其指定的文件的路径字符串的字节数; 创建:ln -s 命令 ln -s source_file link_file -v:verbose显示过程 磁盘和文件系统管理: 文件系统管理工具: 创建文件系统管理工具 mkfs mkfs.ext2(无日志功能),mkfs.ext3, mkfs.ext4, mkfs.xfs,mkfs.vfat,… 检测及修复文件系统的工具 fsck fsck.ext2,fsck,ext3,…. 查看其属性的工具 dumpe2fs, tune2fs 调整文件系统特性: tune2fs 内核级文件系统的组成部分: 文件系统驱动:由内核提供 文件系统管理工具:由用户空间的应用程序提供 ext系列文件系统的管理工具: mkfs.ext2(格式化操作),mkfs.ext3, mkfs.ext4 mkfs -t ext2=mkfs.ext2 ext系列文件系统专用管理工具:mke2fs mke2fs [OPTIONS] device -t {ext2|ext3|ext4}: fs-type指明要创建的文件系统类型 mkfs.ext4=mkfs-t ext4=make2fs -t ext4 -b {1024 | 2048 | 4096}: 指明文件系统的块block大小; -L LABEL: 指明卷标;不可超过16个字符; -j:创建有日志功能的文件系统ext4; make2fs -j = mke2fs -t ext3 =mkfs -t ext3 =mkfs.ext3 -i# :bytes-per-inde.指明inode与字节的比率;即每多少个自己创建一个Inode; -m#:reserved-blocks-percentage 指定预留的空间,百分比; -N#: last-mounted-directory直接指明要给次文件系统创建的inode的数量; -O[^]FEATURE:feature[,...]以指定的特性创建目标文件系统; e2label命令: Change the label on an ext2/ext3/ext4 filesystem卷标的查看与设定 查看:e2label device 设定:e2label device LABEL tune2fs命令:adjust tunable filesystem parameters on ext2/ext3/ext4 filesystems查看或修改ext系列文件系统的某些属性 adjust tunable filesystem parameters on ext2/ext3/ext4 filesystems; 注意:块大小创建后不可修改; tune2fs [OPTIONS] device -l: 查看超级块的内容; [root@centos6_7 ~]# tune2fs -l /dev/sda1 tune2fs 1.41.12 (17-May-2010) Filesystem volume name: <none> //卷标名 Last mounted on: /boot //最近挂载 Filesystem UUID: 8880df83-5bf8-40db-bf6f-bf878b7a7e2e Filesystem magic number: 0xEF53 Filesystem revision #: 1 (dynamic) Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super huge_file uninit_bg dir_nlink extra_isize //文件系统特性 Filesystem flags: signed_directory_hash //标志 Default mount options: user_xattr acl //默认挂载选项 Filesystem state: clean //状态干净或不干净 Errors behavior: Continue Filesystem OS type: Linux Inode count: 51200 Block count: 204800 Reserved block count: 10240 Free blocks: 158257 Free inodes: 51162 First block: 1 Block size: 1024 Fragment size: 1024 //片段 Reserved GDT blocks: 256 Blocks per group: 8192 Fragments per group: 8192 Inodes per group: 2048 Inode blocks per group: 256 Flex block group size: 16 Filesystem created: Sun Aug 12 17:21:56 2018 Last mount time: Sat Sep 15 00:11:46 2018 Last write time: Sat Sep 15 00:11:46 2018 Mount count: 6 Maximum mount count: -1 Last checked: Sun Aug 12 17:21:56 2018 Check interval: 0 (<none>) Lifetime writes: 44 MB Reserved blocks uid: 0 (user root) Reserved blocks gid: 0 (group root) First inode: 11 Inode size: 128 Journal inode: 8 Default directory hash: half_md4 Directory Hash Seed: 80cf6de5-0a97-4d46-b1a9-98a33980d829 Journal backup: inode blocks 修改指定文件系统的属性: -j: ext2 –>ext3; -L LABEL: 修改卷标; -m#: 调整预留空间(给管理员)百分比; -O[^]FEATHER: 开启或关闭某种特性;has_journal是ext3特性; -o[^]mount-options: 开启或关闭某种默认挂载选项 acl ^acl dumpe2fs命令:显示ext系列文件系统的属性信息 dumpe2fs [-h] device 用于手动实现文件系统检测的工具:fsck 因进程意外中止或系统崩溃等原因导致定稿操作非正常终止时,可能造成文件损坏;此时,应该检测并修复文件系统;建议,离线进行; ext系列文件系统专用工具:fsck,e2fsck e2fsck: check a Linux ext2/ext3/ext4 file system e2fsck: [OPTIONS] device -y: 对所有问题自动回答为yes; -f: 即使文件系统处于clean状态,也要强制检测; fsck: check and repair a Linux file system -t: fstype:指明文件系统类型; fsck -t ext4=fsck.ext4 -a:无须交互而自动修复所有错误; -r:交互式修复; Centos 6 如何使用xfs文件系统: #yum -y install xfsprogs (能访问互联网就输入直接安装) 或者 #cd/etc/yum.repos.d #wget http://ip/源.repo #mv CentOS-base.repo CenOS-Base.repo.bak 创建:mkfs.xfs 检测:fsck.xfs mkfs -t ext2=mkfs.ext2 blkid的命令: blkid device blkid -L LABEL: 根据LABEL定位设备 blkid -U UUID: 根据UUID定位设备 swap文件系统: Linux上的交换分区必须使用独立的文件系统;且文件系统的Szystem ID 必须为82; 创建swap设备:mkswap [OPTIONS] device -L LABER: 指明卷标 -f: 强制 xfs文件系统在centos7中查看文件系统属性命令:xfs_info Windows无法识别Linux的系统;因此,存储设备需要两种系统之间交叉使用时应该使用windows和Linux同时支持的文件系统:fat32(vfat); # mkfs.vfat device 文件系统的使用: 首先要"挂载": mount命令和umount命令 根文件系统这外的其他文件系统要想能够被访问,都必须通过"关联"至根文件系统上的某个目录来实现,此关联操作即为"挂载";此目录即为挂载点; 挂载点:mount_point ,用于作为令一个文件系统的访问入口; 1.事先存在; 2.应该使用未被或不会被其他进程使用到的目录; 3.挂载点下原有的文件将会被隐藏; mount命令: mount [-fnrsvw] [-t vfstype] [-o options] device dir 命令选项: -r:readonly只读挂载; -w:read and write读写挂载; -n:默认情况下,设备挂载或卸载的操作会同步更新至/etc/mtab文件中;-n用于禁止此特性; -t:指明要挂在的设备文件系统类型;可省略,此时mount会通过blkid来判断要挂载的设备文件; -L LABEL:挂载时一卷标的方式指明设备; -U UUID:挂载时以UUID的方式指明设备; mount -U UUID diratime 挂载选项: -o options syunc/asyunc:同步/异步操作;数据一写就保存内存中的数据到硬盘中为同步; atime/noatime:文件或目录在被访问时上是否更新其访问时间戳; diratime/nodiratime:目录在被访问时是否更新其访问时间戳; remount:重新挂载; acl:支持使用facl功能; # mount -o acl device dir # tune2fs -o acl device ro:只读 rw:读写 dev/nodev:此设备上是否允许创建设备文件; exec/noexec :是否允许自动运行设备上的程序文件; user/nouser:是否允许普通用户挂载此文件系统; auto/noauto:设备是否支持-a选项来实现自动挂载; suid/nosuid:是否允许suid和sgid特殊权限的程序生效; defaults默认: Use default options: rw, suid, dev, exec, auto, nouser, async, and relatime. 一个使用技巧: 可以实现将目录绑定至另一个目录上,作为其临时访问入口; mount --bind 源目录 目标目录 查看当前系统所有已挂载的设备; mount cat /etc/mtab cat /proc/mounts 挂载光盘: mount -r /dev/cdrom mount_point 光盘设备文件: /dev/cdrom, /dev/dvd 挂载U盘: 事先识别U盘的设备文件; 挂载本地的回环设备: mount -o loop /PATH/TO/SOME_LOOP_FILE mount_point umount1 umount device |dir umount命令: umount device|dir 注意:正在被进程访问到的挂载点无法被卸载; umount: /: device is busy. (In some cases useful info about processes that use the device is found by lsof(8) or fuser(1)) 查看被哪个或那些进程所占用; lsof MOUNT_POINT fuser -v MOUNT_POINT 终止所有正在访问某挂载点的进程; fuser -km mount_point 交换分区的启用和禁用:创建用mkswap [-c] [-f] [-p PSZ] [-L label] [-U uuid] device [size] 启用:swapon swapon [option][DEVICE] -a:定义在/etc/fstab文件这的所有swap设备; 禁用:swapoff swapoff DEVICE 设定除根文件系统以外的其他文件系统能够开机时自动挂载:/ect/fstab文件 每行定义一个要挂载的文件系统及相关属性(vim /etc/fstab ); [root@centos6_7 ~]# cat /etc/fstab # # /etc/fstab # Created by anaconda on Sun Aug 12 17:26:53 2018 # # Accessible filesystems, by reference, are maintained under '/dev/disk' # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info # UUID=c9b74b1a-41cd-4260-9444-6245ab833dd9 / ext4 defaults 1 1 UUID=8880df83-5bf8-40db-bf6f-bf878b7a7e2e /boot ext4 defaults 1 2 UUID=3144b92b-c079-4239-9a91-84111d2f1ac1 swap swap defaults 0 0 tmpfs /dev/shm tmpfs defaults 0 0 devpts /dev/pts devpts gid=5,mode=620 0 0 sysfs /sys sysfs defaults 0 0 proc /proc proc defaults 0 0 6个字段: (1)要挂载的设备: 设备文件: LABEL UUID 伪文件系统:如 sysfs, proc ,tmpfs等 (2)挂载点 swap类型的设备的挂载点为swap; (3)文件系统类型 (4)挂载选项 defaults :使用默认挂载选项; 如果要同时指明读个挂载点选项,彼此间以事情分隔; defsults, acl , noatime ,noexec (5)转储频率: 0:从不备份 1:每天备份 2:每隔一天备份 (6)自检次序 0:从不自检 1:首先自检,通常只能是根文件系统可用; 2:次级自检 ... mount -a 可自动挂载定义在此文件中的所支持自动挂载的设备(vim /etc/fstab ); df和du命令: df [option]....file.. 显示文件系统利用率report file system disk space usage -l:仅显示本地文件的相关信息blocks; -h:显示容易识别信息状态; -i:显示inode的使用状态而非blocks; du [option]....file.. 显示文件真实大小estimate file space usage -s :sumay整体显示 -h :human -readable 练习: 1.创建一个10G的分区,并格式化为ext4文件系统; #fdisk /dev/sda? ... # partx -a /dev/sdb #mkfs.ext4 /dev/sda? (1)block大小为2048;预留空间2%,卷标为mydata; (2)挂载至/mydata目录,要求挂载时禁止程序自动运行,且不更新文件的访问时间戳; (3)可开机自动挂载; #mke2fs -L 'mydata' -m 2 -b 2048 /dev/sda? #mkdir /mydata #mount -o noatime,noexec /dev/sda? /mytdata #vim /etc/fstab // >> /dev/sda? /mydata defaults 0 0 #mount -a 2.创建一个大小为1G的swap分区,并启用; # fdisk /dev/sda? ... # partx -a /dev/sda? # mkswap /dev/sda? 1G # swapon -a /dev/sda? 总结:文件系统管理 管理工具:mkfs,mke2fs,e2label,tune2fs,dumpe2fs,e2fsck,blkid mkfs.xfs,mkfs.vfat,fsck mkswap,swapon,swapoff mount,umonut df,du fstab文件: 设备 挂载点 文件系统类型 挂载选项 转储频率 自动次序 文件系统: 目录:文件 元数据:inode 数据:data blocks 文件名:上级目录; 删除文件:将此文件指向的所有data block标记为未使用状态;将此文件的inode标记为未使用; 复制和移动文件: 复制:新建文件; 移动: 在一个文件系统:仅改变其路径; 在不同文件系统:复制数据至目标文件,并删除原文件; 符号/软链接: 权限:lrwxrwxrwx 硬链接:指向同一个inode;
参考:
https://www.cnblogs.com/kanie/p/15359346.html
https://cloud.tencent.com/developer/article/1461185
https://blog.csdn.net/feihe0755/article/details/135978078
https://www.cnblogs.com/youngerchina/p/5624478.html