管理文件系统

news/2024/11/29 10:56:47/

章节目录:

    • 一、探索 Linux 文件系统
      • 1.1 Linux 文件系统的演进
      • 1.2 日志文件系统
      • 1.3 卷管理文件系统
    • 二、使用文件系统
      • 2.1 创建分区
      • 2.2 创建文件系统
      • 2.3 文件系统的检查与修复
    • 三、逻辑卷管理
      • 3.1 LVM 布局
      • 3.2 Linux 中的 LVM
      • 3.3 使用 Linux LVM
    • 四、结束语

本章内容:

  • 文件系统基础
  • 日志文件系统与卷管理文件系统
  • 文件系统管理
  • 逻辑卷布局
  • 使用 Linux 逻辑卷管理器

一、探索 Linux 文件系统

Linux 支持多种文件系统。每种文件系统都在存储设备上实现了虚拟目录结构,只是特性略有不同。

1.1 Linux 文件系统的演进

Linux 最初采用的是一种简单的文件系统,模仿了 Unix 文件系统的功能。

1.1.1 ext 文件系统

Linux 操作系统最初引入的文件系统叫作扩展文件系统extended file system,简称 ext )。

  • 它使用虚拟目录处理物理设备并在其中以固定大小的磁盘块( fixed-length block )形式保存数据。
  • ext 文件系统使用 i 节点i node跟踪存储在虚拟目录中文件的相关信息。i 节点系统在每个物理存储设备中创建一个单独的表( 称作 i 节点表 )来保存文件信息
  • 虚拟目录中的每个文件在 i 节点表中有对应的条目。
  • 系统中各自所跟踪的每个文件的额外数据,包括以下内容:
    • 文件名;
    • 文件大小;
    • 文件属主;
    • 文件属组;
    • 文件访问权限;
    • 指向存有文件数据的每个块的指针。
  • Linux 通过一个唯一的数值( 称作 i 节点号 )来引用 i 节点表中的 i 节点,这个值是创建文件时由文件系统分配的。文件系统是通过 i 节点号而非文件名和路径来标识文件

1.1.2 ext2 文件系统

最早的 ext 文件系统限制颇多,比如文件大小不得超过 2 GB。随后 ext 文件系统就升级到了第二代拓展文件系统,称作 ext2 。

  • ext2 在功能上做了拓展
    • 在 i 节点表加入了文件的创建时间、修改时间以及最后一次访问时间。
    • 允许的最大文件大小增至 2 TB,后期又增加到 32 TB。
    • 保存文件时按组分配磁盘块。
  • ext2 文件系统也有限制。如果系统在存储文件和更新 i 节点表之间发生了什么事情,则两者内容可能无法同步。潜在结果是丢失文件在磁盘上的数据位置。ext2 文件系统由于容易在系统崩溃或断电时损坏而臭名昭著。

1.2 日志文件系统

日志文件系统为 Linux 系统增加了一层安全性

  • 它放弃了之前先将数据直接写入存储设备再更新 i 节点表的做法,而是先将文件变更写入临时文件(称作日志)。在数据被成功写到存储设备和 i 节点表之后,再删除对应的日志条目
  • 如果系统在数据被写入存储设备之前崩溃或断电,则日志文件系统会读取日志文件处理未提交的数据
  • Linux 有 3 种广泛使用的日志方法,每种的保护等级都不相同:
方法描述
数据模式i 节点和文件数据都会被写入日志;数据丢失风险低,但性能差。
有序模式只有 i 节点数据会被写入日志,直到文件数据被成功写入后才会将其删除;在性能和安全性之间取得了良好的折中。
回写模式只有 i 节点数据会被写入日志,但不控制文件数据何时写入;数据丢失风险高,但仍好于不用日志。
  • 常见的 Linux 日志文件系统
