教程 rockylinux tutorial

挂载与自动挂载

在 Rocky Linux 系统中,挂载(mounting)是将存储设备或分区附加到文件系统树的过程,使其内容可以访问。自动挂载则是通过配置让系统在启动时自动挂载特定的设备。本教程将详细介绍文件系统的挂载方法、/etc/fstab 配置文件的使用以及各种高级挂载选项。

挂载基础

挂载概念

在 Linux 系统中,所有存储设备都必须挂载到文件系统树中的某个目录(称为挂载点)才能被访问。挂载过程将设备的文件系统与系统的目录树连接起来,使得用户可以像访问普通文件和目录一样访问设备上的数据。

主要概念:

  • 挂载点:文件系统树中的目录,存储设备将挂载到这里
  • 设备标识符:用于标识要挂载的存储设备
  • 文件系统类型:指定设备上使用的文件系统格式
  • 挂载选项:控制设备如何挂载和访问的参数

设备标识符

在 Rocky Linux 中,设备可以通过多种方式标识:

  1. 设备名称:如 /dev/sda1、/dev/nvme0n1p1
  2. UUID:通用唯一标识符,如 5f96e737-f0f4-4a81-98b8-bfc24057f7bd
  3. 标签:文件系统标签,如 DATA 或 BACKUP
  4. PARTUUID:分区 UUID(GPT 分区表)

使用 UUID 或标签而不是设备名称可以提高系统的稳定性,因为设备名称可能会在系统重启或硬件更改后发生变化。

常用挂载命令

查看当前挂载的文件系统

bash
# 显示所有已挂载的文件系统
mount

# 以人类可读的格式显示
mount -h

# 显示特定文件系统类型的挂载
mount -t ext4

# 使用 df 命令查看
 df -h

挂载存储设备

基本语法:

bash
mount [选项] 设备 挂载点

常用选项:

  • -t 类型:指定文件系统类型
  • -o 选项:指定挂载选项
  • -r:以只读方式挂载
  • -w:以可写方式挂载(默认)
  • -a:挂载 /etc/fstab 中所有未挂载的文件系统

手动挂载设备

创建挂载点

在挂载设备之前,需要创建一个目录作为挂载点:

bash
# 创建挂载点目录
sudo mkdir -p /mnt/data

挂载分区

bash
# 挂载 /dev/sdb1 到 /mnt/data
sudo mount /dev/sdb1 /mnt/data

# 指定文件系统类型挂载
sudo mount -t ext4 /dev/sdb1 /mnt/data

# 以只读方式挂载
sudo mount -r /dev/sdb1 /mnt/data

# 使用 UUID 挂载
sudo mount UUID="5f96e737-f0f4-4a81-98b8-bfc24057f7bd" /mnt/data

# 使用标签挂载
sudo mount LABEL="DATA" /mnt/data

挂载 ISO 文件

bash
# 挂载 ISO 文件
sudo mount -o loop /path/to/file.iso /mnt/iso

挂载 NFS 共享

bash
# 挂载 NFS 共享
sudo mount -t nfs server:/share /mnt/nfs

挂载 Windows 共享(CIFS)

bash
# 安装 cifs-utils
sudo dnf install cifs-utils -y

# 挂载 Windows 共享
sudo mount -t cifs //server/share /mnt/win -o username=user,password=pass

# 更安全的方式(从文件读取凭据)
echo "username=user" > ~/.smbcredentials
echo "password=pass" >> ~/.smbcredentials
chmod 600 ~/.smbcredentials
sudo mount -t cifs //server/share /mnt/win -o credentials=~/.smbcredentials

卸载设备

bash
# 卸载指定挂载点
sudo umount /mnt/data

# 卸载指定设备
sudo umount /dev/sdb1

# 强制卸载(谨慎使用)
sudo umount -f /mnt/data

# 懒惰卸载(等待设备不忙时卸载)
sudo umount -l /mnt/data

/etc/fstab 配置文件

/etc/fstab(文件系统表)是一个配置文件,用于定义系统启动时自动挂载的文件系统。

fstab 文件结构

