红帽秘笈,第十四章文件系统

本章主要介绍文件系统的管理
了解什么是文件系统
对分区进行格式化操作
挂载分区
查找文件
在Windows系统中,买了一块新的硬盘加到电脑之后,需要对分区进行格式化才能使
用,Linux系统中也是一样,首先我们要了解一下什么是文件系统
当对一个分区格式化时,分区被分成两部分。
(1)右侧部分被划分成很多小格子,每个小格子称为block,默认大小为4KB。
(2)左侧部分为inode,用于记录文件的属性,每个文件都会占用一个 inode。
每个block中只能存储一个文件,假设一个文件aa只有
1KB存放在2号block中,则2号block还剩余3KB的空间,但
是这3KB的空间也不会存储其他数据了。所以,此文件大
小为1KB,占用空间为4KB,在Windows中会见到图14-2所
示的情况。
如果一个文件的值大于4KB,一个block存放不下,则会占用多个 block。例如,某文件
大小为9KB,则需要占用3个block。
当要读取某个文件时,如果系统不知道此文件在哪个block中,则要读取所有的
block(这个过程称为“遍历”),这样效率是极其低下的。所以,每个文件的属性都有对
应的inode条目来记录,例如,图14-1中的aa文件由10号inode记录,在inode中记录了aa 文件的属性,如大小、权限等,以及此文件占用了哪些block,inode相当于书的目录。当需
要读取文件时。在inode中可以快速找到此文件,从而快速定位此文件所在的block。
总之,创建文件系统的过程就理解为创建图14-1中小格子的过程。不同的内核所使用的
文件系统不一样,例如,Windows 中常见的文件系统包括FAT、NTFS等,Linux中常见的
文件系统包括EXT3、EXT4、XFS等。这些不同的文件系统具有不同的功能,包括所支持的单
个文件最大能有多大,整个文件系统最大能有多大,RHEL8/CentOS8中默认的文件系统是
XFS

 

 

 

此时对10号inode来说,用两个名称aa和 bb来记录2号block中的文件,所以 aa和 bb对
应的是同一个文件,那么aa和 bb就是硬链接关系。
练习:先拷贝一个测试文件

 

 查看aa的属性,命令如下。

 

此处的加粗字1,指的是aa文件只有一个硬链接,即存储在 block中的文件只有一个名称
aa。下面对aa做硬链接,命令如下

 查看aa和bb的属性,命令如下。

硬链接数显示为2,说明存储在 block中的那个文件有两个名称aa和 bb。aa和 bb是在同
一个inode上记录的两个名称,通过ls -i可以查看aa和 bb分别是在哪个inode上记录的,命
令如下

 

再看看前面已经在/dev/sdb 上创建过的分区,命令如下

 

 练习:把/dev/sdb1格式化为XFS文件系统,命令如下

 

从上面的 bsize=4096可以看到,block的大小默认设置为了4KB,如果指定为1KB,需要
加上-b size=1024选项,命令如下。

再次格式化时,因为/dev/sdbl已经存在文件系统了,所以再次格式化失败,需要加上-f
选项表示强制格式化,命令如下

 

 

可以看到,现在bsize即 block size的大小已经是1024了。这里输出的属性是刚格式化后
输出的,如果过了一段时间之后想再次查看/dev/sdb1文件系统的属性,可以通过xfs_info
来查看,命令如下

 

如果想单独查看某个XFS格式的文件系统的UUID,可以通过“xfs admin -u分区名”来
查看,命令如下

 

可以看到,/dev/sdb1文件系统的UUID是73a2d3c0-9e75-4e5e-b3f7-1713d976f059。
这个UUID也是可以切换成其他值的。
通过uuidgen命令手动生成一个新的UUID,命令如下
[root@localhost ~]# uuidgen 
d75bd1e7-92f7-43ba-b940-67eb31a24a94

 把/dev/sdb1的UUID切换成新生成的UUID,命令如下。 b‘

[root@localhost ~]# xfs_admin -U d75bd1e7-92f7-43ba-b940-67eb31a24a94 /dev/sda1
Clearing log and setting UUID
writing all SBs
new UUID = d75bd1e7-92f7-43ba-b940-67eb31a24a94

再次查看/dev/sdb1的UUID,命令如下。

 

