1.12. /mnt

这是一个通用的挂载点,您可以在其下挂载文件系统或设备。“挂载”是指使文件系统可供系统使用的过程。挂载后,您的文件将在挂载点下可访问。此目录通常包含您挂载软盘和 CD 的挂载点或子目录。您也可以在此处创建其他挂载点(如果需要)。标准挂载点将包括 /mnt/cdrom 和 /mnt/floppy。在系统的任何位置创建挂载点都没有限制,但按照惯例和纯粹的实用性考虑,请勿在文件系统中乱放挂载点。应该注意的是,某些发行版(如 Debian)将 /floppy 和 /cdrom 分配为挂载点,而 Redhat 和 Mandrake 则将它们分别放在 /mnt/floppy 和 /mnt/cdrom 中。

但是,应该注意的是,截至 FSSTND 版本 2.3,此目录的用途已更改。

  This directory is provided so that the system administrator may temporarily
  mount a filesystem as needed. The content of this directory is a local issue
  and should not affect the manner in which any program is run.

  This directory must not be used by installation programs: a suitable temporary
  directory not in use by the system must be used instead.
  

1.12.1. 挂载和卸载

在可以使用文件系统之前,必须先将其挂载。然后,操作系统会执行各种簿记操作,以确保一切正常工作。由于 UNIX 中的所有文件都在单个目录树中,因此挂载操作会使新文件系统的内容看起来像是某些已挂载文件系统中现有子目录的内容。

挂载可以按照以下示例进行

 
  $ mount /dev/hda2 /home 
  $ mount /dev/hda3 /usr
  $ 
  
The mount 命令接受两个参数。第一个是对应于包含文件系统的磁盘或分区的设备文件。第二个是它将被挂载在其下的目录。在这些命令之后,两个文件系统的内容看起来就像是以下目录的内容/home/usr目录,分别地。人们会说``/dev/hda2 被挂载到 /home'', 对于以下情况也类似/usr. 要查看任一文件系统,人们可以查看其挂载目录的内容,就像它是任何其他目录一样。请注意设备文件之间的区别,/dev/hda2, 以及挂载目录,/home. 设备文件提供对磁盘原始内容的访问,挂载目录提供对磁盘上文件的访问。挂载目录称为挂载点

Linux 支持多种文件系统类型。mount 尝试猜测文件系统的类型。您也可以使用-t fstype选项直接指定类型;这有时是必要的,因为 mount 使用的启发式方法并非总是有效。例如,要挂载 MS-DOS 软盘,您可以使用以下命令

  $ mount -t msdos /dev/fd0 /floppy
   $
  

挂载目录不必为空,但它必须存在。但是,当文件系统挂载时,其中的任何文件都将无法通过名称访问。(任何已打开的文件仍然可以访问。可以使用来自其他目录的硬链接的文件可以使用这些名称访问。)这样做没有任何危害,甚至可能很有用。例如,有些人喜欢拥有/tmp/var/tmp同义,并使/tmp成为指向的符号链接/var/tmp. 当系统启动时,在/var文件系统挂载之前,在根文件系统上驻留的/var/tmp目录将被使用。当/var被挂载时,它将使根文件系统上的/var/tmp目录不可访问。如果/var/tmp在根文件系统上不存在,则在挂载之前将无法使用临时文件/var.

如果您不打算向文件系统写入任何内容,请使用-rmount 的开关来执行只读挂载。这将使内核停止任何写入文件系统的尝试,并且还将阻止内核更新 inodes 中的文件访问时间。只读挂载对于不可写介质是必需的,例如 CD-ROM。

细心的读者已经注意到一个轻微的后勤问题。第一个文件系统(称为根文件系统,因为它包含根目录)是如何挂载的?因为它显然不能挂载在另一个文件系统上。好吧,答案是它是通过魔法完成的。

有关更多信息,请参阅内核源代码或 Kernel Hackers' Guide。

