linux私房菜笔记 - 第七章 - Linux磁盘与文件系统管理

7.1认识Linux文件系统

重点:inode、block(数据区块)、superblock(超级区块)

7.7.1 磁盘组成与分区的复习

磁盘结构

磁盘结构

GPT与MBR
区别

  1. MBR早,GPT晚
  2. MBR最多支持2T ,GPT支持大于2T的总容量及大于2T的分区,并且几乎没有上限,最大支持到128个分区,分区大小支持到256TB。
  3. MBR第一扇区(512 byte)有主引导记录(MBR 446 byte)和分区表(64byte)。分区表记录如何分区,分为主要分区扩展分区(最多一个)与逻辑分区,如果超过4个需要用逻辑分区,分区信息记录在每个分区最前面。
    GPT兼容MBR并且支持UEFI,每个分区都有自己的启动扇区。
MBR 使用4个主要分区
MBR 使用1个主要分区1个扩展分区
GPT 与 UEFI

磁盘以文件表示
linux中设备都以文件形式在/dev中表示,如磁盘为/dev/sd[a-p物理][1-128分区]

7.1.2 文件系统特性

  • Linux与Windows文件系统不一样,默认情况下不通用
  • 一个可挂载的数据是一个文件系统(并非一个分区)
  • 超级区块: inode与数据区块总量 使用量 剩余量 数据区块与inode大小 文件系统有关信息,一个文件系统中只有一个
  • BlockGroup: 区块的集合,文件系统的部分
  • inode(index node):文件属性 用户组 时间 数据区块号码 本质上是在某些区块中存索引 固定大小 一个文件(包括目录)一个inode
  • 数据区块:文件内容
  • 存索引的inode类文件系统一般不需要碎片整理 fat会因为存的文件离散需要碎片整理
inode

fat

7.1.3 Linux的ex2文件系统(inode)

文件系统:boot+group+group...
group: inode信息 数据


ext2与各块含义

限制:

  • 区块数量大小格式化后不能再修改
  • 每个区块最多一个文件(浪费容量)

缺点:
区块大:小文件多浪费空间
区块小:inode多读写性能差

记录一个区块指针需要4B,一个inode包含12个直接、1个间接、1个双间接、1个三间接,所以1K区块下一个文件最大12+256+256256+256256*256个数据区块共16G

inode如何存储区块指针

如何查看这些信息

sudo blkid 查询目前被系统格式化的数据
dumpe2fs [-bh] 设备文件名 (在ext系统下)
xfs_info 挂载点或设备文件名 (在xfs文件系统下)

输出:超级区块信息+区块群组信息

7.1.4与目录树的关系

  • 4KB区块存100K,需要26个Block,因为还有一个存多的inode
  • inode本身不记录文件名,所以需要逐层进入目录,并读取下一层的inode(内含权限)
  • 文件系统用久了可以复制出所有文件格式化再复制回去,使得数据连续,提高读写性能

7.1.5 ext2/ext3/ext4 文件的存取与日志式文件系统的功能

  1. 读所在目录inode中记载的是否有w权限,如有
  2. 根据inode对照表找未使用的inode,将新文件的权限属性写入
  3. 根据区块对照表找未使用的区块,将数据写入,更新inode指向数据
  4. 同步更新inode与数据到各自对照表

  1. 根据inode查看是否有x权限
  2. 查看下一层inode,继续检查权限
  3. 如有权限,打开文件或进入下一层目录

数据不一致

  • 原因:断电等
  • ext2: 数据检查
  • ext3、ext4:Journal日志(预备、实际写入、结束三个阶段),检查日志出问题的文件而不用检查全盘

7.1.6 Linux文件系统的运行

异步处理
修改时将文件读入内存标记为clean,修改后标记为dirty但并不立即写入硬盘,需要调用sync。
不正常关机时会导致磁盘校验。

7.1.7 挂载点的意义(mount point)

文件系统与目录树
挂载:文件系统与目录树结合,比如将/挂载到/dev/sda1这个设备
相同文件系统类型的不同文件系统目录树根的inode相同,不同文件系统内文件inode值可能重复,同一个文件系统inode与文件一一对应。

7.1.8 其他Linux支持的文件系统与VFS

Linux支持多种文件系统,包括传统、日志、网络的,以下命令可以查询。

ls -l /lib/modules/$(uname -r)/kernel/fs # 系统支持的
cat /proc/filesystems # 加载到内存中的

