5. 文件系统的可视化结构

文件系统最终呈现出来的是一种可视化的结构,可用ls,find,tree等命令把它呈现出来。它就像一颗倒挂的“树”,在树的节点上还可以挂载新的“树”。

下面简单介绍文件系统的挂载。

一个文件系统可以通过一个设备挂载(mount)到某个目录下,这个目录被称为挂载点。有趣的是,在 Linux 下,一个目录本身还可以挂载到另外一个目录下,一个格式化了的文件也可以通过一个特殊的设备 /dev/loop 进行挂载(如 iso 文件)。另外,就文件系统而言,Linux 不仅支持本地文件系统,还支持远程文件系统(如 nfs)。

范例:挂载文件系统

下面简单介绍文件系统挂载的几个实例。

  • 根文件系统的挂载
    • 挂载需要 Root 权限,例如,挂载系统根文件系统 /dev/sda1/mnt
      $ sudo -s
      # mount -t ext3 /dev/sda1 /mnt/
      
    • 查看 /dev/sda1 的挂载情况,可以看到,一个设备可以多次挂载
      $ mount | grep sda1
      /dev/sda1 on / type ext3 (rw,errors=remount-ro)
      /dev/sda1 on /mnt type ext3 (rw)
      
    • 对于一个已经挂载的文件系统,为支持不同属性可以重新挂载
      $ mount -n -o remount, rw /
      
  • 挂载一个新增设备
    • 如果内核已经支持 USB 接口,那么插入 u 盘时,可以通过 dmesg 命令查看对应的设备号,并挂载它。
    • 查看 dmesg 结果中的最后几行内容,找到类似 /dev/sdN 的信息,找出 u 盘对应的设备号
      $ dmesg
      
    • 这里假设 u 盘是 vfat 格式,以便在一些打印店里的 Windows 上也可使用
      # mount -t vfat /dev/sdN /path/to/mountpoint_directory
      
  • 挂载一个 iso 文件或者是光盘
    • 对于一些iso文件或者是 iso 格式的光盘,同样可以通过 mount 命令挂载。
      • 对于 iso 文件:
        # mount -t iso9660 /path/to/isofile /path/to/mountpoint_directory
        
      • 对于光盘:
        # mount -t iso9660 /dev/cdrom /path/to/mountpoint_directory
        
  • 挂载一个远程文件系统
    # mount -t nfs remote_ip:/path/to/share_directory /path/to/local_directory
    
  • 挂载一个 proc 文件系统
    # mount -t proc proc /proc
    
    • proc 文件系统组织在内存中,但是可以把它挂载到某个目录下。通常把它挂载在 /proc 目录下,以便一些系统管理和配置工具使用它。例如 top 命令用它分析内存的使用情况(读取 /proc/meminfo/proc/stat 等文件中的内容); lsmod 命令通过它获取内核模块的状态(读取 /proc/modules); netstat 命令通过它获取网络的状态(读取 /proc/net/dev 等文件)。当然,也可以编写相关工具。除此之外,通过调整 /proc/sys 目录下的文件,可以动态地调整系统配置,比如往 /proc/sys/net/ipv4/ip_forward 文件中写入数字 1 就可以让内核支持数据包转发。(更多信息请参考 proc 的帮助,man proc
  • 挂载一个目录
    $ mount --bind /path/to/needtomount_directory /path/to/mountpoint_directory
    
    • 这个非常有意思,比如可以把某个目录挂载到 ftp 服务的根目录下,而无须把内容复制过去,就可以把相应目录中的资源提供给别人共享。

范例:卸载某个分区

以上都只提到了挂载,那怎么卸载呢?用 umount 命令跟上挂载的源地址或者挂载点(设备,文件,远程目录等)就可以。例如:

$ umount /path/to/mountpoint_directory
或
$ umount /path/to/mount_source

如果想管理大量的或者经常性的挂载服务,那么每次手动挂载是很糟糕的事情。这时就可利用 mount 的配置文件 /etc/fstab,把 mount 对应的参数写到 /etc/fstab 文件对应的列中即可实现批量挂载( mount -a )和卸载( umount -a )。 /etc/fstab 中各列分别为文件系统、挂载点、类型、相关选项。更多信息可参考 fstab 的帮助( man fstab )。

参考资料: