Linux【6】-硬盘管理2-挂载(mount)

一、手动挂载分区

我们前面提到过,Linux 中的文件系统都是树形结构,所有的文件系统结合 起来就形成一个大的目录树,这个目录树的“根”就是根目录“/”。根分区在开 机的时候就自动挂载在根目录上。我们创建好的文件系统同样也要挂载到这个目 录树上才能被我们使用。挂载点一定是目录,这个目录就是访问该文件系统的入 口。

所以我们必须将我们刚刚格式化好的分区挂载到目录树上去,我们首先来挂 载第一个分区/dev/sdb1。

[root@localhost ~]# mkdir /Log #我们的挂载点
[root@localhost ~]# mount -t ext4 /dev/sdb1 /Log
# -t 指明挂载的分区文件系统类型,/dev/sdb1 指明挂载的分区名,/Log 指明挂载点
[root@localhost ~]# mount
/dev/sda2 on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0")
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
/dev/sdb1 on /Log type ext4 (rw)
# 用 mount 命令不跟参数也可以查看当前挂载的设备,主要是设备名,设备挂载点和设
备# 的访问属性
[root@localhost ~]# df
文件系统 1K-块 已用 可用 已用% 挂载点
/dev/sda2 18577148 3451884 14181600 20% /
tmpfs 1026952 88 1026864 1% /dev/shm
/dev/sdb1 103216920 192116 97781592 1% /Log

umpo# 设备挂载点

[root@localhost ~]# umount /dev/sdb1
[root@localhost ~]# df
文件系统 1K-块 已用 可用 已用% 挂载点
/dev/sda2 18577148 3451884 14181600 20% /
tmpfs 1026952 88 1026864 1% /dev/shm
# 可以用 umount 命令卸载一个设备
  • 尽量将分区挂载空目录上
  • 不要重复挂载分区

用法:mount [选项] 分区/设备名 挂载目录

挂载文件系统

  • -t :与 mkfs 的选项非常类似的,可以加上文件系统种类来指定欲 挂载的类型常见的 Linux 支持类型有:ext2、ext3、ext4、vfat、 reiserfs、iso9660(光盘格式), nfs, cifs, smbfs(此三种为网络文件系统 类型)。
  • -L :系统除了利用设备名 (例如 /dev/hdc6) 之外,还可以利用文 件系统的标签(Label)来进行挂载。
  • -l :单纯的输入 mount 会显示目前挂载的信息。加上 -l 可列出目前挂载的设备的标签
  • -a :依照配置文件 /etc/fstab,将所有尚未挂载的设备都挂载上来
  • -o :后面可以接一些挂载时额外加上的参数,如读写权限等:
-o 选项后接的额外参数 意义
ro, rw 挂载文件系统成为只读(ro) 或可擦写(rw)
async, sync 此文件系统是否使用同步写入 (sync) 或异步(async) 的内存机制,请参考文件系统运行方式。默认为 async。
auto, noauto 允许此分区被 mount -a 自动挂载(auto)
dev, nodev 是否允许此分区上可创建设备文件, dev 为可允许
suid, nosuid 是否允许此分区含有 suid/sgid 的文件格式?
exec, noexec 是否允许此分区拥有可运行二进制可执行文件
user, nouser 是否允许 普通用户挂载此分区,一般来说,仅有 root 可以进行普通用户也能够对此 挂载这个分区。
defaults 默认值为:rw, suid, dev, exec, auto, nouser,和 async
remount 重新挂载

用法:df [选项]

显示所有文件系统 i 节点和磁盘块的使用情况。

  • -a 显示所有挂载的文件系统的磁盘使用情况(包括虚拟的不占用硬 盘空间的文件系统,如/proc 文件系统)。
  • -k 以 k 字节为单位显示。
  • -i 显示 inode 信息,而不是块。
  • -t 显示各指定类型的文件系统的磁盘空间使用情况。
  • -x 列出不是某一指定类型文件系统的磁盘空间使用情况(与 t 选项 相反)。
  • -T 显示文件系统类型

用法:umount [选项] 分区/设备名|挂载目录

卸载文件系统

  • -f 强制卸载

二、自动挂载分区

方法一:fstab

