系统管理指南:设备和文件系统

第 19 章 挂载和取消挂载文件系统(任务)

本章介绍如何在 Solaris OS 中挂载和取消挂载文件系统。

以下是本章中的逐步说明列表。

挂载文件系统概述

创建文件系统后,需要使其对系统可用,以便您可以使用它。通过挂载文件系统可使该文件系统可用,这会将文件系统连接到指定挂载点上的系统目录树。始终会挂载根 (/) 文件系统。

下表提供了根据文件系统的使用方法对其进行挂载的指南。

所需挂载类型 

建议挂载方法 

无需频繁挂载的本地或远程文件系统 

从命令行手动键入的 mount 命令。

需要频繁挂载的本地文件系统 

/etc/vfstab 文件,用于在多用户状态下引导系统时自动挂载文件系统。

需要频繁挂载的远程文件系统,如起始目录 

  • /etc/vfstab 文件,用于在多用户状态下引导系统时自动挂载文件系统。

  • AutoFS,用于对其进行访问时自动挂载文件系统,或在转到其他目录时取消挂载文件系统。

要提高性能,还可以使用 CacheFS 文件系统高速缓存远程文件系统。 

如有必要,可以通过将包含文件系统的可移除介质插入到驱动器中并运行 volcheck 命令,挂载该介质。有关挂载可移除介质的更多信息,请参见第 1 章,管理可移除介质(概述)

用于挂载和取消挂载文件系统的命令

下表列出了 /usr/sbin 目录中用于挂载和取消挂载文件系统的命令。

表 19–1 用于挂载和取消挂载文件系统的命令

命令 

说明 

手册页 

mount

挂载文件系统和远程资源。 

mount(1M)

mountall

挂载 /etc/vfstab 文件中指定的所有文件系统。当系统进入多用户模式时,mountall 命令会自动运行。

mountall(1M)

umount

取消挂载文件系统和远程资源。 

mount(1M)

umountall

取消挂载 /etc/vfstab 文件中指定的所有文件系统。

mountall(1M)

在使用 mountmountall 命令时,请牢记以下要点:

常用挂载选项

下表介绍了可以使用 mount -o 选项指定的常用选项。如果指定多个选项,请使用逗号(无空格)将其分隔。例如,-o ro,nosuid

有关每种文件系统类型的挂载选项的完整列表,请参阅特定的挂载手册页(例如 mount_ufs(1M))。

表 19–2 常用的 -o 挂载选项

挂载选项 

文件系统 

说明 

bg | fg

NFS 

如果第一个挂载尝试失败,请在后台 (bg) 或前台 (fg) 重试其他挂载。此选项对于非关键的 vfstab 项是安全的。缺省情况下使用 fg

hard | soft

NFS 

如果服务器没有响应,则指定过程。soft 选项表示返回了错误。hard 选项表示继续重试请求,直到服务器响应为止。缺省情况下使用 hard

intr | nointr

NFS 

指定在硬挂载的文件系统上等待响应时,是否将键盘中断传送到挂起的进程。缺省情况下使用 intr(允许中断)。

largefiles | nolargefiles

UFS 

可用于创建大于 2 GB 的文件。largefiles 选项意味着使用此选项挂载的文件系统可能包含大于 2 GB 的文件。如果指定了 nolargefiles 选项,则无法在运行 Solaris 2.6 或兼容版本的系统上挂载文件系统。缺省情况下使用 largefiles

logging | nologging

UFS 

用于启用或禁用文件系统的日志记录。UFS 日志记录是在将事务(构成完整 UFS 操作的更改)应用于 UFS 文件系统之前将事务存储到日志中的过程。日志记录有助于防止 UFS 文件系统变得不一致,这意味着可以跳过 fsck。跳过 fsck 可减少系统崩溃或异常关闭系统后重新引导系统的时间。

日志是通过文件系统上的空闲块分配的,对于每 1 GB 文件系统其大小约为 1 MB,最大为 64 MB。缺省情况下使用 logging

atime | noatime

UFS 

