Automount mini-Howto 档案系统自动挂载程式 <author><tt/don@sabotage.org/ <date>v0.3, 22 October 1998 <abstract> 这份文件在描述自动档案系统的自动挂载程式,如何设定并指出一些应该避免的问题。 </abstract> <!-- Table of contents --> <toc> <!-- Begin the document --> <sect>简介 <sect1> 档案系统自动挂载 - 是什麽及为什麽 <p> 档案系统自动挂载是一个可针对特定档案系统自动挂载(卸载)档案系统的 daemon。 假如档案系统已经卸下了,而一个使用者尝试去使用它, 那麽档案系统会自动的再挂载上去。这在大型的网路环境里, 以及一些在机器之间相互挂载档案系统的时候特别有用 (尤其是那些不是一直开机的机器)。 对一些可移式的装置或一些其他用途都很有用,像是可以很容易的在 DOS 档案系统上做一些强制的 ascii 的转换。 <sect1> 档案系统自动挂载程式的种类 <p>在 Linux 上有两种档案系统自动挂载程式; <em>AMD</em> 和 <em>autofs</em>。 AMD 是档案系统自动挂载程式的 daemon ,而且功能就像 SunOS 上的 AMD 一样。它是在 User space 中实作的,就是说它不是核心的一部份。 它也不需要核心知道档案系统自动挂载是怎麽一回事,假如你用 NFS 挂上本机的档案系统,透过 AMD , 它帮你处理了所有透过 NFS 系统的档案系统自动挂载时的网路讯息交换。 Autofs 是一个用以辅助核心的新系统,也就是说核心的档案系统程式码知道自动挂载点在哪, 以及它底层所使用的档案系统是什麽,然後自动挂载程式便可以开始运作。 在这份文件中只会谈到 autofs。 <sect>安装 <p>因为 autofs 是实作在核心空间,你的核心一定要加入 autofs 支援。在 2.0.xx 版,它还是一个实验性选项,但是已经相当稳定。 在版本 2.1.xx (和 2.2.xx) 就不再是实验性的了。 <p>档案系统自动挂载程式和它的设定档都是必备的,用 rpms (在 RedHat 里,是安装的一部份) 是很好的方法。 档案系统自动挂载程式应该由 <tt>/etc/rc.d/init.d</tt> 目录下的RC档启动。 rpm 会替你安装这些程式及设定档,但是你应该去确定它被启动了没,不管是用 RedHat 的 control-panel 或是其他 Linux 套件的任何方式。 非 rpm 的套件也会有适合他们自己系统的那一套。 假如你正在读这份文件,表示你可能不想知道 rc 做些什麽,所以不必花太多功夫在 研究 rc 描述档在做些什麽事。 <sect>设定 <p>利用 RPM 安装 autofs 将会很轻松地把你带到这个步骤, 但是现在的这个部分你可能无法确定你是否曾经做过。 <p>在 /etc 下面有两个档案,一个是 <tt>auto.master</tt> 而另外一个是 <tt>auto.misc</tt> 。 我的 auto.master 看起来像这样: <verb> /auto /etc/auto.misc --timeout 60 </verb> <p>第一个栏位不是挂载点,它是挂载点的集合(在第二个栏位可以找到)所在的地方。 第三个选项是说自动挂载的档案系统在使用後的 60 秒後会试著卸载下来。 当然,如果正在使用中是不能卸下的。 <p> Auto.misc 是一个 “映射档“。 多个映射档可以在 auto.master 中被定义。 我的 auto.misc 看起来像是这样: <verb> kernel -ro,soft,intr ftp.kernel.org:/pub/linux cd -fstype=iso9660,ro :/dev/cdrom zip -fstype=auto :/dev/hdd4 floppy -fstype=vfat :/dev/fd0 </verb> <p> 第一个栏位是挂载点。在这个例子它可能是 /auto/floppy 什麽的。中间栏位是选项; 你可以在 mount 的线上使用说明中找到相关的资讯。最後一个栏位指出档案系统的来源。 写著 "kernel" 的那一行表示用 NFS 来挂载档案系统。其他行的冒号表示这是本机的装置。 <sect>等待卸下档案系统可真是漫长 <p> 有些人可能眼睁睁等著 60 秒的 timeout 时间到并且想著<em> 如果要退出磁片这可真是太久了.. 也许我可以直接对磁碟下 sync 然後拿出磁片而且没有人会注意到。</em> 让我来建议一个 <tt>比较理智的替代方案</tt>。 首先呢,你可以改变 timeout 的值,但是在使用後的15秒或其他秒数就让系统卸下档案系统 似乎有点没效率。 实际上有一个方法可以让档案系统自动挂载程式卸下档案系统。如果你送一个(用 kill 程式) 讯号 <tt>SIGUSR1</tt> 给档案系统自动挂载程序, 它会卸下任何它可以卸下的。但是人们开始在他们的视窗管理程式上做一个卸下档案系统的按钮之前,还有一个小问题。 <p> 档案系统自动挂载程序是被 root 所执行的,所以它只能接受 root 的讯号。 你想用档案系统自动挂载程式可能有半数以上的理由是因为你不是系统管理员却想要 挂入和卸下档案系统。 写一个可以设定使用者身份识别码的C程式可以轻易达成,但这样的方法并不好。 不管怎样,藉由 sudo 程式也可以允许使用者送出一些适当的 kill 讯号。 唯一的问题是 sudo 并不允许你以 ` 来执行次命令,所以你必须自己找出 autofs 的 程序识别码。 你应该有一个程式叫做 killall,这可以让你做到这些: (幸好有这些个建议) <verb> ALL ALL=NOPASSWD:/usr/bin/killall -USR1 automount </verb> 否则,你要允许你的使用者送 -SIGUSR1 给所有的程序。 这对一些程式有不同的影响;它可能会使某些视窗管理器重新启动,而且终止 xemacs。 所以在这儿希望 killall 没有缓冲区溢出的问题... <sect>问题 <p> <sect1>我找不到 /auto/floppy ,或任何我要找的挂载点。 <p> 如果 automount 正确的安装,即使没用到时看不到这些挂载点,当你试著用它时,任何你要 的挂载点都会在那儿。 如果你用图形界面的目录浏览程式,你可能要手动打入挂载点的名字。 不幸的是,无法从看不见的这些挂载点中选出所要用的,正是 autofs 的主要缺点。 如果这造成你的问题,去编辑设定档案。 (提示,就是那些结尾是 .c 的档) <sect1>我怎麽看到已经挂载哪些东西? <p> 用 <tt>df</tt> 命令。 <tt>mount</tt> 不加任何的选项也有同样的功能,并且秀出它所挂上的一些选项。 <sect1>我放进一片 win95 的磁片 ("vfat") 而它却自动侦测到它只是一片一般的 FAT 磁片。 <p> 这不是档案系统自动挂载程式的问题。当这份文件正在写的时候, "auto" 这种档案种类在成功的挂载一个 msdos 档案系统之前并不会尝试 vfat 的挂载。 VFAT 就是把 Win95 和 WinNT 的长档名挤进 FAT/MSDOS 档案系统。 <p> 根据 mount 的其中一个作者说,因为 mount 只是包装了一个必须指定档案系统种类的系统呼叫, 把档案系统种类弄清楚仍然是使用者的责任。 让 mount 照著列表的顺序,去一种一种的档案系统去试,而不是用目前仍在考虑的启发式的方法。 我确定如果有任何人想要努力找出 mount 程式的作者(们),他们将会欢迎你的建议。 所以现在呢,这表示你不能挂载 vfat 除非你放弃自动侦测其他档案系统的能力。 希望这很快就能改进。在此同时,你已经可以很自由的建立多个挂载点并指定不同的档案系统。 <sect1>我的档案系统 <tt>/grumblesmurf</tt> 已经挂上但是用 <tt>kill -SIGUSR1</tt> 却无法卸载。 <p> 这表示它正在使用中。可能连系统管理员都不能用手动的卸载它。 如果你是让它自动挂载的的人(也就是说,不可能是别人正在用它)看看是不是有一个 shell 是在那个目录中。 假如没有的话,找找看其他东西(特别像是目录浏览器之类的)可能留下什麽看不见的东西在里面。 假如你放弃寻找,你可以试试 fuser 程式。 <sect1>有 autofs 这样的好东西,我应该感谢谁呢? <p> 决不会是我。这跟我一点关系也没有。我只是要让大家注意到 autofs 有多棒,有多麽的容易使用. 比起 AMD 的原创的那些人(提示,他们卖一个超额的单功能产品和太古时代版的免费工具) autofs 有很清楚的文件并且我由衷的感谢实作的这些人。 每样东西都有版权声明,很抱歉我不能提供一个感谢清单。 <sect1>我可以到哪里学更多关於档案系统自动挂载的资讯? <p> 有一个 autofs 的入门手册在 url url=" http://www.linuxhq.com/lg/issue24/nielsen.html">。 也可以参考 am-utils 在 <url url="http://www.cs.columbia.edu/~ezk/am-utils"> <p> (感谢这些 URL) </article>