Tux 知道分享是美好的,第一部分

作者:Marcel Gagné

回想一下。很久很久以前... 还记得你妈妈常跟你说的话吗? 没有吗? 嗯,其中一件,我保证她肯定告诉过你分享是好事。 通常,当你因为不肯分享玩具,你的小弟弟或小妹妹已经不停地尖叫了五分钟以上的时候,就会学到这个道理。 好吧,Tux 完全了解分享,这正是我们将在接下来的几篇文章中讨论的内容:如何分享。

如果你要尝试挑选一件(只有一件!)关于 Linux 的特别酷的事情,你可能会说是“网络”。 我可能不得不同意你的看法。 没有什么比 Linux 更擅长网络了,而网络的本质,实际上不就是分享吗。 不错的转折,对吧? Linux 允许你为家里的所有 PC 共享一个单独的拨号(或有线)调制解调器连接。 它允许你共享打印机。 它还允许你进行那种推动局域网发展到今天这种状态的共享。 那种共享就是“文件共享”。

现在,尽管 Linux 非常灵活,但你很快就会发现有数十种不同的方法可以通过网络共享文件。 我们可以从 NFS、SAMBA、CODA、AFS 等中选择。 当所有这些都失败时,总还有 运动鞋网络。 了解它们的作用、它们如何工作、它们现在的状况以及它们未来的发展方向,是决定什么对你来说有意义的第一步。 所以...我想从 NFS 开始讨论,它是网络文件共享实用程序的伟大祖父(或祖母——谁知道呢?)。 它诞生于 80 年代初期,是 Sun Microsystems 的孩子,几乎在你能想到的每个 Linux 或 UNIX 发行版上都无处不在。 NFS 代表“网络文件系统”,你甚至可以为 那个其他操作系统 获取它,这使其成为探索文件共享的理想首选。

就像 Linux 世界中的几乎所有事物一样,NFS 仍在不断发展,不同的版本在不同的发行版上存在。 然而,NFS 已经存在很长时间了,虽然它存在问题(我们稍后会讨论),但它是一个良好、稳定的文件共享机制,值得一看。 在大多数机器上,Linux 实现的 NFS 仍在版本 2。 版本 3 的 NFS,包括改进的性能、更好的文件锁定和其他优点,仍在开发中,并且要求你的内核级别为 2.2.18 或更高(尽管有适用于其他级别的补丁)。 想知道你的内核版本吗? 试试这个命令。

     # uname -r
     2.2.12-20

如果你想查看 Linux NFS 世界的最新和最棒的东西,你可以访问 SourceForge 上的 NFS 项目,网址为 http://nfs.sourceforge.net

但我要离题了...NFS 是一个客户端-服务器系统。 在服务器端,你创建一个目录列表,你想让另一台机器(客户端)可以使用这些目录。 这被称为导出目录。 然后,客户端将这些目录挂载,就像它们是本地驱动器一样。 为了使这一切成为可能,服务器运行几个守护进程。 从客户端,然后你使用类似于这样的命令将目录挂载到你的本地系统上

      mount -t nfs remote_sys:/exported_dir /mnt/local_dir

实际上,-t 是可选的。mount 命令通常可以弄清楚另一端是什么,而无需明确地将其标识为 NFS 挂载。 听起来很简单,是吧? 好的,还有更多内容。 NFS 使用 RPC 作为其信息通信机制。 RPC 代表远程过程调用。 使用 rpcinfo 程序,我们可以确定机器上正在运行哪些 RPC 服务。

     # rpcinfo -p testsys
        program vers proto   port
         100000    2   tcp    111  portmapper
         100000    2   udp    111  portmapper
         100011    1   udp    764  rquotad
         100011    2   udp    764  rquotad
         100005    1   udp    772  mountd
         100005    1   tcp    774  mountd
         100005    2   udp    777  mountd
         100005    2   tcp    779  mountd
         100003    2   udp   2049  nfs

-p 标志告诉 rpcinfo 程序询问远程系统上的端口映射器,以报告它提供的服务。 这当然意味着你需要运行 portmap 守护进程。 如果我们关闭 portmap 守护进程,结果就不太理想。 在我向你展示结果之前,让我们关闭端口映射器。 在 Red Hat 或 Mandrake 系统上,你将使用此命令

     /etc/rc.d/init.d/portmap stop

在 Debian 或 Storm Linux 系统上,请尝试此命令。

     /etc/init.d/portmap stop

