/etc/fstab配置文件设置错误导致的开机故障
挂载概念阐述:
根文件系统之外的其他文件要想能否被访问,都必须通过“关联”至根文件系统上的某个目录来实现linux手机,此关联操作即为“挂载”,此目录即为“挂载点”,解除此关联关系的过程称之为“卸载”
1.挂载:根文件系统外通过关联至根文件系统上的某个目录来实现访问
2.挂载点:mount_point,用于作为另一个文件系统的访问入口;
(1)事先存在;
(2)应当使用未被或不会被其它进程使用到的目录;
(3)挂载点下原有的文件将会被隐藏;
实验环境CentOS7.2
挂载与卸载
挂载方式:mountDECEMOUNT_POINT
mount:通过查看/etc/mtab(文章最后会对/etc/mtab有个解释)文件显示当前系统已挂载的所有设备
命令使用格式:mount[-fnrsvw][-tvfstype][-ooptions]devicedir
device:指明要挂载的设备;(被挂载的设备可用以下四种之一表示)
(1)设备文件:比如/dev/sda5
(2)卷标:-L'LABEL',比如-L'MYDATA'
(3)UUID,-U'UUID':比如-U'0c50523c-43f1-45e7-85c0-a126711d406e'
(4)伪文件系统名称:proc,sysfs,devtmpfs,configfs
dir:挂载点
事先存在;建议使用空目录;(若非空则挂载后原文件会被隐藏,卸载后方能显示下来)
进程正在使用中的设备未能被卸载;
常用命令选项:
-tvsftype:指定要挂载的设备上的文件系统类型;
-r:readonly,只读挂载;
-w:readandwrite,读写挂载;
-n:不更新/etc/mtab;
-a:手动挂载所有支持手动挂载的设备;(定义在了/etc/fstab文件中,且挂载选项中有“自动挂载”功能)
-L'LABEL':以卷标指定挂载设备;
-U'UUID':以UUID指定要挂载的设备;
-B,--bind:绑定目录到另一个目录上;
注意:查看内核追踪到的已挂载的所有设备:cat/proc/mounts
………………………………………………………………………………………………………………………
-ooptions:(挂载文件系统的选项)
async:异步模式;
sync:同步模式;
atime/noatime:包含目录和文件;
diratime/nodiratime:目录的访问时间戳
auto/noauto:是否支持手动挂载
exec/noexec:是否支持将文件系统上应用程序运行为进程
dev/nodev:是否支持在此文件系统上使用设备文件;
suid/nosuid:是否支持在此文件系统上使用特殊权限
remount:重新挂载
ro:只读
rw:读写
user/nouser:是否容许普通用户挂载此设备
acl:启用此文件系统上的acl功能
注意:上述选项可多个同时使用,彼此使用冒号分隔;
默认挂载选项:defaults:rw,suid,dev,exec,auto,nouser,andasync
上述信息可以通过查看超级块信息看见,这儿不再对其进行演示。
………………………………………………………………………………………………………………………
命令演示:
1、指定文件系统将块设备挂载至指定空文件夹内:演示内容:1)没有指定文件系统,命令是否能正确执行;2)指定错误文件系统,命令是否能正确执行;3)挂载点有内容的文件夹,查看被挂载后其内容是否消失。
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
[root@localhost/]#fdisk-l
...
设备BootStartEndBlocksIdSystem
/dev/sdb9104857683Linux
/dev/sdb225110485765Extended
/dev/sdb524710240083Linux
/dev/sdb623510240083Linux
/dev/sdb725310240083Linux
/dev/sdb827210240083Linux
...
[root@localhost/]#mount/dev/sdb8/device
[root@localhost/]#df
文件系统1K-块已用可用已用%挂载点
/dev/mapper/centos-root426%/
devtmpfs48536804853680%/dev
tmpfs5801%/dev/shm
tmpfs535042%/run
tmpfs540%/sys/fs/cgroup
/dev/sda2036596829%/boot
tmpfs1161%/run/user/42
tmpfs360%/run/user/0
/dev/sdb8989885280937086%/device
[root@localhost/]#blkid/dev/sdb8
/dev/sdb8:UUID="a3c4bf06-3695-45e8-8a07-a063498f0578"TYPE="xfs"
[root@localhost/]#umount/device
[root@localhost/]#mount-text2/dev/sdb8/device
mount:文件系统类型错误、选项错误、/dev/sdb8上有坏超级块、
缺乏代码页或助手程序,或其他错误
[root@localhost/]#cd/device/
[root@localhostdevice]#ll
总药量0
[root@localhostdevice]#touch1122
[root@localhostdevice]#ll
总药量0
-rw-r--r--.1rootroot08月2310:1411
-rw-r--r--.1rootroot08月2310:1422
[root@localhostdevice]#ll
总药量0
[root@localhostdevice]#ll-a
总药量4
drwxr-xr-x.2rootroot68月2309:27.
dr-xr-xr-x.21rootroot40968月2309:29..
[root@localhostdevice]#cd..
[root@localhost/]#umount/device/
[root@localhost/]#cd/device/
[root@localhostdevice]#ll
总药量0
-rw-r--r--.1rootroot08月2310:1411
-rw-r--r--.1rootroot08月2310:1422
通过上述演示,说明了如下事实:1)没有指定文件系统,块设备也可以正常挂载;2)指定与块设备不一致的文件系统类型则命令报错;3)挂载点有内容的文件夹,在挂载后内容消失,卸载后内容再现,也就是说挂载后会将原文件内容掩藏,但并不对其进行其他操作。
………………………………………………………………………………………………………………………
2、演示内容:1)指定卷标并以只读形式挂载;2)对目录进行挂载操作,查看其与硬链接与软链接有何不同。
[root@localhostdevice]#blkid/dev/sdb6
10
11
12
13
14
/dev/sdb6:LABEL="sdb6"UUID="8284450c-8cb9-45d7-a8b8-ed9ed9ef9e52"TYPE="xfs"
[root@localhostdevice]#mount-L'sdb6'-r/device/
[root@localhostdevice]#touch/device/33
touch:难以创建"/device/33":只读文件系统
[root@localhostdevice]#umount/device/
[root@localhost/]#mount-B/etc//device/
[root@localhost/]#ll-i/
总药量64
11341lrwxrwxrwx.1rootroot77月1923:54bin->usr/bin
128dr-xr-xr-x.4rootroot40968月210:09boot
3drwxr-xr-x.19rootroot33008月2309:10dev
33554561drwxr-xr-x.129rootroot81928月2309:38device
33554561drwxr-xr-x.129rootroot81928月2309:38etc
158drwxr-xr-x.42rootroot40968月2209:00home
通过上述演示,说明了如下事实:1)指定卷标挂载可行,以只读形式挂载后,未能对挂载点中的内容进行更改、创建等操作;2)目录的挂载实质上是硬链接,挂载后可以对上面的文件内容进行更改与删掉。
注:文件夹的挂载在df中并不显示
………………………………………………………………………………………………………………………
卸载命令:umount
命令使用格式:
#umountDEVICE
#umountMOUNT_POINT
里面早已演示过umount的使用
fuser:查看正在访问指定文件系统的进程:
命令使用格式:
#fuser-vMOUNT_POINT
中止所有在正访问指定的文件系统的进程:慎用
#fuser-kmMOUNT_POINT
交换分区swap
这儿介绍下交换分区,通过实验演示交换分区的创建及挂载
挂载交换分区:
启用:swapon
swapon[OPTION]...[DEVICE]
-a:激活所有的交换分区;
-pPRIORITY:指定优先级;
禁用:swapoff[OPTION]...[DEVICE]
实验演示:
1、交换分区的创建:1)新创建一分区,2)更改新分区的类型,改为swap号码为82,3)低格为swap
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
[root@localhost~]#fdisk/dev/sdb
欢迎使用fdisk(util-linux2.23.2)。
修改将逗留在显存中,直至您决定将更改写入c盘。
使用写入命令前请三思。
命令(输入m获取帮助):n
Partitiontype:
pprimary(1primary,1extended,2free)
llogical(numberedfrom5)
Select(defaultp):l
添加逻辑分区9
起始磁道(2928640-4196351,默认为2928640):
将使用默认值2928640
Last磁道,+磁道or+size{K,M,G}(2928640-4196351linux运维最佳实践,默认为4196351):+100M
分区9已设置为Linux类型,大小设为100MiB
命令(输入m获取帮助):p
c盘/dev/sdb:5368MB,5368709120字节,10485760个磁道
Units=磁道of1*512=512bytes
磁道大小(逻辑/化学):512字节/512字节
I/O大小(最小/最佳):512字节/512字节
c盘标签类型:dos
c盘标示符:0xd391e822
设备BootStartEndBlocksIdSystem
/dev/sdb9104857683Linux
/dev/sdb225110485765Extended
/dev/sdb524710240083Linux
/dev/sdb623510240083Linux
/dev/sdb725310240083Linux
/dev/sdb827210240083Linux
/dev/sdb929286440083Linux
命令(输入m获取帮助):t
分区号(1,2,5-9,默认9):9
Hex代码(输入L列举所有代码):82
已将分区“Linux”的类型修改为“Linuxswap/Solaris”
命令(输入m获取帮助):p
c盘/dev/sdb:5368MB,5368709120字节,10485760个磁道
Units=磁道of1*512=512bytes
磁道大小(逻辑/化学):512字节/512字节
I/O大小(最小/最佳):512字节/512字节
c盘标签类型:dos
c盘标示符:0xd391e822
设备BootStartEndBlocksIdSystem
/dev/sdb9104857683Linux
/dev/sdb225110485765Extended
/dev/sdb524710240083Linux
/dev/sdb623510240083Linux
/dev/sdb725310240083Linux
/dev/sdb827210240083Linux
/dev/sdb929286440082Linuxswap/Solaris
命令(输入m获取帮助):w
Thepartitiontablehasbeenaltered!
Callingioctl()tore-readpartitiontable.
正在同步c盘。
[root@localhost~]#mkswap/dev/sdb9
正在设置交换空间版本1,大小=102396KiB
无标签,UUID=74bf2766-a01b-48ea-9082-2fad6b8e06a9
2、挂载交换分区:启用与禁用
10
11
12
13
14
[root@localhost~]#free
totalusedfreesharedbuff/cacheavailable
Mem:56535892720328
Swap:2148
[root@localhost~]#swapon/dev/sdb9
[root@localhost~]#free
totalusedfreesharedbuff/cacheavailable
Mem:24363692720368
Swap:2544
[root@localhost~]#swapoff/dev/sdb9
[root@localhost~]#free
totalusedfreesharedbuff/cacheavailable
Mem:92535688719592
Swap:2148
实验涉及到的命令小结:
显存空间使用状态:free[OPTION]
-m:以MB为单位
-g:以GB为单位
文件系统空间占用等信息的查看工具:df
-h:human-readable
-i:inodesinsteadofblocks
-P:以Posix兼容的格式输出;
查看某目录总体空间占用状态:du
du[OPTION]...DIR
-h:human-readable
-s:summary
命令总结:mount,umount,free,df,du,swapon,swapoff,fuser
开机手动挂载
假如我们想实现开机手动挂载某设备,只要更改/etc/fstab文件即可。
文件挂载的配置文件:/etc/fstab
查看此文件可知
每行定义一个要挂载的文件系统;
其每行的格式如下
要挂载的设备或伪文件系统挂载点文件系统类型挂载选项轮询频度自检顺序
UUID=6efb8a23-bae1-427c-ab10-3caca95250b1/bootxfsdefaults00
要挂载的设备或伪文件系统:设备文件、LABEL(LABEL="")、UUID(UUID="")、伪文件系统名称(proc,sysfs)
挂载点:指定的文件夹
挂载选项:defaults,通常没有特殊要求设置为默认
轮询频度:
0:不做备份
1:每晚轮询
2:每隔三天轮询
自检顺序:
0:不自检
1:首先自检;通常只有rootfs才用1;
/etc/fstab和/etc/mtab的区别
/etc/fstab文件的作用:
记录了计算机上硬碟分区的相关信息,启动Linux的时侯,检测分区的fsck命令,和挂载分区的mount命令,都须要fstab中的信息,来正确的检测和挂载硬碟。
/etc/mtab文件的作用:
先看它的英语是:
Thischangescontinuouslyasthefile/proc/mountchanges.Inotherwords,whenfilesystemsaremountedandunmounted,thechangeisimmediatelyreflectedinthisfile.
记载的是现今系统早已装载的文件系统ubuntu提示只读文件系统,包括操作系统构建的虚拟文件等;而/etc/fstab是系统打算装载的。每每mount挂载分区、umount卸载分区,就会动态更新mtab,mtab总是保持着当前系统中已挂载的分区信息,fdisk、df这类程序,必需要读取mtab文件,就能获得当前系统中的分区挂载情况。其实我们自己还可以通过读取/proc/mount也可以来获取当前挂载信息
/etc/fstab文件配置异常造成的开机故障及其解决方式
模拟该故障的环境打算:
1、挂载目录/mountdir存在
2、要挂载的设备存在且已做好低格,这儿用的是/dev/sdb1,1G大小文件系统为ext4.
3、设置/dev/sdb1卷标为label
编辑/etc/fstab文件,指定设备的UUID或卷标代表挂载设备,并故意弄错UUID或卷标,然后在自检顺序选项中设置为小于0的数,这次实验设置为3
[root@localhost~]#blkid/dev/sdb1
/dev/sdb1:LABEL="label"UUID="1633ca8a-b750-4231-a226-f58d7976c72c"TYPE="ext4"
设置完毕后重启
重启后加载/etc/fstab文件后发觉要挂载的设备不对,于是进行检测,如右图
检测完毕还是挂在不了于是要求步入紧急搜救模式,进行整修。步入该模式须要输入root的密码
步入/etc/fstab文件后,要想让机器正常启动,可以更改如下两处:
1、将卷标更改正确,例如改为label;2、将开机自检设置为0.
更改完毕后重启,机器正常启动。
注:开机手动挂载最好设置UUID其次使用卷标,由于有的时侯卷设备名会发生变化,造成开机启动出现异常ubuntu提示只读文件系统,例如前面这些情况。
在CentOS6中略有不同,在CentOS6步入紧急搜救模式以后它未能直接修改/etc/fstab文件,由于它没有写权限,须要先df查看根挂载所在,然后使用mount-orw,remount/mountdevice/mountpoint重新挂载并赋于写的权限即可。