将 Storage Server 挂载为网络驱动器:Linux 与 Windows

发布于 更新于 阅读时间 24 分钟

像使用本地硬盘一样使用您的 Storage Server,并且全程加密:在 Linux 下挂载为目录 /storage,在 Windows 下映射为网络驱动器 storage。另附永久挂载方法和常见错误提示的排查。

您的 Storage Server 可以像本地硬盘一样挂载到您的服务器上。挂载之后,它在 Linux 下显示为目录 /storage,在 Windows 下显示为名为 storage 的网络驱动器。这样,程序、脚本和备份工具直接写入这个路径即可,您不必再手动来回复制文件。

本教程分步介绍所有方式,并且每种方式都全程加密,因为数据要经由互联网传输:在 Linux 下使用启用 SMB 3 加密的 SMB(也称 CIFS 或 Samba)或 SSHFS,在 Windows 下通过 SFTP 使用 SSHFS-Win。此外还会讲解如何让挂载在重启后自动恢复,以及实践中最常见的错误提示。文中的 Linux 命令适用于 Debian 12 和 13、Ubuntu 22.04 和 24.04,以及 AlmaLinux 和 Rocky Linux 9;Windows 步骤适用于 Windows 10 和 11,以及 Windows Server 2016 至 2025。

在客户中心打开您的 Storage Server,即可在“挂载为网络驱动器”卡片中找到最重要的命令,其中已预先填好您的主机名和用户名。

开始之前:登录凭据与访问设置

所需信息都可以在客户中心找到:打开您的 Storage Server,在“连接信息”部分即可看到主机名、用户名和密码。如果那里没有显示密码,请点击“重置密码”生成一个新密码。但请注意,这会断开所有现有连接,之前已挂载存储的服务器随后都需要改用新密码。

在同一页面上,点击“访问设置”按钮即可看到各项访问方式的开关。本教程会用到其中三个:

  • Samba / CIFS 用于通过 SMB 连接的网络驱动器(445 端口)。
  • SSH / SFTP / SCP / rsync 用于 Linux 下的 SSHFS 和 Windows 下的 SSHFS-Win(23 端口)。
  • 外部可访问性必须开启,因为您的服务器要通过互联网访问存储。

新订购的 Storage Server 已默认开启这三个开关。本文的示例使用下列值,请将它们替换为您自己的值:

项目示例值
主机名u123456.storage.kernelhost.net
用户名u123456
共享(SMB)backup
SMB 端口445
SSH、SFTP、rsync 端口23

每台 Storage Server 的共享名都是 backup,因此完整路径在 Windows 下为 \\u123456.storage.kernelhost.net\backup,在 Linux 下为 //u123456.storage.kernelhost.net/backup。

首先检查您的服务器能否连接到 Storage Server:SSHFS 和 SSHFS-Win 需要 23 端口,SMB 需要 445 端口。在 Linux 下:

timeout 5 bash -c '</dev/tcp/u123456.storage.kernelhost.net/23' && echo "23 端口可达"
timeout 5 bash -c '</dev/tcp/u123456.storage.kernelhost.net/445' && echo "445 端口可达"

在 Windows 下使用 PowerShell:

Test-NetConnection u123456.storage.kernelhost.net -Port 23

如果输出中显示 TcpTestSucceeded : True,说明连接畅通。如果无法建立连接,请检查对应的开关(23 端口对应“SSH / SFTP / SCP / rsync”,445 端口对应“Samba / CIFS”)和“外部可访问性”,并检查您的服务器上是否有过滤出站连接的防火墙。如果 445 端口一直被封锁,在 Linux 下可以改用下文介绍的 SSHFS。

Linux:通过 SMB 将存储挂载到 /storage

第 1 步:安装 cifs-utils

SMB 客户端由软件包 cifs-utils 提供。在 Debian 和 Ubuntu 上:

apt-get update
apt-get install -y cifs-utils

在 AlmaLinux、Rocky Linux 和 RHEL 上:

dnf install -y cifs-utils

