在第一天装系统的时候,我们已经知道了mount,即挂载的概念。装机时自己配置分区的小伙伴都知道,CentOS7的文件系统为xfs,CentOS6则是ext4,更早的CentOS5则是ext3。老师告诉我们这叫文件系统。不同的文件系统有不同的存储特色。如linux里ext2无日志,xfs可支持最高200T之类的,window里fat32无法支持大于4G文件的传输云云……

稍等,好像有点跑题了。

总之,今天我们来说说基于CentOS平台的Linux文件管理。

先看下面这个题目。

创建一个2G的文件系统,块大小为2048byte,预留1%可用空间,文件系统ext4,卷标为TEST,要求此分区开机后自动挂载至/test目录,且默认有acl挂载选项

w_0002.gif

喂喂,用不着这个表情啦。我们今天的主题就是教你学会做这类题目啦!注意,是这类啦!这么说本作的标题大概可以改成——教你十分钟掌握Linux文件管理。嗯,不错呢这个注意。阿拉现在就去改。i_f16.gif

改好了!那就让我们重回正题。

咳咳,创建2G的文件系统啊。那就来吧……

桥豆麻袋。先看好题目。题目要求文件系统大小为2G,这个不先设定好可不美哟。虽然图形化分区size和format是同时设定的,但其执行也是一条条来的哟。科科,后期可更改的文件系统属性里可没有文件大小这一属性哟。0.0总觉得说了一堆无关紧要的废话啊。喂,这点常识是个人都知道的吧。。

哦急死尅。t_0020.gif

咳咳,开始了啊。

1.分区

linux里的分区工具有fdisk,parted,gdisk。论功能parted最全面。论性能大概数gdisk最优。但是用的最多的,还是老当益壮的fdisk。