代码
# 设备             挂载点           文件系统类型  挂载选项       转储  检查顺序
UUID=xxx          /                ext4          defaults       1     1
/dev/sda2         swap             swap          defaults       0     0
/dev/sdb1         /mnt/data        ext4          defaults       0     2

各字段说明:

  1. 设备:要挂载的设备,可以是设备名称、UUID、LABEL 等
  2. 挂载点:文件系统挂载的目录
  3. 文件系统类型:如 ext4、xfs、vfat、swap 等
  4. 挂载选项:控制文件系统如何挂载的选项
  5. 转储:是否使用 dump 工具备份(0=不备份,1=备份)
  6. 检查顺序:fsck 检查顺序(0=不检查,1=首先检查,2=其次检查)

查找设备 UUID

bash
# 使用 blkid 命令查找 UUID
sudo blkid

# 查找特定设备的 UUID
sudo blkid /dev/sdb1

# 查看所有分区的 UUID
ls -la /dev/disk/by-uuid/

编辑 fstab 文件

bash
sudo vim /etc/fstab

添加新的挂载项

示例:

代码
# 使用 UUID 挂载 ext4 分区
UUID=5f96e737-f0f4-4a81-98b8-bfc24057f7bd /mnt/data ext4 defaults 0 2

# 使用 LABEL 挂载 NTFS 分区
LABEL=Windows /mnt/windows ntfs-3g defaults,umask=0002 0 0

# 挂载 NFS 共享
server:/share /mnt/nfs nfs defaults 0 0

# 挂载 CIFS 共享
//server/share /mnt/win cifs credentials=/home/user/.smbcredentials,defaults 0 0

# 挂载 tmpfs
none /tmp tmpfs defaults,noatime,mode=1777 0 0

测试 fstab 配置

在修改 fstab 文件后,应该测试配置是否正确,以避免系统无法启动:

bash
# 重新挂载所有在 fstab 中定义的文件系统
sudo mount -a

# 检查是否有错误
dmesg | grep mount

如果执行 sudo mount -a 没有错误输出,则配置正确。

常用挂载选项

基础挂载选项

选项 说明
defaults 使用默认选项(rw, suid, dev, exec, auto, nouser, async)
noauto 不自动挂载
user 允许普通用户挂载
nouser 仅允许 root 用户挂载
ro 只读挂载
rw 读写挂载
remount 重新挂载已挂载的文件系统

性能相关选项

选项 说明
async 异步 I/O(默认)
sync 同步 I/O(更安全但速度较慢)
noatime 不更新文件访问时间(提高性能)
nodiratime 不更新目录访问时间
relatime 仅在修改时间后更新访问时间
barrier=0 禁用写屏障(提高性能但降低安全性)
data=writeback 数据写入策略(ext4)

安全相关选项

选项 说明
nosuid 禁用 setuid 位
nodev 禁用设备文件
noexec 禁用可执行文件
bind 绑定挂载(将一个目录挂载到另一个目录)
private 挂载命名空间隔离
shared 共享挂载命名空间

文件系统特定选项

ext4 选项

代码
defaults,noatime,nodiratime,errors=remount-ro,barrier=1,data=ordered

XFS 选项

代码
defaults,noatime,nodiratime,attr2,inode64,noquota

NTFS 选项

代码
defaults,umask=0002,uid=1000,gid=1000

FAT/VFAT 选项

代码
defaults,umask=0002,uid=1000,gid=1000,utf8,shortname=mixed

特殊挂载类型

临时文件系统(tmpfs)

tmpfs 是一种基于内存的临时文件系统,速度非常快,但在系统重启后数据会丢失。

bash
# 手动挂载 tmpfs
sudo mount -t tmpfs -o size=1G tmpfs /mnt/tmp

# 在 fstab 中配置
none /mnt/tmp tmpfs defaults,size=1G,noatime,mode=1777 0 0

绑定挂载

绑定挂载允许将一个目录或文件挂载到另一个目录。

bash
# 手动绑定挂载
sudo mount --bind /home/user/data /var/www/html/data

# 在 fstab 中配置
/home/user/data /var/www/html/data none bind 0 0