第 2 步:创建挂载点和凭据文件

创建存储要挂载到的目录,以及一个用于存放凭据的文件:

mkdir -p /storage
nano /etc/storage-credentials

文件内容如下:

username=u123456
password=YOUR_PASSWORD

然后设置为只有 root 才能读取该文件:

chmod 600 /etc/storage-credentials

为什么要单独使用一个文件:这样一来,密码既不会出现在所有用户都能读取的 /etc/fstab 中,也不会留在命令历史里。密码中含有特殊字符也没有问题,在这个文件里无需加引号。

第 3 步:先手动挂载一次并测试

mount -t cifs //u123456.storage.kernelhost.net/backup /storage -o credentials=/etc/storage-credentials,seal,iocharset=utf8,uid=0,gid=0,file_mode=0660,dir_mode=0770

各选项的作用如下:

  • seal 使用 SMB 3 加密连接。由于数据经由互联网传输,请务必保留这个选项。
  • iocharset=utf8 可以避免文件名中的中文和特殊字符出现乱码。
  • uid 和 gid 决定文件归哪个本地用户所有。例如需要让 Web 服务器写入时,请使用 uid=www-data,gid=www-data。
  • file_mode 和 dir_mode 决定 Linux 为文件和文件夹显示的权限。Storage Server 上并不保存 Linux 权限,这些值只在您的服务器上生效。

用以下命令检查是否一切正常:

df -h /storage
touch /storage/testfile && ls -l /storage && rm /storage/testfile

现在 df 显示的是您的 Storage Server 的容量,而不是本地硬盘的容量。

第 4 步:通过 /etc/fstab 永久挂载

为了让存储在每次重启后自动重新挂载,需要把它写入 /etc/fstab。在此之前,先卸载测试时的挂载:

umount /storage
nano /etc/fstab

在文件末尾添加下面这一行(整条内容必须写在同一行中):

//u123456.storage.kernelhost.net/backup  /storage  cifs  credentials=/etc/storage-credentials,seal,iocharset=utf8,uid=0,gid=0,file_mode=0660,dir_mode=0770,_netdev,nofail,x-systemd.automount  0  0

行尾的三个附加选项很重要:

  • _netdev 告诉系统这是一个网络驱动器,必须等网络就绪后才能挂载。
  • nofail 可以确保即使存储暂时无法访问,您的服务器也不会在启动时卡住。
  • x-systemd.automount 会在首次访问 /storage 时才挂载存储,并在连接中断后自动重新挂载。

重新加载配置并挂载:

systemctl daemon-reload
mount -a
ls /storage

如果 mount -a 没有报错,说明这一行写得正确。之后您可以放心地测试重启:得益于 nofail,即使哪里配置有误,服务器也能正常启动。

Linux 替代方案:通过 23 端口使用 SSHFS

SSHFS 通过 SSH 挂载存储。如果您那里的 445 端口被封锁,或者您更愿意使用 SSH 密钥而不是密码,这种方式就很合适。连接始终是加密的。请在 /storage 上只配置 SMB 或 SSHFS 其中一种,不要同时使用两者。

在 Debian 和 Ubuntu 上安装 SSHFS:

apt-get install -y sshfs

在 AlmaLinux 和 Rocky Linux 上,该软件包位于 EPEL 软件源中:

dnf install -y epel-release
dnf install -y fuse-sshfs

生成一个专用密钥,并将其添加到 Storage Server 上:

ssh-keygen -t ed25519 -f /root/.ssh/storage_ed25519 -N ""
cat /root/.ssh/storage_ed25519.pub | ssh -p 23 u123456@u123456.storage.kernelhost.net install-ssh-key

首次连接时,请输入 yes 确认 Storage Server 的主机指纹,并输入一次密码。install-ssh-key 命令会添加这个密钥,而不会覆盖已有的密钥。此后,您的服务器无需密码即可登录。

手动挂载:

mkdir -p /storage
sshfs -p 23 -o IdentityFile=/root/.ssh/storage_ed25519,reconnect,ServerAliveInterval=15,ServerAliveCountMax=3 u123456@u123456.storage.kernelhost.net: /storage

