linux 文件系统
Posted 6点32分
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux 文件系统相关的知识,希望对你有一定的参考价值。
1.文件系统:操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。
从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。
具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,当用户不再使用时撤销文件等。
2.文件系统的类型
2.1 查看系统支持的文件系统
[root@test6 ~]# ls /lib/modules/$(uname -r)/kernel/fs autofs4 cramfs ext3 fscache hfsplus lockd nfsd vfat cachefiles dlm ext4 fuse jbd msdos nls cifs ecryptfs fat gfs2 jbd2 nfs squashfs configfs exportfs freevxfs hfs jffs2 nfs_common udf
2.2 系统目前已加载到内存中支持的文件系统
[root@test6 ~]# more /proc/filesystems nodev sysfs nodev rootfs nodev bdev nodev proc nodev cpuset nodev binfmt_misc nodev debugfs nodev securityfs nodev sockfs nodev usbfs nodev pipefs nodev anon_inodefs nodev futexfs nodev tmpfs nodev inotifyfs nodev eventpollfs nodev devpts ext2 nodev ramfs nodev hugetlbfs iso9660 nodev mqueue nodev selinuxfs ext3 nodev rpc_pipefs nodev autofs
3.文件系统的简单操作
3.1.1df
3.1.2 实例:
-h 选项以KB以上的单位来显示,可读性高
[root@test6 ~]# df -h 文件系统 容量 已用 可用 已用% 挂载点 /dev/sda5 9.7G 1.1G 8.1G 12% / /dev/sda1 99M 12M 83M 13% /boot tmpfs 252M 0 252M 0% /dev/shm /dev/hdc 3.9G 3.9G 0 100% /mnt/cdrom /dev/sda6 99M 5.6M 89M 6% /mnt/sda7
-a 查看全部文件系统
[root@test6 ~]# df -a 文件系统 1K-块 已用 可用 已用% 挂载点 /dev/sda5 10153988 1150388 8479484 12% / proc 0 0 0 - /proc sysfs 0 0 0 - /sys devpts 0 0 0 - /dev/pts /dev/sda1 101086 11534 84333 13% /boot tmpfs 257652 0 257652 0% /dev/shm none 0 0 0 - /proc/sys/fs/binfmt_misc sunrpc 0 0 0 - /var/lib/nfs/rpc_pipefs /dev/hdc 4087030 4087030 0 100% /mnt/cdrom /dev/sda6 101086 5664 90203 6% /mnt/sda7
3.2.1 du
3.2.2 实例
-s 查看指定目录所占空间
[root@test6 ~]# du -s /var/ 31672 /var/
4.系统存储详解:
1.这里以 EXT2 文件系统为例
在Linux下,一个磁盘的最前面是MBR(MBR(main boot record) 主引导记录),大小为512Byte
在每一个分区下,第一部分是boot sector,接下来是super block,再接下来是inode,最后是block。
对于每一个block而言,一般大小是4K,如果一个block已经存放了一个大小为1K的文件,那么剩余的空间是无法再被使用的。
2.MBR包括三部分内容:
分区表:指出有几个分区,每个分区的起始扇区号、大小和操作系统类型及其他特性
自举装入程序:PC机启动时由bios装入内存执行。如果装了多个操作系统,将根据选择去读出对
应分区的boot sector程序装入内存,执行该操作系统的自举程序。
校验信息:检验是否正确
3.boot sector (引导扇区)应当包含如下信息:
本分区操作系统类型
数据区大小
根目录区允许最大目录项(在根目录区最多创建多少个文件)
如果该分区安装了操作系统并被设置为活动分区,那还会包含一段“引导程序”;如果没有安装系
统,则该分区引导扇区为空或其中的数据是无效的。(windows默认活动分区为C)
4.MBR和boot sector的区别:
两者关系是自上而下的的关系。
1.启动顺序由先后。pc机启动时,先自行MBR,在根据选择自行某个分区下的boot sector(选择执行的boot sector所在分区就是活动分区。用户选择一个操作系统,实际上也就是选择一个分区作为活动分区)
2.boot sector可以为空(没装系统),但MBR必须包含内容。
3.MBR必须被读取并执行;引导扇区根据选择执行。
4.MBR实际上包含的内容也比boot sector广泛,MBR相当于包含了硬盘整体层面上的引导扇区(自检装入程序)、根目录区(分区表)。
5.superblock (超级块):里面的数据其实就是文件卷的控制信息部分,也可以说它是卷资源表,有关文件卷的大部分信息都保存在这里。例如:硬盘分区中的每个block的大小、硬盘分区上一共有多少个blockgroup、以及每个block group中有多少个inode
一般一个文件的属性和占有的block号都是存放在inode中的,而block存放的是文件的实际内容。
每一个block和inode都是有编号的
在inode中记录一个文件消耗的空间是128Byte。
在superblock中记录的是inode和block的信息,比如有多少个block,已经用了多少个block,还有多少个block。
如果一个分区比较大,block会很多,这个时候可以将block分组,即block group
每一个block group中第一个部分存放的是superblock,作用是记录一共有多少个block,还剩多少个block。这个只是记录使用的情况,而具体被使用的编号需要在block对照表中查询了。
第二个部分存放的是系统文件的描述,包括每一个block group是从那一个block开始的,到那一个block结束的。
第三个部分是block对照表,作用是记录哪些block已经被使用了,哪些block没有被使用,第四个部分是inode的对照表,作用是记录哪些inode已经被使用了,哪些inode内有被使用,对照表也称作为位图。
第五个部分是indoe表:*文件的字节数
*文件拥有者的UserID*文件的GroupID
*文件的读、写、执行权限
*文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。
*链接数,即有多少文件名指向这个inode*文件数据block的位置可以用stat命令,查看某个文件的inode信息:statexample.txt
总之,除了文件名以外的所有文件信息,都存在inode之中。纵观整个inode的C语言描述,没有发现关于文件名的东西,也就是说文件名不由inode保存,实际上系统是不关心文件名的,对于系统中任何的操作,大部分情况下你都是通过文件名来做的,但系统最终都要通过找到文件对应的inode来操作文件,由inode结构中 *i_op指向的接口来操作。
文件系统如何存取文件的:
1)、根据文件名,通过Directory里的对应关系,找到文件对应的Inodenumber
2)、再根据Inodenumber读取到文件的Inodetable
3)、再根据Inodetable中的Pointer读取到相应的Blocks
这里有一个重要的内容,就是Directory,他不是我们通常说的目录,而是一个列表,记录了一个文件/目录名称对应的Inodenumber。
第六个部分是block
在inode中记录一个文件消耗的空间是128Byte。inode每指向一个block,就要消耗空间4Byte,由此可得一个inode指向的文件最大为128Byte/4Byte*4K=128K。实际上一般系统将一个inode划分成12个直接区,1个间接去,1个2间接区,1个3间接区。
对于直接区,每一个直接区直接指向一个block
对于间接区,该间接区指向一个block,然后这个被指向的block再指向别的block,实际上间接区通过这个方法可以间接的指向4K/4Byte=1024个block。
同理2间接区先指向一个block,然后这个被指向的block再指向别的block,第二次被指向的block最终再指向实际用来存储的block,这样间接区通过这个方法可以间接的指向1024*1024=1048576个block。
3间接区同理可以推算,但是要注意的是在实际文件系统中,大于2K的block会收到文件系统本身的限制。
以上是关于linux 文件系统的主要内容,如果未能解决你的问题,请参考以下文章
LINUX PID 1和SYSTEMD PID 0 是内核的一部分,主要用于内进换页,内核初始化的最后一步就是启动 init 进程。这个进程是系统的第一个进程,PID 为 1,又叫超级进程(代码片段