Linux 命令行与 shell 脚本编程大全 8 管理文件系统
2019-12-12 本文已影响0人
asing1elife
了解 Linux 中不同的文件系统如何创建和使用
更多精彩
- 更多技术博客,请移步 IT人才终生实训与职业进阶平台 - 实训在线
8.1 探索 Linux 文件系统
8.1.1 基本的 Linux 文件系统
- 下图对 Linux 官方直接支持的 ext 系列文件系统做了一个简单的梳理
8.1.1.1 ext 文件系统
- ext 就是 Linux 最早引入的文件系统的简称,全称被叫做 扩展文件系统( Extended File System )
- 第一代 ext 文件系统为 Linux 提供了一个基本的类 Unix 文件系统
- 使用 虚拟木兰路操作硬件设备,在物理设备上按定长的块来存储数据
- 使用 索引节点表 来存储文件信息
- 存储在虚拟目录的每个文件在 索引节点表 中都有一个条目,有一个唯一的 索引节点号
- 存在不少缺陷,如下
- 存储的文件大小不能超过 2GB
- 存储的数据碎片化严重(存储数据的块分散在整个设备中),碎片化会降低文件系统的性能
- 当需要查找某个文件时,就需要花更多的时间在整个设备中检索
8.1.1.2 ext2 文件系统
- 顾名思义,对 ext 的升级扩展
- 基础结构与 ext 一致,但扩展了 索引节点表 中存储的信息,可以为每个文件存储更多信息
- 一开始允许存储的文件大小就达到 2TB ,远超过 ext 的 2GB ,后期更是增到到 32TB
- 采用 按组分配磁盘块 来减少碎片化,同一个文件的数据块都会在一个组中,读取文件时就不需要四处找寻该文件的数据块
- 存在一个致命缺陷,如下
- 由于在 索引节点表 中为每个文件存储了更多的文件信息,每次文件更新时,都需要更新 索引节点表 中对应的信息
- 频繁的更新操作就会增加系统出问题的几率,例如在更新时突然系统崩溃或断电,会导致 索引节点表存储的数据和系统中真实存在的数据信息不一致
8.1.2 日志文件系统
- 日志文件系统 极大的增加了 Linux 的安全性
- 最直观的改变就是不再像之前那样:数据写入设备后,再更新索引节点表
- 而是将数据的更改记录在日志中,当数据成功写入设备并且更新了 索引节点表 后,再删除对应的日志记录
- 这么做的好处在于:如果系统在数据写入过程中发生问题,日志文件系统 再次启动时,会优先读取日志文件,将上次遗留的操作处理完毕
-
Linux 中有以下三种记录日志的方式
8.1.2.1 ext3 文件系统
- 顾名思义,对 ext2 的升级扩展
- 在 2001 年被引入 Linux 内核,成为 Linux 默认的文件系统
- 基础结构和 ext2 一致,也是使用 索引节点表 记录系统数据,但在数据和 索引节点表 之间增加了日志文件,用于防止数据丢失
- 默认情况下,使用 有序模式 记录日志,但可以通过命令改成 回写模式
- 存在一些缺陷,如下
- 无法恢复误删的文件
- 没有任何内建的数据压缩功能
- 不支持加密文件
8.1.2.2 ext4 文件系统
- 顾名思义,对 ext3 的升级扩展
- 在 2008 年被引入 Linux 内核,成为 Linux 默认的文件系统
- 针对 ext3 的一些缺陷做了定向优化,支持数据压缩和加密
- 在从 ext2 就引入的 按组分配磁盘块 的功能上,增加了 区段 的特性
- 依旧会按组队数据库进行存储,但是在 索引节点表 中不再保存完整信息
- 而是只保存数据起始的位置,可以节省一些空间
- 引入了 块预分配技术( Block Preallocation )
- 如果提前确定某个文件会需要更大的空间,可以提前将这些空间赋予该文件,防止文件真的增长时而空间不足
8.1.2.3 Reiser 文件系统
- 在 2001 年由 Hans Reiser 创建
- 采用 ReiserFS 文件系统,只支持回写模式
- 有两个显著特点,如下
- 支持在线调整文件系统的大小
- 支持尾部压缩( Tail Packing )
8.1.2.4 JFS 文件系统
- 全称日志化文件系统( Journaled File System )
- 在 1990 年由 IBM 为 Unix 开发,到第二个版本的时候,被移植到 Linux 中
- 采用有序模式记录日志
- 采用和 ext4 一样的区段文件分配方式
8.1.2.5 XFS 文件系统
- 在 1994 年由 SGI 为 Unix 开发,在 2002 年被移植到 Linux 中
- 采用回写模式记录日志
- 也允许在线调整文件系统的空间,但只能扩大不能缩小
8.1.3 写时复制文件系统
- 传统的日志文件系统虽然提升了 Linux 的安全性,但由于索引节点和数据都需要被日志化,必然会影响系统的性能
- 写时复制( Copy On Write ,COW ) 技术利用 快照 兼顾了系统的安全性和性能
- 如果数据发生变化,不会直接覆盖当前数据,而是通过克隆或快照将当前变化放置到系统中的另一个位置
8.1.3.1 ZFS 文件系统
- 在 2005 年由 Sun 为 OpenSolaris 开发,在 2008 年开始一直,一直到 2012 年才移植成功
- 功能强大且稳定,但没有使用 GPL 许可,这也导致其无法成为 Linux 默认的文件系统
8.1.3.2 Btrf 文件系统
- 也被成为 B 树文件系统
- 在 2007 年由 Oracle 开发
8.2 操作文件系统
- 关于创建分区的命令只会列举一下,不会做太多演示
- 因为我认为这不是我准备学习的重点
8.2.1 fdisk 命令创建分区
- 使用
fdisk diskName
命令可以对安装在系统上的任何存储设备做分区 - 只有 root 用户可以使用该命令
- 通过磁盘的名称还可以判断磁盘的类型,如下
-
/dev/hdx
表示磁盘是普通的 IDE 驱动器 -
/dev/sdx
表示磁盘是 SATA 或 SCSI 驱动器
-
- 分区可以分为 主分区( Primary Partition ) 和 扩展分区( Extended Partition )
- 主分区是系统分区,可以被文件系统直接格式化
- 而扩展分区用于容纳 逻辑分区( Logical Partition ) ,也就是存放数据
- 扩展分区存在的意义在于,每个存储设备只能有 4 个分区,通过在扩展分区中创建多个逻辑分区,可以对系统的分区进行多次细化
- 有些 Linux 版本在对系统进行分区后并不会及时生效,需要重启系统才行
8.2.2 创建文件系统
- 对存储设备进行分区后,还需要使用某个文件系统对分区进行格式化,这之后这个设备才能被 Linux 使用
-
Linux 支持使用以下命令对分区进行指定文件系统的格式化,如下图
- 使用
type commandName
命令可以查看上述命令在当前系统中是否被支持,如下图- 使用
type jfs_mkfs
命令得到的结果就是命令没有找到,说明当前系统不支持创建 JFS 文件系统
- 使用
- 为分区创建文件系统之后,只需要将其挂载到虚拟目录的某个挂载点,Linux 就可以正常将数据存储到该文件系统中了
8.2.3 使用 fsck 命令进行文件系统的检查与修复
- 使用
fsck
命令能够检查和修复大部分类型的 Linux 文件系统 - 只能在没有挂载的文件系统上使用
fsck
命令,所以在使用fsck
命令之前通常需要先卸载待检修的文件系统
8.3 逻辑卷管理
- Linux 中的 逻辑卷管理器( Logical Volume Manager ,LVM ) 可以用于将另一个硬盘的分区加入已存在的文件系统,从而实现对该文件系统扩容的功能
8.3.1 逻辑卷管理布局
- 逻辑卷管理的核心在于如何处理安装在系统上的硬盘分区
- 从逻辑卷管理的角度来看,硬盘就是物理卷( Physical Volume ,PV ),每个物理卷都会被映射到硬盘上特定的物理分区
- 卷组( Volume Group ,VG ) 就是多个物理卷集中在一起
- 从逻辑卷管理的角度来看,一个物理硬盘就是一个卷组
- 但实际上卷组中的物理卷可能分布在当前系统的多个物理硬盘中
8.3.2 Linux 中的 LVM
- Linux 的 LVM 目前有两个版本,如下
- LVM1 在 1998 年发布,只能用于 Linux 内核的 2.4 版本,只提供最基础的功能
- LVM2 可用于 Linux 内核的 2.6 版本,在 LVM1 的基础上升级了不少功能,目前更高版本的 Linux 内核也是用 LVM2
8.3.2.1 快照
- 快照 就是在线将逻辑卷的内容复制到另一个设备
- 快照其实就是备份,在系统还在使用时对系统数据进行备份
- LVM1 只能创建一个快照,并且无法修改
- LVM2 允许创建可读写的快照
8.3.2.2 条带化
- LVM2 支持 条带化( Striping )
- 可以实现创建逻辑卷时,跨越多个物理硬盘,因为 LVM 可以同时从多个硬盘读取数据,所以这样就增加了文件的处理速度
8.3.2.3 镜像
- 镜像就像是快照的升级版,是一个 实时更新的逻辑卷完整副本
- 镜像的内容会和被镜像的逻辑卷保持完全一致
- 因为是实时更新,所以必定会影响到性能,但这至少保证了系统的完整性
8.3.3 使用 Linux LVM
8.3.3.1 使用 fdisk 命令定义物理卷
- 使用
fdisk
命令为设备创建分区后,还可以使用该命令继续定义物理卷
8.3.3.2 使用 vgcreate 命令创建卷组
- 使用
vgcreate
命令可以创建卷组 - 使用
vgdisplay
命令可以查看创建的卷组细节
8.3.3.3 使用 lvcreate 命令创建逻辑卷
- 使用
lvcreate
命令可以创建逻辑卷
8.3.3.4 创建文件系统
- 在 8.2.2 创建文件系统 中已经有相应描述
8.3.3.5 修改 LVM
-
LVM 中除了支持以上几个功能外,还支持以下几个常见命令,如下图
8.4 小结
-
fdisk
命令可以对设备进行分区以及定义物理卷 - 本章节的一些需要操作硬盘进行分区的命令,基本上都没有实操
- 本章节记录的目的主要是为了笔记完整性以及了解相关功能