主机名后面的冒号代表您在 Storage Server 上的主目录,也就是您通过 SMB 共享看到的同一批文件。如需永久挂载,请将下面这一行写入 /etc/fstab:

u123456@u123456.storage.kernelhost.net:  /storage  fuse.sshfs  port=23,IdentityFile=/root/.ssh/storage_ed25519,reconnect,ServerAliveInterval=15,ServerAliveCountMax=3,allow_other,_netdev,nofail,x-systemd.automount  0  0

allow_other 允许 root 以外的用户访问,例如 Web 服务器。reconnect 和两个 ServerAlive 参数可以在网络短暂波动时保持连接稳定。之后和上文一样,执行 systemctl daemon-reload 和 mount -a。

Windows:以加密方式将存储映射为名为“storage”的网络驱动器

Windows 默认通过 SMB 映射网络驱动器。但只有当某一方明确要求加密时,这种连接才会被加密,而在 Windows 下您无法依赖这一点。为了防止任何人在数据经由互联网传输的途中读取您的数据,请在 Windows 下通过 SFTP(也就是通过 SSH)连接存储。为此您需要两款免费的开源程序:WinFsp 负责提供文件系统,SSHFS-Win 则把 SFTP 以网络驱动器的形式带入文件资源管理器。

第 1 步:安装 WinFsp 和 SSHFS-Win

通过“以管理员身份运行”打开 PowerShell,然后粘贴以下命令。这些命令会从 GitHub 下载两个安装包,并在不进行任何询问的情况下完成安装:

[Net.ServicePointManager]::SecurityProtocol = 'Tls12'
$ProgressPreference = 'SilentlyContinue'
Invoke-WebRequest https://github.com/winfsp/winfsp/releases/download/v2.1/winfsp-2.1.25156.msi -OutFile "$env:TEMP\winfsp.msi" -UseBasicParsing
Invoke-WebRequest https://github.com/winfsp/sshfs-win/releases/download/v3.5.20357/sshfs-win-3.5.20357-x64.msi -OutFile "$env:TEMP\sshfs-win.msi" -UseBasicParsing
Start-Process msiexec.exe -Wait -ArgumentList "/i `"$env:TEMP\winfsp.msi`" /qn /norestart"
Start-Process msiexec.exe -Wait -ArgumentList "/i `"$env:TEMP\sshfs-win.msi`" /qn /norestart"

如果您的计算机上已有 winget(例如在 Windows 11 中),也可以只执行 winget install -e --id SSHFS-Win.SSHFS-Win。WinFsp 会随之自动安装。

第 2 步:在文件资源管理器中映射驱动器

  1. 打开文件资源管理器,在左侧选择“此电脑”。
  2. 选择“映射网络驱动器”。在 Windows 11 和 Windows Server 2025 中,这一项藏在三个点按钮的菜单里;在 Windows 10 和 Windows Server 2016 至 2022 中,则位于“计算机”选项卡下。
  3. “驱动器”选择 S:,“文件夹”填写 \\sshfs\u123456@u123456.storage.kernelhost.net!23。末尾的 !23 表示端口;如果省略,SSHFS-Win 会尝试连接 22 端口。
  4. 保持勾选“登录时重新连接”,然后单击“完成”。
  5. 在弹出的凭据窗口中输入您的密码,并勾选“记住我的凭据”。
  6. 该驱动器起初会以一个技术性名称显示。右键单击它,选择“重命名”,然后输入 storage。

此后,存储会以驱动器 storage 的形式出现在“此电脑”中,并在每次登录时自动以加密方式连接。

通过 PowerShell

用一条命令会更快。请在普通的 PowerShell 窗口中执行,不要在通过“以管理员身份运行”打开的窗口中执行,因为在提升权限的会话中映射的驱动器,文件资源管理器是看不到的。执行时 Windows 会提示您输入密码:

net use S: \\sshfs\u123456@u123456.storage.kernelhost.net!23 * /user:u123456 /persistent:yes