VFS(Virtual Filesystem Switch)是位于内核层系统调用,帮助处理读取不同文件系统

7.1.9 XFS文件系统简介

ext4不好:预先分配所有inode,格式化慢,不适合大容量磁盘
XFS好:适合大容量磁盘和巨型文件
lsattrchattr可以更改隐藏属性,但是xfs不支持部分隐藏属性
xfs分为数据区(data section)、文件系统活动登录区(log section)、实时运行区(realtime section)

数据区
同ext,分为超级区块、剩余空间的管理、inode分配与追踪。但是inode动态分配,格式化快。且数据块(4K以上内核不给挂载)与inode大小(256B-2M)可以自定义。

文件系统活动登录区
类似日志区,所有文件变化在此记录,当完全被写入记录才被删除,用于校验。可指定外部磁盘作为该区。

实时运行区
先在该区段中寻找数个extent区块,将文件放到这些区块中,等分配完了再写入数据区中的inode与区块中。

xfs文件系统查看信息

df -T 路径 #查询路径文件系统,具体见7.2
xfs_info 挂载点|设备文件名 #查看超级区块记录

注意点:如果对/boot使用,可以看到/dev/sda2指向某个物理设备,但是对/使用,可以看到指向/dev/mapper/centos-root。这是因为在安装系统时候,设备分区使用了LVM而非标准分区,linux为你自动创建的空间池,用多少取多少。

ypeng@study:~ $ ll /dev/mapper/centos-root 
lrwxrwxrwx. 1 root root 7 3月  28 11:59 /dev/mapper/centos-root -> ../dm-0

含有inode大小、个数、总数、区块大小、数量、与阵列stripe有关的信息

7.2 文件系统的简单操作

df

df [-ahikHTm]
-a : 列出**所有**文件系统
-h : 容量自动单位换算
-i : 显示inode数量不显示磁盘容量
-T : 显示所在硬盘分区的文件系统

/proc中1kblock,used,free都是0,因为这个目录挂载在内存中
/dev/shm/是用内存虚拟出的磁盘空间

不知道某个目录/文件所在挂载点,还想知道这个分区还能存多少东西?

df [目录名|挂载点名]

du

du [-ahskm]
-s : 列出仅当前目录
不加参数:列出当前目录和所有**目录**
-a : 列出目录和文件
-S : 不统计子目录中的文件

7.2.2 硬链接与符号链接

硬链接

  • 在访问目录中文件时,查到目录的inode之后找目录的数据目录的数据存的文件名->inode。硬链接只是加了一条文件名->inode,并没有产生新的文件。
  • 硬链接权限属性完全一样。
  • 既不增加inode数,也不减少inode数
  • 可以通过任何一个文件名写入,删除一个文件名inode和区块还在
  • 不能跨文件系统(inode重复)
  • 不能链接目录(需迭代进行,复杂度高,不支持,但是...目录例外,每新建一个目录其链接数为2,包括其自身和.,其父目录链接数+1,由于..
    硬链接的读取
ln 建立硬链接

符号链接

ln -s
  • 等同于Windows快捷方式
  • 可以链接目录
  • 源文件删除后符号链接打不开


    符号链接的读取

磁盘的分区、格式化、检验与挂载

流程: 分区->格式化->检验(可选)->挂载(Linux特色)

7.3.1 观察磁盘分区状态

lsblk [-dfimpt] [设备名] #列出磁盘分区 [设备名]只可以输入disk,不能输入分区

查看UUID(全局唯一标识符):lsblk-fblkid

parted 设备文件 print #列出磁盘分区信息

磁盘分区:gdisk(GPT)/fdisk(MBR)

分区流程:lsblkblkid查看分区->gdiskfdisk根据提示操作
区块与扇区:区块针对文件系统而言,扇区针对物理硬盘而言
不要处理正在活动的分区(已挂载的分区),linux将不能更新分区表
添加分区默认按序号给分区编号,且默认开始扇区从第一个未被占用的扇区开始。

7.3.3 磁盘格式化(创建文件系统)

功能:使用文件系统格式化软件格式化磁盘分区。
命令:mkfs.xfs mkfs.ext4 mkfs

mkfs.xfs -b 区块容量 -d 有关datasection的数值 -f 分区内已经有文件系统强制执行
 -i inode数值Log内置或者放到其他设备等,-r 与实时区有关
mkfs.ext4 [-b 区块大小] [-L 设备名称]

你可能感兴趣的:(linux私房菜笔记 - 第七章 - Linux磁盘与文件系统管理)