`

第八章 文件系统的特殊观察与操作

 
阅读更多
文件系统实在是非常有趣的东西,鸟哥学了好几年还是很多东西不很懂呢! 在学习的过程中很多朋友在讨论区都有提供一些想法!这些想法将他归纳起来有底下几点可以参考的数据呢!

boot sector 与 superblock 的关系

在过去非常多的文章都写到启动管理程序是安装到 superblock 内的,但是我们由官方的 How to 文件知道,图解(图 1.3.1)的结果是将可安装启动信息的 boot sector (启动扇区) 独立出来,并非放置到 superblock 当中的! 那么也就是说过去的文章写错了?这其实还是可以讨论讨论的!

经过一些搜寻,鸟哥找到几篇文章(非官方文件)的说明,大多是网友分析的结果啦!如下所示:(注10)

The Second Extended File System: http://www.nongnu.org/ext2-doc/ext2.html
Rob's ext2 documentation: http://www.landley.net/code/toybox/ext2.html
Life is different blog: ext2文件系统分析: http://www.qdhedu.com/blog/post/7.html

这几篇文章有几个重点,归纳一下如下:

A superblock 的大小为 1024 bytes;
B superblock 前面需要保留 1024 bytes 下来,以让启动管理程序可以安装。

分析上述两点我们知道 boot sector 应该会占有 1024 bytes 的大小吧!但是整个文件系统主要是依据 block 大小来决定的啊! 因此要讨论 boot sector 与 superblock 的关系时,不得不将 block 的大小拿出来讨论讨论喔!

block 为 1024 bytes (1K) 时:

如果 block 大小刚好是 1024 的话,那么 boot sector 与 superblock 各会占用掉一个 block , 所以整个文件系统图示就会如同图 1.3.1 所显示的那样,boot sector 是独立于 superblock 外面的! 由于鸟哥在基础篇安装的环境中有个 /boot 的独立文件系统在 /dev/hdc1 中,使用 dumpe2fs 观察的结果有点像底下这样(如果你是按照鸟哥的教学安装你的 CentOS 时,可以发现相同的情况喔!):

[root@www ~]# dumpe2fs /dev/hdc1
dumpe2fs 1.39 (29-May-2006)
Filesystem volume name:   /boot
....(中间省略)....
First block:              1
Block size:               1024
....(中间省略)....

Group 0: (Blocks 1-8192)
  Primary superblock at 1, Group descriptors at 2-2
  Reserved GDT blocks at 3-258
  Block bitmap at 259 (+258), Inode bitmap at 260 (+259)
  Inode table at 261-511 (+260)
  511 free blocks, 1991 free inodes, 2 directories
  Free blocks: 5619-6129
  Free inodes: 18-2008
# 看到最后一个特殊字体的地方吗? Group0 的 superblock 是由 1  号 block 开始喔!


由上表我们可以确实的发现 0 号 block 是保留下来的,那就是留给 boot sector 用的啰! 所以整个分割槽的文件系统分区有点像底下这样的图示:





block 大于 1024 bytes (2K, 4K) 时:

如果 block 大于 1024 的话,那么 superblock 将会在 0 号!我们撷取本章一开始介绍 dumpe2fs 时的内容来说明一下好了!

[root@www ~]# dumpe2fs /dev/hdc2
dumpe2fs 1.39 (29-May-2006)
....(中间省略)....
Filesystem volume name:   /1 
....(中间省略)....
Block size:               4096
....(中间省略)....

Group 0: (Blocks 0-32767) 
  Primary superblock at 0, Group descriptors at 1-1
  Reserved GDT blocks at 2-626
  Block bitmap at 627 (+627), Inode bitmap at 628 (+628)
  Inode table at 629-1641 (+629)
  0 free blocks, 32405 free inodes, 2 directories
  Free blocks:
  Free inodes: 12-32416


我们可以发现 superblock 就在第一个 block (第 0 号) 上头!但是 superblock 其实就只有 1024bytes 嘛! 为了怕浪费更多空间,因此第一个 block 内就含有 boot sector 与 superblock 两者 !举上头的表格来说,因为每个 block 占有 4K ,因此在第一个 block 内 superblock 仅占有 1024-2047 ( 由 0 号起算的话)之间的咚咚,至于 2048bytes 以后的空间就真的是保留啦!而 0-1023 就保留给 boot sector 来使用。





因为上述的情况,如果在比较大的 block 尺寸(size)中,我们可能可以说你能够将启动管理程序安装到 superblock 所在的 block 号码中!就是上表的 0 号啰!但事实上还是安装到 boot sector 的保留区域中啦!所以说, 以前的文章说启动管理程序可以安装到 superblock 内也不能算全错~但比较正确的说法,应该是安装到该 filesystem 最前面的 1024 bytes 内的区域,就是 boot sector 这样比较好!

磁盘空间之浪费问题

我们在前面的 block 介绍中谈到了一个 block 只能放置一个文件, 因此太多小文件将会浪费非常多的磁盘容量。但你有没有注意到,整个文件系统中包括 superblock, inode table 与其他中介数据等其实都会浪费磁盘容量喔!所以当我们在 /dev/hdc6 创建起 ext3 文件系统时, 一挂载就立刻有很多容量被用掉了!

另外,不知道你有没有发现到,当你使用 ls -l 去查询某个目录下的数据时,第一行都会出现一个『total』的字样! 那是啥东西?其实那就是该目录下的所有数据所耗用的实际 block 数量 * block 大小的值。 我们可以透过 ll -s 来观察看看上述的意义:

[root@www ~]# ll -s
total 104
 8 -rw------- 1 root root  1474 Sep  4 18:27 anaconda-ks.cfg
 8 -rw-r--r-- 2 root root   255 Jan  6  2007 crontab
 4 lrwxrwxrwx 1 root root    12 Oct 22 13:58 crontab2 -> /etc/crontab
48 -rw-r--r-- 1 root root 42304 Sep  4 18:26 install.log
12 -rw-r--r-- 1 root root  5661 Sep  4 18:25 install.log.syslog
 4 -rw-r--r-- 1 root root     0 Sep 27 00:25 test1
 8 drwxr-xr-x 2 root root  4096 Sep 27 00:25 test2
 4 -rw-rw-r-- 1 root root     0 Sep 27 00:36 test3
 8 drwxrwxr-x 2 root root  4096 Sep 27 00:36 test4


从上面的特殊字体部分,那就是每个文件所使用掉 block 的容量!举例来说,那个 crontab 虽然仅有 255bytes , 不过他却占用了两个 block (每个 block 为 4K),将所有的 block 加总就得到 104Kbytes 那个数值了。 如果计算每个文件实际容量的加总结果,其实只有 56.5K 而已~所以啰,这样就耗费掉好多容量了!

如果想要查询某个目录所耗用的所有容量时,那就使用 du 吧!不过 du 如果加上 -s 这个选项时, 还可以依据不同的规范去找出文件系统所消耗的容量喔!举例来说,我们就来看看 /etc/ 这个目录的容量状态吧!

[root@www ~]# du -sb /etc
108360494       /etc   <==单位是 bytes 喔!

[root@www ~]# du -sm /etc
118     /etc           <==单位是 Mbytes 喔!


使用 bytes 去分析时,发现到实际的数据占用约 103.3Mbytes,但是使用 block 去测试,就发现其实耗用了 118Mbytes, 此时文件系统就耗费了约 15Mbytes 啰!这样看的懂我们在讲的数据了吧?

利用 GNU 的 parted 进行分割行为

虽然你可以使用 fdisk 很快速的将你的分割槽切割妥当,不过 fdisk 却无法支持到高于 2TB 以上的分割槽! 此时就得需要 parted 来处理了。不要觉得 2TB 你用不着! 2009 年的现在已经有单颗硬盘高达 2TB 的容量了! 如果再搭配主机系统有内建磁盘阵列装置,要使用数个 TB 的单一磁盘装置也不是不可能的! 所以,还是得要学一下这个重要的工具! parted !

parted 可以直接在一行命令列就完成分割,是一个非常好用的命令!他的语法有点像这样:

[root@www ~]# parted [装置] [命令 [参数]]
选项与参数:
命令功能:
新增分割:mkpart [primary|logical|extended] [ext3|vfat] 开始 结束
分割表  :print
删除分割:rm [partition]

范例一:以 parted 列出目前本机的分割表数据
[root@www ~]# parted /dev/hdc print
Model: IC35L040AVER07-0 (ide)              <==硬盘接口与型号
Disk /dev/hdc: 41.2GB                      <==磁盘文件名与容量
Sector size (logical/physical): 512B/512B  <==每个扇区的大小
Partition Table: msdos                     <==分割表形式

Number  Start   End     Size    Type      File system  Flags
 1      32.3kB  107MB   107MB   primary   ext3         boot
 2      107MB   10.6GB  10.5GB  primary   ext3
 3      10.6GB  15.8GB  5240MB  primary   ext3
 4      15.8GB  41.2GB  25.3GB  extended
 5      15.8GB  16.9GB  1045MB  logical   linux-swap
 6      16.9GB  18.9GB  2056MB  logical   ext3
 7      18.9GB  19.2GB  263MB   logical   linux-swap
[  1 ]  [  2 ]  [  3  ] [  4  ] [  5  ]   [  6  ]


上面是最简单的 parted 命令功能简介,你可以使用『 man parted 』,或者是『 parted /dev/hdc help mkpart 』去查询更详细的数据。比较有趣的地方在于分割表的输出。我们将上述的分割表示意拆成六部分来说明:

1.Number:这个就是分割槽的号码啦!举例来说,1号代表的是 /dev/hdc1 的意思;
2.Start:起始的磁柱位置在这颗磁盘的多少 MB 处?有趣吧!他以容量作为单位喔!
3.End:结束的磁柱位置在这颗磁盘的多少 MB 处?
4.Size:由上述两者的分析,得到这个分割槽有多少容量;
5.Type:就是分割槽的类型,有primary, extended, logical等类型;
6.File system:就如同 fdisk 的 System ID 之意。
接下来我们尝试来创建一个全新的分割槽吧!因为我们仅剩下逻辑分割槽可用,所以等一下底下我们选择的会是 logical 的分割类型喔!

范例二:创建一个约为 512MB 容量的逻辑分割槽
[root@www ~]# parted /dev/hdc mkpart logical ext3 19.2GB 19.7GB
# 请参考前一表格的命令介绍,因为我们的 /dev/hdc7 在 19.2GB  位置结束,
# 所以我们当然要由 19.2GB 位置处继续下一个分割,这样懂了吧?
[root@www ~]# parted /dev/hdc print
.....前面省略.....
 7      18.9GB  19.2GB  263MB   logical   linux-swap
 8      19.2GB  19.7GB  502MB   logical  <==就是刚刚创建的啦!


范例三:将刚刚创建的第八号磁盘分区槽删除掉吧!
[root@www ~]# parted /dev/hdc rm 8
# 这样就删除了!实在很厉害!所以这个命令的下达要特别注意!
# 因为...命令一下去就立即生效了~如果写错的话,会哭死~


关于 parted 的介绍我们就到这里啦!除非你有使用到大于 2TB 以上的磁盘, 否则请爱用 fdisk 这个程序来进行分割喔!拜托拜托!

转自:http://vbird.dic.ksu.edu.tw/linux_basic/0230filesystem_6.php
  • 大小: 4.8 KB
  • 大小: 4.6 KB
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    深入解析Windows操作系统中文.part2.rar

    第8章 安全性 485 8.1 安全系统组件 488 8.2 保护对象 492 访问检查 493 安全描述符和访问控制 506 8.3 账户权限和特权 516 账户权限 517 特权 518 超级特权 523 8.4 安全审计 524 8.5 登录(Logon) 526 Winlogon...

    操作系统课程设计实验报告(以Linux为例

    - 参考书籍:《Red Hat Enterprise Linux 4 入门与提高》第20章。 **实验步骤详解** 1. **验证GCC的可用性** - 使用命令`gcc -v`检查GCC版本信息。 - 创建简单的C语言程序(如HelloWorld),并通过`gcc`进行编译...

    15211088_王意如_操作系统第8次实验1

    实验“15211088_王意如_操作系统第8次实验1”的主要目的是让学生掌握Linux内核模块的编写和使用,以及对proc文件系统的认识。proc文件系统在Linux中是一个特殊的虚拟文件系统,它并不占用磁盘空间,而是直接反映了...

    Linux操作系统基础教程

    Linux 是在 1991 年发展起来的与 UNIX兼容的操作系统,可以免费使用,它的源代码 可以自由传播且可任人修改、充实、发展,开发者的初衷是要共同创造一个完美、理想并 可以免费使用的操作系统。 我们并不能使同学...

    30章C51入门教程

    第八章:串行通信 探讨8051的串行通信接口(UART),包括波特率设定、数据传输模式及C51编程实现。 第九章:C51库函数 介绍标准C库和C51特有的库函数,如数学函数、字符串处理、内存管理等。 第十章:C51程序调试 ...

    主机安全-Linux操作系统基线检查指导书1.0版.doc

    启用了系统口令复杂度策略,系统用户密码长度不小于8位,包含数字、大小写字母和特殊符号,并规定了口令更换的周期。 2. 以不符合复杂度要求和不符合长度要求的口令创建用户时均提示失败。 - **检查项目**:应...

    java第8章java-chapter8.rar

    本章节“java第8章”深入探讨了Java的核心概念和技术,旨在帮助开发者深化对Java的理解并提升编程技能。以下是对该章节内容的详细解读: 1. **异常处理**:Java中的异常处理是一个关键特性,用于处理程序运行时可能...

    proe__第8章__工程图基本操作.pptx

    可以放在投影通道中)、辅助视图(补充说明模型的特殊结构)、详细视图(放大显示模型的一部分)和旋转视图(现有视图围绕切割平面旋转90度,用于展示难以观察的部位)。 - **剖视图**:分为全视图、半视图、局部...

    Professional Linux Kernel Architecture

    第八章“虚拟文件系统”介绍了Linux内核中的虚拟文件系统(VFS)架构。VFS是Linux内核中用于统一管理各种文件系统的一种抽象层。本章详细解释了VFS的设计思路、操作接口以及如何支持不同的文件系统类型。这对于理解...

    FLV测试文件下载

    8. **跨平台测试**:考虑到不同的操作系统(如Windows、MacOS、Linux)和设备(如桌面、移动设备)可能存在兼容性差异,对所有平台进行测试是必要的。同时,不同的网络环境也可能影响流媒体的性能,所以要在多种网络...

    ORACLE9i_优化设计与系统调整

    第8章ORACLE数据库系统优化安装 91 §7.1 应用系统环境规划和Oracle系统安装考虑 91 §7.1.1 操作系统安装考虑 91 §7.1.2 Oracle系统安装考虑 92 §7.2 关于创建多个Oracle实例问题 93 §7.3 Oracle系统安装后的...

    exe文件脱壳步骤txt下载

    - **第一字节**:用于标识中断操作的第一个字节。 - **指令长度**:表示中断操作所涉及的指令长度。 以上步骤详细介绍了从壳的检测到脱壳、再到注册机制作的完整过程。每一步都需要仔细操作,并结合具体的工具和...

    informix 实用大全

    第8章 生成数据库与表格 8.1 规划磁盘布局与存储要求 8.2 使用语法符号 8.3 生成数据库 8.4 删除数据库 8.5 生成表格 8.6 删除表格 8.7 改变表格 8.8 更多信息 8.9 informix与其他参考资料 第9章...

    Intel第8代CPU核显驱动Win7-64位已改好

    Intel第8代CPU默认并不支持Win7系统,这主要是因为新硬件特性与老系统之间的不兼容问题。因此,在某些情况下,需要特殊的驱动程序来确保这些设备能够在Win7下正常运行。 #### 知识点四:核心显卡驱动程序的作用 ...

    Linux面试题大全,测测你的水平

    27. **可以用ls–al命令来观察文件的权限,每个文件的权限都用10位表示,并分为四段,其中第一段占1位,表示文件类型,第二段占3位,表示文件所有者对该文件的权限。** - **知识点**: `ls -al` 命令可以列出文件的...

    Linux常用操作命令

    34. **观察文件类型:file** - `file` 命令用于显示文件的类型。 - 示例:`file file`(显示文件的类型) 35. **寻找【执行档】:which** - `which` 命令用于查找可执行文件的位置。 - 示例:`which ls`(显示`...

    深入.NET平台和C#编程第九章.rar

    8. **.NET类库**: .NET Framework包含了大量的类库,如System.IO用于文件和流操作,System.Net用于网络通信,System.Collections.Generic用于泛型集合等。学习如何有效利用这些类库能提升开发效率。 9. **设计模式*...

    HPUX常用查看系统信息命令

    ### HPUX常用查看系统信息命令详解 #### 1. 查看系统机型:`#model` ...通过以上命令的详细介绍,我们可以了解到在HP-UX操作系统中如何有效地管理和监控系统资源。这些命令对于日常维护和故障排查工作都非常有帮助。

    使用Java理解程序逻辑第16章.zip

    在本章"使用Java理解程序逻辑第16章"中,我们主要探讨的是Java编程语言中的高级程序设计概念,特别是如何运用这些概念来构建复杂的逻辑结构。JavaSE(Java Standard Edition)是Java平台的核心,提供了丰富的类库和...

Global site tag (gtag.js) - Google Analytics