# 递归绑定挂载
sudo mount --rbind /home/user/data /var/www/html/data

自动挂载(autofs)

autofs 提供了按需挂载文件系统的功能,当访问挂载点时才自动挂载设备,适用于不经常使用的设备。

安装 autofs

bash
sudo dnf install autofs -y

配置 autofs

  1. 编辑主配置文件:
bash
sudo vim /etc/auto.master

添加以下行:

代码
/misc   /etc/auto.misc
/net    -hosts
/-      /etc/auto.direct
  1. 创建直接映射文件:
bash
sudo vim /etc/auto.direct

添加要自动挂载的设备:

代码
/mnt/data    -fstype=ext4 :/dev/sdb1
/mnt/iso     -fstype=iso9660,ro,loop :/path/to/file.iso
/mnt/nfs     -fstype=nfs :server:/share
  1. 启动 autofs 服务:
bash
sudo systemctl start autofs
sudo systemctl enable autofs

网络文件系统挂载

NFS 挂载选项

bash
# 基本 NFS 挂载选项
sudo mount -t nfs -o rw,hard,intr,rsize=8192,wsize=8192 server:/share /mnt/nfs

# 在 fstab 中配置
server:/share /mnt/nfs nfs defaults,hard,intr,rsize=8192,wsize=8192 0 0

CIFS 挂载选项

bash
# 基本 CIFS 挂载选项
sudo mount -t cifs -o username=user,password=pass,uid=1000,gid=1000 //server/share /mnt/win

# 在 fstab 中配置
//server/share /mnt/win cifs credentials=/home/user/.smbcredentials,uid=1000,gid=1000 0 0

挂载问题排查

设备忙错误

如果尝试卸载设备时遇到 “device is busy” 错误:

bash
# 查找使用该设备的进程
sudo fuser -m /mnt/data

# 或者
sudo lsof /mnt/data

# 终止使用该设备的进程
sudo fuser -k -m /mnt/data

# 或者使用懒惰卸载
sudo umount -l /mnt/data

fstab 配置错误导致系统无法启动

如果因 fstab 配置错误导致系统无法正常启动,可以:

  1. 在引导时进入单用户模式
  2. 编辑 fstab 文件修复错误
  3. 或者暂时注释掉有问题的行

进入单用户模式的方法:

  • 在 GRUB 引导菜单中选择编辑选项
  • 在 Linux 内核行末尾添加 single 或 1
  • 按 Ctrl+X 启动

文件系统检查失败

如果挂载时出现文件系统错误:

bash
# 卸载设备(如果已挂载)
sudo umount /dev/sdb1

# 检查并修复文件系统
sudo fsck.ext4 /dev/sdb1
# 或对于 XFS
sudo xfs_repair /dev/sdb1

最佳实践

  1. 使用 UUID 或 LABEL 挂载:避免因设备名称变化导致的挂载问题

  2. 设置适当的挂载选项:根据文件系统类型和用途选择合适的挂载选项

  3. 分离关键目录:将 /home、/var、/tmp 等目录挂载在单独的分区

  4. 备份 fstab 文件:在修改前备份 /etc/fstab

  5. 测试挂载配置:修改 fstab 后使用 mount -a 测试配置

  6. 使用自动挂载:对于不经常使用的设备,考虑使用 autofs

  7. 设置正确的权限:为挂载点设置适当的所有者和权限

  8. 监控挂载状态:定期检查文件系统挂载状态和磁盘空间

总结

文件系统挂载和自动挂载配置是 Rocky Linux 系统管理中的重要技能。本教程详细介绍了手动挂载设备、配置 /etc/fstab 实现自动挂载、各种特殊挂载类型以及常见问题的排查方法。

通过正确配置和管理文件系统挂载,您可以确保系统存储资源的合理利用,提高数据访问效率和安全性。在进行任何挂载配置更改时,务必小心谨慎,始终备份重要数据,并在修改后测试配置是否正确,以避免系统启动问题。

对于更高级的存储管理需求,您还可以学习 LVM(逻辑卷管理)和 RAID 等技术,它们提供了更灵活和可靠的存储解决方案。