根文件系统在启动时被神奇地挂载,并且可以依靠它始终处于挂载状态。如果根文件系统无法挂载,则系统无法启动。神奇地作为根目录挂载的文件系统的名称要么编译到内核中,要么使用 LILO 或 rdev 设置。

根文件系统通常首先以只读方式挂载。然后,启动脚本将运行 fsck 以验证其有效性,如果没有任何问题,它们将重新挂载它,以便也允许写入。fsck 不得在已挂载的文件系统上运行,因为在 fsck 运行时对文件系统进行的任何更改都将导致问题。由于根文件系统在检查时以只读方式挂载,因此 fsck 可以毫无顾虑地修复任何问题,因为重新挂载操作将刷新文件系统保留在内存中的任何元数据。

在许多系统中,还有其他文件系统也应在启动时自动挂载。这些在/etc/fstab文件中指定;有关格式的详细信息,请参阅 fstab 手册页。额外文件系统挂载的具体时间取决于许多因素,并且可以由每个管理员根据需要进行配置。

当文件系统不再需要挂载时,可以使用 umount 卸载它。

它当然应该是 unmount,但 'n' 在 70 年代神秘地消失了,此后就再也没有出现过。如果您找到它,请将其归还给贝尔实验室 (Bell Labs),NJ。

umount 接受一个参数:设备文件或挂载点。例如,要卸载上一个示例的目录,可以使用以下命令

  $ umount /dev/hda2
  $ umount /usr
  $
  

有关如何使用该命令的更多说明,请参阅手册页。务必始终卸载已挂载的软盘。不要只是将软盘从驱动器中弹出!由于磁盘缓存,数据不一定在您卸载软盘之前写入软盘,因此过早地从驱动器中取出软盘可能会导致内容损坏。如果您只是从软盘读取,这种情况不太可能发生,但是如果您写入,即使是意外写入,结果也可能是灾难性的。

挂载和卸载需要超级用户权限,即只有 root 用户才能执行此操作。原因是,如果任何用户都可以在任何目录上挂载软盘,那么很容易创建一个软盘,例如,其中包含伪装成/bin/sh或任何其他常用程序的特洛伊木马。但是,通常有必要允许用户使用软盘,并且有几种方法可以做到这一点

最后一个替代方案可以通过向以下文件添加如下行来实现/etc/fstab文件

  /dev/fd0 /floppy
  msdos user,noauto 0 0
  

这些列是:要挂载的设备文件、要挂载到的目录、文件系统类型、选项、备份频率(由 dump 使用)和 fsck 传递号(用于指定启动时应检查文件系统的顺序;0 表示不检查)。

Thenoauto选项阻止在系统启动时自动完成此挂载(即,它阻止 mount -a 挂载它)。user选项允许任何用户挂载文件系统,并且出于安全原因,禁止从挂载的文件系统执行程序(普通程序或 setuid 程序)和解释设备文件。在此之后,任何用户都可以使用以下命令挂载带有 msdos 文件系统的软盘

 
  $ mount /floppy
  $
  

软盘可以(当然也需要)使用相应的 umount 命令卸载。

如果您想提供对多种类型软盘的访问权限,则需要提供多个挂载点。每个挂载点的设置可能不同。例如,要提供对 MS-DOS 和 ext2 软盘的访问权限,您可以在以下文件中添加以下两行/etc/fstab:

  /dev/fd0 /dosfloppy msdos user,noauto 0 0 /dev/fd0
  /ext2floppy ext2 user,noauto 0 0
  

对于 MS-DOS 文件系统(不仅仅是软盘),您可能希望通过使用以下选项来限制对其的访问uid, gidumask文件系统选项,在 mount 手册页上有详细描述。如果您不小心,挂载 MS-DOS 文件系统会使每个人至少具有对其文件中文件的读取访问权限,这不是一个好主意。

注释

[1]

这需要用户进行几秒钟的认真思考。此外,sudo 可以配置为仅允许用户执行某些命令。请参阅 sudo(8)、sudoers(5) 和 visudo(8) 手册页。