导航:首页 > 编程系统 > linuxnamei

linuxnamei

发布时间:2025-02-05 19:53:11

1. linux里面什么是ext2fs

EXT2FS第二代扩展文件系统(英语:second extended filesystem,缩写为 ext2),是LINUX内核所用的文件系统。它开始由Rémy Card设计,用以代替ext,于1993年1月加入linux核心支持之中。ext2 的经典实现为LINUX内核中的ext2fs文件系统驱动,最大可支持2TB的文件系统,至linux核心2.6版时,扩展到可支持32TB。其他的实现包括GNU Hurd,Mac OS X(第3方),Darwin(第3方),BSD。ext2为数个LINUX发行版的默认文件系统,如Debian、Red Hat Linux等 。

简介

Linux支持多种不同类型的文件系统:网络文件系统NFS,磁盘文件系统Extfs,特殊文件系统proc、tmpfs等。

Ext2fs文件系统基本概念

Inode

Ext2fs中,每个文件都用如下图所示的inode结构来描述,用户空间操作的对象是文件路径和名称,系统kernel把路径名称解析成inode,通过inode号来访问它代表的文件。

Mode:包含两个数据,文件类型(普通文件/目录/字符设备/块设备/符号链接/管道)和用户访问权限信息(0660)。

Ownerinfo:文件属组信息。

Size:文件长度,单位是byte。

Timestamps:文件访问和修改的时间戳。

Linkscount:这个项在上图中没有体现,它记录了这个inode存在多少个链接,创建新文件时,其inode的linkscount应该为1,文件被删除后,这个inode的linkscount就变为0。

DataBlocks:指向真实的文件数据块,因为大文件可能会分配很多的block,直接在inode中保存所有的数据块指针将会比较困难,也会浪费掉很多空间,毕竟系统中大文件的数量是占少数的,所以设计了间接块指针(Indirectblocks)和二级块指针(Doubleblocks)来指向真实数据块。

实际上还应该包含了inode号。

目录

在Ext2fs中,目录被看做一种特殊文件,也用一个inode来描述,目录的datablock中保存了目录下的所有内容,每条内容叫做一个entry,结构如下:

每条entry都保存了inode号、entry的长度、文件名长度、文件类型,并且都是4字节对齐。


特别地,每个目录下有两个特殊的子目录,'.'和'..',分别代表当前目录和上一级目录,这两个目录文件其实是硬链接。其中'..'有一个重要的作用:FSchecker(可以把文件系统umount后手动执行e2fsck看看)在检查文件系统的时候,就会使用’..‘来检查目录是否可以追溯到挂载根目录,如果检查失败,目录便会被链接到挂载根目录下面的lost+found。

链接

为了方便系统内文件共享,Linux支持了两种基本的链接文件:硬链接和软链接(也叫符号链接)。

硬链接并不是一个独立的文件,不占用inode,只是在目录下创建了一条entry,其中inode号保存的是目标文件的inode号,访问硬链接时,文件系统通过inode将访问操作重定向到目标文件,实现了文件共享,所以硬链接就是多个文件名直接指向同一个inode,用stat命令也能看到其inode号就是目标文件的inode号,它的特点:

不能跨文件系统。

目标文件必须先存在(inode存在且linkcount不为0)。

只能对普通文件创建硬链接,目录不行。

删除一个硬链接文件并不影响其他有相同inode号的文件。

软链接是一个独立的文件,拥有自己的inode,其数据块存放的是目标文件的名称,访问软链接时,kernel先访问软链接的内容,拿到目标文件名,并重新启动路径解析,获取到目标文件inode号再向文件系统发起访问。软链接的特点:

可以跨文件系统。

文件和目录都可以。

可对不存在的文件或目标创建软链接。

软链接有自己文件属性和权限。

创建软链接时,链接计数i_nlink不会增加;

删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软连接被称为死链接(即danglinglink,若被指向路径文件被重新创建,死链接可恢复为正常的软链接)。

软链接的目标文件也可以是软链接,其解析过程是递归的。

注意:软链接创建时目标文件的路径指向使用绝对路径比较好,使用相对路径创建的软链接被移动后该软链接文件将成为一个死链接,因为链接数据块中记录的也是相对路径指向。

下面这个图清晰描述了硬链接和软连接之间的区别:

Ext2fs基本结构