系统名采用方法特点备注
ext3有序模式(默认)ext2后续版本,支持最大 2 TB的文件,能够管理 32 TB大小的分区。无法恢复误删的文件,也没有提供数据压缩功能。
ext4有序模式(默认)ext3后续版本,最大支持 16 TiB的文件,能够管理 1 EiB大小的分区。支持加密、压缩以及单目录下不限数量的子目录。
JFS有序模式在用的最旧的日志文件系统之一。只在日志中保存 i 节点数据,直到文件数据被写进存储设备后才将其删除。/
XFS回写模式高性能表现。实际数据并未存进日志文件,有一定的风险。

1.3 卷管理文件系统

日志技术,必须在安全性和性能之间做出选择。就文件系统而言,日志技术的替代选择是一种称作写时复制copy-on-write,COW )的技术。COW 通过快照snapshot兼顾了安全性和性能

  • 在修改数据时,使用的是克隆可写快照。修改过的数据并不会直接覆盖当前数据,而是被放入文件系统中的另一个位置。

  • 提示:真正的 COW 系统仅在数据修改完成之后才会改动旧数据如果不覆盖旧数据,那么这种操作准确来说称作写时重定向redirect-on-write,ROW )。不过,通常都将 ROW 简称 COW。

  • 从一个或多个磁盘(或磁盘分区)创建的存储池提供了生成虚拟磁盘(称作)的能力。通过存储池,可以根据需要增加卷,在提供灵活性的同时大大减少停机时间

  • 常见的卷管理特性的文件系统

系统名特点
ZFS拥有数据完整性验证和自动修复功能,支持最大 16 EB的文件,能够管理 256 万亿ZB的存储空间。
Btrfs也称 B-tree 文件系统。稳定易用,能够动态调整已挂载文件系统的大小。
Stratis提供了更多的管理视角。维护的存储池由一个或多个 XFS 文件系统组成,同时还提供与传统的卷管理文件系统相似的 COW 功能。

二、使用文件系统

Linux 提供了一些实用工具,可以轻松地在命令行进行文件系统操作,创建新的文件系统或修改已有的文件系统

2.1 创建分区

首先,需要在存储设备上创建可容纳文件系统的分区。分区范围可以是整个硬盘,也可以是部分硬盘以包含虚拟目录的一部分。

  • 重点关注以下 3 种
    • fdisk
    • gdisk
    • GNU parted
  • 创建磁盘分区最麻烦的地方就是找出 Linux 系统中的物理硬盘。Linux 采用了一种标准格式来为硬盘分配设备名称,在进行分区之前,必须熟悉这种格式。
    • SATA 驱动器SCSI 驱动器:设备命名格式为 /dev/sdx,其中字母 x 具体是什么要根据驱动器的检测顺序决定。
    • SSD NVMe 驱动器:设备名格式为 /dev/nvmeNn#,其中数字 N 具体是什么要根据驱动器的检测顺序决定(从 0 开始)。# 是分配给该驱动器的名称空间编号(从 1 开始)。
    • IDE 驱动器:设备命名格式为 /dev/hdx ,其中字母 x 具体是什么要根据驱动器的检测顺序决定。

2.1.1 fdisk

  • fdisk 可以在任何存储设备上创建和管理分区。但是,fdisk 只能处理最大 2 TB的硬盘。如果大于此容量,则只能使用 gdisk 或 GNU parted 代替。
  • 要启动 fdisk ,需要指定待分区的存储设备的名称,同时还必须有超级用户权限(以 root 用户登录或使用 sudo 命令)。
  • fdisk 常用命令选项
选项描述
-l列出素所有分区表。
-u与 -l 搭配使用,显示分区数目。
  • fdisk 工具操作命令
命令描述
m显示菜单和帮助信息。
a活动分区标记 / 引导分区。
d删除分区。
l显示分区类型。
n新建分区。
p显示分区信息。
q退出不保存。
t设置分区号。
v进行分区检查。
w保存修改。
x扩展应用,高级功能。
  • 应用示例
