先来介绍几个文件系统和磁盘分区相关的命令。
df 命令
df 命令 用于显示某个文件所在的文件系统或者所有文件系统(默认)的信息,包括磁盘总空间大小、被占用空间大小、剩余空间大小、已用空间百分比以及挂载点所在位置等信息。大小默认以 KB 为单位。
语法
df [OPTION]... [FILE]...
选项
-a, --all:包含全部的文件系统;
-B, --block-size=SIZE:以 SIZE 所指定的单位来显示区块大小。SIZE 可以为一个数值,或者加上一个可选的单位,10M 等效于 1010241024。这里的单位可以为 K、M、G、T、P、E、Z、Y(以 1024 为进率),或者 KB、MB(以 1000 为单位。SIZE 的值根据 DF_BLOCK_SIZE, BLOCK_SIZE, BLOCKSIZE 环境变量而设置,否则默认为 1024 字节(或者为 512 字节,如果设置了 POSIXLY_CORRECT 的话);
-m, --megabytes:以 1048576 字节(1 MB)为单位显示大小;
--direct:将挂载点显示为文件;
--total:在输出结果的最下面一行显示出总计大小;
-h, --human-readable:以可读性较高的方式(以K、M、G为单位)显示大小;
-H, --si:同上,但以 1000 为进率而不是 1024;
-i, --inodes:显示出 inode 的信息而不是区块使用信息;
-k, --block-size=1K:以 1024 字节(1 KB)为单位来显示大小;
-l, --local:仅显示本地端的文件系统;
--no-sync:在取得磁盘使用信息之前不执行 sync 指令,此为默认值;
--output[=FIELD_LIST]:使用 FIELD_LIST 指定的输出格式,如果忽略 FIELD_LIST ,则打印所有字段。FIELD_LIST 为一个逗号分隔的列表,可用的名称有 source、fstype、itotal、iused、iavail、ipcent、size、used、avail、pcent、file、和target。详情参考该命令的 info 帮助信息;
-P, --portability:使用 POSIX 输出格式;
--sync:在获取磁盘使用信息之前执行 sync 指令;
-t, --type=TYPE:仅显示 TYPE 所指定的文件系统类型的磁盘信息;
-T, --print-type:显示文件系统的类型;
-x, --exclude-type=TYPE:仅显示非 TYPE 所指定的文件系统的磁盘信息;
--help:显示帮助并退出;
--version:显示版本信息并退出。
注意:以上长格式选项的参数也适用于对应的短格式的选项。例如
df -BM
等同于df --block-size=1M
。
参数
FILE:指定文件系统上的文件。
实例
- df 命令默认会显示每个有数据的已挂载文件系统,默认以 KB 为单位:
[vincent@localhost ~]$ df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/vda1 41152832 4920600 34135132 13% /
devtmpfs 932064 0 932064 0% /dev
tmpfs 941868 0 941868 0% /dev/shm
tmpfs 941868 348 941520 1% /run
tmpfs 941868 0 941868 0% /sys/fs/cgroup
tmpfs 188376 0 188376 0% /run/user/1000
tmpfs 188376 0 188376 0% /run/user/0
默认的 df 命令输出内容有:
- 设备的设备文件位置;
- 能容纳多少个1024字节(1 KB)大小的块;
- 已用了多少个1024字节(1 KB)大小的块;
- 还有多少个1024字节(1 KB)大小的块可用;
- 已用空间所占的比例;
- 设备挂载到了哪个挂载点上。
- 使用 -h 选项以 KB 以上的单位来显示,可读性高:
[vincent@localhost ~]$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 40G 4.7G 33G 13% /
devtmpfs 911M 0 911M 0% /dev
tmpfs 920M 0 920M 0% /dev/shm
tmpfs 920M 348K 920M 1% /run
tmpfs 920M 0 920M 0% /sys/fs/cgroup
tmpfs 184M 0 184M 0% /run/user/1000
tmpfs 184M 0 184M 0% /run/user/0
- 以指定的单位来显示大小:
# 以下两个命令等效
[vincent@localhost ~]$ df -BM
Filesystem 1M-blocks Used Available Use% Mounted on
/dev/vda1 40189M 4807M 33335M 13% /
devtmpfs 911M 0M 911M 0% /dev
tmpfs 920M 0M 920M 0% /dev/shm
tmpfs 920M 1M 920M 1% /run
tmpfs 920M 0M 920M 0% /sys/fs/cgroup
tmpfs 184M 0M 184M 0% /run/user/1000
tmpfs 184M 0M 184M 0% /run/user/0
[vincent@localhost ~]$ df --block-size=1M
Filesystem 1M-blocks Used Available Use% Mounted on
/dev/vda1 40189 4807 33335 13% /
devtmpfs 911 0 911 0% /dev
tmpfs 920 0 920 0% /dev/shm
tmpfs 920 1 920 1% /run
tmpfs 920 0 920 0% /sys/fs/cgroup
tmpfs 184 0 184 0% /run/user/1000
tmpfs 184 0 184 0% /run/user/0
du 命令
du 命令 也是查看使用空间的,但是与 df 命令不同的是, du 命令是查看的某个特定目录(默认情况下是当前目录)所使用的磁盘空间大小。
语法
Usage: du [OPTION]... [FILE]...
or: du [OPTION]... --files0-from=F
选项
-0, --null:在每行的末尾打印一个 0 字节(ASCII NUL),而不是一个新行,即所有输出结果不分行显示。该选项可让其他程序在输出中含有新行时解析输出结果;
-a, --all:也显示目录中文件的大小,而不仅仅是目录;
--apparent-size:打印 APPARENT size,而不是 DISK USAGE size。尽管 APPARENT size 一般稍小,但由于稀疏文件(sparse file)文件中的“洞”(holes)、内部碎片、间接区块等,APPARENT size 也可能稍大。下面有关于稀疏文件、Apparent Size 和 Disk Usage Size 的详细介绍;
-B, --block-size=SIZE:以 SIZE 所指定的单位来显示区块大小。SIZE 可以为一个数值,或者加上一个可选的单位,10M 等效于 1010241024。这里的单位可以为 K、M、G、T、P、E、Z、Y(以 1024 为进率),或者 KB、MB(以 1000 为单位。SIZE 的值根据 DF_BLOCK_SIZE, BLOCK_SIZE, BLOCKSIZE 环境变量而设置,否则默认为 1024 字节(或者为 512 字节,如果设置了 POSIXLY_CORRECT 的话);
-b, --bytes:等效于“--apparent-size --block-size=1”;
-c, --total::在输出结果的最下面一行显示出总计大小;
-D, --dereference-args: 解除命令行上所列出符号链接的参照,其他符号链接不受影响。即统计时不包含符号链接所指位置的大小,而是统计符号链接源文件的大小;
-d, --max-depth=N:显示目录(如果使用了 --all 选项则也包括文件)的总计信息。N 指定了显示的最大目录深度。其中,根目录为起始目录,其深度为 0。例如,“du --max-depth=0” 等效于“du -s”;
--files0-from=F:简化磁盘使用空间的输出,不超过命令行的宽度。不处理命令行中的文件,仅处理 FILE 文件中的文件名(每个文件名以 ASCII NUL 结尾)。如果 F 是 “-”,就从标准输入中读取,在标准输入时每输入一个文件名就按两次 Ctrl + D;
-H:等效于“--dereference-args (-D)” ;
-h, --human-readable:以可读性较高的方式(以K、M、G为单位)显示大小;
--inodes:显示出 inode 的信息而不是区块的使用信息;
-k:等效于“--block-size=1K”;
-L, --dereference:解除所有符号链接的参照;
-l, --count-links:重复计算硬件链接的文件;
-m:等效于“--block-size=1M”;
-P, --no-dereference:不遵循任何符号链接(默认);
-S, --separate-dirs:对于目录来说,不包含其子目录的大小;
--si:类似“-h”,但使用 1000 作为进率,而不是 1024;
-s, --summarize::显示每个输出参数的总计;
-t, --threshold=SIZE:不包含小于 SIZE(正值) 的条目或者大于 SIZE(负值) 的条目;
--time:显示目录中所有文件和子目录的最后修改时间;
--time=WORD:显示 WORD所表示的时间,WORD 可以为:atime、access、use、ctime 或者 status;
--time-style=STYLE:使用 STYLE 表示时间,可以为:full-iso、long-iso、iso 或者 +FORMAT;FORMAT 被翻译成类似“date”;
-X, --exclude-from=FILE:不包含能匹配 FILE 所表示的模式的文件;
--exclude=PATTERN:不包含匹配 PATTERN 模式的文件;
-x, --one-file-system:跳过在不同文件系统上的目录;
--help:显示帮助并退出;
--version:显示版本信息并退出;
参数
FILE:要显示大小的文件列表。
Sparse File
稀疏文件(Sparse File)是一种计算机文件,它能尝试在文件内容大多为空时更有效率地使用文件系统的空间。它的原理是以简短的信息(元数据)表示空数据块,而不是在在磁盘上占用实际空间来存储空数据块。只有真实(非空)的数据块会按原样写入磁盘。
在读取稀疏文件时,文件系统会按元数据在运行时将这些透明转换为“真实”的数据块,即填充为零。应用程序不会察觉这个转换。
大多数现代的文件系统支持稀疏文件,包括大多数 Unix 变种和 NTFS。苹果的 HFS+ 不提供稀疏文件支持,但在 OS X 中,虚拟文件系统层支持在任何受支持文件系统中存储稀疏文件,包括 HFS+。2016 年 6 月在 WWDC 宣布的苹果文件系统(APFS)支持稀疏文件。稀疏文件常被用在磁盘映像、数据库快照、日志文件和科学应用中。
优势
稀疏文件的优势是,它分配的存储空间只在需要时使用:这样节省了磁盘空间,并且可以创建很大的文件,即使文件系统中的可用空间不足。这也减少了首次写入的时间,因为系统不会分配“跳过”的空间。如果初始分配需要写入全零到空间,这也使得系统不必入两次。
缺点
稀疏文件的缺点包括:稀疏文件可能碎片化;文件系统的空余空间报告可能产生误导;包含稀疏文件的文件系统被填满可能产生意外效果,例如只是重写现有文件的内容时遭遇磁盘已满或超出配额错误——开发者未预料到文件可能被稀疏;使用非显式支持的计算机程序复制稀疏文件可能会复制整个内容,即未压缩的文件大小,包括未实际在磁盘上分配的零空间——也就是使稀疏文件失去稀疏属性。稀疏文件也不是被所有备份软件和应用支持。不过,VFS 的实现回避了先前两个缺点。在Windows 上加载稀疏的可执行文件(exe 或 dll)可能需要更多时间,因为文件不被映射到内存和缓存。
Apparent Size & Disk Usage Size
ls
命令和 du
命令都可以显示 Apparent Size 和 Disk Usage Size(Normal Size)。du
显示 Disk Usage Size 时不使用任何参数,显示 Apparent Size 时需要使用 --apparent-size
参数才行。ls
或 ls -l
显示的是 Apparent Size,ls -s
显示的是 Disk Usage Size。
-
Apparent Size:(在
ls -ls
输出的中间)是对于应用来说的大小,是应用识别出的文件实际内容大小; -
Disk Usage Size:(在
ls -ls
输出的左边)是文件所占用的磁盘空间大小。Disk Usage Size 是文件系统的区块大小的整数倍。比如,一个包含 3003 字节内容的文件的 Apparent Size 是 3003 字节,如果在区块大小为 4k 的文件系统中,由于最小存储单元为 4k = 4096 字节,所以该文件实际占用某个区块的前 3003 字节,而后面的 1093 字节空间就浪费了,该文件的 Disk Usage Size 就是 4096 字节。由于 Disk Usage Size 总会计算最后的区块完整大小,而 Usage Size 只会计算最后区块中实际包含数据的字节,所以 Disk Usage Size 一般比对应的 Apparent Size 稍大(稀疏文件除外)。不使用任何选项时的ls
和du
命令显示的都是 Disk Usage Size。这也是 df 命令所显示的大小。
实例
- 使用 -a 和 -h 选项来以更好地可读性显示当前目录中所有文件的大小信息。使用 -c 选项在最后一行显示出所有文件的总计大小。
[vincent@localhost package]$ du -ah .
0 ./test03
9.0M ./java_dev_tools/apache-tomcat-8.5.15.tar.gz
4.0K ./java_dev_tools/.test1
163M ./java_dev_tools/jdk-8u131-linux-x64.rpm
172M ./java_dev_tools
0 ./test01
0 ./.test
0 ./test02
172M .
[vincent@localhost package]$ du -ahc .
0 ./test03
9.0M ./java_dev_tools/apache-tomcat-8.5.15.tar.gz
4.0K ./java_dev_tools/.test1
163M ./java_dev_tools/jdk-8u131-linux-x64.rpm
172M ./java_dev_tools
0 ./test01
0 ./.test
0 ./test02
172M .
172M total
[vincent@localhost package]$
- 使用 -s 选项来显示所有目录中第一层字目录和子文件的大小,可以借助 sort 命令按文件大小排序。
[root@localhost vincent]# du -sh *
619M database
188K document
172M package
4.0K result1
4.0K result2
4.0K result3
4.0K test1
4.0K test2
4.0K test3
4.0K test3.txt
4.0K test4
4.0K test.txt
35M webapp
4.0K webapps
[root@localhost vincent]# du -s * | sort -nr
633068 database
175372 package
35212 webapp
188 document
4 webapps
4 test.txt
4 test4
4 test3.txt
4 test3
4 test2
4 test1
4 result3
4 result2
4 result1
# 显示前 5 个大文件或目录
[root@localhost vincent]# du -s * | sort -nr | head -n 5
633068 database
175372 package
35212 webapp
188 document
4 webapps
# 显示后 5 个大文件或目录
[root@localhost vincent]# du -s * | sort -nr | tail -n 5
4 test2
4 test1
4 result3
4 result2
4 result1
[root@localhost vincent]#
- 使用 --apparent-size 选项来显示文件的 Apparent Size。
[vincent@localhost ~]$ du -s test3.txt
4 test3.txt
[vincent@localhost ~]$ du -s --apparent-size test3.txt
1 test3.txt
[vincent@localhost ~]$
- 使用 du --files0-from= 选项来显示文件中所指定的文件大小。
[vincent@localhost ~]$ ll
total 7
-rw-rw-r-- 1 vincent vincent 53 Mar 7 09:14 result1
-rw-rw-r-- 1 vincent vincent 107 Mar 7 09:20 result2
-rw-rw-r-- 1 vincent vincent 664 Mar 9 17:06 result3
-rwxrw-r-- 1 vincent vincent 49 Mar 2 15:45 test1
-rwxrw-r-- 1 vincent vincent 85 Mar 5 13:49 test2
-rwxrw-r-- 1 vincent vincent 109 Mar 5 14:27 test3
-rw-rw-r-- 1 vincent vincent 41 Mar 13 09:55 test3.txt
[vincent@localhost ~]$ vim test3.txt
使用 Vim 编辑器中输出 ASCII NUL 来分隔文件路径。关于如何在 Vim 中输入不可见字符,请参考:http://blog.csdn.net/chenster/article/details/53307707
然后执行 du --files0-from=./test3.txt 就可以显示 test3.txt 文件中指定的文件的使用空间信息:
[vincent@localhost ~]$ du --files0-from=./test3.txt
4 /home/vincent/test1
4 /home/vincent/test2
- 使用 --time 选项来显示文件的最后修改时间。
[root@localhost vincent]# du --time -s *
633068 2018-01-04 20:11 database
188 2018-01-16 14:17 document
175372 2018-03-13 15:28 package
4 2018-03-07 09:14 result1
4 2018-03-07 09:20 result2
4 2018-03-09 17:06 result3
4 2018-03-02 15:45 test1
4 2018-03-05 13:49 test2
4 2018-03-05 14:27 test3
4 2018-03-13 09:55 test3.txt
4 2018-03-06 16:18 test4
4 2018-03-01 21:00 test.txt
35212 2017-06-09 09:33 webapp
4 2017-06-08 23:23 webapps
[root@localhost vincent]#
/etc/fstab文件
fstab
(即 file systems table)系统配置文件中包含了哪些设备通常使用什么选项挂载到了哪里。该文件在 Solaris Linux 系统中名为 /etc/vfstab
。系统启动时会自动通过 mount
命令读取该文件中的挂载项来挂载分区,以便在系统启动后可以使用这些分区,管理员也可以在系统启动后执行 mount
命令来挂载其他文件。某些管理工具(甚至是图形化工具,如 KDE 桌面的 Kfstab 图形化配置工具)可以读写该文件来管理设备的挂载。
然而,fstab
文件仍被当成是基本的系统配置,已被自动挂载机制所替代。现代 Linux 系统可以使用 udev 来管理热插拔设备而不依赖于 fstab
文件 ,pmount 也允许一般用户可以在挂载或卸载文件系统时不依赖于 fstab
文件。传统的 Linux 系统允许授权用户(root 用户和 wheel 组的用户)在挂载或卸载文件系统时可以不使用 fstab
文件。
下面是一个典型的 fstab
文件的内容。
# device-spec mount-point fs-type options dump pass
LABEL=/ / ext4 defaults 1 1
/dev/sda6 none swap defaults 0 0
none /dev/pts devpts gid=5,mode=620 0 0
none /proc proc defaults 0 0
none /dev/shm tmpfs defaults 0 0
# Removable media
/dev/cdrom /mnt/cdrom udf,iso9660 noauto,owner,ro 0 0
# NTFS Windows 7 partition
/dev/sda1 /mnt/Windows ntfs-3g quiet,defaults,locale=en_US.utf8,umask=0,noexec 0 0
# Partition shared by Windows and Linux
/dev/sda7 /mnt/shared vfat umask=000 0 0
# mounting tmpfs
tmpfs /mnt/tmpfschk tmpfs size=100m 0 0
# mounting cifs
//pingu/ashare /store/pingu cifs credentials=/root/smbpass.txt 0 0
# mounting NFS
pingu:/store /store nfs rw 0 0
fsck
,mount
,umount
命令会按顺序读取上面的挂载项来执行其操作。上面的各个字段依次为:
- 第一个字段为分区。其值可以是名称、标签、UUID 等。
- 第二个字段是挂载点。对于 swap 分区和文件来说该字段为 none,而有的Linux 发行版(如 CentOS)中 swap 分区的挂载点是 /swap。
- 第三个字段是文件系统类型。
- 第四个字段为挂载选项(mount options)。该字段用于描述文件系统,比如,是否在启动时自动挂载、是否可写或只读、指定大小等等。特殊选项
defaults
根据文件系统类型预设了一些选项。 - 第五个字段是 dump。该字段表示是否,以及多久通过 dump 程序来备份文件系统。0 值表示不会自动备份。
- 第六个字段是 fsck order。该字段的数值表示
fsck
程序在系统启动时对设备进行错误检查的顺序。1 表示检查 root(/) 文件系统,2 表示在 root 文件系统之后检查设备,0 表示不检查其他设备。
第四个字段可以配置多个逗号分隔的挂载选项来传递给 mount 命令来决定其挂载行为。常见的选项有:
- auto / noauto:auto 选项表示设备会在系统启动时或 mount -a 命令执行时自动挂载,是默认选项。noauto 表示设备必须的挂载必须手动执行。
- dev / nodev:是否解释文件系统上的字符或块特定设备(block special devices)。
- exec / noexec:是否执行分区上的二进制程序。noexec 在不含二进制文件的分区(例如 /var 分区)或不想执行二进制文件的分区(例如 Windows 分区)上比较有用。
- rw / ro:rw 表示可读写,ro 表示只读(默认)。
- sync / async:文件系统的输入输出是同步还是异步进行。
- suid / nosuid:允许或阻止 suid 、sgid bits 的操作。
- user / users / nouser:user 允许任意用户挂载文件系统,这会自动使用 noexec, nosuid, nodev 选项,除非显式覆写。nouser 表示只有 root 用户可以挂载文件系统。users 表示 users 用户组的用户可以卸载卷。
- defaults:相关类型文件系统的默认配置。对于 ext3 文件系统,该选项等同于 rw、suid、dev、exec、auto、nouser、async(no acl support)。基于 Red Hat 的系统支持为 root 文件系统设置 acl ,但不会为用户创建的 ext3 文件系统上设置 acl。某些文件系统如 XFS 默认允许 acl。
- owner (Linux-specific):允许设备的属主进行挂载。
- atime / noatime / relatime / strictatime (Linux-specific):atime / noatime 表示是否在访问时更新 atime,relatime 表示如果在 mtime 之前就更新 atime。
/etc/mtab文件
mtab
文件记录着当前已挂载的文件系统以及它们的初始化选项。mtab
的内容和fstab
中的类似,主要的区别在于后者列出了系统启动时应该挂载的所有文件系统,而前者则列出了当前已挂载的信息(包含不在 fstab
文件中、手动挂载的文件系统)。因此,mtab
的格式通常和fstab
很相像。大多数情况下,可以在fstab
中直接使用mtab
的配置内容。该文件的路径通常为 /etc/mtab
。
/proc/mounts 文件
/proc/mounts
文件与 /etc/mtab
有着相似的内容,不同的是,前者包含了挂载选项等信息,但 /proc/mounts
文件的内容更新(up-to-date )。
mount 命令
mount 命令用于挂载文件系统到指定的挂载点(mount point)。此命令的最常用于挂载 CD ROM和新创建的分区。
语法
mount [-lhV]
mount -a [-fFnrsvw] [-t vfstype] [-O optlist]
mount [-fnrsvw] [-o option[,option]...] device|dir
mount [-fnrsvw] [-t vfstype] [-o options] device dir
选项
-V, --version:输出版本信息;
-h, --help:打印帮助信息;
-v, --verbose:verbose 模式;
-a, --all:挂载 fstab 文件中的所有(指定类型)的文件系统;
-F, --fork:(和 -a 一起使用)并行挂载不同的分区或不同的 NFS 服务器(可以指定超时)。该选项的优点是速度快,缺点是挂载的完成没有特定顺序,所以不能用来同时挂载 /usr 和 /usr/spool;
-f, --fake:执行除了实际的系统调用外所有操作,实际上是一种“假”挂载。与 -v 选项连用来确定 mount 命令试图执行什么时很有用。该选项也可以用来为之前使用 -n 选项挂载的分区添加条目。该选项检查 /etc/mtab 文件中相关记录是否存在,如果相关记录已经存在则检查失败;
-i, --internal-only:不调用 /sbin/mount.<filesystem> 的帮助(即使存在);
-l, --show-labels:在 mount 的输出中添加分区标签。 mount 使用该选项时必须要有读取磁盘设备的权限(比如 suid root)。用户可以使用 e2label 工具为 ext2、ext3 或 ext4 分区、使用 xfs_admin 为 XFS 分区、使用 reiserfs‐tuneOne 为 reiserfs 文件系统设置一个标签;
-n, --no-mtab:挂载时不写入 /etc/mtab 文件。该选项可用于当 /etc/mtab 文件只有读取权限时;
-c, --no-canonicalize:不规范路径。mount 命令会规范化(命令行或 fstab 中的)所有路径,并将规范化的路径存储到 /etc/mtab 文件中。该选项和 -f 连用用于处理已经规范化的绝对路径;
-s:容忍草率的挂载选项,而不是失败。该选项会忽略文件系统不支持的挂载选项。并不是所有的文件系统都支持该选项,该选项的存在用于支持 Linux autofs-based 自动挂载器;
--source src:如果 mount 命令仅指定了一个参数,那么该参数将被解释为挂载目标(挂载点)或挂载源(分区)。该选项允许显式定义 mount 命令的挂载源;
--target dir:该选项允许显式指定挂载点;
-r, --read-only:将文件系统挂载为只读,相当于 `-o ro`。注意,根据文件系统类型、状态和内核行为,系统可能依旧可以写入分区。例如,如果文件系统是脏的,ext3 或 ext4 将将会重放其日志,如果要阻止这类的写入,可以使用 `ro,noload` 选项挂载 ext3 或 ext4,或者使用 blockdev 设置分区为只读模式;
-w, --rw, --read-write:以读写权限挂载分区,这是默认行为,等同于 `-o rw`;
-L, --label label:以指定的标签挂载分区;
-U, --uuid uuid:挂载具有指定 uuid 的分区。自 Linux 2.1.116 以来,这两个选项需要 /proc/partitions 文件是存在的;
-T, --fstab path:指定可选的 fstab 文件。如果 path 是一个目录,该目录中的文件使用 strverscmp 存储,以`.` 开头或不以 `.fstab` 为扩展名的文件将被忽略。该选项可以指定不止一次,主要是为 initramfs 或 chroot 脚本设计的,在这些脚本中指定的有除了系统配置以外的额外配置。注意,mount 命令不会将 --fstab 选项传递给 /sbin/mount.<type> helpers,这就意味着可选的 fstab 文件对于 helpers 是不可见的。一般的挂载则不会有这个问题,但非 root
用户总是需要 fstab 来验证用户权限;
-t, --types vfstype:指定挂载特定类型的文件系统;
-O, --test-opts opts:像 -t 限制文件系统类型一样,该选项和 -a 一起连用时用来限制文件系统的选项。例如,`mount -a -O no_netdev` 将挂载 /etc/fstab 中除了具有 _netdev 挂载选项的所有文件系统。 -O 和 -t 也可以组合使用,例如 `mount -a -t ext2 -O _netdev` 将挂载具有 _netdev 挂载选项的 ext2 文件系统;
-o, --options opts:指定逗号分隔挂载选项列表,用于覆写 /etc/fstab 中挂载项的挂载选项;
-B, --bind:重新将分区挂载到另一个挂载点,这样多个挂载点都可以进入该分区;
-R, --rbind:重新挂载分区以及所有可能子挂载,这样多个挂载点都可以进入该分区;
-M, --move:将挂载移动到另一个挂载点(只能通过新挂载点访问)。
参数
optlist:逗号分隔的挂载选项列表。
device:要挂载的分区。
dir:挂载点。
实例
-
mount
和umount
命令维护着一个保存在/etc/mtab
文件中的当前已挂载文件系统的列表。仅使用mount
命令时而不附加任何选项和参数就会列出该列表。新挂载的设备会显示在最下方(即使是临时挂载的)。
# 查看当前所有挂载
[root@localhost ~]# mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime,seclabel)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
devtmpfs on /dev type devtmpfs (rw,nosuid,seclabel,size=484476k,nr_inodes=121119,mode=755)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev,seclabel)
...
nfsd on /proc/fs/nfsd type nfsd (rw,relatime)
/dev/sda1 on /boot type ext4 (rw,relatime,seclabel,data=ordered)
/dev/mapper/cl-home on /home type ext4 (rw,relatime,seclabel,data=ordered)
binfmt_misc on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,relatime)
tmpfs on /run/user/1000 type tmpfs (rw,nosuid,nodev,relatime,seclabel,size=99996k,mode=700,uid=1000,gid=1000)
fusectl on /sys/fs/fuse/connections type fusectl (rw,relatime)
gvfsd-fuse on /run/user/1000/gvfs type fuse.gvfsd-fuse (rw,nosuid,nodev,relatime,user_id=1000,group_id=1000)
tmpfs on /run/user/0 type tmpfs (rw,nosuid,nodev,relatime,seclabel,size=99996k,mode=700)
/dev/sdb1 on /data type ext4 (rw,relatime,seclabel,data=ordered)
[root@localhost ~]#
- 使用
-t
选项筛选出/etc/mtab
文件中特定文件系统类型的挂载项,使用-l
选项用于在列表项后附加设备标签。
[root@localhost ~]# mount -l -t ext4
/dev/mapper/cl-root on / type ext4 (rw,relatime,seclabel,data=ordered) [root_label]
/dev/sda1 on /boot type ext4 (rw,relatime,seclabel,data=ordered) [boot_label]
/dev/mapper/cl-home on /home type ext4 (rw,relatime,seclabel,data=ordered) [home_label]
[root@localhost ~]#
-
mount
命令的标准形式为mount -t type device dir
,用于将指定文件类型(type)的设备分区(device)挂载到指定的目录(dir)。指定目录dir
之前的内容、属主和模式在挂载文件系统后才可见。如果仅指定了设备分区或目录,那么 mount 命令会寻找/etc/fstab
文件中对应的挂载项,并尝试挂载它。device
通常为/dev/sda1
的形式,也可以是 LABEL、UUID、PARTUUID、PARTLABEL 等形式。
# 在根目录下创建一个新目录
[root@localhost ~]# mkdir /data
[root@localhost /]# ls -al /data
total 8
drwxr-xr-x. 2 root root 4096 May 26 10:51 .
dr-xr-xr-x. 20 root root 4096 May 26 10:51 ..
# 将之前已有文件系统的新分区 /dev/sdb1 挂载到 /data
[root@localhost /]# mount -t ext4 /dev/sdb1 /data
[root@localhost /]# ls -al /data
total 24
drwxr-xr-x. 3 root root 4096 May 13 20:39 .
dr-xr-xr-x. 19 root root 4096 May 13 20:47 ..
drwx------. 2 root root 16384 May 13 20:39 lost+found
# 查看当前所有挂载项时新挂载的设备会显示在最下方(即使是临时挂载的)
[root@localhost ~]# mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime,seclabel)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
devtmpfs on /dev type devtmpfs (rw,nosuid,seclabel,size=484476k,nr_inodes=121119,mode=755)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev,seclabel)
...
nfsd on /proc/fs/nfsd type nfsd (rw,relatime)
/dev/sda1 on /boot type ext4 (rw,relatime,seclabel,data=ordered)
/dev/mapper/cl-home on /home type ext4 (rw,relatime,seclabel,data=ordered)
binfmt_misc on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,relatime)
tmpfs on /run/user/1000 type tmpfs (rw,nosuid,nodev,relatime,seclabel,size=99996k,mode=700,uid=1000,gid=1000)
fusectl on /sys/fs/fuse/connections type fusectl (rw,relatime)
gvfsd-fuse on /run/user/1000/gvfs type fuse.gvfsd-fuse (rw,nosuid,nodev,relatime,user_id=1000,group_id=1000)
tmpfs on /run/user/0 type tmpfs (rw,nosuid,nodev,relatime,seclabel,size=99996k,mode=700)
/dev/sdb1 on /data type ext4 (rw,relatime,seclabel,data=ordered)
# 查看所有挂载点(临时挂载也会显示在最下方)
[root@localhost /]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/cl-root 9.8G 4.6G 4.7G 50% /
devtmpfs 474M 0 474M 0% /dev
tmpfs 489M 156K 489M 1% /dev/shm
tmpfs 489M 14M 476M 3% /run
tmpfs 489M 0 489M 0% /sys/fs/cgroup
/dev/sda1 477M 142M 307M 32% /boot
/dev/mapper/cl-home 5.8G 276M 5.2G 5% /home
tmpfs 98M 24K 98M 1% /run/user/1000
tmpfs 98M 0 98M 0% /run/user/0
/dev/sdb1 2.0G 6.0M 1.8G 1% /data
[root@localhost /]#
[root@localhost /]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Fri May 4 06:32:33 2018
#
# 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
#
/dev/mapper/cl-root / ext4 defaults 1 1
UUID=0de62f11-4d89-4557-b04d-64e3e4f2d3eb /boot ext4 defaults 1 2
/dev/mapper/cl-home /home ext4 defaults 1 2
/dev/mapper/cl-swap swap swap defaults 0 0
[root@localhost /]#
[root@localhost /]# mkdir /appData
[root@localhost /]# mount /appData
mount: can't find /appData in /etc/fstab
[root@localhost /]# mount /dev/sdb3
mount: can't find /dev/sdb3 in /etc/fstab
[root@localhost /]# mount /home/
mount: /dev/mapper/cl-home is already mounted or /home busy
/dev/mapper/cl-home is already mounted on /home
[root@localhost /]#
- 挂载一个 ISO 镜像文件。
[root@localhost /]# mount -t iso9660 -o loop pdf_collections.iso /mnt
[root@localhost /]# cd /mnt
[root@localhost /]# ll
- 挂载
fstab
或mtab
中的文件系统时仅指定device
或dir
即可。如果mount
命令同时指定了device
和dir
,那么mount
命令不会读取/etc/fstab
文件,如果需要覆盖/etc/fstab
文件中的挂载选项,那么需要使用mount device|dir -o <options>
。而mount -a [-t type] [-O optlist]
命令会挂载/etc/fstab
文件中文件系统类型为 type、和/或 挂载选项为 optlist(除了挂载选项包含 noauto 的挂载项)的挂载项。该命令通常放在启动脚本中。添加 -F 选项会使 mount 命令并行叉开(fork),同时挂载所有挂载项。 如果指定的挂载选项列表中存在多个相同的挂载选项,那么以最后一个挂载选项为准。
umount 命令
umount 命令用于卸载 mount 命令挂载的分区。
语法
umount [-hV]
umount -a [-dflnrv] [-t vfstype] [-O options]
umount [-dflnrv] {dir|device}...
选项
-a, --all:卸载 /etc/mtab 中的所有挂载(2.7 及以后版本的 umount 不会卸载 proc 文件系统);
-A, --all-targets:卸载当前命名空间中特定文件系统的所有挂载点。文件系统可以通过挂载点或设备名(或 UUID 等)来指定。该选项可以和 --recursive 一起使用,当前挂载的所有内置的挂载也会卸载;
-c, --no-canonicalize:不规范路径。参考前面 mount 命令中同名选项的介绍;
-d, --detach-loop:万一卸载的设备是一个循环设备,也释放该循环设备;
--fake:执行除了实际的系统调用外所有操作,实际上是一种“假”卸载。该选项也可以用来移除 /etc/mtab 文件中之前使用 -n 选项卸载的条目;
-f, --force:强制卸载(如果是一个不可达的 NFS 系统)(需要 2.1.116 及以后版本的内核);
-i, --internal-only:不调用 /sbin/umount.<filesystem> helper 即使它存在。如果存在 /sbin/umount.<filesystem> helper,默认会调用它;
-n, --no-mtab:卸载时不会写入 /etc/mtab;
-l, --lazy:懒卸载。将该文件系统从文件系统层级中分离,并尽快清理所有到该文件系统的引用,就好像它不被占用一样(需要 2.4.11 及以后版本的内核);
-O, --test-opts options,list:表明只会卸载 /etc/fstab 中有特定选项的文件系统。可以指定多个逗号分隔的选项列表来筛选文件系统,每个选项都可以使用 no 前缀来反向筛选;
-R, --recursive:递归卸载每个特定目录。递归会在任意卸载由于任意原因失败时停止。挂载点之间的关系定义在 /proc/self/mountinfo 文件的条目中。该选项中的文件系统必须通过挂载点指定,而不能使用分区名或 UUID;
-r, --read-only:如果卸载失败,则尝试重新以只读挂载;
-t, --types vfstype,ext2,ext3:表明只会卸载特定类型的文件系统。可以指定多个逗号分隔的文件系统类型。可以为每个文件系统类型使用 no 前缀来反向筛选;
-v, --verbose:verbose 模式;
-h, --help:打印帮助信息并退出;
-V, --version:打印版本并退出;
参数
optlist:逗号分隔的挂载选项列表。
device:要卸载的分区。
dir:挂载点。