限制文件的访问时间更新,但是如果更新与对上次更改文件状态的时间或上次修改文件的时间的更新一致则除外。有关更多信息,请参见 stat(2)。此选项可减少访问时间不重要的文件系统上的磁盘活动(例如,Usenet 新闻假脱机)。缺省情况下会记录常规访问时间 (atime)。

remount

所有 

更改与已挂载的文件系统关联的挂载选项。通常,此选项可以与除 ro 之外的任何选项结合使用。但是,使用此选项可进行的更改取决于文件系统的类型。

retry=n

NFS 

在挂载操作失败时重试该操作。n 是重试的次数。

ro | rw

CacheFS、NFS、PCFS、UFS、HSFS 

指定读/写 (rw) 或只读 (ro)。如果不指定此选项,则缺省情况下使用 rw。HSFS 的缺省选项是 ro

suid | nosuid

CacheFS、HSFS、NFS、UFS 

允许或禁止执行 setuid。缺省情况下允许执行 setuid

/etc/vfstab 文件的字段说明

/etc/vfstab 文件中的项包含七个字段,下表介绍了这些字段。

表 19–3 /etc/vfstab 文件的字段说明

字段名 

说明 

device to mount

此字段可标识以下内容之一: 

  • 本地 UFS 文件系统的块设备名称(例如 /dev/dsk/c0t0d0s0)。

  • 远程文件系统的资源名称(例如 myserver:/export/home)。有关 NFS 的更多信息,请参见《系统管理指南:IP 服务》

  • 要交换的片的块设备名称(例如 /dev/dsk/c0t3d0s1)。

  • 虚拟文件系统的目录。

device to fsck

device to mount 字段标识的 UFS 文件系统对应的原始(字符)设备名称(例如 /dev/rdsk/c0t0d0s0)。此字段可确定 fsck 命令使用的原始接口。如果没有适用设备,请使用连字符 (-),如对于只读文件系统或远程文件系统。

mount point

标识挂载文件系统的位置(例如 /usr)。

 

FS type

标识文件系统的类型。 

fsck pass

此字段为 fsck 命令用来确定是否检查文件系统的传送号。如果此字段包含短划线 (-),则不会检查文件系统。

如果此字段包含零,则不会检查 UFS 文件系统。但是,会检查非 UFS 文件系统。如果此字段包含的值大于零,则会始终检查文件系统。  

对于此字段中的值为 1 的所有文件系统,将按它们在 vfstab 文件中出现的顺序进行检查(每次检查一个)。如果在 fsck pass 值大于 1 的多个 UFS 文件系统上运行 fsck 命令并且使用了整理选项 (-o p),则 fsck 命令将自动并行检查不同磁盘上的文件系统,以最大程度地提高效率。否则,传送号的值没有任何作用。

mount at boot

设置为 yesno,以指示在引导系统时 mountall 命令是否应该自动挂载文件系统。请注意,此字段与 AutoFS 无关。根 (/)、/usr/var 文件系统最初不是从 vfstab 文件挂载的。对于这些文件系统以及诸如 /proc/dev/fd 之类的虚拟文件系统,此字段应该始终设置为 no

mount options

挂载文件系统时使用的一系列以逗号分隔的选项(中间无空格)。使用短划线 (-) 表示没有选项。有关常用挂载选项的列表,请参见表 19–2


注 –

必须为 /etc/vfstab 文件中的每个字段输入一个值。如果某个字段没有值,请务必指定一个短划线 (-)。否则,系统可能无法成功引导。同样,字段值也不能为空白。


挂载文件系统

以下各节介绍如何通过在 /etc/vfstab 文件中添加项或从命令行使用 mount 命令来挂载文件系统。

如何确定挂载的文件系统

可以使用 mount 命令确定已经挂载的文件系统。


$ mount [ -v ]

-v 可以详细模式显示已挂载文件系统的列表。


示例 19–1 确定挂载的文件系统

此示例说明如何使用 mount 命令显示有关当前挂载的文件系统的信息。


$ mount

/ on /dev/dsk/c0t0d0s0 read/write/setuid/intr/largefiles/xattr/onerror=...

/devices on /devices read/write/setuid/dev=46c0000 on Thu Sep  ...

/system/contract on ctfs read/write/setuid/devices/dev=43c0001 ... 

