Linux 命令行与 shell 脚本编程大全’s 读书笔记

Linux 命令行与 shell 脚本编程大全 8 管理文件系统

2019-12-12  本文已影响0人  asing1elife

了解 Linux 中不同的文件系统如何创建和使用

更多精彩

8.1 探索 Linux 文件系统

8.1.1 基本的 Linux 文件系统

  1. 下图对 Linux 官方直接支持的 ext 系列文件系统做了一个简单的梳理

8.1.1.1 ext 文件系统

  1. ext 就是 Linux 最早引入的文件系统的简称,全称被叫做 扩展文件系统( Extended File System )
  2. 第一代 ext 文件系统为 Linux 提供了一个基本的类 Unix 文件系统
  3. 使用 虚拟木兰路操作硬件设备,在物理设备上按定长的块来存储数据
  4. 使用 索引节点表 来存储文件信息
    • 存储在虚拟目录的每个文件在 索引节点表 中都有一个条目,有一个唯一的 索引节点号
  5. 存在不少缺陷,如下
    • 存储的文件大小不能超过 2GB
    • 存储的数据碎片化严重(存储数据的块分散在整个设备中),碎片化会降低文件系统的性能
    • 当需要查找某个文件时,就需要花更多的时间在整个设备中检索

8.1.1.2 ext2 文件系统

  1. 顾名思义,对 ext 的升级扩展
  2. 基础结构与 ext 一致,但扩展了 索引节点表 中存储的信息,可以为每个文件存储更多信息
  3. 一开始允许存储的文件大小就达到 2TB ,远超过 ext 的 2GB ,后期更是增到到 32TB
  4. 采用 按组分配磁盘块 来减少碎片化,同一个文件的数据块都会在一个组中,读取文件时就不需要四处找寻该文件的数据块
  5. 存在一个致命缺陷,如下
    • 由于在 索引节点表 中为每个文件存储了更多的文件信息,每次文件更新时,都需要更新 索引节点表 中对应的信息
    • 频繁的更新操作就会增加系统出问题的几率,例如在更新时突然系统崩溃或断电,会导致 索引节点表存储的数据和系统中真实存在的数据信息不一致

8.1.2 日志文件系统

  1. 日志文件系统 极大的增加了 Linux 的安全性
  2. 最直观的改变就是不再像之前那样:数据写入设备后,再更新索引节点表
  3. 而是将数据的更改记录在日志中,当数据成功写入设备并且更新了 索引节点表 后,再删除对应的日志记录
    • 这么做的好处在于:如果系统在数据写入过程中发生问题,日志文件系统 再次启动时,会优先读取日志文件,将上次遗留的操作处理完毕
  4. Linux 中有以下三种记录日志的方式


8.1.2.1 ext3 文件系统

  1. 顾名思义,对 ext2 的升级扩展
  2. 在 2001 年被引入 Linux 内核,成为 Linux 默认的文件系统
  3. 基础结构和 ext2 一致,也是使用 索引节点表 记录系统数据,但在数据和 索引节点表 之间增加了日志文件,用于防止数据丢失
  4. 默认情况下,使用 有序模式 记录日志,但可以通过命令改成 回写模式
  5. 存在一些缺陷,如下
    • 无法恢复误删的文件
    • 没有任何内建的数据压缩功能
    • 不支持加密文件

8.1.2.2 ext4 文件系统

  1. 顾名思义,对 ext3 的升级扩展
  2. 在 2008 年被引入 Linux 内核,成为 Linux 默认的文件系统
  3. 针对 ext3 的一些缺陷做了定向优化,支持数据压缩和加密
  4. 在从 ext2 就引入的 按组分配磁盘块 的功能上,增加了 区段 的特性
    • 依旧会按组队数据库进行存储,但是在 索引节点表 中不再保存完整信息
    • 而是只保存数据起始的位置,可以节省一些空间
  5. 引入了 块预分配技术( Block Preallocation )
    • 如果提前确定某个文件会需要更大的空间,可以提前将这些空间赋予该文件,防止文件真的增长时而空间不足

8.1.2.3 Reiser 文件系统

  1. 在 2001 年由 Hans Reiser 创建
  2. 采用 ReiserFS 文件系统,只支持回写模式
  3. 有两个显著特点,如下
    • 支持在线调整文件系统的大小
    • 支持尾部压缩( Tail Packing )

8.1.2.4 JFS 文件系统

  1. 全称日志化文件系统( Journaled File System )
  2. 在 1990 年由 IBM 为 Unix 开发,到第二个版本的时候,被移植到 Linux 中
  3. 采用有序模式记录日志
  4. 采用和 ext4 一样的区段文件分配方式

8.1.2.5 XFS 文件系统

  1. 在 1994 年由 SGI 为 Unix 开发,在 2002 年被移植到 Linux 中
  2. 采用回写模式记录日志
  3. 也允许在线调整文件系统的空间,但只能扩大不能缩小

8.1.3 写时复制文件系统

  1. 传统的日志文件系统虽然提升了 Linux 的安全性,但由于索引节点和数据都需要被日志化,必然会影响系统的性能
  2. 写时复制( Copy On Write ,COW ) 技术利用 快照 兼顾了系统的安全性和性能
  3. 如果数据发生变化,不会直接覆盖当前数据,而是通过克隆或快照将当前变化放置到系统中的另一个位置