在创建文件系统的时候,Ext2fs将设备(磁盘或者分区)划分成1K、2K或者4K的block,然后通过Blockgroup来管理,Ext2fs/Ext3fs/Ext4fs的结构差不多(Ext2fs主要是少了日志功能相关的内容),大致如下图所示:

SuperBlock

SuperBlock是文件系统最重要的数据,它从设备开始位置偏移1024字节的地方开始存储,占用1个block。如果block的大小是1KB,那么SuperBlock就存放在block-1。如果block的大小是4KB,那Superblock就存放在block-0。

在Ext2fs的第一个版本(reverson0),每个BlockGroup都会存储一份SuperBlock的一份副本,因为对空间浪费比较严重,后来的版本就只在部分BlockGroup(0、1、3、5、7、9这几个group)中保留了SuperBlock的副本,在这几个Group,和SuperBlock一起备份的还有GroupDescriptor。当然,如果没有这么多Group,副本数量自然更少,在后面的demo中也可以看出来。其中Group-0中的SuperBlock叫作PrimarySuperBlock,文件系统被mount时,VFS读取的也正是这份。

SuperBlock里面的具体数据包括:

inode和block的总数,以及还有多少未分配。

每个BlockGroup有多少个inode和block。

文件系统唯一身份标识符(UUID),每个设备上的文件系统UUID都不一样。

...

GDT

GroupDescriptorTable,GDT在文件系统中的layout紧跟Superblock后面,是文件系统第二关键的数据,它主要用于存放所有BlockGroup的信息:

Ext2fs为GDT预留了一部分空间,用于文件系统扩容。


通过冗余提高了文件系统可靠性:在多个group中保存了关键数据的冗余副本,包括superblock、GDT,当这些关键数据损坏的时候,很容易从这些冗余副本中恢复。


提升性能:分成group后,inodetable和datablock之间的”距离“变近了,在执行I/O时,可能会减少磁头寻址的时间。

注:实际上inodesize,每个group中的block数等参数都可以在创建文件系统的时候指定,具体命令参数参考manpage。

Ext2fs的性能优化


为了提升I/O性能,Ext2fs内核代码也做了很多设计,其中有两个关键的技术:

提前读:当必须读取一个块时,内核代码在几个连续的块上请求I/O。通过这种方式,它试图确保要读取的下一个块已经加载到缓冲区缓存中。提前读通常在文件的连续读取期间执行,Ext2fs将它们扩展到目录读取,可以是显式读取(readdir(2)调用),也可以是隐式读取(namei内核目录查找)。

预分配:在将数据写入文件时,Ext2fs在分配新块时预先分配最多8个相邻块。具体预分配多少个块取决于blocksize:blocksize=1KB,每次预分配2个block;blocksize=2KB,每次预分配4个block;blocksize=4KB,每次预分配8个block。当然,对于用touch创建的空文件是不会预分配block的。即使在非常满的文件系统上,预分配命中率也只有75%左右。这种预分配在负载较大的情况下可以获得良好的写性能,同时它还允许将连续的块分配给文件,从而加快未来的顺序读取。

下面是Ext2fs、Ext3fs和Ext4fs的一个简单对比:

只有Ext2fs的Filesystemstate是notclean,Ext3fs和Ext4fs都是clean,Ext2fs刚被以读写模式mount时,这个state被设置成notclean,umount或者以只读模式mount时,state被设置成clean,启动时文件系统根据这个状态来决定是否要执行检查。

Ext3fs/Ext4fs的Superblock中多了关于日志功能的信息。

Ext4fs的每个group多了校验和(checksum)数据。

2. util-linux是什么软件

Util-linux的内容
Util-linux 软件包包含许多工具。其中比较重要的是加载、卸载、格式化、分区和管理硬盘驱动器,打开 tty 端口和得到内核消息。
安装下列程序: agetty, arch, blockdev, cal, cfdisk, chkpexe, col, colcrt, colrm, column, ctrlaltdel, cytune, ddate, dmesg, elvtune, fdformat, fdisk, fsck.cramfs, fsck.minix, getopt, hexmp, hwclock, ipcrm, ipcs, isosize, line, logger, look, losetup, mcookie, mkfs, mkfs.bfs, mkfs.cramfs, mkfs.minix, mkswap, more, mount, namei, parse.bash, parse.tcsh, pg, pivot_root, ramsize (link to rdev), raw, rdev, readprofile, rename, renice, rev, rootflags (link to rdev), script, setfdprm, setsid, setterm, sfdisk, swapoff (link to swapon), swapon, test.bash, test.tcsh, tunelp, ul, umount, vidmode (link to rdev), whereis 和 write

