Linux磁盘和文件系统简介
Linux磁盘和文件系统简介
1、文件系统:存储设备上存储数据的方式方法
磁盘主要由盘片、机械手臂、磁头和主轴马达组成,而数据的写入实际是写在盘片上,磁盘的最小存储单位为扇区,每
个扇区为512字节,扇区组成一个圆就叫做磁道,而多个盘片的硬盘同一位置的磁道组成柱面
存储容量 = 磁头数 × 磁道(柱面)数 × 每道扇区数 × 每扇区字节(512字节)
Linux当中,硬盘是以挂载形式存在的,挂载就是利用一个目录当成进入点,将磁盘分区的数据放在该目录下,进入该目
录即进入该分区的意思。
文件系统有:NTFS(New Technology File System)新技术文件系统、Windows专用;FAT、ext系列、xfs等
RHEL5当中默认文件系统为ext3、RHEL6当中默认文件系统为ext4、RHEL7当中默认文件系统为xfs。
每一个磁盘都有MBR,位于0,0,1的位置,存放了引导微代码以及磁盘分区表和校验值,所
以我们来看流程,当我们安装一块硬盘的时候,首先先应该要做的就是分区,分区表大小只有64字节,所以主分区+扩
展分区最多能创建4个,而且扩展分区能且只能创建一个,我们知道了硬盘的物理结构,应该对硬盘有一个认识了。
而分区其实就是告诉操作系统在此硬盘中可以访问的区域是由A柱面到B柱面之间的块,也就是说,磁盘分区就是指定分
区的起始与结束柱面。
2、磁盘分区的目的:方便管理磁盘文件
磁盘在分完区后需要进行格式化,格式化就是为了遵循该系统的存储数据的方式,按照该方式进行写入数据,其实格式
化就是为了将文件系统写入到磁盘当中,让磁盘变成能被操作系统所识别使用的系统格式
文件系统的运行是与操作系统的文件数据有直接关系的,比如RHEL6.5所用的文件系统为ext4,该文件系统中的文件数据
除了文件实际内容外还包含了很多属性,例如Linux操作系统的文件权限rwx和文件属性属主属组时间参数等,文件系统
通常将这两部分数据分别存放在不同的块,权限和属性放置到inode中,至于实际数据则放到data block块中,而且还
有一个超级块(superblock)会记录整个文件系统的整体信息,包括inode与block的总量、使用量、剩余量以及文件
系统的格式等很多参数信息。
inode:记录文件的属性,一个文件占用一个inode,同时记录此文件的数据所在block号
block:实际记录文件的内容,如果文件太大,会占用多个block
superblock:记录此文件系统的整体信息
每个inode和block都有唯一编号,而且每个文件都会占用一个inode,inode中有文件真实数据所在的block号,所以
说,当我们找到一个文件的inode时,同时也就可以通过inode查找到该文件真实数据所在的block位置,即能够读取到
该文件的真实数据,这样一来我们硬盘上的数据在短时间内就都能够被读取出来,读取的性能就比较好
包括磁盘碎片的整理,都是通过将数据真实存放在的block进行整理
当我们的硬盘非常大,到达TB级别的时候,分区后inode和block的数量是非常巨大的,而且除非在修改文件系统的情况
下,inode和block是不会再发生变动的,所以庞大的数据量会导致很难管理,所以其实在我们进行格式化的时候,都是
分为多个块组的,每一个块组都有独立的inode、block和superblock,而且在每一个分区当中,我们在将开机启动流程
的时候有提到过我们每一个系统需要指定的文件系统且在不同分区,而每一个分区的文件系统中最前面有一个启动分
区,就是我们说过的boot loader,这个boot loader可以安装我们的操作系统引导装载程序,所以才有了我们的多引导
环境。
那么我们来详细了解一下上面的各个参数:
block是存放数据的地方,在我们进行格式化的时候,会设定一个“分配单元大小”,这个值决定了我们block的大
小,而这个值也就决定了我们能够存放的单一文件大小以及我们最大文件系统总的容量,”分配单元大小“越小越节省
空间,“分配单元大小”越大越浪费空间。也就是说block的大小和数量在格式化之后就不能够再改变了(除非重新格式
化);每一个block当中只能存放一个文件的数据;如果文件大小大于block的大小,则一个文件占用多个block数量;如
果文件大小小于block的大小,则该block的剩余空间就不能再使用了
inode是存放文件属性及block块位置等信息的,所以肯定是以表的形式存在的,在inode当中至少记录了:文件的
权限rwx;文件的属主属组;文件的大小;文件的atime、ctime、mtime;文件特性标志,如Set位等;文件实际数据的
位置等信息。
inode的大小固定为128字节;每一个文件只会占用一个inode;所以,我们能创建的文件数量与inode的数量有关;系统
读取文件的时候先找inode,并查询inode中记录的权限与用户是否符合,符合才继续读取文件的真实内容。
inode和block的关系:
inode当中记录了非常多的信息,而inode固定大小为128字节,单记录一个block位
置需要占用4字节,当inode记录的文件A大小为1GB时且block块大小为4k时,A文件就会占用十多万个block,而inode
当中也需要记录十多万的block位置,就会出现冲突,为了解决这一冲突,系统将inode记录block号码的区域定义为12
个直接、1个间接、一个双间接、和一个三间接记录。
这种情况下,我们通过inode能指定的block的数量(block大小以1k为例)如下:
12个直接指向:12*1K=12K \\由于是直接指向,所以可以有12条记录
间接:256*1K=256K \\每个block记录占4字节,因此1K能指定256个记录
双间接:256*256*1K=256^2K \\第一层的指向有256个记录指向二层,二层每个记录能指定256个
三间接:256*256*256*1K=256^3K \\同上
总额为 12+256+256*256+256*256*256(K)=16GB
所以当文件系统将block大小定义为1k时,单个文件大小最大为16G
这个计算方法不能用在2k和4k等更大上,大于2k的block会受到文件系统自身的限制,所以计算结果会有偏差。
superblock是记录整个文件系统相关信息的地方,没有超级块,就没有文件系统了,它主要记录了:block与inode
的总量;未使用和已使用了的block和inode数量;block和inode的大小;文件系统挂载的时间、最近一次写入数据的时
间等相关信息;以及一个文件系统是否被挂载的数值validbit,已挂载为0,未挂载为1。
当我将一个分区进行格式化之后,文件系统为ext4,(200G),假设分成了10个块组block group,即有10个
superblock,但是ext机制让系统在读取该分区的时候首先读取第一个块组当中的超级块(后面的块组没有超级块),来
确定该分区的文件系统
Linux磁盘和文件系统简介的更多相关文章
- Linux 磁盘与文件系统(EXT2)简介
Linux 中,一切(或几乎一切)都是文件. 一.Linux 磁盘分区与文件系统 1.1 磁盘分区 磁盘的分区主要分为主分区和扩展分区 1)主分区:总共最多只能有四个主分区: 2)扩展分区:只能有一个 ...
- linux磁盘与文件系统的管理
本文涉及命令:dumpe2fs.df.du.fdisk.mkfs.mke2fs.fsck.badblocks.mount.umount.e2label.tune2fs.hdparm.parted 概念 ...
- Linux磁盘及文件系统(三)Linux文件系统
一.文件系统的组成 Linux常见的文件系统类型有ReiserFS,ext2,ext3,ext4,vfat,XFS等,文件系统是对一个存储设备上数据和元数据进行组织的机制.他的最终目的是把大量数据有组 ...
- Linux磁盘与文件系统概念理解
磁盘级别概念 这里讲的主要是网上所谓的老式磁盘,它是由一个个盘片组成的,我们先从个盘片结构讲起.如图1所示,图中的一圈圈灰色同心圆为一条条磁道,从圆心向外画直线,可以将磁道划分为若干个弧段,每 ...
- linux磁盘以及文件系统
df 查看磁盘总容量 -i 显示inodes号 -h 使用合适的单位显示磁盘大小 -m 以M为单位显示 -k 以K为单位显示 默认K显示 du 用来查看某个目录或者文件所占空间大小 参数:-abckm ...
- 三.linux磁盘与文件系统
第一层 机械硬盘 和 固态硬盘 结构 接口 机械硬盘stat.sas 固态pci-e .nvme也叫m2 硬盘的选择 磁盘内部组成 计算硬盘的大小 命令 fdisk -l 显示下面信息 大小=扇区大 ...
- 鸟哥的私房菜:Linux磁盘与文件系统原理
1 硬盘物理组成 //原理 磁头负责读写 磁道(硬盘同半径的一圈) 磁柱(所有盘磁道叠加起来的柱) 扇区(2条半径将磁道分开的一个扇形区域,是磁盘的最小存储单位) ------ ...
- Linux磁盘及文件系统(二)Linux下磁盘命名和分区
在为主机添加硬盘之前,首先需要了解Linux系统下对硬盘和分区的命令方法 一.磁盘命名 Linux下对SCSI和SATA设备是以sd命名的,第一个SCSI设备是sda,第二个是sdb....以此类推. ...
- Linux磁盘及文件系统(一)
一.磁盘 1.IO接口类型 (1)传输类型分类 并口:同一个线缆可以接多块设备 IDE口:两个,一个主设备,一个从设备 SCSI:宽带:16-1:窄带:8-1 串口:同一个线缆只可以接一个设备 (2) ...
随机推荐
- koa2入门(3)mongoose 增删改查
项目地址:https://github.com/caochangkui/demo/tree/koa-mongoose 连接数据库 数据库名字为:koa-mongoose const mongoose ...
- 历时25天,我的博客(www.ityouknow.com)终于又活了过来
时间回到2016年的7月10号,那时候我刚刚开始正式在博客园写博客,博客园的交流氛围很好,但鉴于博客园古老的界面,同时计划创建一个自己独立的博客,毕竟自己的博客怎么折腾都行. 那时候正在研究 Spri ...
- vim命令记录
最近开始用vim作为日常编辑器,由于vim的命令过多,现在记录一下
- libc.so.6: version 'GLIBC_2.14' not found报错提示的解决方案
线上一台服务器在执行leveldb程序的时候,报错:"libc.so.6: version `GLIBC_2.14' not found". 排查原因及解决方法如下: 1)产生原因 ...
- nginx日志格式字段
Nginx日志主要分为两种:访问日志和错误日志.日志开关在Nginx配置文件(/etc/nginx/nginx.conf)中设置,两种日志都可以选择性关闭,默认都是打开的. 访问日志 访问日志主要记录 ...
- 快速搭建BIND服务,并实现解析
公司有测试需求,当连接一个网络后自动会进入产品的测试环境,所以搭建了一个DNS解析服务,来完成此需求. 参考:http://blog.chinaunix.net/uid-30149335-id-506 ...
- beta阶段测试基本概况对应机型硬件信息
机型测试概况 测试结果 测试终端数 品牌分布分析 系统分布分析 分辨率分布 未执行 1 联想 4.0.3 480*800 安装失败 1 联想 4.2.1 480*854 通过 119 华为, 三星, ...
- 《Linux内核设计与实现》读书笔记三
Chapter 18 调 试 18.1 准备开始 1.准备工作: 一个bug 一个藏匿bug的内核版本 相关内核代码的知识和运气 2.执行foo就会让程序立即产生核心信息转储(dump core). ...
- socket.io框架
socket.io框架 一.问题背景 目前公司在互联网产品上需要程序与前端部分要进行一个实时交互,在进行一定程度上的选型后,决定使用socket.io框架进行一个实践,算是公司的一个新的 尝试,也算是 ...
- HDU 2012 素数判定
http://acm.hdu.edu.cn/showproblem.php?pid=2012 Problem Description 对于表达式n^2+n+41,当n在(x,y)范围内取整数值时(包括 ...