fstab文件包含了你的电脑上的存储设备及其文件系统的信息。它是决定一个硬盘(分区)被怎样使用或者说整合到整个系统中的文件。具体来说:用fstab可以自动挂载各种文件系统格式的硬盘、分区、可移动设备和远程设备等。对于Windows与Linux双操作系统用户,用fstab挂载FAT格式和NTFS格式的分区,可以在Linux中共享windows系统下的资源。

这个文件的全路径是/etc/fstab。它只是一个文本文件,你能够用你喜欢的编辑器打开它,但是必须是root用户才能编辑它。同时fsck、mount、umount的等命令都利用该程序。

/etc/fstab 是启动时的配置文件,不过,实际 filesystem 的挂载是记录到 /etc/mtab 与 /proc/mounts 这两个文件当中的。每次我们在更动 filesystem 的挂载时,也会同时更动这两个文件喔!

系统挂载的一些限制:

  • 根目录 / 是必须挂载的﹐而且一定要先于其它 mount point 被挂载进来。
  • 其它 mount point 必须为已创建的目录﹐可任意指定﹐但一定要遵守必须的系统目录架构原则
  • 所有 mount point 在同一时间之内﹐只能挂载一次。
  • 所有 partition 在同一时间之内﹐只能挂载一次。
  • 如若进行卸除﹐您必须先将工作目录移到 mount point(及其子目录) 之外。

vim /etc/fstab

示例:

# <fs>            <mountpoint>    <type>        <opts>        <dump/pass>

# NOTE: If your BOOT partition is ReiserFS, add the notail option to opts.

/dev/sda10        /boot            ext4        noauto,noatime    1 2
/dev/sda6         /                ext4        noatime           0 1
/dev/sda9         none             swap        sw                0 0
/dev/cdrom        /mnt/cdrom       auto        noauto,ro         0 0

其实 /etc/fstab (filesystem table) 就是将我们利用 mount 命令进行挂载时, 将所有的选项与参数写入到这个文件中就是了。除此之外, /etc/fstab 还加入了 dump 这个备份用命令的支持! 与启动时是否进行文件系统检验 fsck 等命令有关

<file systems>  挂载设备 : 不是我们通常理解的文件系统,而是指设备(硬盘及其分区,DVD光驱等)。它告知我们设备(分区)的名字,这是你在命令行中挂载(mount)、卸载(umount)设备时要用到的。
<mountpoint> 挂载点:告诉我们设备挂载到哪里。
<type> 文件系统类型:Linux支持许多文件系统。 要得到一个完整的支持名单查找mount man-page。典型 的名字包括这些:ext2, ext3, reiserfs, xfs, jfs,iso9660, vfat, ntfs, swap和auto, 'auto' 不是一个文件系统,而是让mount命令自动判断文件类型,特别对于可移动设备,软盘,DVD驱动器,这样做是很有必要的,因为可能每次挂载的文件类型不一致。
<opts> 文件系统参数:这部分是最有用的设置!!! 它能使你所挂载的设备在开机时自动加载、使中文显示不出现乱码、限制对挂载分区读写权限。它是与mount命令的用法相关的,要想得到一个完整的列表,参考mount manpage.
<dump> 备份命令:dump utility用来决定是否做备份的. dump会检查entry并用数字来决定是否对这个文件系统进行备份。允许的数字是0和1。如果是0,dump就会忽略这个文件系统,如果是1,dump就会作一个备份。大部分的用户是没有安装dump的,所以对他们而言<dump>这个entry应该写为0。
<pass> 是否以fsck检验扇区:启动的过程中,系统默认会以fsck检验我们的 filesystem 是否完整 (clean)。 不过,某些 filesystem 是不需要检验的,例如内存置换空间 (swap) ,或者是特殊文件系统例如 /proc 与 /sys 等等。fsck会检查这个头目下的数字来决定检查文件系统的顺序,允许的数字是0, 1, 和2。0 是不要检验, 1 表示最早检验(一般只有根目录会配置为 1), 2 也是要检验,不过1会比较早被检验啦!一般来说,根目录配置为1,其他的要检验的filesystem都配置为 2 就好了。