现在,这是对同一系统 (testsys) 进行 rpcinfo 探测的结果。

     rpcinfo: can't contact portmapper: RPC: Remote system error - Connection refused 

在我们真正开始导出任何内容之前,我们需要启动 NFS 守护进程。 如果你的系统上已经安装了 NFS(很可能已经安装了),你可以使用与启动端口映射器相同的方式启动它,将“portmap”替换为“nfs”(在 Debian 系统上,你可能需要尝试使用“nfs-server”而不是“nfs”)。 然后,你可以再次运行脚本,使用“status”而不是“start”。 你应该看到类似这样的内容

     # /etc/rc.d/init.d/nfs status
     rpc.mountd (pid 17324) is running...
     nfsd (pid 17340 17339 17338 17337 17336 17335 17334 17333) is running...
     rpc.rquotad (pid 17315) is running... 

如果你执行 ps ax | grep rpc,你还会看到另一个进程 rpc.statd 出现在 rpc 程序列表中。 让我们花点时间访问这些进程,从 rpc.statd 开始。 此守护进程由 nfslock 脚本与 rpc.lockd 一起启动。 它们共同处理文件锁定和锁定恢复(在 NFS 服务器崩溃的情况下)重启时。 根据系统,你不会在进程状态中看到“rpc.lockd”。 相反,你可能只会看到 lockd。 接下来是 rpc.quotad,一个处理 NFS 上的配额支持的程序(配额是基于用户或组对磁盘空间施加的限制)。 我们列表中的下一个是整个 NFS 程序组的真正主力,nfsd。 这是实际处理所有 NFS 用户请求的程序。

最后,我们有 rpc.mountd,它通过查找导出的目录和 /etc/exports 文件来进行验证,以检查挂载导出目录的请求是否有效。 文件中的条目(可以使用你喜欢的编辑器手动编辑)具有以下格式

     /name_of_dir    client_name(permissions)

名称部分非常简单; 它是你想要在网络上共享的目录的完整路径。 客户端名称是客户端机器的主机名。 这也可以很容易地是 IP 地址。 此外,你可以使用通配符使域内的每个主机都可用。 例如,假设你的域名是 myowndomain.com,并且你希望该域中的所有机器都能够访问充当你的 NFS 服务器的机器上的 /mnt/data1。 你将创建此条目

     /mnt/data1    *.myowndomain.com(permissions)

你也可以使用星号使每个网络上的每个主机都了解你的 NFS 服务,但这将是 一个非常糟糕的主意。 然而,到目前为止,共享该驱动器非常简单。 这将我们引向权限方面的问题。

权限有点复杂,应该详细讨论,但我们的时间和空间都不多了(想象一下)。 为此,我们将保持我们的权限列表这次很简单。 这是我的简单 exports 文件,来自地址为 192.168.1.100 的机器。

     /mnt/data1         192.168.1.2(rw,no_root_squash)

这表示我想使 /mnt/data1 可供地址为 192.168.1.2 的计算机使用,并允许它具有读写权限,即使是 root 用户也是如此。 如果我们接受默认设置,那么 root 用户将被视为匿名用户,并且不允许访问磁盘。 这是为了安全起见。 在我的示例中,我假设我,作为系统管理员,是拥有所有机器 root 访问权限的人。 从本质上讲,你可以说 我信任我自己。 一旦我对我的 exports 文件中的信息感到满意,我就必须让 NFS 知道这些信息。 你当然可以重新启动系统或只是 NFS,但这是 Linux。 相反,请以这种方式使用 exportfs 命令。

     /usr/sbin/exportfs -r

在这种情况下,-r 选项代表“重新导出”/etc/exports 中的条目。 有了这些信息,我就可以将该目录挂载到我的客户端机器 (192.168.1.2) 上的一个我创建的本地目录(在本例中为 remote_dir)。

     mount 192.168.1.100:/mnt/data1 /mnt/remote_dir

尽管我可能很冗长,但我现在必须结束本周的讨论,关于这个主题还有更多要讨论的。 NFS 有 糟糕 的一面:安全性、权利、权限、一个关于谁是谁的严肃问题以及许多其他有趣的东西。 我们下次将继续讨论权限和安全性。 NFS 的优点和缺点将被揭示。 在下次之前,记住你妈妈说的话,“分享是美好的”。

正在查找本系列过去的文章? 点击此处查看列表。

加载 Disqus 评论