linux 解析文件系统原理
inode and Block
查询lnode df -i
定义能够创建多少的文件
由于扇区(sector)太小只有512字节,所以读取时将多个扇区组合为“块(block)”,“块”是文件存取的最小单位,一般为4kb。数据全部存储于Block,而“元信息”就是目录,比如文件的所属用户,所属组,类型,权限,时间等,这种存储元信息的叫做“inode”,中文叫索引节点,也叫i节点。
inode不包含文件名,文件名是存储在目录的目录项中,一个文件必须占用一个inode,最少一个
-
查看文件的inode信息:stat 文件名
- 文件的字节数
- 文件拥有者的User ID
- 文件的Group ID
- 文件的读、写、执行权限
- 文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。
- 链接数,即有多少文件名指向这个inode
* 文件数据block的位置
-
inode 号码
目录文件的结构文件系统访问文件的步骤:
- 用户在目录中看到要访问的文件名
- 通过目录的数据找到对应的inode号
- 通过inode号,获取inode信息
- 根据inode信息,找到文件数据所在的block
inode一般为128字节或者256字节,记录inode号占用字节一般为4字节
12个直接连接,共占用48字节磁盘空间,包含12个直接指向block号信息
间接是inode记录的4字节的block号中,存储的的真实文件的block号,若每个block大小为4字节,也就是4096字节,可以存放1024个block号信息,一个间接可以存放4096KB。
双间接就是在间接的基础上再次间接,也就是102410244=4096MB
三间接是继续扩充双间接102410241024*4=4096G也就是说一个block默认4字节,最大可以存储48kb+4096kb+4096mb+4096g
-
查看inode号
ls -i stat
文件的存储对照:
文件名-->目录项
元信息-->inode
数据-->block
SuperBlock里面存储的文件系统所有的inode,block信息 -
删除指定的inode号对应的文件
格式:find ./ inum inode号 -exec rm -i {};
查找3天内修改的文件,、并复制到/tmp下
find /root/ -mtime -3 -a -type f -exec cp {} /tmp \;
-
查看文件系统的inode与block信息
df -i 设备名
dumpe2fs -h 设备名
tune2fs - 设备名 -
格式化指定系统的inode个数与block大小
格式:mkfs.ext4 -N inode 数 -b 块大小 设备名
-
解决inode耗尽导致的磁盘损坏
- 删除不使用的文件
- 修改位置
linux文件系统软硬连接原理
-
硬链接
方法:ln 源文件 目标文件
特点:硬链接指向的文件inode号,新生成的硬链接文件inode号与源文件的inode号相同
文件内容是一样的,且只要根据inode号修改的,都会改变,文件是同一个文件,只是多一个目录项,必须是同一个文件系统
-
软连接
方法:ln -s 源文件 目标文件
新生成的软连接文件inode号与源文件不同,软连接文件里的是可以自动导向源文件的路径,可以跨设备建连接,并且目录也是可以建立软连接的,互相影响。
原文地址:https://www.cnblogs.com/wml3030/p/15203391.html
- 手把手教你用python抢火车票
- SpringMVC 实现多文件上传的两种方式及其效率比较
- Spring 之加载配置属性文件和注解属性绑定
- SpringMVC 提交表单400 Bad Request
- 如何在三年内快速成长为一名技术专家
- 【微信开发】getAccessToken 和 getJsapi_ticket缓存支持
- 微信JS-SDK 注入权限验证配置
- Maven 项目下slf4j 包冲突问题
- 谷歌教你学 AI-第三讲简单易懂的估算器
- 黑产是如何强刷用户银行卡8.1万元的?
- Spring 必知概念(二)
- 利用iText 组件导出PDF
- 利用POI组件导出Excel的简单示例
- MongoDB 整合spring-data-jpa,spring 4.x
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 实现PHP中session存储及删除变量
- php微信公众号开发之秒杀
- php fread函数使用方法总结
- Yii2框架控制器、路由、Url生成操作示例
- Laravel框架实现调用百度翻译API功能示例
- phpstudy2018升级MySQL5.5为5.7教程(图文)
- laravel实现简单用户权限的示例代码
- tp5(thinkPHP5框架)时间查询操作实例分析
- PHP使Laravel为JSON REST API返回自定义错误的问题
- 详解PHP PDO简单教程
- Python实现ElGamal加密算法的示例代码
- PHP实现基于状态的责任链审批模式详解
- django rest framework使用django-filter用法
- 通过实例解析python创建进程常用方法
- thinkPHP5框架实现多数据库连接,跨数据连接查询操作示例