opts常用参数:

  • noatime 关闭atime特性,提高性能,这是一个很老的特性,放心关闭,还能减少loadcycle
  • defaults 使用默认设置。等于rw,suid,dev,exec,auto,nouser,async,具体含义看下面的解释。
  • 自动与手动挂载:
    • auto 在启动或在终端中输入mount -a时自动挂载
    • noauto 设备(分区)只能手动挂载
  • 读写权限:
    • ro 挂载为只读权限
    • rw 挂载为读写权限
  • 可执行:
    • exec 是一个默认设置项,它使在那个分区中的可执行的二进制文件能够执行
    • noexec 二进制文件不允许执行。千万不要在你的root分区中用这个选项!!!
  • I/O同步:
    • sync 所有的I/O将以同步方式进行
    • async 所有的I/O将以非同步方式进行
  • 户挂载权限:
    • user 允许任何用户挂载设备。 Implies noexec,nosuid,nodev unless overridden.
  • nouser 只允许root用户挂载。这是默认设置。
  • 临时文件执行权限:
    • suid Permit the operation of suid, and sgid bits. They are mostly used to allow users on a computer system to execute binary executables with temporarily elevated privileges in order to perform a specific task.
    • nosuid Blocks the operation of suid, and sgid bits.

其他版本的解释:

序号 字段名 解释
字段 1 设备名/UUID/设备标签 etc/fstab 文件的第一个字段指定了要挂载的设备,可以是一个/dev 目录下的设备文件,例如:/dev/sdb1 或者/dev/cdrom 之类的。也可以通过设备标签或者所谓的 UUID 来指定要挂载的设备如‘LABEL=pa_disk’ 或者 ‘UUID=3e6be9de-8139-11d1-9106-a43f08d823a6’。用设备标签或者设备的 UUID 来指定要挂载的设备更加安全和稳定(后面会详细分析)。
字段 2 挂载点 指定了挂载设备的目录,对于 swap,挂载点为none;对于挂载目录包含空格的情况,用“\040”来表示空格
字段 3 挂载分区文件系统类型 定义了该设备上的文件系统,一般常见的文件类型为 ext2、ext3 ext4 (Linux 设备的常用文件类型)、或者 iso9600(光盘文件系统类型)等.如果这个字段定义为swap,这条纪录将关联到一个用于交换目的的文件或分区。如果这个字段定义为ignored,这行将被忽略。这对于显示目前没有使用的分区非常有用。
字段 4 挂载参数 指定加载该设备的文件系统是需要使用的特定参数选项,多个参数是由逗号分隔开来。
字段 5 Dump 参数 该选项被”dump”命令使用来检查一个文件系统是否应该进行 dump 备份,若不需要就设置该字段为 0,如果需要每天备份的,这个字段就应该为1,如果需要不定期备份的的 这个字段就应该为 2.
字段 6 启动检查分区的次序 该字段被 fsck 命令所使用来确定进行在系统重启进行文件系统检查时的顺序,对于根分区“/”这个值应设为 1,其它文件系统可以设为 2,在同一个物理硬盘内的文件系统应该被顺序检测,而不同硬盘中的文件系统则应该同时检测以充分利用系统的并行性。如果最后一个字段值为 0 或没有设置,fsck 程序装跳过此文件系统的检测。

e2label 可以给分区加上标签(label),然后就可以使用标签来挂载/卸载该分区。 这对于有很多磁盘的系统,并且磁盘次序可能会发生变化的情况,会很有帮助。 假设有下列情况出现:主机上有若干块可以热插拔的硬盘,在主机运行过程中, 这些硬盘需要经常插拔,因此硬盘的次序包括硬盘的设备名会经常改变(如 /etc/sdb 在下次可能会变成/etc/sdd),那么如何才能保证在/etc/fstab 文件中将设 备能够挂载到正确的挂载点上呢?

这是就可以用 e2label 给分区设置一个标签名,在/etc/fstab 中利用标签而不 是设备名来自动挂载分区.

[root@localhost ~]# e2label /dev/sdb1 “log_disk”
[root@localhost ~]# e2label /dev/sdb1
log_disk

