linux文件系统底层原理
Linux文件系统中的文件是数据的集合,文件系统不仅包含着文件中的数据而且还有文件系统的结构,所有Linux 用户和程序看到的文件、目录、软连接及文件保护信息等都存储在其中。
底层原理图:

在讲解各个block前,先介绍下inode
inode简介
要理解inode,就先要理解文件的存储方式。我们都知道,文件是存储在硬盘上的。硬盘的最小单位是扇区,每个扇区的大小为512字节。
如果系统在读取硬盘数据的时候按扇区一个一个来读取,那效率就太低了,而是一次连续性读取多个扇区,所以设计者又将多个扇区整合成一个块(block),所以,块就是文件存取的最小单位。一个块的大小为4k。
我们现在已经有了块的概念,文件数据就是存放在块中。但光有数据还是不行啊?为了方便管理文件,我们还需要文件的元信息,比如文件的属性,创建时间,权限,所占的块大小,数量等等。这些信息就是inode信息。所以硬盘在分区的时候会分为两个区域,一个区域存放数据,一个区域存放inode信息。
每一个文件都有一个对应的inode。
inode信息
使用stat指令可查看对应文件的inode信息:

具体内容如下:
文件名
inode编号
文件拥有者uid
文件的所属用户组 gid
文件的可读,可写,可执行权限 :Access: (0755/drwxr-xr-x)
文件的时间戳:
- access time : 文件上一次打开的时间
- modify time:文件内容上一次修改的时间
- change time :文件的inode信息上一改变的时间
硬链接数:links
文件数据的所占用的块:blocks
文件所占用的字节数 size
等等。
Linux下一切皆文件,每个文件都有对应的inode信息。
关于inode编号,这里多说以下,每个文件都对应一个inode编号,操作系统用inode号码来识别文件,对于系统来说,文件名知识inode编号便于识别的别称或绰号。
表面上,打开文件是通过文件名,实际上要执行下面三个步骤:
1、查找文件的inode编号
2、根据inode编号,找到inode信息
3、根据inode信息找到文件对于所在的block,进行数据的读写。
inode大小
一个inode节点的大小一般为128字节或者256字节。inode节点的数量在硬盘格式化的时候就已经给定了。所以当Linux上创建文件过多时,就可能发生inode用光,无法创建新文件的问题。
查看inode信息指令
查看每一个目录下每个文件的inode号
ls -i
查看对应文件的inode信息
stat [file]
查看硬盘上的inode总数和适用情况
df -i
查看硬盘上块(1k-blocks)的总数和使用情况
df -k
super block:负责掌控全局,即管理所有的inode编号
inode block:负责存储文件的元信息
directory block:负责存储目录下的文件信息,即一条条记录,包括文件名和inode编号
data block(即剩余的block):负责存储文件的内容
查看文件示意图:

删除文件的示意图:

-----文件并没有真正的删除,只有覆盖才有可能真正的删除(即新建的文件恰好使用该块存储数据即把原来的数据覆盖了)
-----格式化:即重新构建这些block块
linux文件系统底层原理的更多相关文章
- linux文件系统实现原理简述【转】
本文转载自:https://blog.csdn.net/eleven_xiy/article/details/71249365 [摘要] [背景] [正文] [总结] 注意:请使用谷歌浏览器阅读( ...
- linux 文件系统工作原理
转:<http://linuxperf.com/?p=153> 一.概述 文件系统要解决的一个关键问题是怎样防止掉电或系统崩溃造成数据损坏,在此类意外事件中,导致文件系统损坏的根本原因在于 ...
- 【Socket】linux黑客之网络嗅探底层原理
1.mystery引入 1)网络嗅探属于网络攻防类的安全软件,其基于原始套接字技术开发的 2)原始套接字是一种套接字底层技术,它工作在网络层 3)谈到网络安全,刚好本学期学过这门课程,这里myst ...
- Linux从头学06:16张结构图,彻底理解【代码重定位】的底层原理
作 者:道哥,10+年的嵌入式开发老兵. 公众号:[IOT物联网小镇],专注于:C/C++.Linux操作系统.应用程序设计.物联网.单片机和嵌入式开发等领域. 公众号回复[书籍],获取 Linux. ...
- Linux从头学13:想彻底搞懂“系统调用”的底层原理?建议您别错过这篇【调用门】
作 者:道哥,10+年嵌入式开发老兵,专注于:C/C++.嵌入式.Linux. 关注下方公众号,回复[书籍],获取 Linux.嵌入式领域经典书籍:回复[PDF],获取所有原创文章( PDF 格式). ...
- 磁盘、分区及Linux文件系统 [Disk, Partition, Linux File System]
1.磁盘基础知识 1.1 物理结构 硬盘的物理结构一般由磁头与碟片.电动机.主控芯片与排线等部件组成:当主电动机带动碟片旋转时,副电动机带动一组(磁头)到相对应的碟片上并确定读取正面还是反面的碟面,磁 ...
- linux文件系统详解
最近在做磁盘性能优化,需要结合文件系统原理去思考优化方向,因此借此机会进一步加深了对文件系统的认识.在看这篇文章之前,建议先看下前面一篇关于磁盘工作原理的解读.下面简单总结一些要点分享出来: 一.文件 ...
- (转)Linux文件系统的实现
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Linux文件管理从用户的层面介绍了Linux管理文件的方式.Linux有一个树状 ...
- Linux 文件系统剖析
[转自]https://www.ibm.com/developerworks/cn/linux/l-linux-filesystem/ 按照分层结构讨论 Linux 文件系统 在文件系统方面,Linu ...
随机推荐
- urlrewritefilter 本地windowsxp 上正常 使用 ,但是 到linux服务器 上 则时好时坏 ,不起作用
可能原因: tuckey.org 无法正常访问 ,urlrewrite 配置 网络 dtd 无法下载 .. 先把 urlrewrite 日志 配置好: <filter> <filte ...
- java 事件监听
事件监听实现: 三要素: 1.事件源(数据源,要处理的数据) 2.事件 (承载数据,传递信息并被监听) 3.监听器 (负责对数据的业务处理) --该开发用例采用了Spring的事件监听 1. 定义事 ...
- Django的路由层(1)
https://www.cnblogs.com/yuanchenqi/articles/8876685.html URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为 ...
- Part 4 - Authentication(14-16)
from django.conf.urls import url from django.contrib import admin from django.contrib.auth import vi ...
- javascript 字符数组转换成以逗号隔开的字符串
var ids = [];angular.forEach(pulsarServers,function (server) { ids.push(server.id);});ids = ids.join ...
- C语言之控制台读取上下左右方向键指令
首先,可以检测任何按键键值 // 首先,检测任何按键的代码 #include<stdio.h> #include<conio.h> int main() { char ch; ...
- HDU 3361 ASCII (水题,不说什么了)
题意:给你n个十进制数,让你输出相应的ASCII. 析:无,没说的,直接输出就好了. 代码如下: #include <iostream> #include <cstdio> # ...
- AngularJS标准Web业务流程开发框架—1.AngularJS模块以及启动分析
前言: AngularJS中提到模块是自定义的模块标准,提到这不得不说AngularJS是框架中的老大哥,思想相当的前卫..在这框架满天横行的时代,AngularJS有些思想至今未被超越,当然仁者见仁 ...
- [笔记]python
配置python apt install python2.7 python3 apt install python-bs4 python3-bs4 apt install virtualenv apt ...
- xib中快捷键
Alt + 点击视图,实现快速复制 点击视图, + Alt 将鼠标放在另一个视图上,可以显示两视图x 和y方向的距离, 按方向键上下,调节两视图的距离 Command + Shift + G 前往 ...