文章目录
思维导图下载:
https://pan.baidu.com/s/1DV1hPpvoSBeq_gYdr1n5Qg
磁盘组成与分区
磁盘的组成:
- 圆形的磁盘:主要存储数据的部分
- 机器手臂和机器手臂上的磁头:可擦写数据
- 主轴马达:可以转动磁盘,让机器手臂的读取头在磁盘上读取数据
其他知识点
- 硬盘的最小的物理存储单位为扇区,依据设计的不同,有512字节与4k两种格式。
- 将扇区组成一个圆,就是柱面
- mbr分区表中第一个扇区最重要,存储有446字节的MBR启动引导程序,64字节的分区表,2字节的分区结束标志。
- GPT分区表除了分区数量增多之外,他支持的最大磁盘容量也超过了两个T
为啥要进行格式化
因为每种操作系统所设置的文件属性,权限等等不相同,为了存放这些文件所在的数据,我们需要对分区进行格式化,已成为操作系统能够利用的文件格式,格式化其实就像是一个画格子的过程,就像我们的一张白纸,写字上去的时候,先画好格子,我们就知道怎么去写。
FHS文件系统层级标准
- /dev:存放一些设备文件,如/dev/cdrom,/dev/sr0
- /boot:启动相关的文件,内核,grub配置文件,grub
- /var:动态数据的存放目录,/var/run,/var/message,日志文件使用tailf查看,tailf可以查看到文件的末尾,这个命令可以追踪这个文件的变化,经常用来查看日志
- /usr:存放系统资源,/usr/bin,/usr/sbin,/usr/lib,/usr/share/man(帮助手册),/usr/local(编译安装的默认目录),、/usr/
- /tmp:临时文件存放目录,这个目录下面的文件所有人都具有可读可写可执行的权限
- /proc:这个目录是伪目录,它不占用硬盘空间,存储系统信息,进程运行信息,内核参数映射,/proc/cpuinfo:cpu相关的信息,/proc/meminfo:内存相关的信息,/proc/23(数字目录,存放的是进程信息,数字是进程的ID号)
- 详解/proc/sys:这个目录下存放的是内核参数,内核负责我们操作系统的文件系统管理,进场管理,内存管理,网络管理等等,在这个目录下有一些定义tcp等协议协议栈的文件,/proc/sys/net/ipv4/ip_forward ip转发功能,这个IP转发功能默认是没有开的,在做成路由器的时候可以开,/proc/sys/net/ipv4/icmp_echo_ignore_all #忽略icmp所有echo报文(会出现ping不通)
- 修改内核参数:修改内核参数可以使用echo,但是不可以使用vim,因为/proc目录下面的文件是在内存里的,而不是在硬盘里面的
- 例如:
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
- /lib:共享库和内核模块
- /lib64:64位库
ext文件系统结构
ext文件系统与目录的关系
目录的block存储的是文件名与inode,删除文件的时候其实并没有被真正的删除,是可以通过其他工具找到的,因为普通的rm删除只是删掉了inode与block的指向,并没有擦写掉block的数据,我们可以通过重建block与inode的指向恢复删除的文件,而粉碎文件是把BLock的文件都擦写掉,是不能恢复的
术语
-
文件系统描述:这个区段可以描述每个区块群组的开始与结束区块
-
bitmap:使用二进制的0和1进行记录哪些Block已经分配,哪些block是正常的
-
block:ext文件系统最基本单位
-
blockgroup:对分区所有block分组,分成多个blockgroup,block太多了,因此我们要分组进行处理
-
superblock(超级区块):存放文件系统整体信息,包括inode与与数据区块的总量,使用量,剩余量
查看超级区块命令dumpe2fs /dev/sdc1
-
datablock(数据区块:存放实际数据内容
鸟哥:实际存放数据内容的地方,如果文件太大会占用多个区块 -
GDT:组描述表,记录的是这个组的整体的信息。
-
inode:存放一个文件元数据(metadata)
查看元数据命令
stat FILE
查看iode编号
ls -i FILE
元数据存放以下内容:
1.大小
2.inode编号
3.硬链接数
4.权限
5.文件类型
6.拥有者所属组
7.时间戳
atime
文件的读取时间,文件被查看
mtime
文件的修改时间,文件的内容被修改
ctime
文件的状态时间,比如某个文件的权限属性,大小被修改,这个时间就会改变*
datablock指针
ext系列文件系统的区别
参考《Linux命令行与shell脚本编程大全》
ext文件系统
Linux操作系统中引入的最早的文件系统叫作扩展文件系统(extended filesystem,简记为ext)。
- 它为Linux提供了一个基本的类Unix文件系统:使用虚拟目录来操作硬件设备,在物理设备上按定长的块来存储数据。
- ext文件系统采用名为索引节点的系统来存放虚拟目录中所存储文件的信息。索引节点系统在每个物理设备中创建一个单独的表(称为索引节点表)来存储这些文件的信息。存储在虚拟目录中的每一个文件在索引节点表中都有一个条目。ext文件系统名称中的extended部分来自其跟踪的每个文件的额外数据,包括:
文件名
文件大小
文件的属主
文件的属组
文件的访问权限
指向存有文件数据的每个硬盘块的指针
Linux通过唯一的数值(称作索引节点号)来引用索引节点表中的每个索引节点,这个值是
创建文件时由文件系统分配的。文件系统通过索引节点号而不是文件全名及路径来标识文件。
ext2文件系统
最早的ext文件系统有不少限制,比如文件大小不得超过2 GB。
- ext2的索引节点表为文件添加了创建时间值、修改时间值和最后访问时间值来帮助系统管理员追踪文件的访问情况。
- ext2文件系统还将允许的最大文件大小增加到了2 TB(在ext2的后期版本中增加到了32 TB),以容纳数据库服务器中常见的大文件。除了扩展索引节点表外,
- ext2文件系统还改变了文件在数据块中存储的方式。ext文件系统常见的问题是在文件写入到物理设备时,存储数据用的块很容易分散在整个设备中(称作碎片化,)数据块的碎片化会降低文件系统的性能,因为需要更长的时间在存储设备中查找特定文件的所有块。
- 保存文件时,ext2文件系统通过按组分配磁盘块来减轻碎片化。通过将数据块分组,文件系统在读取文件时不需要为了数据块查找整个物理设备。
- 如果计算机系统在存储文件和更新索引节点表之间发生了什么,这二者的内容就不同步了。
- ext2文件系统由于容易在系统崩溃或断电时损坏而臭名昭著。即使文件数据正常保存到了物理设备上,如果索引节点表记录没完成更新的话,ext2文件系统甚至都不知道那个文件存在!
日志文件系统
- 日志文件系统为Linux系统增加了一层安全性。它不再使用之前先将数据直接写入存储设备再更新索引节点表的做法,而是先将文件的更改写入到临时文件(称作日志,journal)中。在数据成功写到存储设备和索引节点表之后,再删除对应的日志条目。
- 如果系统在数据被写入存储设备之前崩溃或断电了,日志文件系统下次会读取日志文件并处理上次留下的未写入的数据。
三种日志方法
- 数据模式 :索引节点和文件都会被写入日志;丢失数据风险低,但性能差
- 有序模式 :只有索引节点数据会被写入日志,但只有数据成功写入后才删除;在性能和安全性之间取得了良好的折中
- 回写模式 :只有索引节点数据会被写入日志,但不控制文件数据何时写入;丢失数据风险高,但仍比不用日志好
ext3
- 默认情况下,ext3文件系统用有序模式的日志功能——只将索引节点信息写入日志文件,直到数据块都被成功写入存储设备才删除。你可以在创建文件系统时用简单的一个命令行选项将ext3文件系统的日志方法改成数据模式或回写模式。
- 虽然ext3文件系统为Linux文件系统添加了基本的日志功能,但它仍然缺少一些功能。例如ext3文件系统无法恢复误删的文件
- 没有任何内建的数据压缩功能
ext4
支持数据的压缩和加密
xfs文件系统
- XFS文件系统采用回写模式的日志,在提供了高性能的同时也引入了一定的风险,因为实际数据并未存进日志文件。XFS文件系统还允许在线调整文件系统的大小,这点类似于ReiserFS文件系统,除了XFS文件系统只能扩大不能缩小。
软链接与硬链接
作用:
- 链接的作用用于对文件的复用
- 还可以防止文件的误删除
对文件的复用为什么要采用链接,而不采用直接拷贝呢?
答:比如我们某个文件,它在另外一个目录里面也要用到,如果这个文件很大的话,那么他拷贝过去也要占用很多的空间,没有必要对不对?所以这时候我们采用链接的方式。
硬链接的特点:
- 不可以对目录做
- 不可以跨文件系统
- 创建硬连接是不占用block的
- 硬链接与源文件都同时指向同一个block
软链接symbolic link
学习遇到的问题
观察到根目录与/boot目录的inode编号一样,问了老师,这其实并不是bug,是因为我的根目录挂载到了第一个硬盘,而/boot目录挂载到了另外一个硬盘,他们两个硬盘的inode之间是没有关系的,所有有可能出现inode相同的情况。
dumpe2fs
用于查看ext文件系统超级区块信息的命令
dumpe2fs [-bh] 设备文件名