#
# /etc/fstab
# Created by anaconda on Thu Nov 15 10:29:31 2012
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=7791d2ce-c9dd-4780-bffc-4c9d5d1467c5 / ext4
defaults 1 1
UUID=3e45eea0-bf5c-406f-84c0-a38cf9b9d2ba swap swap
defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
Label=log_disk /Log ext4 defaults 0 2
/dev/sdb5 /Project/pa ext4 defaults 1 2
/dev/sdb6 /Project/pb vfat defaults 1 2
/dev/sdb7 /Backup ext4 defaults 1 2

用法:e2label 分区设备名 [标签名]

用来设定或显示 ext2 或 ext3 分区的卷标。

注意:新设定的标签名称。不能超过 16 字符

当然这样挂载分区也是有缺点的,因为有可能两个分区的标签会重名,这系 统就无法确定到底要挂载哪个分区了,事实上,最保险的方法是通过分区设备的 UUID 来挂载文件系统。

UUID 全称是 Universally Unique Identifier,也即便说,每个分区有一个唯 一的 UUID 值。准确来说,UUID 是一个标识你系统中的存储设备的字符串,其 目的是帮助使用者唯一的确定系统中的所有存储设备,不管它们是什么类型的。 它可以标识光盘驱动器,USB 存储设备以及系统中的硬盘分区等。

与设备名和设备标签相比,UUID 有如下优点:

  • 它是真正的唯一标志符。UUID 为系统中的存储设备提供唯一的标识字符串, 与分区标签不同,系统中不会出现有两个设备的 UUID 相同的情况
  • 它总是不变的。分区的设备名称并非总是相同的,它们依赖于启动时内核加 载模块的顺序。如果你在插入了 USB 盘时启动了系统,而下次启动时又把 它拔掉了,就有可能导致设备名分配不一致。但是 UUID 总是不变的,无论 如何插拔,如何调换设备次序。

我们可以通过 blkid 命令来列出系统中所有存储设备的 UUID:

[root@localhost ~]# blkid
/dev/sda2: UUID="7791d2ce-c9dd-4780-bffc-4c9d5d1467c5" TYPE="ext4"
/dev/sda1: UUID="3e45eea0-bf5c-406f-84c0-a38cf9b9d2ba" TYPE="swap"
/dev/sdb1: LABEL="log_disk" UUID="feda157d-c51a-4f8b-8264-545ecfc06c21"
TYPE="ext4"
/dev/sdb5: UUID="19523fce-666e-4ec9-a53e-21723437eeb1" TYPE="ext4"
/dev/sdb6: UUID="5156-CFF4" TYPE="vfat"
/dev/sdb7: UUID="e2e2044b-34a1-4397-ba30-ad06bd964596" TYPE="ext4"

注意,UUID 依据分区不同,长度和格式都可能会不相同。

#
# /etc/fstab
# Created by anaconda on Thu Nov 15 10:29:31 2012
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=7791d2ce-c9dd-4780-bffc-4c9d5d1467c5 / ext4
defaults 1 1
UUID=3e45eea0-bf5c-406f-84c0-a38cf9b9d2ba swap swap
defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
UUID= feda157d-c51a-4f8b-8264-545ecfc06c21 /Log ext4 defaults
0 2
/dev/sdb5 /Project/pa ext4 defaults 1 2
/dev/sdb6 /Project/pb vfat defaults 1 2
/dev/sdb7 /Backup ext4 defaults 1 2

2.方法二 rc.local

修改/etc/rc.d/rc.local文件

需要修改/etc/rc.d/rc.local 为可执行权限

将mount命令添加进rc.local文件是另一种实现开机自动挂载的方式

mount /dev/mapper/vg_study-lv_study /lvm_study

讨论:

  1. fstab相当于先挂载,再开机;而rc.local 这种方式相当于先开机,再挂载。如果挂载本身就有问题,通过fstab是很难开机哒。

参考资料:

宁波城市职业技术学院 http://www.icourse163.org/course/NBCC-437004

https://www.linuxidc.com/Linux/2014-12/110768.htm

个人公众号,比较懒,很少更新,可以在上面提问题:

更多精彩,请移步公众号阅读:

Sam avatar
About Sam
专注生物信息 专注转化医学