UP | HOME

Linux 文件系统

Table of Contents

FreeBSD 对 ext2/ext3/ext4、XFS、Btrfs 等 Linux 原生文件系统提供只读或读写挂载支持

但内核模块需单独加载,且不同文件系统的兼容程度差异较大

为便于演示挂载操作,本节预设一个包含多种 Linux 文件系统分区的示例环境,用于验证各挂载方法的正确性

$ gpart show -p nda1        # 显示设备 nda1 的分区信息
=>      34  41942973    nda1  GPT  (20G)
34      2014          - free -  (1.0M)
2048   1339392  nda1p5  linux-data  (654M) # ext2
1341440  19630080  nda1p1  linux-data  (9.4G) # ext4
20971520   8388608  nda1p2  linux-data  (4.0G) # btrfs
29360128   4194304  nda1p3  ms-basic-data  (2.0G) # fat32
33554432   8386560  nda1p4  linux-data  (4.0G) # xfs
41940992      2015          - free -  (1.0M)

-p 参数用于显示完整设备路径。示例分区中预先配置了一些文件和目录,用于后续验证挂载操作的正确性

/
├── usr
│   └── ports
│       └── filesystems
│           ├── ext2                  # fusefs-ext2 Ports 目录
│           └── lkl                   # fusefs-lkl Ports 目录
├── home
│   └── ykla
│       ├── test                      # EXT2/3/4 挂载点
│       ├── btrfs                     # Btrfs 挂载点
│       └── xfs                        # XFS 挂载点
└── etc
    └── fstab                          # 持久化挂载配置文件

EXT 系列文件系统

fusefs-ext2 是一款基于 FUSE 的文件系统实现

尽管名称为 ext2,但该模块通过兼容 ext3/ext4 的磁盘格式,同样支持对 ext3 和 ext4 文件系统的访问

安装 fusefs-ext2

  • 使用 pkg 安装:

    $ pkg install fusefs-ext2
    
  • 使用 Ports 安装:

    $ cd /usr/ports/filesystems/ext2/
    $ make install clean
    

加载内核模块

首先,确保已加载 FUSE 内核模块,该模块为所有基于 FUSE 的文件系统提供底层支持。将 ext2fs 和 fusefs 内核模块添加至开机加载列表:

$ sysrc kld_list+="fusefs"
$ sysrc kld_list+="ext2fs"

测试挂载 Ext 分区

  1. 创建挂载目录 /home/ykla/test:

    $ mkdir -p /home/ykla/test # 创建示例挂载目录,请根据实际路径调整,下同
    
  2. 将 nda1p1 分区挂载至 /home/ykla/test:

    $ fuse-ext2 /dev/nda1p1 /home/ykla/test # 挂载分区,默认只读
    Mounting /dev/nda1p1 Read-Only.
    Use 'force' or 'rw+' options to enable Read-Write mode
    $ ls /home/ykla/test/ # 列出挂载目录内容
    lost+found      test            test.pdf
    
    fusefs-ext2 默认以只读模式挂载,这是为了避免写入操作可能引发的文件系统损坏风险
    
  3. 将 nda1p1 分区以读写模式挂载至 /home/ykla/test:

    $ fuse-ext2 -o rw+ /dev/nda1p1 /home/ykla/test # 挂载磁盘分区为可写
    $ ls /home/ykla/test/ # 查看挂载目录内容
    lost+found      test            test.pdf
    $ cd /home/ykla/test/ # 切换到挂载路径
    root@ykla:/home/ykla/test # touch my.txt # 创建测试文件以验证写入操作
    root@ykla:/home/ykla/test # ls # 列出挂载目录内容
    lost+found      my.txt          test            test.pdf
    

Btrfs、XFS 和 ext4 文件系统

fusefs-lkl 是基于 Linux 内核库(LKL,Linux Kernel Library)的 FUSE 实现,通过在用户空间运行 Linux 内核代码,提供对 Btrfs、XFS 等更多 Linux 文件系统的完整支持

与 fusefs-ext2 相比,fusefs-lkl 支持的文件系统类型更广泛,但性能可能略低

安装 fusefs-lkl

  • 使用 pkg 安装:

    $ pkg install fusefs-lkl
    
  • 使用 Ports 安装:

    $ cd /usr/ports/filesystems/lkl/
    $ make install clean
    

加载 FUSE 内核模块

fusefs 是 FreeBSD 的 FUSE 框架内核模块,为所有基于 FUSE 的文件系统提供底层支持。在安装 fusefs-ext2 时已加载该模块,如果尚未加载,可执行以下命令:

$ sysrc kld_list="fusefs"

测试挂载 Btrfs 分区

使用 lklfuse 将 Btrfs 分区 nda1p2 挂载至 /home/ykla/btrfs:

$ mkdir -p /home/ykla/btrfs # 创建挂载目录
$ lklfuse -o type=btrfs /dev/nda1p2 /home/ykla/btrfs # 挂载磁盘分区
$ ls /home/ykla/btrfs # 查看挂载目录内容
test1   test2   test3   test4

测试挂载 Xfs 分区

使用 lklfuse 将 XFS 分区 nda1p4 挂载至 /home/ykla/xfs:

$ mkdir -p /home/ykla/xfs # 创建挂载目录
$ lklfuse -o type=xfs /dev/nda1p4 /home/ykla/xfs # 挂载磁盘分区
$ ls /home/ykla/xfs # 查看挂载目录内容
cfc     test1   test2

故障排除与未竟事宜

文件系统的卸载方法

文件系统卸载操作可通过 umount 命令完成,卸载前应确保没有进程正在访问挂载点,否则卸载将失败。其基本语法为:

$ umount /home/ykla/test    # 卸载指定挂载点的文件系统

持久化的挂载配置

持久化挂载可通过将挂载配置写入 /etc/fstab 文件实现

  • 对于 FUSE 文件系统,需特别注意挂载参数与延迟挂载选项 late 的使用
Next: Windows 文件系统 Previous: 自动挂载 Home: 存储管理