分区与文件系统
对分区进行格式化是为了在分区上建立文件系统。一个分区通常只能格式化为一个文件系统,文件系统一开始就将inode与数据块(block)规划好了,除非重新格式化,否则inode和block固定后就不再变动。
索引节点(Inode)
每个文件和目录在文件系统中都与一个唯一的索引节点相关联。索引节点包含有关文件或目录的详细信息,包括文件的权限、拥有者和用户组、大小、数据块(block)的位置等。
-
唯一标识:
这个标识符用于在文件系统中唯一地识别文件或目录。通过索引节点号(inode number),操作系统可以快速定位文件的元数据。因此,文件系统能够建立的文件数量与inode的数量有关。 -
元数据:
Inode包含了文件或目录的元数据信息,如文件大小、拥有者、权限、创建时间、修改时间、访问时间等。这些信息对于操作系统和文件系统管理器来说非常重要,它们决定了如何访问和操作文件。
-
数据块引用:
索引节点还包含了一个或多个指向数据块的引用。这些引用指示了文件数据存储在哪里。对于小文件,数据可能直接存储在索引节点中(称为直接块引用)。对于大文件,数据块引用将指向磁盘上的数据块。
系统读取文件系统时需要先找到inode,并分析inode所记录的权限与用户是否符合,若符合才能读取区块中的内容。
inode的结构
inode记录区块号码的区域定义为12个直接、一个间接、一个双间接、一个三间接。所谓间接就是再拿一个区块来当作记录区块号码的记录区,如果文件太大就会使用间接的区块来记录编号。
数据块(Block)
数据块是文件系统中的存储单元,用于存储文件的实际内容。
文件数据被划分为多个块,每个块通常有一个固定大小(如1KB、2KB、4KB)。
Inode 中包含指向数据块的指针,这些指针记录了文件数据的位置和组织方式。
大文件可能包含多个数据块,而小文件可能只包含一个或一个中的部分数据块,数据块不能被多文件共用。
在文件系统中,当你读取或写入文件时,系统会使用inode来查找文件的属性,然后使用数据块来读取或写入文件的内容。这个分离的结构允许文件系统高效地管理文件和存储,以及支持各种文件大小和类型。
需要注意的是,不同的文件系统(如ext4、XFS、NTFS等)在inode和数据块的管理方式可能有所不同,但基本原理是相似的。
超级区块(Superblock)
超级区块记是录整个文件系统相关信息的地方,没有超级区块,就没有文件系统。超级区块存在于区块群组中
它记录的信息主要有:
1.block和inode的总量
2.未使用与已使用的block和inode
3.block与inode的大小(block为1、2、4KB,inode为128、256B)
4.文件系统的挂载时间、最近一次写入数据的时间、最近一次检验磁盘的时间等文件系统的相关信息
5.一个有效位的数值,若此文件系统已被挂载,则有效位为0,若未被挂载,则有效位为1
区块群组:磁盘分区后在格式化时,文件系统将分区分为多个区块群组(block group),第一个群组存在超级区块,后面个别的群组可能存在超级区块(用来备份)
文件系统描述
这个区段可以描述每个区块群组的开始与结束的区块,以及说明每个区段(超级区块、对照表、inode对照表、数据区块)分别介于哪一个区块之间。
block对照表和inode对照表
从区块对照表中可以知道哪些区块是空的,因此我们的系统就能够很快速地找到可使用的空间来处理文件。与区块对照表功能类似,inode记录的是使用过与未使用的inode号码
日志式文件系统
我们在新建一个文件时,文件系统的操作是:
1.先确定用户是否拥有该目录的w与x权限,若有才能新建文件
2.根据inode对照表找到没有使用的inode号码,并将新的文件权限和属性写入inode
3.根据block对照表找到没有使用的区块号,并将实际的数据写入区块中,且更新inode的区块指向数据
4.将刚刚写入的inode和block同步更新到inode对照表和block对照表
因为某些原因导致系统中断,会使得最后一个同步更新元数据的步骤并没有完成,此时就会发生元数据的内容与实际数据存放区产生不一致的情况,为避免这种情况,才有了日志文件系统。
分区在和格式化时,文件系统会规划出一个区块,该区块专门记录写入或修改文件时的操作。这样就减少了检验元数据区(超级区块、inode对照表、block对照表)和实际数据存放区一致性的时间。
我们在新建一个文件时,日志式文件系统的操作是:
1.预备:当系统要写入文件时,会先在日志记录区块中记录某个文件准备要写入的信息
2.实际写入:开始写入文件的权限和数据;开始更新元数据(超级区块、inode对照表、block对照表)
3.结束:完成实际数据和元数据的更新后,在日志记录区块当中完成该文件的记录。
异步处理
如果经常编辑一个大的文件,在编辑的过程中有频繁地要系统写入到磁盘中,由于磁盘写入的速度要比内存慢很多。为解决这个效率问题,Linux使用一个称为异步处理的方式。
当系统加载一个文件到内存后,如果该文件没有被修改过,则在内存区段的文件数据会被设置为【干净】。但是如果内存中文件数据被更改过(nano编辑文件),此时该内存中的数据会被设置为【脏的】,此时所有的操作都还是在内存中执行,并没有写入到磁盘中。
磁盘的分区、格式化、检验与挂载
1.对磁盘进行划分,以建立可用的硬盘分区
2.对该硬盘分区进行格式化,以建立系统可用的文件系统
3.建立挂载点(必须是目录),将分区挂载到目录上
查询磁盘信息
1.lsblk列出所有存储设备
Name:设备的文件名,会省略/dev等前导目录
TYPE:磁盘(disk)、分区(part)、只读存储器(rom)
MOUNTPOINT:挂载点
2.blkid列出设备的UUID等参数
UUID是系统全局唯一标识符,Linux会将系统内所有的设备都给予一个独一无二的表示符。
3.parted列出磁盘分区表类型与分区信息
磁盘分区
MBR分区表使用fdisk分区,GPT分区表使用gdisk分区。
磁盘格式化(创建文件系统)
格式化的命令是:makefilesystem,即mkfs。这是一个综合命令。
文件系统检验
1.xfs_repair处理XFS文件系统
2.fsck.ext4处理ext4文件系统
修复时该文件系统不能挂载。但是Linux系统有个设备无法被卸载,那就是根目录。这时就要进入单人维护或恢复模式,然后通过-d这个选项处理。
文件系统的挂载与卸载
磁盘格式化之后,在挂载前需要注意以下几点
1.单一文件系统不能被重复挂载在不同挂载点中
2.单一目录不能重复挂载多个文件系统
3.要作为挂载点的目录,理论上应该都是空目录才行
如果挂载点的目录不是空目录,那么挂载了新的文件系统后,原来目录下的东西就会暂时地消失。当把新的分区卸载之后,挂载点目录下的东西就会再次出现。
挂载:
mount -a
mount -t 文件系统 UUID='' 挂载点
mount -t 文件系统 设备文件名 挂载点
参数:-a :依照配置文件、/etc/fstab的数据将所有未挂载的磁盘都挂载上来
/etc/fstab
设备名或UUID 挂载点 文件系统 文件系统参数 dump fsck
其中UUID可使用blkid查询
卸载:
umount /dev/vda4 用设备文件名来卸载
umount /home/data 用挂载点来卸载