可以看到,现在已经是新的UUID 了。

 

分区格式化好了之后是不可以直接访问的,要想访问此分区,必须把它挂载到某个目录上
才行,如同在 Windows中创建一个分区,必须给它一个盘符或装在某个NTFS文件夹中。
要查看哪些分区已经挂载及分区的使用情况,可以使用df命令,命令如下。

 

 

这里文件系统为tmpfs的是临时文件系统,可以忽略不管,上面结果中的分区大小都是以
K为单位,看起来不方便,可以加上-hT选项,-h会以合适的单位显示,-T会显示文件系统,
命令如下

首先创建一个目录/xx,并铂贝进去几个测试文件,命令如下。

[root@localhost ~]# mkdir /xx
[root@localhost ~]# cp /etc/hosts /etc/services /xx/
[root@localhost ~]# ls /xx

 下面把/dev/sdb1挂载到/xx 上,注意/xx中内容的变化,命令如下

[root@localhost ~]# mount /dev/sda1 /xx

 以后访问/xx就是访问/dev/sdb1中的内容了,现在查看/xx中的内容,命令如下

ls /xx/

 现在把/dev/sdb1卸载掉,然后查看/xx中的内容,命令如下。

umount /dev/sda1 

卸载后又能看到/xx中的内容了,就相当于又把盖在/xx上面的那个“碗”拿掉了,所以能
看到/xx中的内容了。
这里需要注意两个问题,第一个问题是假设在/xx没有挂载之前,往里面写了一个200GB
的文件file,然后又把/dev/sdb1挂载到/xx上,这时的file会被隐藏。有一天发现少了200GB
的空间,然后到每个目录中找/xx,怎么都找不到这200GB。此时要想到哪些目录是挂载
点,这些目录在挂载分区之前,里面是不是存在文件。
第二个问题是有时卸载时可能无法正常卸载,类似于在 Windows中卸载U盘时,提示进
程正在占用。先模拟一下这个文件,再次把/dev/sdb1挂载到/xx上,命令如下。

 [root@localhost ~]# mount /dev/sda1 /xx/

打开第二个终端执行如下命令

 [root@localhost ~]# cd /xx/

 

这样cd /xx之后,bash进程会一直占用/xx。
再回到第一个终端,卸载/xx,命令如下

 

 

发现根本卸载不了,说明/xx现在正在被某个进程占用。那如何查看是哪个进程占用的呢?
可以使用fuser命令,命令如下

 

可以看到,有一个进程号为2726的进程正在占用,就是第二个终端中运行的cd命令。
利用kill命令杀死进程号为2726的进程,然后再次卸载,命令如下
kill -9  2726
umount /xx

 挂载时还可以指定一些选项,先看一下默认的选项,命令如下。

 

通过执行mount命今可以看到所有已经挂裁了的设冬,地可以看到/dev/edh1的默认挂载
选项。其中rw的意思是可读可写,测试往/xx中写入内容,命令如下
现在是可以正常写进去的,然后卸载并重新以ro的方式挂载,命令如下。
查看挂载选项,命令如下。

 

现在是以ro的方式挂载的,测试往/xx中写入内容,命令如下。

 

 现在把/dev/sdb1 以 rw的方式挂载,命令如下。

[root@localhost ~]# mount -o remount,rw /xx/
[root@localhost ~]# mount | grep /xx

 

根据文件的权限进行查询,用-perm选项。例如,我们要查找权限
为326的文件,查询时有3种用法,如图14-9所示。
(1)326:必须完全匹配326,权限不能多也不能少,方块位置的
权限都必须有,圆圈的位置不能有权限。
(2)/326:文件的权限只要配置326中的一个权限即可,如图14-9所示,只要具备方跌中
的一个权限就可以查询到。
(3)-326:可以比326权限多,但是不能少,如图 14-9所示,在方块位置的权限都满E的
情况下,圆圈的位置可以多。
通过326来查询,命令如下
[root@localhost  11]# find -perm 326
 
这里只有一个文件的权限完全满足326。
通过/326来查询,命令如下
[root@localhost  11]# find -perm /326
       

 

这里file4没有查询到,因为file4 的权限中没有一个图14-9方块中的权限。
通过-326来查询,命令如下。
[root@localhost 11]# find -perm -326

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值