# 1.显示硬盘各分区情况。
[root@VM-8-11-centos etc]# fdisk -luDisk /dev/vda: 64.4 GB, 64424509440 bytes, 125829120 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x0009ac89Device Boot      Start         End      Blocks   Id  System
/dev/vda1   *        2048   125829086    62913519+  83  Linux

2.1.2 gdisk

  • 如果存储设备要采用 GUID 分区表GUID partition table,GPT ),就要用到 gdisk
  • gdisk 会识别存储设备所采用的分区类型。如果当前未使用 GPT 方法,则 gdisk 会提供相应的选项,将其转换为 GPT。
  • gdisk 工具操作命令(命令与 fdisk 差不多):
命令描述
b将数据备份至文件。
c修改分区名称。
d删除分区。
i显示分区的详细信息。
l显示可用的分区类型。
n添加一个新分区。
o创建一个新的空 GUID 分区表(GPT)。
p显示当前分区表。
q退出,不保存更改。
r恢复和转换选项。
s排序分区。
t修改分区的类型代码。
v验证磁盘。
w将分区表写入磁盘并退出。
x附加功能。
?显示命令菜单。
  • 注意事项:在转换设备分区类型的时候务必小心,所选择的类型必须与系统固件( BIOSUEFI兼容,否则,将无法引导设备。

2.1.3 GNU parted

  • 不同于 fdiskgdisk ,GNU parted 中的命令更像是单词
  • parted 允许调整现有的分区大小,所以可以很容易地收缩或扩大磁盘分区。
  • 应用示例
[root@VM-8-11-centos etc]# parted
Warning: Unable to open /dev/sr0 read-write (Read-only file system).  /dev/sr0 has been opened read-only.
GNU Parted 3.1                                                            
Using /dev/sr0
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) quit  

2.2 创建文件系统

将数据存储到分区之前,必须使用某种文件系统对其进行格式化,以便 Linux 能够使用分区。每种文件系统类型都有自己专门的格式化工具。

  • 创建文件系统的命令行工具
工具用途
mkefs创建 ext 文件系统。
mke2fs创建 ext2 文件系统。
mkfs.ext3创建 ext3 文件系统。
mkfs.ext4创建 ext4 文件系统。
jfs_mkfs创建 JFS 文件系统。
mkfs.xfs创建 XFS 文件系统。
mkfs.zfs创建 ZFS 文件系统。
mkfs.btrfs创建 Btrfs 文件系统
  • 并非所有的文件系统工具都已经默认安装过。要知道某个工具是否可用,可以使用 type 命令。

  • 应用示例

# 1.可用工具。
[root@VM-8-11-centos etc]# type mkfs.ext4
mkfs.ext4 is /usr/sbin/mkfs.ext4
[root@VM-8-11-centos etc]# type mkfs.btrfs
mkfs.btrfs is /usr/sbin/mkfs.btrfs# 2.不可用工具。
[root@VM-8-11-centos etc]# type jfs_mkfs
-bash: type: jfs_mkfs: not found
  • 提示:每个文件系统命令都有大量命令行选项,允许你定制如何在分区上创建文件系统。要查看所有可用的命令行选项,可以使用 man 命令显示相应命令行的手册页。

2.3 文件系统的检查与修复

fsck 命令可以检查和修复大部分 Linux 文件系统类型。

  • 文件系统可以通过多种方法指定,比如设备名或其在虚拟目录中的挂载点。但在对其使用 fsck 之前,必须先卸载设备。(即只能对未挂载的文件系统执行 fsck 命令)
  • fsck 常用命令选项
选项描述
-a如果检查有错则自动修复。
-A检查 /etc/fstab 文件中列出的所有文件系统。
-N不进行检查,只显示要检查的内容。
-r出现错误时进行提示。
-R同时有 -A 条件时,省略 / 不检查。
-t指定要检查的文件系统类型。
-V在检查时产生详细输出。
-y检测到错误时自动修复文件系统。

三、逻辑卷管理