/usr on /dev/dsk/c0t0d0s6 read/write/setuid/intr/largefiles/xattr/...

/proc on /proc read/write/setuid/dev=4700000 on Thu Sep  2 ...

/etc/mnttab on mnttab read/write/setuid/dev=47c0000 on Thu Sep  2 ...

/etc/svc/volatile on swap read/write/setuid/devices/xattr/dev=4480001 ...

/system/object on objfs read/write/setuid/devices/dev=44c0001 ...

/dev/fd on fd read/write/setuid/dev=4800000 on Thu Sep  2 ...

/var/run on swap read/write/setuid/xattr/dev=1 on Thu Sep  2 ...

/tmp on swap read/write/setuid/xattr/dev=2 on Thu Sep  2 ...

/stuff on /dev/dsk/c0t0d0s5 read/write/setuid/intr/largefiles/xattr...

/export/home on /dev/dsk/c0t0d0s7 read/write/setuid/intr/largefiles/...

/home/rimmer on pluto:/export/home/rimmer remote/read/write/setuid/xattr/...

$

Procedure如何向 /etc/vfstab 文件添加项

  1. 成为超级用户或承担等效角色。

  2. 如有必要,请为要挂载的文件系统创建挂载点。


    # mkdir /mount-point
    

    本地系统上必须存在挂载点才能挂载文件系统。挂载点是要向其附加已挂载文件系统的目录。

  3. 编辑 /etc/vfstab 文件并添加项。请确保执行以下操作:

    1. 使用空白(空格或制表符)分隔各个字段。

    2. 如果字段没有内容,请指定连字符 (-)。

    3. 保存更改。

    有关 /etc/vfstab 字段各项的详细信息,请参见表 19–3


    注 –

    由于在引导过程中内核会将根 (/) 文件系统挂载为只读,因此只有 remount 选项(以及可以与 remount 结合使用的选项)会影响 /etc/vfstab 文件中的根 (/) 项。



示例 19–2 向 /etc/vfstab 文件添加项

以下示例说明如何将磁盘片 /dev/dsk/c0t3d0s7 作为 UFS 文件系统挂载到挂载点 /files1。原始字符设备 /dev/rdsk/c0t3d0s7 会指定为 device to fsckfsck pass 值为 2 意味着将检查文件系统,但不是按顺序检查。


#device           device             mount    FS       fsck   mount    mount

#to mount         to fsck            point    type     pass   at boot  options

#

/dev/dsk/c0t3d0s7 /dev/rdsk/c0t3d0s7 /files1  ufs      2      yes       -

以下示例说明如何将 /export/man 目录作为 NFS 文件系统从系统 pluto 挂载到挂载点 /usr/man 上。由于该目录是 NFS 文件系统,因此既不会指定 device to fsck 也不会指定 fsck pass。在本示例中,mount optionsro(只读)和 soft


#device           device             mount    FS       fsck   mount    mount

#to mount         to fsck            point    type     pass   at boot  options

pluto:/export/man   -                /usr/man nfs      -      yes       ro,soft

以下示例说明如何将根 (/) 文件系统挂载到回送挂载点 /tmp/newroot 上。必须始终在 LOFS 文件系统中的文件系统之后挂载 LOFS 文件系统。


#device           device             mount    FS       fsck   mount    mount

#to mount         to fsck            point    type     pass   at boot  options

#

/                   -                /tmp/newroot lofs -      yes       -                   

Procedure如何挂载文件系统(/etc/vfstab 文件)

  1. 成为超级用户或承担等效角色。

  2. 挂载 /etc/vfstab 文件中列出的文件系统。


    # mount /mount-point
    

    其中 /mount-point 指定了 /etc/vfstab 文件的 mount pointdevice to mount 字段中的项。通常,指定挂载点较为容易。


示例 19–3 挂载文件系统(/etc/vfstab 文件)

以下示例说明如何挂载 /etc/vfstab 文件中列出的 /usr/dist 文件系统。


# mount /usr/dist


示例 19–4 挂载所有文件系统(/etc/vfstab 文件)

以下示例说明在已挂载文件系统的情况下使用 mountall 命令时显示的消息。


