非Root环境下的数据挂载解决方案:SSHFS与Mount详解

文章目录

    • 【1】挂载的基本概念
    • [【2】 挂载实战:非 Root 权限下的 SSHFS 方案](#【2】 挂载实战:非 Root 权限下的 SSHFS 方案)
      • [2.1 创建挂载点](#2.1 创建挂载点)
      • [2.2 建立 SSHFS 远程映射](#2.2 建立 SSHFS 远程映射)
      • [2.3 检查挂载是否生效](#2.3 检查挂载是否生效)
      • [2.4 卸载与断开(Unmount)](#2.4 卸载与断开(Unmount))
      • [2.5 自动化进阶:实现"登录即挂载"](#2.5 自动化进阶:实现“登录即挂载”)
    • [【3】 知识点深度拓展:内核级 Mount 命令](#【3】 知识点深度拓展:内核级 Mount 命令)
      • [3.1 命令格式规范](#3.1 命令格式规范)
      • [3.2 默认挂载选项(Defaults)](#3.2 默认挂载选项(Defaults))
      • [3.3 常用命令选项详解](#3.3 常用命令选项详解)
        • [(1) 控制行为的短参数 [-fnrsvw]](#(1) 控制行为的短参数 [-fnrsvw])
        • [(2) 虚拟文件系统类型 [-t vfstype]](#(2) 虚拟文件系统类型 [-t vfstype])
        • [(3) 行为管理参数 [-o options]](#(3) 行为管理参数 [-o options])

前言:

在处理深度学习大数据集(如 LRS2、CN-VSR)时,我们经常面临数据集存储在远程 NAS(Network Attached Storage网络附属存储),而计算资源在本地服务器的情况。如何高效、安全地访问这些数据?这就涉及到了 Linux 中最核心的概念之一:挂载(Mount)

【1】挂载的基本概念

在 Linux 系统中,一切皆文件。当我们想访问根目录以外的文件系统(如新硬盘、光盘或远程存储)时,就必须先把它【关联】到【根目录下的某个目录】。

  • 【关联】就是【挂载】

  • 【根目录下的某个目录】就是【挂载点】

    【挂载点】的"三原则":

    1. 目录必须存在:你不能把东西挂载到一个虚无的路径。

    2. 目录必须空闲:没有进程正在访问该目录。

    3. 内容会被隐藏:挂载成功后,该目录原有的文件会被隐藏,直到卸载后重新出现。

      综述所述:最保险的做法是新建一个挂载点

【2】 挂载实战:非 Root 权限下的 SSHFS 方案

在实验室共享服务器环境中,普通用户通常没有 sudo 管理员权限,无法调用内核级的 mount 指令。此时,SSHFSS ecure Sh ell F ileS ystem,加密外壳文件系统)成为了跨服务器访问数据的最佳利器。它基于 FUSEF ilesystem in U sers pace,用户态文件系统)技术,允许普通用户在不修改a系统内核的情况下挂载远程目录。

以下是将【远端存储服务器NAS3上的数据集】挂载到【本地服务器】的完整流程:

2.1 创建挂载点

在本地服务器中创建一个空文件夹,作为远程数据的入口。

bash 复制代码
# mkdir: Make Directory (创建目录)
# -p: Parents (递归创建,若父目录不存在则一并创建)
mkdir -p /mount/NAS3_data 

注意 :挂载点必须是一个文件夹(目录)且建议为空。

2.2 建立 SSHFS 远程映射

通过 SSH 协议将远程路径映射到本地服务器。

Bash 复制代码
# 指令格式:sshfs [远程主机别名]:[远程绝对路径] [本地挂载点路径]
sshfs NAS3:/data /mount/NAS3_data

[远程主机别名] :此处 NAS3 是在本地服务器 ~/.ssh/config 中配置好的主机别名。若未配置别名,一般形式为:[用户名]@[IP地址]

2.3 检查挂载是否生效

在本地服务器上验证挂载状态。

Bash 复制代码
# mount: 显示当前系统所有已挂载的设备
# |: Pipe (管道符),将前一个命令的结果传给下一个
# grep: Global Regular Expression Print (全局搜索),筛选包含"NAS3_data"的字段
mount | grep NAS3_data

挂载成功后,我们可以直接通过本地服务器路径 /mount/NAS3_data 访问 NAS3 服务器 /data 目录下的全部数据集。


2.4 卸载与断开(Unmount)

任务完成后,若需安全断开连接:

Bash 复制代码
# fusermount: FUSE系统的管理指令
# -u: Unmount (卸载)
fusermount -u /mount/NAS3_data

提示 :请勿在挂载状态下直接使用 rm -rf 删除挂载点目录,应先执行卸载操作。

2.5 自动化进阶:实现"登录即挂载"

由于在实验室共享服务器上没有 sudo 权限修改 /etc/fstab,且 @reboot 仅在系统整机重启时触发,最适合的方案是利用 .bashrc 实现登录自动挂载

操作步骤:

  1. 执行nano ~/.ssh/config确保已配置NAS3 别名。
  2. 执行ssh-copy-id确保已完成 SSH 免密登录
  3. 执行 nano ~/.bashrc,在文件末尾添加以下逻辑:
Bash 复制代码
# 自动挂载 NAS3 数据集脚本
if ! mount | grep -q "/liyana/NAS3_data"; then
    echo "🔄 检测到 NAS3 未挂载,正在启动自动连接..."
    sshfs NAS3:/volume1/Share /liyana/NAS3_data -o cache=yes,reconnect
fi

这样,每次你通过 SSH 登录 113 服务器时,系统会自动检测并接通 NAS3 的数据,无需手动输入指令。

【3】 知识点深度拓展:内核级 Mount 命令

虽然在本次实战中我们选择了无需 Root 权限且更灵活的 sshfs,但深入理解 Linux 标准的 mount 内核级挂载命令及其参数同样重要。这能帮助我们理解 Linux 文件系统的底层逻辑。

3.1 命令格式规范

标准的内核挂载格式如下:

复制代码
mount [-fnrsvw] [-t vfstype] [-o options] device dir
  • device :数据源地址。对应实战中的远程路径 NAS3:/data
  • dir :本地挂载点目录。对应实战中的 /mount/NAS3_data

3.2 默认挂载选项(Defaults)

当我们执行 mount -o defaults 时,系统实际上同时开启了一组标准配置:

  • rw : R ead-Write(读写权限)。
  • suid : 允许运行具有 Set User ID 权限的程序。
  • dev: 允许创建或解析设备文件。
  • exec: 允许运行具有执行权限的文件。
  • auto : 系统启动时自动挂载(通常写入 /etc/fstab 配置)。
  • nouser: 限制仅 root 用户可以执行挂载操作。
  • async : Asynchronous I/O(异步输入/输出),提升磁盘写入速度。

3.3 常用命令选项详解

(1) 控制行为的短参数 [-fnrsvw]
选项 英文全称 中文解释
-f Fake 模拟挂载。不真正执行挂载动作,仅用于检查语法和路径是否正确。
-n No write 不写入 mtab 。挂载时不将信息记录到 /etc/mtab 文件中。
-r Read-only 只读挂载 。保护源数据不被修改(等同于 -o ro)。
-s Slave 从属挂载 。如果设置了 slave 模式,那么"源端 A"发生的任何挂载变化都会同步到"目的端 B",但"目的端 B"发生的挂载变化不会反馈给 A
-v Verbose 详细模式。在终端显示挂载执行过程中的完整日志信息。
-w Write 读写挂载 。允许对挂载内容进行增删改(等同于 -o rw)。
(2) 虚拟文件系统类型 [-t vfstype]
  • vfstype : V irtual F ile System Type。
  • 常见类型ext4 (标准 Linux 分区), xfs (高性能分区), nfs (网络文件系统), iso9660 (光盘镜像) 等。
(3) 行为管理参数 [-o options]

这是挂载中最核心的部分,用于精细化管理挂载行为。注意 :通常只有 root 用户有权限指定这些 --options

备注

  • /dev/sdb1:磁盘分区(常见挂载对象)。
  • /mnt:临时挂载点(示例路径,可替换为空目录)。
类别 选项 主要用途 涉及英文 对应中文 示例命令 说明
权限控制 ro 保护数据不被修改 Read-Only 只读
rw 允许读写(默认) Read-Write 读写
noexec 防止程序执行 No Executable 禁止执行 mount -o noexec /dev/sdb1 /mnt/uploads
nosuid 防止权限提升 No Set User ID 禁止SUID mount -o nosuid /dev/sdb1 /mnt/public
性能优化 noatime 提升读取、不更新访问时间 No Access Time 不更新访问时间 mount -o noatime /dev/sdb1 /mnt/database 例如:数据库高频读取时
nodiratime 提升目录访问性能 No Directory Access Time 不更新目录时间
async 提升写入(默认) Asynchronous I/O 异步I/O mount -o async /dev/sdb1 /mnt/temp 例如:临时文件快速下载时
sync 确保数据安全 Synchronous I/O 同步I/O mount -o sync /dev/sdb1 /mnt/important 例如:重要日志要保证安全优先
特殊功能 loop 挂载镜像文件 Loop Device 循环设备 mount -o loop ubuntu.iso /mnt/iso ubuntu.iso代表镜像文件
bind 目录绑定到另一位置 Bind Mount 绑定挂载 mount --bind /home/data /mnt/backup 将/home/data目录绑定到/mnt/backup,两个目录内容相同
remount 修改挂载参数(不卸载) Remount 重新挂载 mount -o remount,ro /mnt/data 运行中改选项
默认配置 defaults 使用标准配置 Defaults 默认选项 mount -o defaults /dev/sdb1 /mnt/data
相关推荐
这儿有一堆花11 小时前
任何东西都可以转成 Base64!?
bash
wasp52011 小时前
Banana Slides 深度解析:AI Core 架构设计与 Prompt 工程实践
人工智能·prompt·bash
市场部需要一个软件开发岗位15 小时前
一个无人机平台+算法监督平台的离线部署指南
java·python·算法·bash·无人机·持续部署
dingdingfish16 小时前
Bash学习笔记总目录
bash·script·programming
代码AI弗森1 天前
Git Bash 与 PowerShell:定位差异、使用场景与选择建议
开发语言·git·bash
ajole2 天前
Linux学习笔记——基本指令
linux·服务器·笔记·学习·centos·bash
遨游xyz2 天前
策略模式笔记
开发语言·word·bash
hhy_smile2 天前
Ubuntu24.04 环境配置自动脚本
linux·ubuntu·自动化·bash
拓云者也3 天前
常用的生物信息学数据库以及处理工具
数据库·python·oracle·r语言·bash