数据只会越来越多。在硬盘的标准分区上创建了文件系统,如果硬盘上没有地方了,就得找一个更大的硬盘,手动将已有的文件系统转移到新硬盘。这多少是一种痛苦的体验。这时候可以将另一块硬盘上的分区加入已有的文件系统来动态地添加存储空间。Linux 逻辑卷管理器logical volume managerLVM )正式用来做这个的。

3.1 LVM 布局

LVM 允许将多个分区组合在一起,作为单个分区(逻辑卷)进行格式化、在 Linux 虚拟目录结构上挂载存储数据等。

  • LVM 由 3 个主要部分组成
    • 物理卷physical volume,PV ):通过 LVM 的 pvcreate 命令创建,指定了一个未使用的磁盘分区(或整个驱动器)由 LVM 使用。在这个过程中,LVM 结构、卷标和元数据都会被添加到该分区。
    • 卷组volume group,VG )通过 LVM 的 vgcreate 命令创建。该命令会将 PV 加入存储池,后者随后用于构建各种逻辑卷;可以存在多个卷组;被指定为 PV 的分区只能属于单个 VG,但是,被指定为 PV 的其他分区可以属于其他 VG。
    • 逻辑卷logical volume,LV ):通过 LVM 的 lvcreate 命令创建。LV 由 VG 的存储空间块组成。LV 只能从一个指定的 VG 中创建。不过,多个 LV 可以共享单个 VG。

3.2 Linux 中的 LVM

lvm 是用于创建和管理 LV 的交互式实用工具。如果尚未安装,可以通过 lvm2 (这里2是指版本号)软件包安装。各种 LVM 工具直接在 CLI 中就可以使用,无须进入 lvm

  • 首次设置逻辑卷的步骤如下
    • 创建物理卷;
    • 创建卷组;
    • 创建逻辑卷;
    • 格式化逻辑卷;
    • 挂载逻辑卷。
  1. 创建物理卷(PV):
  • 指定作为 PV 的存储设备之前,先确保已经分区且未使用。可以使用 pvcreate 命令指定要作为 PV 的分区,执行该命令需要有超级用户权限。
  • 应用示例
# 1.当前执行操作的用户。
[root@VM-8-11-centos etc]# whoami
root# 2.列出所有可用块设备信息。
[root@VM-8-11-centos etc]# lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sr0     11:0    1 159.1M  0 rom  
vda    253:0    0    60G  0 disk 
└─vda1 253:1    0    60G  0 part /# 3.设置PV。
[root@VM-8-11-centos etc]# pvcreate /dev/vda1
...
  1. 创建卷组(VG)
  • 只要是 PV ,就可以加入 VG。创建 VG 的命令是 vgcreate ,如果随后需要向 VG 中添加 PV,可以使用 vgextend 命令。
  • 应用示例
# 1.检查系统当前的 VG。
[root@VM-8-11-centos etc]# vgdisplay# 2.创建 VG。(`vg00`为命名)
[root@VM-8-11-centos etc]# vgcreate vg00 /dev/vda1
  1. 创建逻辑卷(LV)
  • 可以使用 lvcreate 命令创建 LV,大小由 -L 选项设置,使用的空间取自指定的 VG 存储池。
  • 应用示例
# 1.创建 LV。
[root@VM-8-11-centos etc]# lvcreate -L 1g -v vg00# 2.以下三种命令都可以显示系统 LV信息。
[root@VM-8-11-centos etc]# lvs
[root@VM-8-11-centos etc]# lvdisplay
[root@VM-8-11-centos etc]# lvscan

3.3 使用 Linux LVM

一旦创建好 LV,就可以将其视作普通分区。你可以根据需要,扩大或收缩这个分区,但在此之前,必须将 LV 挂载到虚拟目录结构中

  1. 格式化和挂载逻辑卷(LV)
  • 对于 LV ,无须执行任何特殊操作就可以在其上创建文件系统,然后再挂载到虚拟目录结构中。

  • 应用示例