然后按如下方式设置驱动器名称 storage:

(New-Object -ComObject Shell.Application).NameSpace('S:').Self.Name = 'storage'

net use 会记住这个驱动器,但不会记住密码。因此,重启之后第一次打开该驱动器时,Windows 会再次询问密码。如果您在这个窗口中勾选“记住我的凭据”,之后 Windows 就会直接连接该驱动器,不再询问。cmdkey 在这里不起作用,因为 SSHFS-Win 只接受在它自己的凭据窗口中输入的凭据。

驱动器是否通过 SSHFS-Win 连接,可以用 net use 查看:S: 这一行的“网络”一栏显示为 WinFsp.Np。这种连接始终经由 SSH,因此是加密的。

Windows 下使用 SMB 必须强制加密

从 Windows 11 24H2 和 Windows Server 2025 起,Windows 可以要求所有出站 SMB 连接都必须加密。只有这样,通过共享 backup 连接的传统方式才是安全的。请在具有管理员权限的 PowerShell 中启用加密:

Set-SmbClientConfiguration -RequireEncryption $true -Confirm:$false

这项设置对这台计算机的所有 SMB 连接都生效。如果您的服务器还连接着其他不支持加密的旧共享,之后将无法再访问它们。然后在普通窗口中映射驱动器,并检查输出中是否显示 Encrypted : True:

Test-NetConnection u123456.storage.kernelhost.net -Port 445
cmdkey /add:u123456.storage.kernelhost.net /user:u123456 /pass
net use S: \\u123456.storage.kernelhost.net\backup /persistent:yes
Get-SmbConnection -ServerName u123456.storage.kernelhost.net | Format-List ServerName,ShareName,Dialect,Encrypted

这种方式用于替代 SSHFS-Win。如果 S: 已通过 SSHFS-Win 连接,请先用 net use S: /delete 断开。在较旧的 Windows 版本上无法强制加密。请在这些版本上按上文所述使用 SSHFS-Win。

在服务和计划任务中使用

驱动器号只在映射它的那个用户的登录会话中有效。因此,服务、计划任务和许多备份程序都看不到 S:。对于自动备份,最好使用本身支持 SFTP 的程序,例如 rclone 或 restic,并填写主机 u123456.storage.kernelhost.net、端口 23 和您的用户名。

常见错误及其原因

提示信息原因解决方法
mount error(13): Permission denied用户名或密码错误,或者“Samba / CIFS”未开启检查凭据文件和开关;重置密码后需相应更新该文件
mount error(115): Operation now in progress445 端口无法访问,或者“外部可访问性”未开启执行上文的端口测试,检查开关,或改用 SSHFS
mount error(112): Host is down客户端与 Storage Server 无法协商出共同的 SMB 版本在挂载选项中加入 vers=3.0
mount error(2): No such file or directory共享名错误共享名始终是 backup
bad option; for several filesystems (e.g. nfs, cifs) you might need a /sbin/mount.<type> helper program.缺少软件包 cifs-utils按上文所述安装该软件包
传输 4 GB 及以上的文件时中断SMB 客户端的缓存在挂载选项中加入 cache=none
Windows:找不到网络路径或网络名(系统错误 53 或 67)缺少 WinFsp 或 SSHFS-Win,路径错误,或者端口被封锁重新安装,检查路径 \\sshfs\u123456@u123456.storage.kernelhost.net!23,执行 Test-NetConnection
Windows 反复要求输入密码密码错误,或者“SSH / SFTP / SCP / rsync”或“外部可访问性”未开启在“连接信息”中核对密码,在访问设置中开启相应开关
Windows(SMB):发生系统错误 86 或 1326用户名或密码错误用 cmdkey /delete:u123456.storage.kernelhost.net 删除后重新添加
Windows(SMB):发生系统错误 1219已经存在一个使用其他凭据建立的连接执行 net use \\u123456.storage.kernelhost.net\backup /delete,然后重新连接

