挂载远程文件夹的最佳方法


40

我有两个运行debian wheezy的RasberryPi,我想在计算机B上从计算机A挂载文件夹。

什么是最好的方式(以最有效的方式)?

我可以通过SMB做到这一点,但是那是针对Windows的,我认为必须有更好的方法在Linux之间共享。


Answers:


31

您可以使用很多东西,其中流行的选项有:

  • NFS
  • 桑巴/ CIFS
  • SSHFS

通过易于设置,我认为它们必须按此顺序放置(顶部:最简单)

SSHFS

通过FUSE,您可以通过ssh挂载远程文件系统。我不会介绍如何做,因为克里斯托弗已经很好地解释了这一点。请注意,为了自动挂载文件,将需要做更多的工作

桑巴舞

它将允许您使用Windows和Unix计算机访问远程文件夹。如果这对您来说并不重要,那么您可能不会从中受益。但是,很容易在init上自动挂载它(只需在/etc/fstab,包括username=<your-samba-username>,password=<your-samba-password>options列中的上输入适当的值即可。

NFS

它可以让您仅通过IP(没有用户名的东西=更快,仅在非恶意 LAN 内使用)或Kerberos票证(仅两个Raspberry太痛苦;但在公司环境中很有用)进行身份验证。

由于它具有内核模式支持,因此它将比sshfs运行得更快。此外,由于不执行加密,因此吞吐量会更高;对于小型Raspberry ARM,它可能会有所作为。

此外,只需信任您的网络就可以轻松进行设置。你必须挂载支持/etc/fstab过了,你不必把敏感数据(如用户名或密码),如果你有你的用户名syncrhronized(同/etc/passwd/etc/group文件),你可以使用通常的POSIX权限的工具集(chownchgrpchmod)。


我将我的Pi用作NFS服务器,其中的磁盘大多包含我的电影和其他媒体(即系统关键性内容,而不是“ / home /”或类似内容)。NFS允许我观看电影,而无需首先将其复制到本地驱动器,但是在将文件写入NFS磁盘时,我更喜欢使用rsync。因此,我以只读方式挂载了我的NFS磁盘,并通过SSH(使用rsync)写了东西。这也阻止了我意外地同步到NFS安装的磁盘(效率非常低)。
zrajm 2014年

@zrajm如何在pi上安装磁盘?
FutuToad 2014年

arisu:/mnt/ytra /mnt/ytra nfs soft,ro,intr 0 2
zrajm 2014年

Samba可能会混淆某些Unix应用程序,尤其是在权限或stat()返回内容周围,例如,依赖于nlinkCIFS不了解的计数的事物。SSHFS给我留下了深刻的印象,因为它在文件服务器上运行了上下文切换功能,而且不支持内部程序所需的必要锁定。因此,NFS ...
2015年

38

SSHFS很棒。它可以使用FUSE将远程目录挂载到本地目录中。以下命令#用于表示命令以方式执行root,而则$表示以普通用户身份执行。由于需要FUSE软件,因此请首先确保其可用并正在运行。

下面的lsmodand grep命令之一可以显示该软件是否已加载并可以使用。任一命令的结果都表明该命令fuse可用。

# lsmod | grep fuse
$ grep -i fuse /lib/modules/$(uname -r)/modules.builtin

如果两个命令均未产生结果,请尝试使用重新启动方式加载内核模块,modprobe然后再次检查。

# modprobe fuse
# lsmod fuse

如果加载模块失败,请使用安装软件apt-get

# apt-get install fuse

安装后再次检查。

# modprobe fuse
# lsmod fuse

在继续之前,必须先安装并运行FUSE。


检查的权限/dev/fuse。权限应为您的普通用户帐户提供读写访问权限。如果您确定自己的普通用户帐户已经具有的读写权限,请跳过此部分/dev/fuse

# ls -l /dev/fuse

输出可能类似于以下内容之一。

crw-rw-rw- 1 root root (all users can read/write)
crw------- 1 root fuse (only root can read/write)
crw-rw---- 1 root fuse (root and members of fuse group can read/write)

在2013年,我的Debian创建了/dev/fuse具有0600权限owner root,group owner fuse。我需要让保险丝组使用该设备,并将我的普通用户帐户添加到该组中,如下所示。

# usermod -aG fuse $your_regular_user_account
# chmod 0660 /dev/fuse

如果需要新的组成员身份,请注销并再次登录以成为该组的成员。


接下来,ssh如下安装在两侧。

# apt-get install ssh

这个答案为Debian写的,但至少在Ubuntu 18.x在,openssh-clientfuse,和其他几个软件包在Ubuntu的一部分sshfs包。该sshfs软件在客户端是必需的,但是如果需要,可以在两侧都安装该软件。软件包的依赖项之一是fuse,但是安装程序会跳过已经安装的软件。

# Ubuntu 18.x: 
# apt-get install sshfs

拥有fusessh可用,并获得使用该设备的许可,/dev/fuse为远程文件系统创建安装点;然后,按照以下说明在本地安装该远程文件系统。

# mkdir /mnt/$directory_name
# chown $your_user:$group /mnt/$directory_name/
$ sshfs $remote_username@$remote_server_name: /mnt/$directory_name/

要挂载home以外的目录,请在冒号后指定该目录。

$ sshfs $remote_username@$remote_server_name:/remote/directory /mnt/$directory_name

要卸载,请使用fusermount

fusermount -u /mnt/$directory_name

如果您有Windows计算机,它也可以将SSHFS与win-sshfs一起使用。该软件将使用SSHFS“映射驱动器”,以便您可以拥有包含远程目录的Windows驱动器号。


1
通过使用其他选项,可以大大提高SSHFS的性能速度。有关NFS的更多信息和速度比较,请参见本文:admin-magazine.com/HPC/Articles/Sharing-Data-with-SSHFS
blendenzo

嘿-我尝试使用您的说明(调整为yum install fuse-sshfs.x86_64),但是当我这样做时modprobe fuse,并没有为我创建保险丝组。所以当我做的时候usermod -a -G fuse [your-user],我得到了usermod: group 'fuse' does not exist。你能帮忙吗?在此先感谢
两栖的

lsmod | grep fuse确实返回结果,而我确实/dev/fuse拥有root 拥有的,m。所以你是说我没团队没事吗?
两栖游戏'17

是的,我得到了crw-rw-rw-. 1 root root 10, 229 Nov 21 15:32 /dev/fuse
两栖游戏,两栖游戏

#apt-get install fuse-utils sshfs之后,我得到“无法找到软件包fuse-utils”。知道为什么吗?(Ubuntu 18.04.01)
Kvothe

7

在Linux中,您可以选择NFS(另请参阅archwiki上有关该文章的文章该文章也可能包含适用于您的发行版的信息)。它具有比samba更高级的功能。如果您需要锁定(即并发acces)文件,则应同时考虑lockd,因为nfs是无状态的。但是,配置比smb困难。我建议同时尝试使用samba和nfs来查看哪一种适合您的需求。


1

我过去曾经使用过SFTP网络驱动器和ExpanDrive,并且我可以毫无疑问地告诉您sshfs的性能都超过了两者。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.