对于
IT
的学习来说,把握
“
心法与招式
”
的平衡,是至关重要的!要想成为高手!
“
心法与招式
”
必须兼修!
所谓心法,就是理论基础知识,是底层的原理性知识,是那些跟特定的厂家无关的跨平台共性知识;
所谓招式,就是应用层面的技能,配置、操作和调试的步骤,跟具体的软件或者硬件紧密关联的特殊知识。
ext 与 swap 文件系统是 Red Hat Enterprise Linux 系统中是最重要的文件系统,本章将深入介绍这 3 个文件系统的功能,以及如何管理这 3 个文件系统。
3.1 ext2文件系统
ext2文件系统是全名为第二代延伸式文件系统(2nd extended filesytem ), 是针对Linux 特性特别开发的,所以几乎是为Linux 量身打造的文件系统。因此,ext2 最后成为各种Linux 产品内置的文件系统。当然Red Hat Enterprise Linux 也提供ext2 文件系统。本节将介绍ext2 文件系统的特色与功能。
ext2文件系统究竟提供了什么魅力,深得所有Linux 厂商的推崇?ext2 提供的功能整理为以下几点:
⑴ 支持255 个字符的文件名称。
⑵ 支持各种类型的文件。
⑶ 单一文件系统最大为8TB 。
⑷ 单一文件最大为8TB 。
⑸ 提供文件的特殊属性。
⑹ 可以为ext2 文件系统设置卷标名称。
⑺ 可以调校ext2 文件系统。
⑻ 通过cache/buffer 提高ext2 文件系统的效率。
下面将详细介绍上述各项特色与功能,并且介绍如何在Red Hat Enterprise Linux 系统中操作ext2 的特殊功能。
3.1.1
ext2文件系统名称与支持的文件类型
支持255 个字符的文件名称。
在 以前最多只能存储255个字元或者127个中文的文件名:不过,现在的RHEL的ext2文件系统已经支持万国码(Unicode),因此,最多可以存储 255个英文或者中文的文件名称。而文件名称中可以使用除了“/”外的任何字符。但是,强烈建议避免使用以下的特殊符号作为文件名称。
⑴ 特殊符号:eg: “,” 、“;” 、“- ” “~ ” 、“空白”等。
⑵ 无法显示的字符:eg: ASC Ⅱ的007 字符。
⑶ 此外,ext2 文件系统也建立、存储下列几种类型的文件。
⑷ 常规文件(Regular File ): 包含文字文件、二进制文件(Binary File )、执行文件、链接库……
⑸ 目录(Directory )。
⑹ 连接文件(Link File ): 包含硬性连接文件(Hard-Link File )、软性连接文件(Soft-Link File )。
⑺ 设备文件(Device File ): eg: 区块设备(Block Device )、字符设备(Character File )。
⑻ 跨进程通信文件(Inter-Process Communcation File,IPC File ): 例如:Socket 文件、FIFO 文件。
3.1.2
制作ext2 文件系统
制作ext2 文件系统,则可用mkfs 或者mkfs.ext2 命令:
mkfs [-t ext2] [options…] device [size]
mkfs.ext2 [options…] device [size]
⑴ device : 文件系统的设备文件名称。
⑵ size : 新建的文件系统大小。若未指定,则为默认值。
⑶ options: 参数。常用参数如下表所示。
mkfs与mkfs.ext2 常用参数表
参数
|
说明
|
-c
|
在制作文件系统前,先检查磁盘是否有坏轨(
Bad Block
)
|
-l file
|
从
file
读入坏轨扇区数据
|
-b size
|
指定
ext2
文件系统的区块大小
|
-i size
|
指定每隔多少
size
字节建立一个索引节点
|
-N count
|
指定建立几个索引节点
|
-L lable
|
指定
ext2
文件系统的卷标名称
|
-m reserved_percent
|
设置保留区块的百分比
|
下面我们来看建立 ext2 文件系统:
①
mkfs 没有加任何参数,则采用默认值,即把 /dev/hda8 的所有磁盘空间制作成 为 ext2 文件系统。
温馨提醒:在制作文件系统时,会清除掉磁盘空间上原来的所有文件数据,故在建立文件系统前,一定要仔细思量。
3.1.3
ext2
文件特殊属性
在 ext2 文件系统建立一个文件时, ext2 除了会记录文件的权限、拥有者、异动时时间等信息外,还会存储 ext2 文件系统的属性数据。通过 ext2 文件系统的属性,可以对 ext2 的文件提供更细致的管理,赋予 ext2 上的文件更多的功能。
常用的 ext2 文件系统特殊属性如下表:
ext2 文件系统的文件特殊属性
属性
|
说明
|
a
|
只能附加,意即不能删除,也不能覆盖
|
c
|
允许由内核自动压缩
|
d
|
通过
dump
工具进行备份时,要跳过这个文件
|
i
|
恒久不变的,意即不能删除,不能覆盖,也不能附加
|
j
|
挂载参数是
data=ordered
或
data=writeback
时,将所有数据写入日志区块
|
s
|
安全地删除
|
u
|
可以进行反删除
|
A
|
读取该文件时,不需要更新读取时间戳记录,启用这个属性时,可以提高文件的读取效率
|
D
|
当目录被异动时,立即写回磁盘
|
S
|
文件一经修改,立即存回磁盘
|
查看文件的特殊属性:
lsattr files ...
配置文件的特殊属性:
chattr +- attributes ... files ...
⑴ attributes :就是要设置的特殊属性代号(如: i 、 a )。
⑵ + attributes : 表示启用这项属性(如:+ i )
⑶ - attributes : 表示停用它个属性 ( 如:- i )
好啦,我们一起来看看如何设置 ext2 文件系统特殊属性:
为了方便初学者,故从初步开始……
②
创建 tmp 目录,在 /mnt/ 下。
③
再次查看 /mnt/ 目录下是否有 tmp 目录,显然有。
④
查看 /mnt/tmp 目录下是否有文件,显然没有。
⑤
建立一个文件 file1.
⑥
再次查看 /mnt/tmp/ 目录下是否有文件 file1 ,显然有。
⑦
查看 /mnt/tmp/file1 中是否有内容,明显没有。
⑧
把 /dev/hda8 分区的文件系统挂载到 /mnt/tmp/
⑨
/dev/hda8 被制作成为 ext2 文件系统,已挂载到 /mnt/tmp/ 目录。
①
先查看 /mnt/tmp/file1 文件的特殊属性,根据 lsattr 显示结果可知, file1 目前没有设置任何的特殊属性。
②
因没有任何特殊属性,故可直接覆盖 /mnt/tmp/file1 文件的内容。
③
查看 /mnt/tmp/file1 文件的内容仅有“ Linux ”了。
④
用 chattr 命令开启 /mnt/tmp/file1 文件的永恒不变特殊属性(即:+ i 参数! )。
⑤
再次用 lsattr 查看 /mnt/tmp/file1 的特殊属性,当前的确开启了 i 的特殊属性。
⑥
开启了 /mnt/tmp/file1 的 i 特殊属性,故 RHEL 会显示“ permission denied( 拒绝不符权限的操作 ) ”的错误信息。即无法覆盖 /mnt/tmp/file1 文件的内容。
⑦
用 cat 命令查看只有“ Linux ”。
3.1.4
多重读取控制清单
以往,每一个文件只能设置一条权限,而 UNIX 系统的权限只有 3 组:拥有者、拥有群组和其他人,意即只能针对文件的拥有者、拥有群组或者其他人设置权限,这就限制 RHEL 的功能。
eg : Boss 希望只有 koma 与 paul 两个人可以读取、写入 /data/file1 ,而 users 群组的成员只能读取,其他人无法读取。作为系统管理员的你,此时,只能告诉你的老板:对不起, RHEL 无法满足你的要求。(你想想,你的老板此时如何想???哈……哈……)
没事!下面接着看看,为了解决上述问题, RHEL 在 ext2 中操作 POSIX 的多重读取控制清单( MACL )能力,这样就能为 ext2 文件系统中的每一个文件设置一条以上的权限数据,以加强 RHEL 权限主功能。
<>
Ttune2fs
显示的信息表(比较重要的)续
利用多重读取控制清单(
MACL
)的机制,仅需为
/data/file1
设置下面几项权限。
⑴ koma 可以读取、写入。
⑵ paul 可以读取、写入。
⑶ users 群组只读。
⑷ others 其他人没有任何权力。
必须使用getfacl 与setfacl 来查看或配置文件的多重权限数据:
getfacl files
...
setfacl [-m|-x]
acls
...
files
...
其中acls 为每一组权限数据,语法如下所示:
field : name : perm
⑴ fiedl : 代表权限的字段,可为u 、g 、o 分别代表拥有者、拥有群组及其他人。
⑵ name : 是用户或群组的名称。
⑶ perm :是权限,可以指定r 、w 、x 等权限。
⑷ setfacl 的-m 参数用来修改files 某一条的多重权限;
⑸ –x : 则是删除files 的某一条权限。
下面我们来用实例看看如何操作的:
①
查看文件
file1
文件的权限。
②
参数
a-rwx
表示把任何人的权限都去掉。
③
验证了:任何人都没有权限。
④
Koma
试着去
cat file1
时,发生了错误。显示“
permission denied(
拒绝不符权限的操作
)
”的错误信息。
⑤
用
setfacl
命令,增加
file1
一组权限:让
koma
这个用户具备
r(
读取
)
的权限。
⑥
验证了且增加了一个“+ ”符号,+
:
代表此文件已经设置了多重权限!
⑦
用
getfacl
命令查看
file1
的多重权限数据,有一条针对
koma
用户的,其权限为
r -
-
。
思考:(
⑧
输入下面
2
条命令看看有何变化?)
1
、
[root@RHEL5 ~]# cd /mnt/tmp/
2、[root@RHEL5 ~]# su koma -c 'cat file1'
3.1.5
ext2
的标签名称
目前
RHEL
中,可以为每一个
ext2
文件系统设置一个卷标名称(
Label Name
),
ext2
有了标签名称后,就可以在各种文件系统管理工具中利用标签名称取代分区的设备文件名称了。
思考:
ext2
文件系统为何要提供卷标名称的功能???
用什么作为标签名称由自己作主!但建议用文件系统的挂载点路径作为标签名称。
eg:
一般习惯将
/dev/hda8
挂载到
/mnt/tmp/
,于是我们就可把
/mnt/tmp/
作为
/dev/hda8
这个文件系统的卷标名称。这样做的好处:在救援环境中,直接从
ext2
文件系统的卷标名称获知文件系统原先的挂载点路径,如此一来,将能帮助我们快速的修复
RHEL
。
查看
/
设置
ext2
文件系统的卷标名称都使用
e2label
命令:
e2label device [labelname]
⑴
device
:就是
ext2
文件系统的设置文件;
⑵ labelname : 则为要设置的标签名称;
⑶ 不指定
labelname
,则表示只查看 目前设置的标签名称而已。
我们一起来看看实例吧:
①
查看/dev/hda8 ,目前未设置任何卷标名称,故显示的是空的标签名称。
②
用e2label 命令指定/dev/hda8 的标签名称为/mnt/tmp 。
③
再使用e2label 命令查看/dev/hda8 , 现在显示/mnt/tmp 这个卷标名称了。
④
除了使用e2label 命令外,还可使用findfs 命令来搜寻某个标签名称是哪一个文件系统。
温馨提醒:
设置
ext2
的标签名称时,必须注意
2
件事:
⑴ ext2 的卷标名称实际上记录在ext2 文件系统中,若重新制作过文件系统,则原有的ext2 标签名称就会失去作用,故必须重新设置一次。
⑵ 修改过某一个ext2 文件系统的卷标名称后,也得同时更改相关配置文件中标签名称的设置,否则,将可能导致RHEL 无法顺利开机。
为ext2 文件系统设置卷标名称后,可以在mount 、umount 、fsck 等工具中使用LABEL = LABELNAME 的格式取代原先的设备文件名称了。
①
/dev/hda8
的标签名称是
/mnt/tmp
。
②
没有挂载
/dev/hda8
这个文件系统。
③
使用
LABEL = LABELNAME
告诉
mount
命令去挂载一个标签名称为
/mnt/tmp
的文件系统到
/mnt/tmp/
目录。意即:
LABEL = /mnt/tmp
取代
/dev/hda8
设备。
④
查看挂载成功!
3.1.6
调校ext2 文件系统
Ttune2fs
显示的信息表(比较重要的)
字段
|
说明
|
①
Filesystem volue name
|
ext2
文件系统的卷标名称(Label Name )
|
②
Last mounted on
|
最后一次挂载的路径
|
③
Filesystem features
|
文件系统的功能
|
④
Default mount options
|
默认的挂载参数
|
⑤
Filesystem state
|
文件系统目前的配置
|
⑥
Inode count
|
此文件系统上总共有多少索引节点
|
⑦
Block count
|
此文件系统上区块(block )的数量
|
⑧
Reserved block count
|
这个ext2 文件系统保留了多少区块作为特殊使用
|
⑨
Block size
|
每一个区块的大小,单位为bytes
|
字段
|
说明
|
①
Filesystem created
|
文件系统建立的时间
|
②
Last mount time
|
最后挂载的时间
|
③
Last write time
|
这个文件系统最后写入的时间
|
④
Mount count
|
挂载的次数
|
⑤
Last checked
|
该文件系统最后检查的时间
|
⑥
Check interval
|
默认检查文件系统的时间间隔,单位是秒
|
⑦
Reserved block uid
|
保留区块的拥有者的UID
|
⑧
Reserved blocks gid
|
保留区块的拥有者的GID
|
3.2 ext3
文件系统
Eext3
是第三代延伸式文件系统(3rd extended filesystem )的缩写,是ext2 的改良版本,同时也是RHEL 建议使用的文件系统。
为何RHEL 会推荐使用ext3 呢?主要是因为ext3 文件系统具备下列几项特性。
3.2.1
与ext2 完全兼容
Eext3
的第一项特色,就是与ext2 完全兼容,故ext2 提供的功能、特色也同样加ext3 上;当然,ext2 的管理工具,例如:上节介绍的e2label 、lsattr 、chattr 、tune2fs 等,自然也可应用在ext3 上。
正因为ext3 与ext2 完全兼容,RHEL 允许使用mount –t ext2 强迫把ext3 文件系统挂载成为ext2 。 不过,若果真如此,则会失去ext3 增强的功能。
3.2.2
调整文件系统
有 时我们建立的文件系统,过段时间可能会不再使用。以前如果要扩大文件系统的空间,要先建立一个较大的分区且在该分区里建立一个新的文件系统。挂载起来后, 再把旧的文件数据复制或剪切到新的文件系统上,然后卸载旧的文件系统并删除旧的文件系统与分区。哈……哈……麻烦不???
现在使用ext3 文件系统,则可直接使用resize2fs 工具直接调整文件系统:
resize2fs [options...] device [newsize]
⑴ options : 是resize2fs 工具的参数。
⑵ device : 要调整的文件系统的设备文件名称或标签名称。
⑶ newsize : 是调整后的大小。
⑷ 省略newsize :则默认就是调整到分区的大小。
使用resize2fs 工具调整文件系统时,必须注意下面的事项:
⑴ resize2fs 只能调整ext3 文件系统,不支持其他的文件系统。
⑵ 若放大文件系统,必须先将其挂载;若要缩小文件系统,则必须先卸载。此皆因截至目前为止,resize2fs 只支持在线放大和离线缩小 。
⑶ 放大时,不能超过分区大小;缩小时,缩小后的文件系统必须小于已使用的大小。
惯例!下面使用resize2fs 来调整文件系统的例子:
①
将/dev/hda8 挂载在
/mnt/tmp/
中且/dev/hda8 是一个ext3 文件系统。
②
/dev/hda8
分区的大小是:
104388
×
1K
≈
100M
,而第2 个②处提示:
(/dev/hda8 )文件系统已经是104388 个区块(即本分区的最大值
100M
),不能放大了。
③
提示:resize2fs 不支持在线缩小!注:resize2fs 只支持在线放大和离线缩小 !!!
④
既然不支持在线缩小,那么我们来卸载之。
⑤
将/dev/hda8 缩小至
50M
,并提醒我们们执行
e2fsck –f
的动作,以确保文件系统的完整性。
⑥ 第2 个 ⑤ 处
执行
e2fsck –f /dev/hda8
。
①
再次缩小文件系统(即:将/dev/hda8 缩小至
50M
)
②
看!成功了!目前/dev/hda8 只有
50M
了。
①
目前/dev/hda8 只有
50M
。
②
使用
resize2fs
把/dev/hda8 放大至最大值,也就是分区的大小。
③
验证了/dev/hda8 最大值确实是
100M
。
3.2.3
提供日志式文件系统能力
在以后的章节中会讲到Linux 内核会涉及到cache 与buffer 以提高读取磁盘的效率。但cache/buffer 却会导致一些很严重的问题,尤其在RHEL 非正常关机时。
在RHEL 开机时,会执行fsck 以检查并修复“脏”(dirty )的文件系统,完成后才会挂载所有需要挂载的文件系统。RHEL 在前一次关机时未能卸载所有的文件系统会造成这些文件系统的配置全部标注为“脏” 。RHEL 在开机时,就得花许多时间来检查与修复文件系统。明白了:非正常关机的坏处了吧!其实远远不止这些……
对于个人或家用来说,大不了放着,你慢慢的检查修复吧。但是对企业呢?这可是很严重的问题!!!
为了引起大家的重视,我们就一起来看看吧!
如果证券交易所安装了RHEL ,然而在今天早上发生了不正常关机的情况,那么RHEL 可能得花上一整个上午的时间来修复数百GB 甚至上TB 的文件系统,所有股票买卖人可能会怎样???你说严重不???
为了解决此问题,日志文件系统就应运而生了!
志文件系统的解决之道!!!
上述问题最大的元凶就是:cache/buffer 。cache/buffer 是存放在内存中,所以系统发生不正常关机时,这些在cache/buffer 的数据就来不及存回磁盘中;于是造成了某些文件系统上的数据毁损。
日志式文件系统,则把cache/buffer 记录在磁盘中。利用磁盘中某些特殊的扇区存放cache/buffer 数据。当数据写入到内存的cache/buffer 时,具备日志功能的文件系统就会立即把cache/buffer 的数据同步写入磁盘中的那引起特殊扇区。这个提供日志功能的扇区,称之为日志区块。
就算系统不正常关机,在下次启动时,fsck 只要发现文件系统是具备日志功能的,就会利用日志区块中保存的数据直接复原成为当机那一刹那的cache/buffer !
这样就缩短了fsck 检查与修复文件系统的时间了。
ext3
就是一个提供日志功能的文件系统。
思考:关于ext3 文件系统方面的知识,上网google 、daidu 吧!
3.2.4
产生ext3 文件系统
为何才能产生ext3 文件系统呢?有2 种方式:
⑴ 新建ext3 文件系统
⑵ 从ext2升 级
下面来看看:
⑴ 新建ext3 文件系统
使用
mkfs
命令:
mkfs -t ext3 device
mkfs.ext3 [options…] device
由于ext3 完全兼容ext2 文件系统,因此mkfs.ext3 也支持“mkfs 与mkfs.ext2 常用参数表”及下表所示的参数:
mkfs.ext3
常用参数
参数
|
说明
|
-J journal_options
|
指定ext3 的日志功能细节
|
-R raid_options
|
指定与磁盘阵列有关的参数
|
温馨提醒:新建ext3 文件系统后,原本文件系统上的所有文件数据都将全部被清除,故,若采用新建方式产生ext3 文件系统,先备份所有数据!
⑵ 从ext2 升级
从ext2 升级成为ext3 不会破坏原本文件系统上的内容。
从ext2 升级成为ext3 ,必须使用tune2fs 工具:
tune2fs -j device
Device :
是ext2 文件系统的设备文件名称。
下面来看看实例吧:
① /dev/hda8 文件系统是ext2 。
②
此处有file2 ~ file5 共5 个文件。
③
开始升级前,先卸载/dev/hda8 ,提示:设备正在忙碌中。
④
用fuser –vm 查看哪些进程正在使用/mnt/tmp/ 目录的文件系统,结果是PID 为3217 的bash 程序正在使用。
思考:⑤ 如何结束使用某一文件系统的进程?
①
再卸载/dev/hda8 成功了。
②
把/dev/hda8升 级成为ext3 。
注:因为尚未更新/etc/fstab 中的设置值,避免mount 命令
从/etc/fstab 决定/dev/hda8 的文件系统类型,故,必须特别
指定/dev/hda8 是一个ext3 的文件系统。
③
检查一下,/dev/hda8 是否以ext3 的方式挂载的。
④
查看可知,原来的文件都还在,完全没有破坏。
将ext2 文件系统升级成为ext3 时,必须注意2 件事:
⑴ 别忘记修改/etc/fstab 的设置。
将ext2 文件系统升级成为ext3 后,一定要去修改/etc/fstab 文件系统的类型字段,否则,下次开机时,RHEL 仍会把文件系统当做ext2 文件系统挂载,这样无法享有ext3 提供的好处。
⑵ 如果升级根文件系统,别忘记重新建立initrd 影像文件。
安装RHEL 时,如果根文件系统为ext2 ,则安装程序产生的初始化内存磁盘中,不会提供ext3 的模块。这会导致RHEL 启动时,因无法顺利挂载ext3 的根文件系统而使开机失败。
所以,升级根文件系统后,一定要再度执行以下命令,以便产生支持ext3 文件系统的initrd 影像文件。
本文出自 “beyondhedefang ” 博客,转载请与作者联系!