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

发布于 阅读时间 18 分钟

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

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

本教程分步介绍两种方式:适用于 Linux 和 Windows 的 SMB(也称 CIFS 或 Samba),以及作为 Linux 加密替代方案的 SSHFS。此外还会讲解如何让挂载在重启后自动恢复,以及实践中最常见的错误提示。文中的 Linux 命令适用于 Debian 12 和 13、Ubuntu 22.04 和 24.04,以及 AlmaLinux 和 Rocky Linux 9;Windows 步骤适用于 Windows 10 和 11,以及 Windows Server 2019 至 2025。

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

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

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

  • Samba / CIFS 用于 Windows 和 Linux 下的网络驱动器(445 端口)。
  • SSH / SFTP / SCP / rsync 用于 Linux 下的 SSHFS(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。

首先检查您的服务器能否通过 445 端口连接到 Storage Server。在 Linux 下:

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

在 Windows 下使用 PowerShell:

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

如果输出中显示 TcpTestSucceeded : True,说明连接畅通。如果无法建立连接,请检查“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”的网络驱动器

通过文件资源管理器

  1. 打开文件资源管理器,在左侧选择“此电脑”。
  2. 选择“映射网络驱动器”。在 Windows 11 中,这一项藏在三个点按钮的菜单里;在 Windows Server 中,则位于“计算机”选项卡下。
  3. “驱动器”选择 S:,“文件夹”填写 \\u123456.storage.kernelhost.net\backup。
  4. 勾选“登录时重新连接”和“使用其他凭据连接”,然后单击“完成”。
  5. 输入用户名 u123456 和您的密码,并勾选“记住我的凭据”。
  6. 该驱动器起初显示为“backup (\\u123456.storage.kernelhost.net) (S:)”。右键单击它,选择“重命名”,然后输入 storage。

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

通过 PowerShell 或命令提示符

用两条命令会更快。第一条命令把凭据保存到 Windows 凭据管理器中,执行时会提示您输入密码;第二条命令则永久映射该驱动器:

cmdkey /add:u123456.storage.kernelhost.net /user:u123456 /pass
net use S: \\u123456.storage.kernelhost.net\backup /persistent:yes

驱动器名称 storage 需要在 PowerShell 中设置:

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

重要提示:请在普通窗口中执行这些命令,不要在通过“以管理员身份运行”打开的窗口中执行。在提升权限的会话中映射的驱动器,文件资源管理器是看不到的,即使 net use 提示成功也是如此。

检查并加密连接

Windows 协商使用了哪个 SMB 版本,连接是否已签名或加密,都可以用 PowerShell 查看:

Get-SmbConnection -ServerName u123456.storage.kernelhost.net | Format-List ServerName,ShareName,Dialect,Signed,Encrypted

从 Windows 11 24H2 和 Windows Server 2025 起,您可以强制要求所有出站 SMB 连接都必须加密。此后,Windows 只会连接支持 SMB 3 加密的服务器,而您的 Storage Server 正好支持:

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

这项设置对这台计算机的所有 SMB 连接都生效。如果您的服务器还连接着其他不支持加密的旧共享,之后将无法再访问它们。

在服务和计划任务中使用

驱动器号只在映射它的那个用户的登录会话中有效。因此,服务、计划任务和许多备份程序都看不到 S:。在这些场景中,请使用完整路径 \\u123456.storage.kernelhost.net\backup,并在运行该任务的用户账户中用 cmdkey 保存凭据。

常见错误及其原因

提示信息原因解决方法
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
发生系统错误 53找不到网络路径,通常是 445 端口被封锁执行 Test-NetConnection,检查开关
发生系统错误 67找不到网络名路径必须以 \backup 结尾
发生系统错误 86 或 1326用户名或密码错误用 cmdkey /delete:u123456.storage.kernelhost.net 删除后重新添加
发生系统错误 1219已经存在一个使用其他凭据建立的连接执行 net use \\u123456.storage.kernelhost.net\backup /delete,然后重新连接

要断开连接,在 Linux 下执行 umount /storage 即可,在 Windows 下执行 net use S: /delete。在 Windows 中,已保存的凭据可以用 cmdkey /delete:u123456.storage.kernelhost.net 删除。

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

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

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

安全要点

  • 在 Linux 下始终使用 seal 挂载,或者改用 SSHFS,确保数据以加密方式传输。
  • 凭据文件 /etc/storage-credentials 归 root 所有,权限为 600。
  • 在访问设置中关闭您用不到的功能。如果只使用 SSHFS,可以让“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 使用 23 端口。此外,还必须在访问设置中开启“外部可访问性”,您的服务器才能通过互联网访问 Storage Server。
与 Storage Server 之间的连接是加密的吗?
SSHFS 始终是加密的。使用 SMB 时,在 Linux 下由挂载选项 seal 启用 SMB 3 加密。在 Windows 下,Get-SmbConnection 会显示连接是否已加密;从 Windows 11 24H2 和 Windows Server 2025 起,还可以用 Set-SmbClientConfiguration -RequireEncryption 强制加密。
为什么重启之后驱动器不见了?
在 Linux 下,通常是 /etc/fstab 中缺少相应条目,或者缺少让系统等待网络就绪的 _netdev 选项。在 Windows 下,映射时必须勾选“登录时重新连接”,并且必须保存凭据,例如使用 cmdkey。
net use 已经成功,为什么文件资源管理器里看不到驱动器?
您很可能是在具有管理员权限的窗口中执行了这些命令。在提升权限的会话中映射的驱动器,在普通的文件资源管理器中是看不到的。请在普通的 PowerShell 或命令提示符窗口中重新映射该驱动器。
可以在多台服务器上同时挂载同一个 Storage Server 吗?
可以,多台服务器可以同时访问同一个 Storage Server。请为每台服务器创建单独的文件夹,以免两个系统同时写入相同的文件。

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