文件系统挂载和管理工具
一.通过linux的开机原理来了解文件系统
1.关于根文件系统
linux开机原理图,可以看到图中的根文件系统是系统开机之后被识别到的,并挂载上去。
2.linux启动后文件系统情况
[1]除了根文件系统,其他分区都需要mount命令挂载
[2]其他分区可以通过根分区上的空目录挂载文件系统
二.文件系统管理
1.将额外文件系统与根文件系统某现存的目录建立联系,进而使得此目录做为其他文件访问入口称之为挂载(mount)
2.解除关联关系称之为卸载(umount)
3.挂载点下原有的文件在挂载完成之后会被隐藏
4.挂载文件系统的原理图:逐级挂载
可以看出最先从根分区出发,在根目录下进行分割挂载,但是这里有需要注意的一点,根目录下与开机过程有关的目录,就不能够与根目录放到不同的分割槽去,那哪些目录不可与根目录分开呢?有底下这些:
/etc:配置文件
/bin:重要执行档
/dev:所需要的装置文件
/lib:执行档所需的函式库与核心所需的模块
/sbin:重要的系统执行文件
三.mount挂载命令详解
mount DEVICE mount_point
- -t #vstype:指定要挂载的设备上的文件系统类型
- -r #readonly:只读挂载
- -w #read and write,读写挂载
- -a #自动挂载所有支持自动挂载的设备(定义了/etc/fstab文件中,且挂载选项中有“自动挂载的选项”)
- -n #不更新/etc/mtab 每一个文件系统挂载都会更新到/etc/mtab如果文件系统卸载,就从/etc/mtab里面删除
- -L #LABEL以卷标指定挂载设备,常用
- -U #UUID 以UUID挂载设备,这样非常保险
- -B #挂载目录,绑定目录到另一个目录上
例1:将/dev/sda1分区挂载到/mydata目录然后卸载
mount /dev/sda1/ /mydata/ #挂载
umount /dev/sda1 #卸载
例2:将/dev/sda1以卷标名为“MYDATA”挂载到/mydata然后卸载
mount -L "MYDATA" /mydata/ #以卷标名进行挂载
umount /dev/sda1
例3:将/dev/sda1只读挂载到/mydata目录然后再卸载
mount -r -L "MYDATA" /mydata/ #只读挂载
umount /dev/sda1
例4:将/dev/sda1指定文件系统ext4挂载到/mydata目录
mount -t ext4 /dev/sda1 /mydata
注意:使用中的挂载设备无法被卸载
/etc/mtab:显示当前系统已挂载的文件系统,mount命令
/etc/proc:查看内核,追踪到已挂载的所有设备:cat /proc/mounts
- -o #options:挂载文件系统的选项
[1]同步模式:内存中的的数据实时备份到磁盘,数据安全性高,但性能差因为内存与磁盘的I/O能力相差大被磁盘的慢速度拖累
[2]异步模式:数据在内存中修改好后存回磁盘,如果突发情况内存数据来不及备份回磁盘,那就悲剧了,因此这种模式安全性低,但是性能极高。
原理:CPU中的进程在运行,进程主要是指令用来加工数据用的,CPU更新加工数据通过进程/指令而数据在内存中,内存中的数据来源于文件,文件来源于磁盘。
[3]atime/notime #atime表示每次访问该文件时间戳会更新,比如使用cat命令进行查看,相反,notime表示不更新,每次访问更新时间戳放在磁盘中,ext4支持motime,但是修改不能隐藏更新时间戳。
[4]diratime/nodiratime #目录访问时间戳
[5]auto/noauto #是否支持自动挂载
[6]exec/noexec #是否支持系统上应用程序运行为进程,当有来历不明的文件系统有应用程序带来病毒,noexec很有用
[7]dev/nodev #是否在在此文件系统上使用设备文件
[8]suid/nosuid #若来历不明的文件系统上有suid文件,类似于passwd这样的文件偷偷混入,这样黑客可以直接使用此文件来更改你的密码,非常危险
[9]remount #重新挂载
[10]rw #读写挂载
[11]user/nouser #是否允许普通用户挂载此设备
[12]acl #启用此文件系统上的acl功能
[13]defaults #注意上述选项可多个同时使用,彼此使用逗号分隔,默认挂载选项defaults,相当于rw,suid,dev,exec,auto,nouser,async
四.卸载命令umount
umount dev 例:umount /dev/sda1
- 当/dev/sda1挂载到/mydata目录,处于被访问状态不能卸载时,我们可以如下操作
fuser -v /mydata/ #查看谁在访问
fuser -km /mydata/ #把访问的人提出系统
注意:不要轻易在生产环境里面执行此操作
- swap #挂载交换分区的命令
[1]swapon #启用 swapon [option] device
-a #激活所有的交换分区
-p #指定优先级
[2]swapoff #禁用 注意:创建完分区之后用partx -a /dev/sda 尽量不要使用交换分区,伤性能
- free #查看内存的命令
free [option]
-m:以MB为单位查看
-g:以GB为单位查看
例:我们来查看本机的内存状况
free -m
total used free shared buffers cached
Mem 980 667 313 3 88 215
-/+buffers/cache 362 618
swap 2047 0 2047
#注解:1.Mem物理内存 2.swap交换内存 3.buffers缓冲 4.cached 缓存 5.total内存总大小 6.used已使用内存空间 7.free空闲的内存空间 8.shared共享的内存空间 9.buffers和cached为常用数据存放,比如我们经常访问的目录或文件,这些就缓存在内存中方便我们快速查看,如果从磁盘中读取,那么速度必然会慢很多。
#原理:linux为了实现系统时加速访问效果,文件放在硬盘上再访问速度过慢,因为硬盘的I/O读写速度比内存I/O读写速度慢很多,所以我们将经常访问的的数据或者元数据尽量放在内存中去方面读写,但这样会占用内存空间,也可以清理出去,再加载进来也可以,而buffers缓冲与cached缓存是为了协调两个组件性能有差异有意设定的。
- df #文件系统信息查看工具
-h #易读方式查看
-p #利于文本处理
-i #inodes of blocks
- du #查看目录空间
du [option]… DIR
-h #human-readable 易读模式
-s #summary 总和
例:我们来查看/etc目录的大小
du -sh /etc
38M /etc #注意这里要使用-s选项,不然的话会显示出一大堆子目录的大小,太分散了。
五.练习
- 创建一个20G的文件系统/dev/sdb1,块大小为2048,文件系统为ext4,卷标为TEST,要求此分区开机后自动挂载至/testing目录,且默认选项有acl挂载选项。
mke2fs -b 2048 -t ext4 /dev/sdb
mount -L 'TEST' -o defaults,acl /dev/sdb1 /testing
但是,我们这里要注意到一句话,“开机自动挂载”,所以应该在/etc/fstab里面进行操作才能开机自动挂载。
vim /etc/fstab
#/etc/fstab
LABEL='TEST' /testing ext4 defaults,acl 0,0
:wq
mount -a
2.创建一个5G的文件系统/dev/sdb2,卷标为HUGE,要求此分区自动挂载至/mydata目录,文件系统为ext3.
vim /etc/fstab
#/etc/fastab
"HUGE" /mydata ext3 defaults 0,0
:wq
mount -a
- 写一个脚本,完成如下的功能
[1]列出当前系统识别到所有磁盘设备
[2]显示,前提如果磁盘数量为1,则显示其空间使用信息
如果大于1,则显示其空间使用信息,如果大于1,则显示最后有一个磁盘上的空间使用信息。
vim fdiskshow.sh
#/bin/bash
#
disk=$(fdisk -l /dev/[sh]d[a-z] | grep -o "^Disk /dev/[sh]d[a-z]" | wc -l)
if [ $disk -eq 1 ];then
fdisk -l /dev/[sh]da
else
fdisk -l /dev/[sh]d[a-z] | grep "^Disk /dev/[sh]d[a-z]| tail -1"
:wq
一家之言,仅供参考,如有错误欢迎指正。如有疑问,欢迎咨询楼主我~