# mountall

/dev/rdsk/c0t0d0s7 already mounted

mount: /tmp already mounted

mount: /dev/dsk/c0t0d0s7 is already mounted, /export/home is busy,

        or the allowable number of mount points has been exceeded

使用 mountall 命令时,在挂载具有 device to fsck 项的所有文件系统之前,将对其进行检查和修复(如有必要)。

以下示例说明如何挂载 /etc/vfstab 文件中列出的所有本地系统。


# mountall -l

# mount

/ on /dev/dsk/c0t0d0s0 read/write/setuid/intr/largefiles/xattr/onerror=...

/devices on /devices read/write/setuid/dev=46c0000 on Thu Sep  ...

/system/contract on ctfs read/write/setuid/devices/dev=43c0001 ... 

/usr on /dev/dsk/c0t0d0s6 read/write/setuid/intr/largefiles/xattr/...

/proc on /proc read/write/setuid/dev=4700000 on Thu Sep  2 ...

/etc/mnttab on mnttab read/write/setuid/dev=47c0000 on Thu Sep  2 ...

/etc/svc/volatile on swap read/write/setuid/devices/xattr/dev=4480001 ...

/system/object on objfs read/write/setuid/devices/dev=44c0001 ...

/dev/fd on fd read/write/setuid/dev=4800000 on Thu Sep  2 ...

/var/run on swap read/write/setuid/xattr/dev=1 on Thu Sep  2 ...

/tmp on swap read/write/setuid/xattr/dev=2 on Thu Sep  2 ...

/stuff on /dev/dsk/c0t0d0s5 read/write/setuid/intr/largefiles/xattr...

/export/home on /dev/dsk/c0t0d0s7 read/write/setuid/intr/largefiles/...

以下示例说明如何挂载 /etc/vfstab 文件中列出的所有远程文件系统。


# mountall -r

# mount

/ on /dev/dsk/c0t0d0s0 read/write/setuid/intr/largefiles/xattr/onerror=...

/devices on /devices read/write/setuid/dev=46c0000 on Thu Sep  ...

/system/contract on ctfs read/write/setuid/devices/dev=43c0001 ... 

/usr on /dev/dsk/c0t0d0s6 read/write/setuid/intr/largefiles/xattr/...

/proc on /proc read/write/setuid/dev=4700000 on Thu Sep  2 ...

/etc/mnttab on mnttab read/write/setuid/dev=47c0000 on Thu Sep  2 ...

/etc/svc/volatile on swap read/write/setuid/devices/xattr/dev=4480001 ...

/system/object on objfs read/write/setuid/devices/dev=44c0001 ...

/dev/fd on fd read/write/setuid/dev=4800000 on Thu Sep  2 ...

/var/run on swap read/write/setuid/xattr/dev=1 on Thu Sep  2 ...

/tmp on swap read/write/setuid/xattr/dev=2 on Thu Sep  2 ...

/stuff on /dev/dsk/c0t0d0s5 read/write/setuid/intr/largefiles/xattr...

/stuff on /dev/dsk/c0t0d0s5 read/write/setuid/intr/largefiles/xattr...

/export/home on /dev/dsk/c0t0d0s7 read/write/setuid/intr/largefiles/...

/home/rimmer on pluto:/export/home/rimmer remote/read/write/setuid/xattr/...

Procedure如何挂载 UFS 文件系统(mount 命令)

  1. 成为超级用户或承担等效角色。

  2. 如有必要,请为要挂载的文件系统创建挂载点。


    # mkdir /mount-point
    

    本地系统上必须存在挂载点才能挂载文件系统。挂载点是要向其附加已挂载文件系统的目录。

  3. 挂载 UFS 文件系统。


    # mount [-o mount-options] /dev/dsk/device-name /mount-point
    
    -o mount-options

    指定可以用来挂载 UFS 文件系统的挂载选项。有关选项的列表,请参见表 19–2mount_ufs(1M)

    /dev/dsk/device-name

    指定包含文件系统的片的磁盘设备名称(例如 /dev/dsk/c0t3d0s7)。 要查看磁盘的片信息,请参见如何显示磁盘片信息

    /mount-point

    指定要挂载文件系统的目录。


