第七课 文件系统的维护
。ext2/ext3文件系统的优化与高级特性
。磁盘检查
。磁盘配额
。自动挂载分区
优化ext2/ext3文件系统
文件系统优化原理同时适用于ext2/ext3
假设/dev/sda2是一个linux文件系统分区,它是一个ext2或者ext3格式的,我们在使用的时候一般不用管这个分区上的文件到底是如何存放的,如果我们不知道这个数据的存放原理的话,我们是无法对其进行优化的,下面我们看这个数据到底是如何存放的:实际上这个分区存在这样的一个逻辑结构:分区上是一个一个的数据块,像一个小房间一样,数据是放在每一个小房间里面的,然后每个小房间的数据拼起来是一个文件,这里假设一个小块的大小是1k(Block size:1k),1k是小块的尺寸,每个分区在格式化的时候,就是要创建这样的1k大小的小块小格子,这样的数据块,当然这是逻辑结构的,如果一个文件有4k的话,那么文件肯定要使用这里的4个小块,如果没有到1k的话,同样占用一个小格子,如果有2k大小的话就占2块小格子,这些小格子我们称为存储单元,它也是最小存储单元,当文件系统为一个文件分配数据块的时候,就以最小的存储单元为单位来为它分配的,如果一个文件大小不到1k,只有几个字节,那么它也会为这个文件分配1k的空间,直到这个文件写满整个1k的空间,在为它分配第二个数据块,这是文件系统的存储原理。那么相应的我们也可以把这个最小存储单元的尺寸放大一点,比如我们将一块设置为4k(Block size:4k),如果一个文件是4k的,那么一个文件占一块就够了,如果一个文件不到4k,那么它也使用1块空间,直到它填满才使用第二个数据块。其中我们看到一个现象,如果你的文件很大的话,而这个数据块很小的话,这个文件就会被分割成很多的小块,比如文件是4k的,文件就会被分割成4块放在4个小格子里面,来存储这个文件,可是这个分割的时间和读写的时候寻址的时间都会浪费额外的开销,cpu 内存都会花费额外的资源。如果一个块分得大一点,那么这个4k的文件就一次写入一个块里面去了,就会省一点时间,提高你的磁盘效率。所以我们优化就是根据我们文件实际存储情况来优化这个块的大小来进行优化,反过来说,也不是这个块越大越好的。如果你的文件全部是小文件,全部是1k以下的,那么你创建文件的时候呢,你就可以分得小一点,比如说文件全都是1k的,1k不到,你的一个文件占一块,那么你的1块里面呢,只占用空间块1/4不到,每个文件都会浪费它的存储空间,对硬盘的空间是一种严重的浪费。所以我们在实际使用硬的时候,要根据这个硬盘里,存放的文件类型,大小,尺寸决定到底使用多大的数据块,决定好以后,我们在格式化的时候呢,就不能简单的使用mkfs来格式化了,我们要使用-b的这样一个选项,告诉它使用1块里并以指定大小(1024)为单位来格式化,使用命令 mkfs ext3 -b 1024 /dev/sda2就会将sd2格式化成了一个存储单元为1024字节的更小的一个单元,每个数据块都是1024字节。如果我要提高数据块的容量,增加块的尺寸,那你将尺寸设置大一点,1024改为4096,但是这个尺寸不是说你随便可以改的,在linux内核里默认的情况只能是三种情况1024 2048 4096,如果要更大的块的话,你需要修改你的文件系统修改你的内核。
现在我们看一下这个文件系统的数据块大小对实际数据存储的影响:
# fdisk /dev/sda
# p pring the partition table
# t change a partion's system id
# mkfs.ext3 -b 1024 /dev/sda1
# mkfs.ext3 -b 4096 /dev/sda3
# mount /dev/sda1 /mnt/d1
# mount /dev/sda2 /mnt/d2
# echo "hi" > /mnt/d1/test
# echo "hi" > /mnt/d2/test
# ls -lh /mnt/d[12]/test
字符串的结尾控制字符算一个字符
# du -sh /mnt/d[12]
# ls /mnt/d1/
# mkdir /mnt/d1/dir
# mkdir /mnt/d2/dir
# echo "hi" > /mnt/d1/dir/test
# echo "hi" > /mnt/d2/dir/test
# ls -lh /mnt/d[12]
# ls -lh /mnt/d[12]/dir/test
# du -sh /mnt/d[12]/dir
从数据块上来决定该如何格式化,下面我们来看另外的一种优化的条件,这里是一个节点的概念。
File1... 1,2 块1 块2
File2... 3,4 块3 块4
在我们读写数据的时候,所有的数据都要写进数据块里面,在数据块的寻址的时候需要根据数据块的编号来寻址,我们编号顺序可以按照1234来编写,每个数据块编一个号,如果一个文件File1占用了2个数据块,那么这个文件在索引区里面会有2个节点分配给它,File1... 1,2 区我们称为索引区或者节点区,因为文件的列表全保存在索引区,块区是实际的存放数据的位置,数据区的块里面,每个数据块的索引编号保存在索引区里面,这样一来,如果File1和File2同时都使用了2个数据块,那么这个文件列表里面就会有索引1和2,当文件1在读取的时候,他会读取1、2块,也就是在寻址是2次,1和2,同样道理File2也是一样,3和4 两次,如果将两个数据块合成一组的话,下面这种情况
File1... 1 1块 块
File2... 2 2块 块
这样就能稍微提高一下效率,此时我们将两块编成一组,File1的两个数据块为一组编为1,File2的两个数据块为一组编为2,这样在寻址的时候,通过1就能寻找到两个数据块,通过2就能寻找到两个数据块,那么一个文件通过一次寻址就够了,就没有必要寻找两次.File1... 1 这个节点代表的块数2个,2这个节点代表的块数2块,我们利用mkfs格式化的时候,为了制定1和2节点代表的块数,可以使用-i选项,-i 就表示每一个节点代表多少个数据块,它实际上是使用多大的数据块,如果-b 4096 -i8192,我们可以看到8196正好是4096的两倍,这意味着每个数据块大小4096,每2个数据块编一个组,这样可以对大文件寻址的时候快一点.(mkfs.ext3 -b 4096 -i 8196 /dev/sda2)
如果想一块编一个号为一组的话,-b 和 -i为一样大小4096
mkfs.ext3 -b 4096 -i 4096 /dev/sda2
示范:
# df
# umount /mnt/d1
# umount /mnt/d2
# mkfs.ext3 -b 4096 -i 4096 /dev/sda1
# mkfs.ext3 -b 4096 -i 8192 /dev/sda2
这样sda1 sda2就有不同的寻址方式了,怎么看,我们使用# tune2fs(检查linux系统ext*类型文件系统的属性) 工具来看
# tune2fs -l /dev/sda1 | more (打印sda1分区的属性,寻找它的节点和块的信息)
Inode count: 20096节点数
Block count: 20073块数
节点数和块数是比较接近的,它们之间还有一点差别,因为它还有一部分数据块是用来保留,保留目录和文件的索引区的,所以它们看起来是接近于1比1
# tune2fs -l /dev/sda2 | more
Inode count: 17088节点数
Block count: 34138块数
节点数约为块数的1/2
这样sda2比较适合存放大文件
保留块概念
保留块 -为管理员保留的磁盘管理空间,默认为总数据块的5%(为了防止硬盘分区使用太慢,管理员无法编辑配置文件,最终使系统无法管理,所以总是为管理员保留了一定的保留空间)这意味着你的硬盘空间越大,这个5%的保留块的值越多.我们可以手工修改这个百分比
mkfs.ext3 -b 4096 -i 8192 -m 2 /dev/sda2 (-m 2 保留百分比为2%)
设置保留块的数量占总数的百分比为2%
示范:
# mkfs.ext3 -b 4096 -i 8192 -m 5 /dev/sda2 (5%)
# tune2fs -l /dev/sda2 | more
Reserved block count:1706 保留块数(5%)
# tune2fs -l /dev/sda2 | grep Reserved (将这个值过滤出来)
Reserved block count:1706
# mkfs.ext3 -b 4096 -i 8192 -m 2 /dev/sda2 (2%)
# tune2fs -l /dev/sda2 | more
Reserved block count:682 保留块数(2%)
# tune2fs -l /dev/sda2 | grep Reserved (将这个值过滤出来)
Reserved block count:682
这个方法可以帮我们节省一定的硬盘空间,防止因为保留空间造成的磁盘浪费
通过# df能够感觉得出来
# df -lj
1K-块 已用 可用
3020140 > 791272 + 2075452
这个值可以使用tune2fs来修改:
调整ext2/ext3文件系统
。tune2fs - 调整ext2/ext3文件系统特性的工具
o -l <device> 查看文件系统信息
o -c <count> 设置强制自动检查的挂载次数
o -i <n day> 设置强制自动检查的间隔时间
o -m <percentage> 保留块的百分比
o -j 将ext2文件系统转换为ext3格式
示范:
# tune2fs -l /dev/sda1
Mount count:0 挂载次数
Maximum mount count:27 最大挂载次数
# mount /dev/sda1 /mnt/d1
#tune2fs -l /dev/sda1
Mount count:1 挂载次数 (每挂载一次计数器加1,达到最大挂载次数时,默认会强制自检)
Maximum mount count:27 最大挂载次数
我们可以使用-c选项来改最大挂载次数
# tune2fs -c 2 /dev/sdb1
Setting maximum mount count to 2
# tune2fs -l /dev/sda1 | grep -i "mount count" 直接过滤出mount count (-i表示忽略大小写)
Mount count:1
Maximum mount count:2
# umount /mnt/d1
# mount /dev/sda1 /mnt/d1
# tune2fs -l /dev/sda1 |grep -i "mount count"
Mount count:2 达到最大挂载次数,在系统重启时默认进行自动检查
Maximum mount count:2
# umount /mnt/d1
# mount /dev/sda1 /mnt/d1
# tune2fs -l /dev/sda1 |grep -i "mount count"
Mount count:3 达到最大挂载次数,在系统重启时默认进行自动检查 ,我们在使用的时候不会造成什么影响,只影响系统的启动过程
Maximum mount count:2
# umount /dev/sda1
# tune2fs -c -1 /dev/sda1 (-1时,mount count永远不会达到这个值,此时文件系统永远不需要自动检查的)
通常情况下,当Mount count超过Maximum mount count的时候,强制自检,然后把Mount count清零,计数器会变0,然后慢慢再加起来,把Mount count 变成0后,就不可能达到-1,所以这样的情况用远不会发生,结果就是sda1永远不会被自检。(-c -1)
下面看-i(interval间隔时间)
# tune2fs -l /dev/sda1 | more
Check interval: 15552000(6 months)
永远不要自检,改为-1
# tune2fs -c -1 -i 0 /dev/sda1
# tune2fs -l /dev/sda1 |more
Check interval: 0 <(none)>
万一要自检,我们手工进行:# fsck
改变保留块百分比:
# tune2fs -l /dev/sda1|grep -i "Reserved"
Reserved block count:682
# tune2fs -m 10 /dev/sda1
Setting reserved blocks percentage to 10 (8410 blocks)
# tune2fs -l /dev/sda1|grep -i "Reserved"
Reserved block count:3410
转换ext2为ext3格式
# mkfs.ext2 /dev/sda1
# mount /dev/sda1 /mnt
# df -T
/dev/sda1 ext2
# cp /ect/servieces /mnt
# ls /mnt
lost+found servieces
# tune2fs -j /dev/sda1
# cp /etc/services /mnt
# umount /mnt/
# mount /dev/sda1 /mnt
# df -T
/dev/sda1 ext3
# more /mnt/
# more /mnt/services
# df -T
/dev/sda1 ext3
ext2可以转换为ext3,但是ext3不能转换为ext2,但是ext3可以挂载ext2:(# mount -t ext2 /dev/sda1 /mnt)
# umount /mnt
# mount ext2 /dev/sda1 /mnt(强制将 sda1以ext2挂载到/mnt目录)
# df -T
/dev/sda1 ext2
# umount /mnt
# tune2fs -l /dev/sda1
Filesystem features has journal(说明有日志,看不到这一项说明没有日志)
# mkfs.ext2 /dev/sda2
# tune2fs -l /dev/sda2
Filesystem features (看不到has journal一项说明没有日志,是使用的ext2格式)
# tune2fs -l /dev/dsa2 |grep features
文件系统检查工具
。fsck - 检查文件系统数据 完整性的工具(开机自动自检的12)
用法一: # fsck -t ext2 /dev/sda1
用法一: # fsck.ext2 /dev/sda1
示范:
# fsck.ext23 /dev/sda1
# more /etc/fstab
对有些分区长时间不检的话,会不好,所以我们可以手工自检
# df
# mkfs.ext2 /dev/sda1
# mkfs -t ext2 /dev/sda1
如果出现有问题,会提示是否需要修复,我们按Y进行修复,
如果自动修复错了,我们可以用fsck.ext3 -Y(表示yes) /dev/sdb1(自动修改错误)
。e2fsck - 检查ext2/ext3文件系统的工具(危险!)
使用磁盘配额
。磁盘配额作用是限制普通用户使用的磁盘空间,不至于因为个别人的浪费影响所有人的使用(只能限制在一个具体的分区上)
。需要内核支持(默认内核都是支持的)
。只有ext2/ext3文件系统目前被支持
。需要用户程序quota软件包
磁盘配额配置过程
。使用usrquota,grpquota选项挂载一个分区,激活内核的支持
# mount -o usrquota,grpquota /dev/sdb1 /mnt/d1 或
# mount =o remount,usrquota,grpquota
。init 1(进入单用户环境)
。quotackeck -cvuga检查并且创建磁盘配额的数据库文件
。edquota -u <username> 为指定用户分配磁盘空间和节点数量
。quota命令可以查看用户的配额使用情况
演示:
# df
# mkfs.ext3 /dev/sda1
# mount /dev.sda1 /mnt/sda1 -o usrquota,grpquota
# mount
# more /etc/mtab
# quotacheck -cvuga
# ls /mnt/sda1
# quotaon -a
# edquota -u redhat
# df
# ls /mnt/sda1
# mkdir /mnt/sda1/redhat
# chown redhat /mnt/sda1/redhat
# su - redhat
$ cd /mnt/sda1/redhat
$ quota
$ pwd
$ ls -lh
$ ls -ld
$ dd if=/dev/zero of=file1 bs-1k count=1024
$ quota
$ dd if=/dev/zero of=file1 bs-1k count=1024
$ dd if=/dev/zero of=file2 bs-1k count=1024
$ dd if=/dev/zero of=file3 bs-1k count=1024
$ dd if=/dev/zero of=file4 bs-1k count=1024
$ quota
$ ls
$ df
$ ls
$ ls -ld .
$ touch aa
$ ls
$ rm file3
$ ls
$ dd if=/dev/zero of=file2 bs-1k count=2048
$ ls -lh
$ ls df
$ dd if=/dev/zero of=file1 bs-1k count=2048
$ quota
$ ls
$ echo "hi" > test
$ ls -l
$ quota
$ ls
$ rm *
$ ls
$ quota
$ exit
# quota -u redhat
# repquota 打印所有用户的磁盘配额的情况
# repquota-a
# edquota -t
# quotaoff /mnt/sda1
# edquota -u redhat
# quotaon /dev/sda1
# mount
# vi /etc/fstable
# man edquota
# vi /etc/fstab
# df
# ls /mnt/sda1
分享到:
相关推荐
### 第05章 文件系统及注册表(理论课) #### 一、文件系统概述 **文件系统**是指操作系统中管理和组织文件的一种方法。它定义了如何在存储设备(如硬盘驱动器、固态驱动器等)上存储、检索和更新文件。文件系统的...
【零基础DOS命令行第七课】是一门适合初学者的教程,旨在帮助那些对DOS命令行操作一无所知的人快速入门。DOS(Disk Operating System)是微软早期开发的一种操作系统,虽然现在已被Windows等现代图形化界面所取代,...
【第二课:DOS命令详解】 DOS,全称Disk Operating System,是早期个人计算机上广泛使用的操作系统之一,尤其在Windows XP系统之前。虽然现在大多数用户接触更多的是图形化界面,但掌握DOS命令行的基本操作对于理解...
- 执行系统维护任务。 #### 十、总结 通过本章节的学习,学生不仅能够理解文件系统的基本概念和原理,还能掌握如何利用DOS命令和批处理文件来提高工作效率。这些技能对于任何需要与计算机系统交互的人来说都是非常...
第7课 统一存储-SAN应用与配置 第8课 统一存储-Smart特性介绍1 第9课 统一存储-Smart特性介绍2 第10课 统一存储-Hyper特性介绍1 第11课 统一存储-Hyper特性介绍2 第12课 统一存储-Hyper特性介绍3 第13课 统一...
《高级信息系统》第七版教材配套PPT是一份珍贵的学习资源,涵盖了计算机专业和管理学专业的核心知识点,旨在帮助学生高效复习并准备期末考试。这份压缩包包含了一系列精心整理的PDF文件,每一份都对应教材中的关键...
这个"ASP教务实验课选课系统(1)"可能是该系统的第一个版本或者一部分,而描述中提到的“3组都下了才是一个完整的教务实验课选课系统”意味着这个系统可能被分为了多个部分,可能是因为文件大小、功能模块化或是为了...
《网络操作系统》全书共分14章,分别讲述:第1章网络操作系统概述、第2章磁盘管理、第3章文件系统管理、第4章用户和组的管理、第5章Windows 2000 Server活动目录、第6章网络管理与维护、第7章Linux安装与使用、第8章...
在第九课的教学中,我们将深入探讨以下几个关键知识点: 1. 计算机基础知识:这包括计算机系统的组成,如中央处理器(CPU)、内存、硬盘、显示器等硬件组件的功能及其相互作用。学生将学习计算机如何接收、处理和...
《C语言课程设计:学生选修课系统设计》 在计算机科学领域,C语言作为基础且重要的编程语言,被广泛用于教学和实际项目开发。本课程设计的目标是构建一个学生选修课系统,旨在帮助学生理解和掌握C语言的高级特性,...
1. **MVC(Model-View-Controller)设计模式**:音乐课注册系统很可能采用了MVC架构,这种架构将业务逻辑(Model)、用户界面(View)和数据控制(Controller)分离,有利于代码的组织和维护。开发者可以通过Model...
本课以“第十二课”为主题,针对初中七年级的学生设计,旨在深入浅出地介绍信息技术的基本概念、操作技能以及其在日常生活中的应用。 在这一课中,学生将学习到以下关键知识点: 1. 计算机基础知识:了解计算机的...
3. **视频教程“第三十二课.wmv”**:这个文件很可能是本课的视频教学资源,通过实际操作演示了上述概念的应用。观看这个视频,学员可以更直观地理解客户端和服务端的构建过程,以及如何在易语言环境下进行实际编程...
* 第七页 文件系统管理与维护 * 第八页 Linux 系统的引导与服务的启动 * 第九页 Shell 与 Shell 编程 * 第十页 进程管理与作业控制 * 第十一页 软件安装与日志系统 第三部分 网络应用 * 第十二页 网络的配置与使用...
【压缩包子文件的文件名称列表】:只有“第7节课”一个文件,说明这个压缩包可能包含了一整套关于这节课的材料,如PPT讲义、代码示例、视频教程、阅读资料等。 **JavaScript知识点详解** 1. **基础概念** - **...
### 厦门大学 C语言程序设计 第七课课件知识点总结 #### 一、编译预处理概述 - **预处理命令**:这类命令以`#`开头,不属于C语言本身的语法,而是由ANSI C标准规定的特殊指令。它们在程序编译前由预处理器进行处理...
ASM的主要目标是简化存储管理,提高存储性能,并为Oracle数据库(包括RAC环境)提供集群文件系统和卷管理功能。 **历史背景与演进** 在ASM出现之前,Oracle数据库通常使用操作系统级别的文件系统来存储数据文件、...
如果您可以提供具体的系统分析习题课的相关内容,比如系统分析的概念、方法论、实际案例分析等,我将能够根据那些内容生成相应的知识点。 系统分析是IT项目管理和软件开发过程中的一个关键阶段,它主要涉及对现有...
第七章涉及外存管理,位示图和空闲链表用于管理空闲空间。磁盘调度算法,如FCFS、SCAN、C-SCAN、LOOK等,影响磁盘读写效率。设备管理部分讲解了I/O设备的硬件特性,软件结构,缓冲的作用,以及四种I/O方式(程序控制...
7. 第七课:窗口组件与事件。介绍易语言中的各种窗口控件,如按钮、文本框、列表框等,并讲解事件驱动编程的基本原理。 8. 第八课:窗口程序设计。深入探讨窗口程序的设计,包括窗口布局、菜单、工具栏和状态栏的...