13 Jun 2007

使用 sshfs 透过 ssh 映射远程文件

要使用远程文件,我们有两种方式:
1) 复制一份到本地。这可以通过 scp, ftp, rsync, svn, cvs, http, bt, edonkey 等各种各样的方式实现。
2)远程访问文件。实现的方式也是多样的: NFS, Samba/CIFS,以及 FUSE 。

进入 kernel 2.6.14 后,FUSE 极大的丰富了远程访问文件的方式。我们可以使用 sshfs 透过 SSH 协议将远程目录挂载到本地;可以使用 CurlFtpFs 透过 FTP 协议将远程目录挂载到本地;可以使用 cvsfs 通过 CVS 协议将远程目录挂载到本地;甚至可以将 Gmail,Flickr 等映射到本地;……

因为在一台 PC 上 mirror 了 slackware-current 和 slackbuilds.org ,我需要在别的机器上方便的访问这些 mirror。复制一份到每台机器上显然过于浪费空间,而且还要考虑不同版本间的同步问题;于是,我倾向于选择一种合适的远程访问方式。

首先考虑的是 NFS,但是这个东西好象过于复杂,牵扯到许多方面。Samba/CIFS 用的比较多,也还不错,但这次我想玩点新的 ;P

然后就来到了 FUSE 的门前。我以前试用过 CurlFtpfs,从它入手是最方便的。但为那些 mirror 设置 ftp 访问权限似乎挺烦,我也不知道以后会加入什么 mirror,都放在那些目录。看看 sshfs 吧,这个不需要设置共享目录,只要你有 ssh 访问权限就可以了,我用的机器上都不缺这个 ;P

要使用 sshfs,需要 1) Kernel 支持 fuse,2) 用户空间的工具 fuse 和 3) sshfs 的实现 sshfs-fuse。其中 1), 2.6.14 及以后的 kernel 都包含了,选择相应的 config 配置就可以了 (CONFIG_FUSE_FS),2)和 3)都可以在 slackbuilds.org 中找到 slackware 的编译脚本。

安装好这些之后,可以使用如下命令挂载:
sshfs jick@jick:/jick/slackware /mirror/slackware

也可以加入到 /etc/fstab 中:
sshfs#jick@jick:/jick/slackware /mirror/slackware fuse uid=1000,gid=100,umask=0,allow_other,noauto 0 0

将使用的范围放大一些,我可以通过 SSH 访问的服务器并不是太多,因此还是要考虑其他方式映射远程文件,比如支持 FTP 的 curlftpfs。

--
每一个不曾起舞的日子都是对生命的辜负。

No comments:

Post a Comment