简短说明
agetty打开一个TTY端口,显示登录提示,执行/bin/login命令。
arch 显示机器的体系结构信息。
blockdev在命令行中调用块设备的ioctl。
cal显示一个简单的日历。
cfdisk 处理指定设备的分区表。
chkpexe 找出多余的可执行文件。
col 过滤来自输入的反向行馈送内容。
colcrt预览nroff的输出。
colrm 在某个文件中删除列。
column 把输出格式化为几列。
ctrlaltdel设置CTRL+ALT+DEL组合键的功能,为硬重启或软重启。
cytune 查询和修改cyclade驱动器的中断入口。
ddate 把阳历日期转换为Discordian日期。
dmesg 显示内核的启动信息。
elvtune 调整I/O端口平衡。
fdformat 低级格式化一张软盘。
fdisk 磁盘分区管理程序。
fsck.cramfs对Cramfs文件系统的一致性进行检查。
fsck.minix 对MINIX文件系统的一致性进行检查。
getopt解析命令参数。
hexmp用用户指定的方式(包括ASCII, 十进制, 十六进制, 八进制)显示一个文件或者标准输入的数据。
hwclock查询和设置硬件时钟。(也被称为RTC或BIOS时钟)
ipcrm删除一个指定的资源。
ipcs 提供IPC机制的信息。
isosize输出iso9660文件系统的长度。
line 单行拷贝。
logger 设置系统日志的入口。
look 显示以某个给定字符串为开头的行。
losetup 启动和控制回环(loop)设备。
mcookie为xauth产生magic cookie,128位随机数。
mkfs 在一个设备(通常是一个硬盘分区)设备上建立文件系统。
mkfs.bfs 创建 SCO bfs 文件系统。
mkfs.cramfs创建cramfs文件系统。
mkfs.minix 创建 Minix 文件系统。
mkswap 初始化指定设备或文件,以用做交换分区。
more 分屏显示文件,但less更好用。
mount把一个文件系统从一个设备挂载到一个目录。
namei 显示指定路径的符号链接。
pg显示文本文件内容,一次显示一屏。
pivot_root 使某个文件系统成为当前进程的根文件系统。
ramsize 显示或者改变内存虚拟盘的大小。
rdev 查询和设置内核的根设备和其他信息。
readprofile显示/proc/profile文件的信息。
rename对文件重命名。
renice修改正在运行进程的优先级。
rev 颠倒一个文件每行字符的顺序。
rootflags在挂载根设备时,查询和设置额外的信息。
script 为终端会话过程建立一个typescipt文件,记录会话过程中终端的输出。
setfdprm设置软盘参数。
setsid 在一个新的会话过程中运行程序。
setterm 设置终端属性。
sfdisk磁盘分区表管理工具。
swapdev 能在启动内核中设置交换分区设备。
swapoff取消对指定交换设备和交换文件的使用。
swapon 使指定的交换设备和交换文件生效。
tunelp设置打印设备的参数。
ul 加下划线。
umount卸载一个被挂载的文件系统。
vidmode查询和设置视频模式。
whereis确定某命令二进制文件,源文件和手册文档的位置。
write发一个消息给另一个用户,如果他开启了writting的话。

Util-linux 安装依赖关系
Util-linux 依赖于: Bash, Binutils, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make, Ncurses, Sed, Zlib

阅读全文

与linuxnamei相关的资料

热点内容
算命网站哪个最准 浏览:857
如何将文件夹按123排序 浏览:228
如何看到大盘的数据 浏览:858
新开公司建立数据库 浏览:429
什么app可以调整视频倾斜度 浏览:244
iar配置文件 浏览:715
axure源文件下载 浏览:495
域配置文件防火墙 浏览:962
简洁个人博客网站模板下载 浏览:58
word光标很小 浏览:727
主题的文件名是什么 浏览:480
开源软件都用什么编程语言 浏览:732
免费听课的是什么网站 浏览:863
php配置文件详解 浏览:561
如何收索pdf文件里的关键词 浏览:840
javalog清空日志文件 浏览:529
07版word如何解锁 浏览:112
sl400t6670cpu升级 浏览:84
织梦cms数据库备份 浏览:260
普通宽带升级光纤需要更换帐号吗 浏览:86

友情链接