关于分区工具,度娘和谷哥都能给出不错的答案。阿拉就不再废话了。(众人:喂,该多说的地方一字千金啦?阿拉:咳咳,这叫抛砖引玉。t_0012.gif众人:t_0029.gif

哦急死尅。阿拉开始分区了啊。记笔记了啊。

fdisk和gdisk默认为交互式分区。好吧,parted也可以交互式分区。(大概是分区着实麻烦了点。嘛,英语好的话交互式操作两遍就熟悉了。)

不过我们可以用下面的方式实现非交互式。(说是非交互式,其实也就是把交互式要做的列出来执行罢了i_f18.gif

#fdisk对新硬盘分区(覆盖已有数据的话需要加o)
#gdisk功能类似fdisk。
[root@centos7 ~]# echo -e "n\np\n1\n\n+1G\nw\n" |fdisk /dev/sdb
#fdisk追加大小为1G的新分区(仅分区总数不超过4时)
[root@centos7 ~]# echo -e "n\n\n\n+1G\nw\n" |fdisk /dev/sdb
#parted新设分区结构(这个跟ext4和xfs不是一个体系啦),yes是重设时需要的
[root@centos7 ~]# parted /dev/sdb mklabel gpt/msdos [yes]
#parted新分一个1G的分区。这个要是继续分区的话数值要计算好的说
[root@centos7 ~]# parted /dev/sdb mkpart p 1 1000 
#lsblk查询分区信息。不跟磁盘名则列出当前主机下所有磁盘
[root@centos7 ~]# lsblk /dev/sdb
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sdb      8:16   0  150G  0 disk 
├─sdb1   8:17   0  953M  0 part 
└─sdb2   8:18   0    1G  0 part 
#虽然非交互式演示起来方便,实操还是交互式更强大哦。
[root@centos7 ~]# fdisk /dev/sdb
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): m #m显示帮助信息
Command action
   d   delete a partition
   g   create a new empty GPT partition table
   G   create an IRIX (SGI) partition table
   l   list known partition types
   m   print this menu
   n   add a new partition
   o   create a new empty DOS partition table
   q   quit without saving changes
   s   create a new empty Sun disklabel
   w   write table to disk and exit

Command (m for help): p #显示当前分区信息

Disk /dev/sdb: 161.1 GB, 161061273600 bytes, 314572800 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: gpt


#         Start          End    Size  Type            Name
 1         2048      1953791    953M  Microsoft basic p
 2      1953792      4050943      1G  Linux filesyste 

Command (m for help): n  #新建分区
Partition number (3-128, default 3):   #使用默认
First sector (34-314572766, default 4050944):    #使用默认
Last sector, +sectors or +size{K,M,G,T,P} (4050944-314572766, default 314572766): +2G    #增加2G大小的分区
Created partition 3


Command (m for help): p  #查看分区是否成功

Disk /dev/sdb: 161.1 GB, 161061273600 bytes, 314572800 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: gpt


#         Start          End    Size  Type            Name
 1         2048      1953791    953M  Microsoft basic p
 2      1953792      4050943      1G  Linux filesyste 
 3      4050944      8245247      2G  Linux filesyste 

Command (m for help): w  #保存当前分区表
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[root@centos7 ~]# lsblk /dev/sdb  #查看分区,新增2G分区成功
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sdb      8:16   0  150G  0 disk 
├─sdb1   8:17   0  953M  0 part 
├─sdb2   8:18   0    1G  0 part  
└─sdb3   8:19   0    2G  0 part
#需要注意的是,fdisk和gdisk新增系统引导磁盘内的分区时,该分区不会自动写入内存
#centos5和7里使用partprobe /dev/sdX,centos6则使用partx -a /dev/sda保存新增,partx -d --nr nmuber\|range /dev/sdX保存删除

2G分区保存成功,耶i_f47.gif。好的,一鼓作气攻城略地,拿下这山头今晚吃鸡。B_0020.gif

2.格式化文件系统

分区完了,不代表我们就能使用他了。咳咳,忽略为什么是他不是它的问题。

电脑也是这样子。买了主机不代表就能使用了,我们需要操作系统。而文件系统,则需要格式化。(就像是卷福需要华生)t_0035.gif

格式化文件系统的方式虽说有mkfs与mkfs.的区分,实际调用的则是同一命令常用的是mkfs。

格式化前我们使用blkid查询文件系统信息,发现我们新增的分区比起其他文件系统少了点什么。

[root@centos7 ~]# blkid
/dev/sda1: UUID="e45a1265-9826-442b-9ce6-5f44440e8d0e" TYPE="xfs" 
/dev/sda2: UUID="2fe39e58-8f02-49bf-b4b3-a59c56dd3907" TYPE="xfs" 
/dev/sda3: UUID="a86604e8-9d34-4c3f-b3b3-fb3f3b72e356" TYPE="xfs" 
/dev/sda5: UUID="f1eb3668-9539-4d4f-bae1-79f94029a101" TYPE="swap" 
/dev/sda6: UUID="d629014c-23c3-43e0-b6b9-7c545b4f59f4" TYPE="ext4" 
/dev/sdb1: UUID="68c661e2-7f3d-4ec9-b3f4-380f9490af38" TYPE="ext4" PARTLABEL="p" PARTUUID="5506b37b-5bfb-4ee2-9b18-386c9cc65e4f" 
/dev/sr0: UUID="2016-12-05-13-52-39-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos" 
/dev/sdb2: PARTUUID="f68ec926-e324-4bf7-bbcc-927ec8aa43b2" 
/dev/sdb3: PARTUUID="8c8d30d2-6209-4182-9e1d-0beabe8f0e60"#没有TYPE项

CentOS7之前的红帽主流文件系统是extX系列,所有也有对应的ext文件格式化专用工具mke2fs。总结如下:

格式化/dev/sdb3分区的文件系统为ext4:mkfs.ext4 /dev/sdb3=mkfs -t ext4 /dev/sdb3=mke2fs -t ext4 /dev/sdb3

格式化文件系统为ext3:mkfs -t ext3 /dev/sdb3=mkfs.ext3 /dev/sdb3=mke2fs -t ext3 /dev/sdb3=mke2fs -j /dev/sdb3

格式化文件系统为ext2:mkfs -t ext2 /dev/sdb3=mkfs.ext2 /dev/sdb3=mke2fs /dev/sdb3

格式化文件系统为xfs:mkfs -t xfs -f /dev/sdb3=mkfs.xfs /dev/sdb3(centos6里需安装对应软件包,centos5及之前系统不支持)

其余格式参见man mkfs。另外mke2fs一言难尽,索性就不说了。t_0028.gif

在我们的题目里,我们接下来只要执行mkfs.ext4 /dev/sdb3就可以了。dei哞西卡西,我盟的mkfs还要更强大。比如mkfs.ext4 -L TEST /dev/sdb3,格式化的时候顺便指定个卷标啦。i_f27.gif

众人:嗯?没了? 阿拉恭敬的弯腰行礼:没了。 众人:啊,是很强大……i_f13.gift_0036.gif

3.修改文件系统信息

嘿,上面的那个记得完了再用blkid查询一下用没有成功啊……

众人:你丫赶紧的y_0021.gif

在学习acl特殊权限位的设定是,我们会用到tune2fs -l /dev/sdX |grep acl来查询某文件系统是否开启了acl权限。(众人:那个跟这个有什么关系?? 阿拉傲娇脸:就是有关系,没有我扯他干嘛! 众人:哦那你继续。但我不认为没关系的你不扯。 阿拉:y_0010.gif

tune2fs -l /dev/sdb3可以查询到很多文件系统相关的信息。但有时也会出现这样的情况。(阿拉去吃饭没关ssh,ssh自动断电了)

[root@centos7 ~]# tune2fs -l /dev/sdb3
tune2fs 1.42.9 (28-Dec-2013)
tune2fs: Bad magic number in super-block while trying to open /dev/sdb3
Couldn't find valid filesystem superblock.

这个要详细说就扯太远了。(众人:算了,你随意吧,你开心就好,你爱扯多远扯多远吧。)

好的,阿拉这里就感谢各位理解了。y_0002.gify_0022.gif

众人:咳咳,该干啥干啥,别发奇怪的表情。

得勒。上面有提到super-block,即超级块。嗯,超级块嘛,嗯,详情见http://book.2cto.com/201312/38223.html,如果还不懂,再看看这个http://www.cnblogs.com/bangerlee/archive/2012/03/31/2426069.html,如果再看不懂,那就自己查资料去。

众人:说好的要脸呢?

阿拉:啊,你刚说啥?我听不到。

super-block,里面有文件系统的详细信息。因为断电、死机等非正常关机情况,会使超级块受到破坏。超级块坏掉后就不能挂载,不能挂载当然就不能访问,不能访问自然就用不了,磁盘或分区没法用,数据拷不出开。

运维,自然就是为解决这类问题而生的。

因为超级块在文件系统中是有备份的。总之我们是可以进行修复的。

虽然挂载是我们之后要说的,这里还是要提一下。修复应该在非挂载状态下进行。CentOS6与CentOS7里不卸载是不允许修复的,但在CentOS5里却没有这个提示。然而我们不卸载的状态下修复的话,整个文件系统就坏掉了。随便说一下,RHCE的考试里有这道题哦。

然后是修复。

fsck: File System Check 

        fsck.FS_TYPE 

        fsck -t FS_TYPE 

            -p: 自动修复错误 

            -r: 交互式修复错误 

            FS_TYPE一定要与分区上已经文件类型相同

e2fsck:ext系列文件专用的检测修复工具 

        -y:自动回答为yes 

        -f:强制修复

哦,对了。没修复之前用blkid查看的话/dev/sdb3下是这个样子滴。

/dev/sdb3: PARTUUID="8c8d30d2-6209-4182-9e1d-0beabe8f0e60"

但你要是直接格式化的话,里面的数据可就听天由命了。空磁盘当然无所畏惧。如果你不确定里面有没有数据的话,当然是先修复了看一下靠谱。

这里我们的/dev/sdb3是ext4的文件系统。所以我们这样来。

[root@centos7 ~]# fsck /dev/sdb3
fsck from util-linux 2.23.2
e2fsck 1.42.9 (28-Dec-2013)
ext2fs_open2: Bad magic number in super-block
fsck.ext2: Superblock invalid, trying backup blocks...
/dev/sdb3 was not cleanly unmounted, check forced.
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/sdb3: ***** FILE SYSTEM WAS MODIFIED *****
/dev/sdb3: 11/131072 files (0.0% non-contiguous), 26156/524288 blocks
[root@centos7 ~]# blkid
/dev/sda1: UUID="e45a1265-9826-442b-9ce6-5f44440e8d0e" TYPE="xfs" 
/dev/sda2: UUID="2fe39e58-8f02-49bf-b4b3-a59c56dd3907" TYPE="xfs" 
/dev/sda3: UUID="a86604e8-9d34-4c3f-b3b3-fb3f3b72e356" TYPE="xfs" 
/dev/sda5: UUID="f1eb3668-9539-4d4f-bae1-79f94029a101" TYPE="swap" 
/dev/sda6: UUID="d629014c-23c3-43e0-b6b9-7c545b4f59f4" TYPE="ext4" 
/dev/sdb1: UUID="68c661e2-7f3d-4ec9-b3f4-380f9490af38" TYPE="ext4" PARTLABEL="p" PARTUUID="5506b37b-5bfb-4ee2-9b18-386c9cc65e4f" 
/dev/sr0: UUID="2016-12-05-13-52-39-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos" 
/dev/sdb2: UUID="9bd0fea2-0ef0-415d-9a54-d7c4d9deccf4" TYPE="ext4" PARTUUID="f68ec926-e324-4bf7-bbcc-927ec8aa43b2" 
/dev/sdb3: UUID="cdf26127-fee3-4d5a-9066-f077fd36b6d8" TYPE="ext4" PARTUUID="8c8d30d2-6209-4182-9e1d-0beabe8f0e60"

这样就修复好了。这个尴尬的是,我们的/dev/sdb3就是新建的分区,新格式化的空磁盘。一点数据都没有修复起来也没价值可言。

得,找个其他磁盘试试吧。

因为断电,阿拉的这块磁盘也不行了。

[root@centos7 ~]# tune2fs -l /dev/sda3
tune2fs 1.42.9 (28-Dec-2013)
tune2fs: Bad magic number in super-block while trying to open /dev/sda3
Couldn't find valid filesystem superblock.

因为重新连接后就一直挂载中,所以这磁盘还能正常使用。毕竟虚拟机没断电,所以ssh联通后这磁盘还是正常挂起来了。但是阿拉任性啊,阿拉非要看到他的超级块信息。或者说如果虚拟机也断电了,有块磁盘就是挂载不上了呢?

这里当然要先卸载。另外注意,这块磁盘是xfs格式的。

[root@centos7 ~]# umount /dev/sda3

0.0刚去xfs_repair /dev/sda3了一下,然后tune2fs -l /dev/sda3结果还是一样一样的。

一个小时后反应过来,噢,tune2fs是ext文件系统专用啊。t_0034.gif

查看xfs超级块信息左转xfs_admin -f  {device}。i_f27.gif

被自己气乐了。

默默的把/dev/sda3挂上。

得。继续看题。

创建一个2G的文件系统,块大小为2048byte,预留1%可用空间,文件系统ext4,卷标为TEST,要求此分区开机后自动挂载至/test目录,且默认有acl挂载选项

块大小即block。以及1%可用空间。

mke2fs在格式化文件系统时的功能有很多。但除了block的大小外,其他信息都可以后期修改。

结果还是要用到mke2fs啊,居然把mke2fs寥寥数语带过的阿拉真是。。给大家造成了麻烦真是抱歉。B_0025.gif

那就列个表给各位大爷。


ext系列文件系统专用管理工具
mke2fs(仅格式化时指定,不指定则按默认值) tune2fs(格式化后可随时更改)

-t {ext2|ext3|ext4}:设置文件系统格式

-b {1024|2048|4096}:设置block大小

-l:查看指定文件系统超级块信息super block
-L 'LABEL':指定卷标 -L 'LABEL':修改卷标 
-m #: 默认5%,为管理人员预留空间占总空间的百分比 -m #:修预留给管理员的空间百分比
-j: 相当于 -t ext3 -j: 将ext2升级为ext3

-O FEATURE[,...]:启用指定特性

可指定特性为下面示例中Filesystem features行所列出的选项

-O: 文件系统属性启用或禁用

–O ^has_journal

-O ^FEATURE:关闭指定特性

-o: 调整文件系统的默认挂载选项

–o ^acl -U UUID: 修改UUID号 

-i #: 为数据空间中每多少个字节创建一个inode;此大 小不应该小于block的大小 

-N #:指定分区中创建多少个inode 

-I 一个inode记录占用的磁盘空间大小,范围为128---4096


除此之外还有:

dumpe2fs: 块分组管理

    -h:查看超级块信息,不显示分组信息

blkid:块设备属性信息查看 

    blkid [OPTION]... [DEVICE] 

        -U UUID: 根据指定的UUID来查找对应的设备 

        -L LABEL:根据指定的LABEL来查找对应的设备

e2label:管理ext系列文件系统的LABEL 

    e2label DEVICE [LABEL]

findfs :查找分区 

    findfs [options] LABEL=

    findfs [options] UUID=

我们的题目就可以这样做:

[root@centos7 ~]# mke2fs -b 2048 -m 1 -L TEST -t ext4 /dev/sdb3  #连同文件系统格式化同步执行
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=TEST
OS type: Linux
Block size=2048 (log=1)
Fragment size=2048 (log=1)
Stride=0 blocks, Stripe width=0 blocks
131072 inodes, 1048576 blocks
10485 blocks (1.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=269484032
64 block groups
16384 blocks per group, 16384 fragments per group
2048 inodes per group
Superblock backups stored on blocks: 
        16384, 49152, 81920, 114688, 147456, 409600, 442368, 802816
Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done 
[root@centos7 ~]# tune2fs -l /dev/sdb3 #查看超级块信息
tune2fs 1.42.9 (28-Dec-2013)
Filesystem volume name:   TEST    #LABEL
Last mounted on:          
Filesystem UUID:          bbc06076-3025-4589-857e-a8e64a5fc9f2
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype extent 64bit flex_bg sparse_super huge_file uninit_bg dir_nlink extra_isize
Filesystem flags:         signed_directory_hash 
Default mount options:    user_xattr acl
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              131072
Block count:              1048576
Reserved block count:     10485
Free blocks:              994651
Free inodes:              131061
First block:              0
Block size:               2048   #指定成功
Fragment size:            2048
Group descriptor size:    64
Reserved GDT blocks:      512
Blocks per group:         16384
Fragments per group:      16384
Inodes per group:         2048
Inode blocks per group:   256
Flex block group size:    16
Filesystem created:       Sat Aug 19 19:55:36 2017
Last mount time:          n/a
Last write time:          Sat Aug 19 19:55:37 2017
Mount count:              0
Maximum mount count:      -1    #为-m所制定的值
Last checked:             Sat Aug 19 19:55:36 2017
Check interval:           0 ()
Lifetime writes:          65 MB
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:               256
Required extra isize:     28
Desired extra isize:      28
Journal inode:            8
Default directory hash:   half_md4
Directory Hash Seed:      7876e37e-5dca-4797-9566-0cc4d7ee6ea9
Journal backup:           inode blocks

耶。大部分的工作都完成了耶。tune2fs的功能类似,你们辣么聪明,一定一看就知道了。(各位大爷:我呸,还用你说B_0063.gif

4.挂载与自动挂载

好的好的。是阿拉多嘴。

恕阿拉还要balabala一阵。

接下来的mount我们都见过他。光盘镜像挂载的时候还经常用来着呢。mount /dev/sr0 /media,这样就把镜像挂载到/media下了。

有个问题不知各位大侠发现了没。每次挂载完再开机df一下,就成了这样。

[root@centos7 ~]# df
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/sda2       48803552 5018104  43785448  11% /
devtmpfs         1001404       0   1001404   0% /dev
tmpfs            1016076      84   1015992   1% /dev/shm
tmpfs            1016076    9184   1006892   1% /run
tmpfs            1016076       0   1016076   0% /sys/fs/cgroup
/dev/sda1         972452  156004    816448  17% /boot
tmpfs             203216      16    203200   1% /run/user/42
tmpfs             203216       0    203216   0% /run/user/0
/dev/sda3       48803552 1896576  46906976   4% /app

别的暂且不论,我的镜像怎么又不见了。我的这一行呢??

/dev/sr0         8086368 8086368         0 100% /media

ls查一下现有的磁盘,发现是这样。

[root@centos7 ~]# ls /dev/sd*
/dev/sda   /dev/sda3  /dev/sda6  /dev/sdb1  /dev/sdc   /dev/sdc3
/dev/sda1  /dev/sda4  /dev/sda7  /dev/sdb2  /dev/sdc1  /dev/sdc4
/dev/sda2  /dev/sda5  /dev/sdb   /dev/sdb3  /dev/sdc2  /dev/sdc5

lsblk查看磁盘分区,blkid查看文件系统。

[root@centos7 ~]# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0  200G  0 disk 
├─sda1   8:1    0  953M  0 part /boot
├─sda2   8:2    0 46.6G  0 part /
├─sda3   8:3    0 46.6G  0 part /app
├─sda4   8:4    0  512B  0 part 
├─sda5   8:5    0  3.7G  0 part [SWAP]
├─sda6   8:6    0    1G  0 part 
└─sda7   8:7    0 10.3G  0 part 
sdb      8:16   0  150G  0 disk 
├─sdb1   8:17   0  953M  0 part 
├─sdb2   8:18   0    1G  0 part 
└─sdb3   8:19   0    2G  0 part 
sdc      8:32   0  100G  0 disk 
├─sdc1   8:33   0    1G  0 part 
├─sdc2   8:34   0    5G  0 part 
├─sdc3   8:35   0    1K  0 part 
├─sdc4   8:36   0    4G  0 part 
└─sdc5   8:37   0   90G  0 part 
sr0     11:0    1  7.7G  0 rom  /media
[root@centos7 ~]# blkid
/dev/sda1: UUID="e45a1265-9826-442b-9ce6-5f44440e8d0e" TYPE="xfs" 
/dev/sda2: UUID="2fe39e58-8f02-49bf-b4b3-a59c56dd3907" TYPE="xfs" 
/dev/sda3: UUID="a86604e8-9d34-4c3f-b3b3-fb3f3b72e356" TYPE="xfs" 
/dev/sda5: UUID="f1eb3668-9539-4d4f-bae1-79f94029a101" TYPE="swap" 
/dev/sda6: UUID="d629014c-23c3-43e0-b6b9-7c545b4f59f4" TYPE="ext4" 
/dev/sdb1: UUID="68c661e2-7f3d-4ec9-b3f4-380f9490af38" TYPE="ext4" PARTLABEL="p" PARTUUID="5506b37b-5bfb-4ee2-9b18-386c9cc65e4f" 
/dev/sr0: UUID="2016-12-05-13-52-39-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos" 
/dev/sdb2: UUID="9bd0fea2-0ef0-415d-9a54-d7c4d9deccf4" TYPE="ext4" PARTUUID="f68ec926-e324-4bf7-bbcc-927ec8aa43b2" 
/dev/sdb3: LABEL="TEST" UUID="bbc06076-3025-4589-857e-a8e64a5fc9f2" TYPE="ext4" PARTUUID="8c8d30d2-6209-4182-9e1d-0beabe8f0e60"

几个命令的结果砸下来,是不是一脸懵逼呢?

你们肯定要说明明一个mount的事,给整这么个复杂。

当然,你们要心里跟明镜似的,阿拉就不用絮叨这么多了。就是因为不清楚所以才学习的呀。

计算机就是,你不懂他的时候仰慕他的神秘,你懂他了惊叹他的巧妙,你和他在一起了才知道他的能力。

电生磁磁生电线圈正负极电磁共振交流电并联串联逻辑与非或,这一切进展太快,留下名字的人太多,数学物理逻辑撑起了计算机的世界。

呃,怎么就扯到计算机科学了。咳咳,阿拉并没有装13,阿拉只是情不自禁兴头所致。i_f27.gif再不说正题今晚博客就写不完了。

monut的挂载不能说是临时挂载,因为每次关机系统都会把内存内的信息写入磁盘,然后把磁盘全部卸载以保存数据。装系统的时候分区的信息被写入到一个文件里,写在这个文件里的磁盘会在每次电脑开机的时候自动挂载。这个文件是/etc/fstab。

[root@centos7 ~]# cat /etc/fstab 
#
# /etc/fstab
# Created by anaconda on Tue Jul 11 20:07:17 2017
#
# 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=2fe39e58-8f02-49bf-b4b3-a59c56dd3907 /                       xfs     defaults        0 0
UUID=a86604e8-9d34-4c3f-b3b3-fb3f3b72e356 /app                    xfs     defaults        0 0
UUID=e45a1265-9826-442b-9ce6-5f44440e8d0e /boot                   xfs     defaults        0 0
UUID=f1eb3668-9539-4d4f-bae1-79f94029a101 swap                    swap    defaults        0 0

咋一看和blkid列出的内容有些相似。然而/etc/fstab里却只有装系统时的分区信息。

我们要想一个磁盘也能开机挂载,只要把其信息写入此文件即可。残念,这个文件,只能我们手动写入。并没有useradd那种能写入到/etc/passwd里的命令呢。t_0015.gif

通过blkid命令我们可以得到/dev/sdb3的UUID。

啊,你不会要问我什么是UUID吧。

哎呀,真是拿你们没办法啊。

UUID,是类似于×××号的东西啦。×××号由出生地出生日期等决定,光×××号就能知道整个人的几乎全部信息。UUID由时间日期时钟序列等决定,是磁盘的唯一编号。当磁盘更改label,也就是改名字的时候,UUID还能够识别磁盘。嘛,虽然UUID也可以重设。这大概类似于某些人有两个×××号一样。别不服气了,就是有这种啊。在家入户口,后来又到外地了再入户口之类的。

UUID就没这么好运了,你可以随意指定。UUID简直就像私人女仆一样随便主人调教呢。。。t_0032.gif

建一个/test目录,追加/dev/sdb3的相关信息到/etc/fstab,mount -a挂载/etc/fstab里没有挂载的磁盘。df查看,/dev/sdb3果然挂载上了。不服的重启测试去。

[root@centos7 ~]# mkdir /test
#centos里文件系统默认开启acl,centos6里新挂载分区需手动指定acl权限
[root@centos7 ~]# echo 'UUID=bbc06076-3025-4589-857e-a8e64a5fc9f2 /test                   ext4    defaults,acl        0 0' >> /etc/fstab
[root@centos7 ~]# mount -a
[root@centos7 ~]# df
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/sda2       48803552 5018132  43785420  11% /
devtmpfs         1001404       0   1001404   0% /dev
tmpfs            1016076      84   1015992   1% /dev/shm
tmpfs            1016076    9184   1006892   1% /run
tmpfs            1016076       0   1016076   0% /sys/fs/cgroup
/dev/sda1         972452  156004    816448  17% /boot
tmpfs             203216      16    203200   1% /run/user/42
tmpfs             203216       0    203216   0% /run/user/0
/dev/sda3       48803552 1896576  46906976   4% /app
/dev/sr0         8086368 8086368         0 100% /media
/dev/sdb3        1998538    9236   1960140   1% /test

mount命令说起来还挺复杂的。偷偷把我们辣个超帅萌的老师的总结贴在下面。那个-o,和tune2fs、mke2fs用法差不多了。i_f29.gif

mount 设备名 挂载点 

    -t 指定文件系统类型

    -r 只读挂载

    --remount,ro|rw  也会新/etc/fstab中的选项,如果与指定的冲突,则remount后指定的优先。

    -n 隐藏挂载信息不显示,但在/proc/mounts可以查到

    -a 读取/etc/fstab,挂载其中没有挂载的设备

    -L 'LABEL': 以卷标指定挂载设备

    -U 'UUID': 以UUID指定要挂载的设备

    -B --bind 目录挂目录

    -o 选项

            sync,async 同步,异步(defaults)

            atime(defaults),noatime  是否在读访问时更新atime

            diratime(defaults),nodiratime

            auto(defaults)/noauto 写在/etc/fstab当中的分区,是否在mount -a时被挂载

            exec(defatuls)/noexec 在该分区所挂载的目录中的脚本是否可以执行。

            dev(defaults)/nodev:是否支持在此文件系统上使用设备文件

            suid(defaults)/nosuid:不否支持suid和sgid权限

            remount:重新挂载

            ro:只读

            rw:读写(defaults)

            user/nouser(defaults):是否允许普通用户挂载此设备,默认管理员才能挂载

            acl:启用此文件系统上的acl功能

            defaults 默认,见以上中的(defaults)

就是资源被占用,无法卸载的情况了。当然可以广播通知占用磁盘的家伙赶紧下来。但那有时可不轻松。好的,能帮到你的相关卸载命令如下:

查看挂载情况:

            findmnt MOUNT_POINT|device

查看正在访问指定文件系统的进程:

        lsof MOUNT_POINT 

        fuser -v MOUNT_POINT

终止所有在正访问指定的文件系统的进程:

            fuser -km MOUNT_POINT

卸载:

            umount DEVICE

            umount MOUNT_POINT

那么这个问题就完成了。怎么样,有信心把这个写成脚本吗?