8.1.3.1 ZFS 文件系统

  1. 在 2005 年由 Sun 为 OpenSolaris 开发,在 2008 年开始一直,一直到 2012 年才移植成功
  2. 功能强大且稳定,但没有使用 GPL 许可,这也导致其无法成为 Linux 默认的文件系统

8.1.3.2 Btrf 文件系统

  1. 也被成为 B 树文件系统
  2. 在 2007 年由 Oracle 开发

8.2 操作文件系统

  1. 关于创建分区的命令只会列举一下,不会做太多演示
  2. 因为我认为这不是我准备学习的重点

8.2.1 fdisk 命令创建分区

  1. 使用 fdisk diskName 命令可以对安装在系统上的任何存储设备做分区
  2. 只有 root 用户可以使用该命令
  3. 通过磁盘的名称还可以判断磁盘的类型,如下
    • /dev/hdx 表示磁盘是普通的 IDE 驱动器
    • /dev/sdx 表示磁盘是 SATA 或 SCSI 驱动器
  4. 分区可以分为 主分区( Primary Partition )扩展分区( Extended Partition )
    • 主分区是系统分区,可以被文件系统直接格式化
    • 而扩展分区用于容纳 逻辑分区( Logical Partition ) ,也就是存放数据
    • 扩展分区存在的意义在于,每个存储设备只能有 4 个分区,通过在扩展分区中创建多个逻辑分区,可以对系统的分区进行多次细化
  5. 有些 Linux 版本在对系统进行分区后并不会及时生效,需要重启系统才行

8.2.2 创建文件系统

  1. 对存储设备进行分区后,还需要使用某个文件系统对分区进行格式化,这之后这个设备才能被 Linux 使用
  2. Linux 支持使用以下命令对分区进行指定文件系统的格式化,如下图


  3. 使用 type commandName 命令可以查看上述命令在当前系统中是否被支持,如下图
    • 使用 type jfs_mkfs 命令得到的结果就是命令没有找到,说明当前系统不支持创建 JFS 文件系统
  4. 为分区创建文件系统之后,只需要将其挂载到虚拟目录的某个挂载点,Linux 就可以正常将数据存储到该文件系统中了

8.2.3 使用 fsck 命令进行文件系统的检查与修复

  1. 使用 fsck 命令能够检查和修复大部分类型的 Linux 文件系统
  2. 只能在没有挂载的文件系统上使用 fsck 命令,所以在使用 fsck 命令之前通常需要先卸载待检修的文件系统

8.3 逻辑卷管理

  1. Linux 中的 逻辑卷管理器( Logical Volume Manager ,LVM ) 可以用于将另一个硬盘的分区加入已存在的文件系统,从而实现对该文件系统扩容的功能

8.3.1 逻辑卷管理布局

  1. 逻辑卷管理的核心在于如何处理安装在系统上的硬盘分区
  2. 从逻辑卷管理的角度来看,硬盘就是物理卷( Physical Volume ,PV ),每个物理卷都会被映射到硬盘上特定的物理分区
  3. 卷组( Volume Group ,VG ) 就是多个物理卷集中在一起
  4. 从逻辑卷管理的角度来看,一个物理硬盘就是一个卷组
    • 但实际上卷组中的物理卷可能分布在当前系统的多个物理硬盘中

8.3.2 Linux 中的 LVM

  1. Linux 的 LVM 目前有两个版本,如下
    • LVM1 在 1998 年发布,只能用于 Linux 内核的 2.4 版本,只提供最基础的功能
    • LVM2 可用于 Linux 内核的 2.6 版本,在 LVM1 的基础上升级了不少功能,目前更高版本的 Linux 内核也是用 LVM2

8.3.2.1 快照

  1. 快照 就是在线将逻辑卷的内容复制到另一个设备
  2. 快照其实就是备份,在系统还在使用时对系统数据进行备份
  3. LVM1 只能创建一个快照,并且无法修改
  4. LVM2 允许创建可读写的快照

8.3.2.2 条带化

  1. LVM2 支持 条带化( Striping )
  2. 可以实现创建逻辑卷时,跨越多个物理硬盘,因为 LVM 可以同时从多个硬盘读取数据,所以这样就增加了文件的处理速度

8.3.2.3 镜像

  1. 镜像就像是快照的升级版,是一个 实时更新的逻辑卷完整副本
  2. 镜像的内容会和被镜像的逻辑卷保持完全一致
  3. 因为是实时更新,所以必定会影响到性能,但这至少保证了系统的完整性

8.3.3 使用 Linux LVM

8.3.3.1 使用 fdisk 命令定义物理卷

  1. 使用 fdisk 命令为设备创建分区后,还可以使用该命令继续定义物理卷

8.3.3.2 使用 vgcreate 命令创建卷组

  1. 使用 vgcreate 命令可以创建卷组
  2. 使用 vgdisplay 命令可以查看创建的卷组细节

8.3.3.3 使用 lvcreate 命令创建逻辑卷

  1. 使用 lvcreate 命令可以创建逻辑卷

8.3.3.4 创建文件系统

  1. 8.2.2 创建文件系统 中已经有相应描述

8.3.3.5 修改 LVM

  1. LVM 中除了支持以上几个功能外,还支持以下几个常见命令,如下图


8.4 小结

  1. fdisk 命令可以对设备进行分区以及定义物理卷
  2. 本章节的一些需要操作硬盘进行分区的命令,基本上都没有实操
  3. 本章节记录的目的主要是为了笔记完整性以及了解相关功能
上一篇下一篇

猜你喜欢

热点阅读