跳转至

Mount Network Disk

导言

想将Nas上的盘挂载到常驻的Ubuntu机器上,供jellyfin读取。

文件协议类型

  • The Server Message Block (SMB) Protocol is the network file sharing protocol of Microsoft Windows. The set of message packets defining a particular version of the protocol is called a dialect(方言?).
  • The Common Internet File System (CIFS) is a dialect of SMB.
    • Both SMB and CIFS are also available on VMS. Both SMB and CIFS are also available on other operating systems like Linux and Android via alternate implementations which are not officially supported by Microsoft.
  • mount 通过修改 /etc/fstab 文件实现

Ubuntu 挂载网络硬盘

在Ubuntu系统上挂载SMB共享非常简单,可以通过以下步骤完成:

  1. 安装cifs-utils: 这是一个用于挂载SMB文件系统的工具包。如果你还没有安装它,可以通过以下命令安装:
sudo apt update
sudo apt install cifs-utils
  1. 创建挂载点: 你需要一个目录作为挂载点。可以在你的主目录下创建一个目录,例如:
mkdir /nas_share
  1. 挂载SMB共享: 使用mount.cifs命令挂载共享。你需要提供共享的路径、挂载点,以及访问共享所需的用户名和密码。
# 假设id是1001:1001, 或者cat /etc/passwd来查看
id -u jellyfin 
id -g jellyfin
sudo mount.cifs //192.168.31.242/共享目录 ~/nas_share -o username=你的用户名,password=你的密码,uid=1001,gid=1001

注意:将//192.168.31.242/共享目录替换为实际的共享路径,将~/nas_share替换为你创建的挂载点目录,将你的用户名你的密码替换为实际的SMB用户名和密码。

  1. 验证挂载: 挂载成功后,可以通过以下命令验证:
df -h

你应该能看到类似于//192.168.31.242/共享目录的条目。

  1. 自动挂载(可选): 如果你希望每次启动时自动挂载,可以编辑/etc/fstab文件,添加以下行:
//192.168.31.242/共享目录 /home/你的用户名/nas_share cifs username=你的用户名,password=你的密码,uid=1000,gid=1000 0 0

注意:将上述路径和用户名、密码替换为你的实际信息。uid=1000,gid=1000表示将挂载的文件所有权设置为当前用户(假设用户ID和组ID为1000)。

完成以上步骤后,你应该能够在Ubuntu系统上成功挂载并访问NAS的SMB共享。如果在挂载过程中遇到任何问题,请提供详细的错误信息,我可以帮助你进一步排查。

无密码情况

# ip acsa-med.acsalab.com
mount 114.214.236.245:/volume1/acsa-med /acsa-med
mount -o soft,proto=rdma,port=2050 10.1.13.1:/home /staff

# 挂载网络共享文件夹Entertainment 到ubuntu空目录/synology,除开root,本地用户yyy也能访问:
sudo apt-get install cifs-utils
# 可以省略 password。 
sudo mount.cifs //synology.acsalab.com/Entertainment /synology -o user=xxx vers=3.0
  • 注意: 挂载的时候选择ipv6域名synology.acsalab.com更好, 之前ipv4反而走了WARP的wiregaurd代理导致链接不上

取消挂载

sudo umount /nas_share/home

umount: /nas_share/home: target is busy.

shaojiemike@tsjubuntu /nas_share/home  [01:01:57]
> sudo umount /nas_share/home
umount: /nas_share/home: target is busy.
  • kill相关占用进程 lsof +f -- /mountPath | sed -n '2,$p' | awk '{print $2}' | sudo xargs -r kill -9

强制卸载

如果确认可以安全地终止使用挂载点的所有进程,可以使用umount -l(懒卸载)或umount -f(强制卸载):

  • 懒卸载:
sudo umount -l /nas_share/home
  • 强制卸载:
sudo umount -f /nas_share/home

懒卸载会立即分离文件系统,但不会终止正在使用该文件系统的进程。强制卸载会尝试立即卸载文件系统,即使文件系统正在使用。

强制取消 CIFS Share 挂载

-llazy的方式unmount所有-a 文件系统为-t cifs的挂载

umount -a -t cifs -l /path/to/share

lazy unmount的细节

umount -l /media/disk 的细节

  • 立即从目录结构中实现卸载,即新进程将无法通过/media/disk访问/dev/sdb1
  • 正在访问该文件系统的程序不受影响。即正在操作/media/disk的进程不会被打断,且仍可以读写/dev/sdb1中的所有文件。
  • 如果所有进程对/media/disk的操作都执行完,那么才真正地umount。
  • 由此可知,lazy umount并没有真正实现umount,仅用于特殊需要的情况,而用这种方法来卸载U盘是不安全的。

问题

取消挂载后出现 ls: cannot access 'nas': No such device

root@brainiac1:/home/qcjiang/mnt# ls -al
ls: cannot access 'nas': No such device
total 8
drwxr-xr-x  3 root    root    4096 May 11 15:52 .
drwxr-xr-x 23 qcjiang qcjiang 4096 May 11 15:52 ..
d?????????  ? ?       ?          ?            ? nas

root@brainiac1:/home/qcjiang/mnt/nas# ls -al
ls: cannot open directory '.': No such device

root@brainiac1:/home/qcjiang/mnt# lsof /mntSyno
lsof: WARNING: can't stat() cifs file system /home/qcjiang/mnt/nas
      Output information may be incomplete.
  • d?????????经常出现在无权限访问时,需要chmod +x /path解决
  • 但是这里是没有处理空cifs挂载,运行umount /home/qcjiang/mnt/nas 即可解决。

参考文献