要断开连接,在 Linux 下执行 umount /storage 即可,在 Windows 下执行 net use S: /delete。SSHFS-Win 已保存的凭据可以在 Windows 凭据管理器的“普通凭据”下删除,SMB 的凭据则用 cmdkey /delete:u123456.storage.kernelhost.net 删除。

网络驱动器还是备份工具?

如果程序需要直接写入某个文件夹,例如用于上传、导出或归档,挂载的驱动器是理想之选。至于定期备份,通过 23 端口经 SSH 运行的 rsync、BorgBackup 或 restic 等工具往往更加稳健:它们只传输发生变化的部分,可以从中断处继续,还能按需在您的服务器上就先完成加密。如何搭建这样的方案,请参阅我们关于服务器备份策略的文章;定时执行则可以参考设置 cron 任务的教程。

提示:如果您在访问设置中开启“ZFS 快照目录”,Storage Server 的快照就会以只读目录 .zfs/snapshot 的形式出现。这样,只需把单个文件复制出来即可完成恢复,而不必回滚整个快照。

安全要点

  • 在 Linux 下始终使用 seal 挂载,或者改用 SSHFS,在 Windows 下使用 SSHFS-Win,确保数据以加密方式传输。在 Windows 下,只有在 Windows 11 24H2 或 Windows Server 2025 及更高版本中强制加密时,才使用传统的 SMB。
  • 凭据文件 /etc/storage-credentials 归 root 所有,权限为 600。
  • 在访问设置中关闭您用不到的功能。如果只使用 SSHFS 和 SSHFS-Win,可以让“Samba / CIFS”保持关闭。
  • 如上文所示,为 SSHFS 使用一个仅用于 Storage Server 的专用密钥。如何从整体上加固 SSH,请参阅加固 SSH 并设置密钥登录一文。

常见问题

我的 Storage Server 的共享名是什么?
每台 Storage Server 的 SMB 共享名都是 backup。在 Windows 下,路径为 \\u123456.storage.kernelhost.net\backup;在 Linux 下,路径为 //u123456.storage.kernelhost.net/backup。请将 u123456 替换为您的用户名,它显示在客户中心的“连接信息”中。
Storage Server 需要哪些端口?
通过 SMB 使用网络驱动器需要 445 端口;SSH、SFTP、SCP、rsync、BorgBackup、SSHFS 和 SSHFS-Win 使用 23 端口。此外,还必须在访问设置中开启“外部可访问性”,您的服务器才能通过互联网访问 Storage Server。
与 Storage Server 之间的连接是加密的吗?
Linux 下的 SSHFS 和 Windows 下的 SSHFS-Win 始终是加密的,因为它们经由 SSH 运行。使用 SMB 时,在 Linux 下由挂载选项 seal 启用 SMB 3 加密。在 Windows 下,SMB 连接并不能保证加密,因此我们建议在 Windows 下使用 SSHFS-Win。在 Windows 下,传统的 SMB 只应在 Windows 11 24H2 或 Windows Server 2025 及更高版本中配合 Set-SmbClientConfiguration -RequireEncryption 使用。
为什么重启之后驱动器不见了?
在 Linux 下,通常是 /etc/fstab 中缺少相应条目,或者缺少让系统等待网络就绪的 _netdev 选项。在 Windows 下,映射时必须勾选“登录时重新连接”;使用 SSHFS-Win 时,还必须在凭据窗口中勾选“记住我的凭据”。
net use 已经成功,为什么文件资源管理器里看不到驱动器?
您很可能是在具有管理员权限的窗口中执行了这些命令。在提升权限的会话中映射的驱动器,在普通的文件资源管理器中是看不到的。请在普通的 PowerShell 或命令提示符窗口中重新映射该驱动器。
可以在多台服务器上同时挂载同一个 Storage Server 吗?
可以,多台服务器可以同时访问同一个 Storage Server。请为每台服务器创建单独的文件夹,以免两个系统同时写入相同的文件。

Storage Server 网络驱动器 SMB CIFS SSHFS Linux Windows Server 备份