Linux 支持多种文件系统。每种文件系统都在存储设备上实现了虚拟目录结构,只是特性略有不同。
Linux 操作系统最初引入的文件系统叫作扩展文件系统(extended filesystem,简称 ext),它为 Linux 提供了一个基本的类 Unix 文件系统,使用虚拟目录处理物理存储设备并在其中以固定大小的磁盘块(fixed-length block)形式保存数据。
ext 文件系统使用i 节点(inode)跟踪存储在虚拟目录中文件的相关信息。 i 节点系统在每个 物理存储设备中创建一个单独的表(称作 i 节点表)来保存文件信息。虚拟目录中的每个文件在 i 节点表中有对应的条目。ext 文件系统名称中的 extended 部分得名自其所跟踪的每个文件的额外 数据,包括以下内容:
| 方法 | 描述 |
|---|---|
| 数据模式 | i 节点和文件数据都会被写入日志;数据丢失风险低,但性能差 |
| 有序模式 | 只有 i 节点数据会被写入日志,直到文件数据被成功写入后才会将其删除;在性能和安全性之间取得了良好的折中 |
| 回写模式 | 只有 i 节点数据会被写入日志,但不控制文件数据何时写入;数据丢失风险高,但仍好于不用日志 |
ext3 文件系统是 ext2 的后续版本, 支持最大 2 TB 的文件,能够管理 32 TB 大小的分区。在 默认情况下, ext3 采用有序模式的日志方法, 不过也可以通过命令行选项改用其他模式。 ext3 文 件系统无法恢复误删的文件,也没有提供数据压缩功能。
作为 ext3 的后续版本, ext4 文件系统最大支持 16 TiB 的文件,能够管理 1 EiB 大小的分区。 在默认情况下, ext4 采用有序模式的日志方法, 不过也可以通过命令行选项改用其他模式。另外 还支持加密、压缩以及单目录下不限数量的子目录。先前的 ext2 和 ext3 也可以作为 ext4 挂载, 以提高性能表现。
JFS 文件系统采用的是有序模式的日志方法,只在日志中保存 i 节点数据,直到文件数据被 写进存储设备后才将其删除。
XFS 文件系统采用回写模式的日志方法, 在提供了高性能的同时也引入了一定的风险, 因为 实际数据并未存进日志文件。
就文件系统而言, 日志技术的替代选择是一种称作写时复制(copy-on-write,COW)的技术。 COW 通过快照(snapshot)兼顾了安全性和性能。在修改数据时, 使用的是克隆或可写快照。修 改过的数据并不会直接覆盖当前数据,而是被放入文件系统中另一个位置。
ZFS 是一个稳定的文件系统,与 Resier4 、Btrfs 和 ext4 势均力敌。它拥有数据完整性验证和自动修复功能,支持最大 16 EB 的文件,能够管理 256 万亿 ZB(256 quadrillion zettabyte)的存储空间。
Stratis 文件系统维护的存储池由一个或多个XFS 文件系统组成,同时还提供与传统的卷管理文件系统(比如 ZFS 和 Btrfs)相似的 COW 功能。
创建分区
# whoami
root
# fdisk /dev/sda
Welcome to fdisk (util-linux 2.32.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help):
| 命令 | 描述 |
|---|---|
| a | 设置活动分区标志 |
| b | 编辑 BSD Unix 系统使用的标签 |
| c | 设置 DOS 兼容标志 |
| d | 删除分区 |
| g | 创建新的空 GTP 分区表 |
| G | 创建 IRIX( SGI )分区表 |
| l | 显示可用的分区类型 |
| m | 显示命令菜单 |
| n | 添加一个新分区 |
| o | 创建新的空 DOS 分区表 |
| p | 显示当前分区表 |
| q | 退出,不保存更改 |
| s | 为 Sun Unix 系统创建一个新标签 |
| t | 修改分区的系统 ID |
| u | 修改显示单元 |
| v | 验证分区表 |
| w | 将分区表写入磁盘并退出 |
| x | 附加功能(仅供专家使用) |
| 工具 | 用途 |
|---|---|
| mkefs | 创建 ext 文件系统 |
| mke2fs | 创建 ext2 文件系统 |
| mkfs.ext3 | 创建 ext3 文件系统 |
| mkfs.ext4 | 创建 ext4 文件系统 |
| mkreiserfs | 创建 ReiserFS 文件系统 |
| jfs_mkfs | 创建 JFS 文件系统 |
| mkfs.xfs | 创建 XFS 文件系统 |
| mkfs.zfs | 创建 ZFS 文件系统 |
| mkfs.btrfs | 创建 Btrfs 文件系统 |
$ type mkfs.ext4
mkfs.ext4 is /usr/sbin/mkfs.ext4
$ type mkfs.btrfs
-bash: type: mkfs.btrfs: not found
$ sudo mkfs.ext4 /dev/sdb1
[sudo] password for christine:
mke2fs 1.44.6 (5-Mar-2019)
Creating filesystem with 524032 4k blocks and 131072 inodes
[...]
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done
$ mkdir /home/christine/part
$ sudo mount -t ext4 /dev/sdb1 /home/christine/part
[sudo] password for christine:
$ lsblk -f /dev/sdb
NAME FSTYPE LABEL UUID MOUNTPOINT
sdb
⌙ sdb1 ext4 a8d1d[...] /home/christine/part
fsck options filesystem
| 选项 | 描述 |
|---|---|
| -a | 检测到错误时自动修复文件系统 |
| -A | 检查/etc/fstab 文件中列出的所有文件系统 |
| -N | 不进行检查,只显示要检查的内容 |
| -r | 出现错误时进行提示 |
| -R | 使用-A 选项时跳过根文件系统 |
| -t | 指定要检查的文件系统类型 |
| -V | 在检查时产生详细输出 |
| -y | 检测到错误时自动修复文件系统 |
| 命令 | 功能 |
|---|---|
| Vgextend | 将 PV 加入 VG |
| Vgreduce | 从 VG 中删除 PV |
| lvextend | 扩大 LV 的容量 |
| lvreduce | 收缩 LV 的容量 |