示例 19–5 挂载 UFS 文件系统(mount 命令)

以下示例说明如何将 /dev/dsk/c0t3d0s7 挂载到 /files1 目录上。


# mount /dev/dsk/c0t3d0s7 /files1

Procedure如何挂载不包含大文件的 UFS 文件系统(mount 命令)

挂载文件系统时,缺省情况下会选用 largefiles 选项。使用此选项可以创建大于 2 GB 的文件。一旦文件系统包含大文件,就无法使用 nolargefiles 选项重新挂载文件系统或将其挂载到运行 Solaris 2.6 或兼容版本的系统上,直到删除任何大文件并运行 fsck 命令将状态重置为 nolargefiles 为止。

此过程假定文件系统包含在 /etc/vfstab 文件中。

  1. 成为超级用户或承担等效角色。

  2. 如有必要,请为要挂载的文件系统创建挂载点。


    # mkdir /mount-point
    

    本地系统上必须存在挂载点才能挂载文件系统。挂载点是要向其附加已挂载文件系统的目录。

  3. 确保文件系统中不存在大文件。


    # cd /mount-point
    
    # find . -xdev -size +20000000 -exec ls -l {} \;
    

    其中 /mount-point 用于标识要检查是否包含大文件的文件系统的挂载点。

  4. 如有必要,请删除此文件系统中的任何大文件或将其移动到其他文件系统。

  5. 取消挂载文件系统。


    # umount /mount-point
    
  6. 重置文件系统状态。


    # fsck /mount-point
    
  7. 使用 nolargefiles 选项重新挂载文件系统。


    # mount -o nolargefiles /mount-point
    

示例 19–6 挂载不包含大文件的文件系统(mount 命令)

以下示例说明如何检查 /datab 文件系统并使用 nolargefiles 选项将其重新挂载。


# cd /datab

# find . -xdev -size +20000000 -exec ls -l {} \;

# umount /datab 

# fsck /datab

# mount -o nolargefiles /datab

Procedure如何挂载 NFS 文件系统(mount 命令)

  1. 成为超级用户或承担等效角色。

  2. 如有必要,请为要挂载的文件系统创建挂载点。


    # mkdir /mount-point
    

    本地系统上必须存在挂载点才能挂载文件系统。挂载点是要向其附加已挂载文件系统的目录。

  3. 确保资源(文件或目录)在服务器中可用。

    要挂载 NFS 文件系统,必须使用 share 命令使资源在服务器中可用。有关如何共享资源的信息,请参见《系统管理指南:网络服务》中的“关于 NFS 服务”

  4. 挂载 NFS 文件系统。


    # mount -F nfs [-o mount-options] server:/directory /mount-point
    
    -o mount-options

    指定可以用来挂载 NFS 文件系统的挂载选项。有关常用的 mount 选项的列表,请参见表 19–2;有关选项的完整列表,请参见 mount_nfs(1M)

    server:/directory

    指定包含共享资源的服务器主机名,以及要挂载的文件或目录的路径。

    /mount-point

    指定要挂载文件系统的目录。


示例 19–7 挂载 NFS 文件系统(mount 命令)

以下示例说明如何将 /export/packages 目录从服务器 pluto 挂载到 /mnt 上。


# mount -F nfs pluto:/export/packages /mnt

Procedurex86: 如何从硬盘挂载 PCFS (DOS) 文件系统(mount 命令)

使用以下过程可从硬盘挂载 PCFS (DOS) 文件系统。

  1. 成为超级用户或承担等效角色。

  2. 如有必要,请为要挂载的文件系统创建挂载点。


    # mkdir /mount-point
    

    本地系统上必须存在挂载点才能挂载文件系统。挂载点是要向其附加已挂载文件系统的目录。

  3. 挂载 PCFS 文件系统。


    # mount -F pcfs [-o rw | ro] /dev/dsk/device-name:logical-drive /mount-point
    
    -o rw | ro

    指定可以将 PCFS 文件系统挂载为读/写 (rw) 还是只读 (ro)。如果不指定此选项,则缺省情况下使用 rw

    /dev/dsk/device-name

    指定整个磁盘的设备名称(例如 /dev/dsk/c0t0d0p0)。

    logical-drive

    指定 DOS 逻辑驱动器名(c 到 z)或驱动器号(1 到 24)。驱动器 c 相当于驱动器 1,表示驱动器上的主 DOS 片。所有其他字母或数字均表示扩展的 DOS 片内的 DOS 逻辑驱动器。

    /mount-point

    指定要挂载文件系统的目录。

    请注意,必须使用冒号分隔 device-namelogical-drive