# 1.创建ext4文件系统。(这里的`LVname`是上一步创建 LV 时得到的)
[root@VM-8-11-centos etc]# mkfs.ext4 /dev/vg00/LVname# 2.挂载虚拟目录。
[root@VM-8-11-centos etc]# mkdir my_LV
[root@VM-8-11-centos etc]# mount -t ext4 /dev/vg00/LVname my_LV# 3.查看虚拟目录。
[root@VM-8-11-centos etc]# ls my_LV
  1. 扩大或收缩卷组(VG)和逻辑卷(LV)
  • 命令
命令功能
vgextend将 PV 加入 VG。
vgreduce从 VG 中删除 PV。
lvextend扩大 LV 的容量。
lvreduce收缩 LV 的容量。
  • 提示:想要了解所有的 LVM 命令,可以在命令行中输入lvm help

四、结束语


“-------怕什么真理无穷,进一寸有一寸的欢喜。”

微信公众号搜索:饺子泡牛奶


http://www.ppmy.cn/news/95997.html

相关文章

【技术分享】万字长文图文并茂读懂高性能无锁 “B-Tree 改”:Bw-Tree

【技术分享】万字长文图文并茂读懂高性能无锁 “B-Tree 改”:Bw-Tree 原文链接: https://mp.weixin.qq.com/s/I5TphQP__tHn6JoPcP–_w 参考文献可能需要科学上网才能下载。如果你获取不到这几篇论文,可以关注公众号 IT技术小密圈 回复 bw-tre…

/dev/kmem /proc/kallsyms

文章目录 前言概述使用 /dev/kmem使用 /proc/kallsyms验证进阶 前言 上篇文章我们介绍了 /dev/mem,今天再来介绍下它的好兄弟 /dev/kmem crw-r----- 1 root kmem 1, 1 May 26 06:10 /dev/mem crw-r----- 1 root kmem 1, 2 May 26 06:10 /dev/kmem对比一下&#xf…

【数据分类】PNN数据分类 概率神经网络数据分类【Matlab代码#31】

文章目录 【可更换其他算法,获取资源请见文章第6节:资源获取】1. 模式识别之数据分类2. 概率神经网络(PNN)3. 基于PNN的数据分类步骤4. 部分代码展示5. 仿真结果展示6. 资源获取说明 【可更换其他算法,获取资源请见文章…

【Linux】驱动学习,先啃框架

目录 前言: 一、驱动设计 (1)面向对象: (2)分层: (3)分离: 二、驱动框架 (1)传统框架 (2)总线设备驱…

【C++项目】负载均衡oj

前言: 本篇记录负载均衡oj项目设计的整体思路和部分代码。 负载均衡oj项目基于http网络请求,通过简单的前后端交互:前端的页面编辑已经提交代码,后端控制模块和编译运行的模块分离整合(负载均衡式的选择后端编译运行服…

FlashAlgo 算法python实现

离线编程器: 1、首先,既然是SWD编程器,那首先当然是要实现SWD时序协议了 由于单片机都没有SWD外设,所以只能用GPIO模拟实现SWD时序,,这部分功能已经由ARM公司的CMSIS-DAP代码实现 2、然后就是基于CMSIS-DAP…

记录一个因变量遮蔽引起的“友尽”级bug

之前在翻译学习EOPL过程中回顾以前的代码时发现一个让人后背发凉的隐患,一种极其罕见、但是一旦出现就难以发现并可能造成非常大影响的bug,本文就记录下这个问题。 问题场景 下面来看一段常见的示例程序: public class DemoActivity exten…

Notion——构建个人知识库

前言 使用Notion快三年了,它All in one的理念在使用以后确实深有体会,一直想找一个契机将这个软件分享给大家,这款笔记软件在网上已经有很多的教程了,所以在这里我主要想分享框架方面的内容给大家,特别对于学生党、研究…