文件系统
出自 Wikipedia
- 在计算机科学中,文件系统(file system 或 filesystem)控制着数据的存储和检索方式。没有文件系统,存储介质中的信息将是一个庞大的数据体,无法分辨信息的起点和终点。通过将数据分成若干部分并为每个部分命名,信息可以轻松地被隔离和识别。文件系统得名于纸质信息系统的命名方式,每组数据被称为“文件”。用于管理信息组及其名称的结构和逻辑规则被称为“文件系统”。
可以使用许多不同的可用文件系统之一来设置各个驱动器分区。每种文件系统都有其自身的优点、缺点和独特的特性。以下是受支持的文件系统的简要概述;链接指向维基百科页面,其中提供了更多信息。
文件系统类型
有关一般概述,请参阅 filesystems(5),有关详细的功能比较,请参阅 Wikipedia:文件系统比较。内核已加载或内置的文件系统在 /proc/filesystems
中列出,而所有已安装的模块都可以在 ls /lib/modules/$(uname -r)/kernel/fs
中看到。
文件系统 | 创建命令 | 内核补丁集 | 用户空间实用程序 | 注释 |
---|---|---|---|---|
APFS | mkapfs(8) | linux-apfs-rw-dkms-gitAUR | apfsprogs-gitAUR | macOS (10.13 及更高版本) 文件系统。只读,实验性写入支持。另请参阅 apfs-fuse-gitAUR FUSE 版本。 |
Reiser4 | mkfs.reiser4(8) | reiser4progsAUR | ||
ZFS | zfs-linuxAUR, zfs-dkmsAUR | zfs-utilsAUR | OpenZFS 端口 |
日志
除了 exFAT、ext2、FAT16/32、Reiser4(可选)、Bcachefs、Btrfs 和 ZFS 之外,所有上述文件系统都使用日志。日志通过在提交到文件系统之前记录更改来提供容错能力。如果发生系统崩溃或电源故障,此类文件系统可以更快地恢复联机,并且不太可能损坏。日志记录发生在文件系统的专用区域中。
并非所有日志技术都相同。Ext3 和 ext4 提供数据模式日志,它记录数据和元数据,以及仅记录元数据更改的可能性。数据模式日志记录会降低速度,并且默认情况下未启用。同样,Reiser4 提供所谓的 “事务模型”,它不仅改变了它提供的功能,而且改变了它的日志模式。它使用不同的日志技术:一种称为 wandering logs 的特殊模型,它消除了两次写入磁盘的需要,write-anywhere——一种纯复制写入方法(主要等同于 btrfs 的默认方法,但具有根本不同的“树”设计)和一种称为 hybrid 的组合方法,它启发式地在两者之间交替。
其他文件系统提供有序模式日志,仅记录元数据。虽然所有日志都将在崩溃后将文件系统恢复到有效状态,但数据模式日志记录提供了防止损坏和数据丢失的最大保护。然而,系统性能会受到影响,因为数据模式日志记录执行两次写入操作:首先写入日志,然后写入磁盘(Reiser4 通过其“wandering logs”功能避免了这种情况)。在选择文件系统类型时,应考虑系统速度和数据安全性之间的权衡。Reiser4 是唯一一个默认情况下以完全原子性运行的文件系统,并且还为元数据和内联数据提供校验和(操作完全发生,或者完全不发生,并且不会由于操作半途而废而损坏或破坏数据),因此在设计上比 Btrfs 等其他文件系统更不容易丢失数据。
基于写时复制(也称为 write-anywhere)的文件系统,例如 Reiser4、Btrfs、Bcachefs 和 ZFS,无需使用传统日志来保护元数据,因为元数据永远不会就地更新。虽然 Btrfs 仍然有一个类似日志的日志树,但它仅用于加速 fdatasync/fsync。
基于 FUSE 的文件系统
参见 FUSE。
堆叠文件系统
- eCryptfs — 企业加密文件系统是一个用于 Linux 的磁盘加密软件包。它被实现为符合 POSIX 标准的文件系统级加密层,旨在提供类似于操作系统级别的 GnuPG 的功能。
- mergerfs — 基于 FUSE 的联合文件系统。
- mhddfs — Multi-HDD FUSE 文件系统,基于 FUSE 的联合文件系统。
- http://mhddfs.uvw.ru || mhddfsAUR
- overlayfs — OverlayFS 是 Linux 的文件系统服务,它为其他文件系统实现联合挂载。
- unionfs-fuse — 用户空间 Unionfs 实现。
只读文件系统
- EROFS — Enhanced Read-Only File System 是一种轻量级的只读文件系统,旨在提高性能和压缩存储容量。
- SquashFS — SquashFS 是一种压缩的只读文件系统。SquashFS 压缩文件、inode 和目录,并支持高达 1 MiB 的块大小以实现更高的压缩率。
集群文件系统
- BeeGFS — 一种并行文件系统,为高性能计算开发和优化。
- Ceph — 统一的分布式存储系统,旨在实现出色的性能、可靠性和可扩展性。
- https://ceph.com/ || cephAUR
- Glusterfs — 集群文件系统,能够扩展到数 PB。
- IPFS — 一种点对点超媒体协议,旨在使网络更快、更安全、更开放。IPFS 旨在取代 HTTP,为我们所有人构建更好的网络。使用块来存储文件的各个部分,每个网络节点仅存储其感兴趣的内容,提供重复数据删除、分发,可扩展系统仅受用户限制。(目前处于 alpha 阶段)
- MinIO — MinIO 提供高性能、与 S3 兼容的对象存储。
- MooseFS — MooseFS 是一种容错、高可用性和高性能可扩展的网络分布式文件系统。
- OpenAFS — AFS 分布式文件系统的开源实现
- OrangeFS — OrangeFS 是一种横向扩展网络文件系统,旨在透明地并行访问基于多服务器的磁盘存储。针对并行和分布式应用程序优化了 MPI-IO 支持。简化了并行存储的使用,不仅适用于 Linux 客户端,还适用于 Windows、Hadoop 和 WebDAV。POSIX 兼容。自 Linux kernel 4.6 版本以来成为 Linux 内核的一部分。
- https://www.orangefs.org/ || 未打包? 在 AUR 中搜索
- Sheepdog — 分布式对象存储系统,用于卷和容器服务,并智能地管理磁盘和节点。
- Tahoe-LAFS — Tahoe Least-Authority File Store 是一个免费开源、安全、去中心化、容错、点对点分布式数据存储和分布式文件系统。
- GFS2 — GFS2 允许集群的所有成员直接并发访问同一共享块存储
- OCFS2 — Oracle 集群文件系统(版本 2)是由 Oracle 公司开发并根据 GNU 通用公共许可证发布的共享磁盘文件系统
- VMware VMFS — VMware 的 VMFS(虚拟机文件系统)被该公司旗舰服务器虚拟化套件 vSphere 使用。
识别现有文件系统
要识别现有文件系统,可以使用 lsblk
$ lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT sdb └─sdb1 vfat Transcend 4A3C-A9E9
如果存在现有文件系统,则会在 FSTYPE
列中显示。如果 已挂载,则会显示在 MOUNTPOINT
列中。
创建文件系统
文件系统通常在 分区、逻辑容器(如 LVM、RAID 和 dm-crypt)内或常规文件(请参阅 Wikipedia:Loop device)上创建。本节介绍分区的情况。
在继续之前,识别将在其中创建文件系统的设备,以及它是否已挂载。例如
$ lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT sda ├─sda1 C4DA-2C4D ├─sda2 ext4 5b1564b2-2e2c-452c-bcfa-d1f572ae99f2 /mnt └─sda3 56adc99b-a61e-46af-aab7-a6d07e504652
已挂载的文件系统必须在继续之前卸载。在上面的示例中,现有文件系统位于 /dev/sda2
上,并挂载在 /mnt
。它将使用以下命令卸载
# umount /dev/sda2
要查找仅挂载的文件系统,请参阅#列出已挂载的文件系统。
要创建新的文件系统,请使用 mkfs(8)。有关确切类型以及您可能希望为特定文件系统安装的用户空间实用程序,请参阅#文件系统类型。
例如,要在 /dev/sda1
上创建类型为 ext4(Linux 数据分区的常见类型)的新文件系统,请运行
# mkfs.ext4 /dev/sda1
- 使用 mkfs.ext4 的
-L
标志来指定文件系统标签。e2label 可用于更改现有文件系统上的标签。 - 文件系统可以在创建后调整大小,但存在某些限制。例如,XFS 文件系统的大小可以增加,但不能减小。有关详细信息,请参阅 Wikipedia:文件系统比较#调整大小功能 和相应的文件系统文档。
现在可以将新文件系统挂载到所选目录。
挂载文件系统
要手动将设备(例如,分区)上的文件系统挂载到目录,请使用 mount(8)。此示例将 /dev/sda1
挂载到 /mnt
。
# mount /dev/sda1 /mnt
这会将 /dev/sda1
上的文件系统附加到目录 /mnt
,从而使文件系统的内容可见。在此操作之前 /mnt
中存在的任何数据都将变为不可见,直到设备被卸载。
fstab 包含有关如果设备存在应如何自动挂载的信息。有关如何修改此行为的更多信息,请参阅 fstab 文章。
如果在 /etc/fstab
中指定了设备,并且命令行上仅给出了设备或挂载点,则该信息将用于挂载。例如,如果 /etc/fstab
包含一行指示应将 /dev/sda1
挂载到 /mnt
,则以下命令将自动将设备挂载到该位置
# mount /dev/sda1
或
# mount /mnt
mount 包含多个选项,其中许多选项取决于指定的文件系统。可以通过以下方式更改选项:
有关更多信息,请参阅这些相关文章和感兴趣的文件系统的文章。
- 文件系统也可以使用 systemd-mount 而不是 mount 来挂载。如果未指定挂载点,文件系统将挂载在
/run/media/system/device_identifier/
。这允许轻松挂载文件系统,而无需决定将其挂载到何处。有关用法和更多详细信息,请参阅 systemd-mount(1)。 - 要以普通用户身份挂载文件系统,请参阅 udisks#用法。这也允许在没有 root 权限、完整图形环境或利用 udisks 的文件管理器的情况下进行挂载。
列出已挂载的文件系统
要列出所有已挂载的文件系统,请使用 findmnt(8)
$ findmnt
findmnt 接受各种参数,这些参数可以过滤输出并显示其他信息。例如,它可以将设备或挂载点作为参数,以仅显示有关指定内容的信息
$ findmnt /dev/sda1
findmnt 从 /etc/fstab
、/etc/mtab
和 /proc/self/mounts
收集信息。
卸载文件系统
要卸载文件系统,请使用 umount(8)。可以指定包含文件系统的设备(例如,/dev/sda1
)或挂载点(例如,/mnt
)
# umount /dev/sda1
或
# umount /mnt