示例 19–8 x86: 从硬盘挂载 PCFS (DOS) 文件系统(mount 命令)

以下示例说明如何将主 DOS 片中的逻辑驱动器挂载到 /pcfs/c 目录上。


# mount -F pcfs /dev/dsk/c0t0d0p0:c /pcfs/c

以下示例说明如何在 /mnt 目录上将扩展的 DOS 片中的第一个逻辑驱动器挂载为只读。


# mount -F pcfs -o ro /dev/dsk/c0t0d0p0:2 /mnt

取消挂载文件系统

取消挂载文件系统会将该文件系统从文件系统挂载点删除,并从 /etc/mnttab 文件中删除相应项。部分文件系统管理任务无法在已挂载的文件系统上执行。出现以下情况时,应取消挂载文件系统:

在紧急情况下,可以使用 umount -f 选项强制取消挂载繁忙的文件系统。建议在正常情况下不要使用此做法,因为取消挂载包含打开文件的文件系统可能会导致数据丢失。此选项只能用于 UFS 和 NFS 文件系统。

取消挂载文件系统的先决条件

取消挂载文件系统的先决条件包括:

如何验证文件系统是否已取消挂载

要验证是否已取消挂载一个或多个系统,请检查 mount 命令的输出。


$ mount | grep unmounted-file-system

$

Procedure如何停止访问文件系统的所有进程

  1. 成为超级用户或承担等效角色。

  2. 列出正在访问文件系统的所有进程,以便确定要停止的进程。


    # fuser -c [ -u ] /mount-point
    
    -c

    针对文件系统挂载点的文件以及那些已挂载文件系统内的任何文件进行报告。

    -u

    显示每个进程 ID 的用户登录名。

    /mount-point

    指定要为其停止进程的文件系统的名称。

  3. 停止正在访问文件系统的所有进程。


    # fuser -c -k /mount-point
    

    SIGKILL 会发送到正在使用文件系统的每个进程。


    注 –

    在没有首先警告用户的情况下,不应停止用户进程。


  4. 验证是否没有进程正在访问文件系统。


    # fuser -c /mount-point
    

示例 19–9 停止访问文件系统的所有进程

以下示例说明如何停止正在使用 /export/home 文件系统的进程 4006c


# fuser -c /export/home

/export/home:     4006c

# fuser -c -k /export/home

/export/home:     4006c

# fuser -c /export/home

/export/home: 

Procedure如何取消挂载文件系统

使用以下过程可取消挂载除根 (/)、/usr/var 文件系统之外的文件系统。


注 –

根 (/)、/usr/var 文件系统只能在关机过程中取消挂载。系统需要有这些文件系统才能正常工作。


  1. 确保已满足取消挂载文件系统的先决条件中列出的先决条件。

  2. 取消挂载文件系统。


    # umount /mount-point
    

    其中 /mount-point 是要取消挂载的文件系统的名称。这可以是以下各项之一:

    • 挂载文件系统的目录的名称

    • 文件系统的设备名称路径

    • NFS 文件系统的资源

    • LOFS 文件系统的回送目录


示例 19–10 取消挂载文件系统

以下示例说明如何取消挂载本地起始文件系统。


# umount /export/home

以下示例说明如何取消挂载片 7 上的文件系统。


# umount /dev/dsk/c0t0d0s7

以下示例说明如何强制取消挂载 /export 文件系统。


# umount -f /export

# 

以下示例说明如何取消挂载 /etc/vfstab 文件中除根 (/)、/proc/var/usr 文件系统之外的所有文件系统。


# umountall

除繁忙的那些文件系统以外,将取消挂载其他所有文件系统。