赵走x博客
网站访问量:151562
首页
书籍
软件
工具
古诗词
搜索
登录
46、光盘写入工具
45、完整备份工具:dump
44、打包命令: tar
43、Linux 系统常见的压缩命令
42、压缩文件的用途与技术
41、文件系统的特殊观察与操作
40、内存置换空间(swap)之建置
39、配置启动挂载
38、磁盘的分割、格式化、检验与挂载
37、Linux 磁盘与文件系统管理
36、认识 EXT2 文件系统
35、极重要!权限与命令间的关系:
34、命令与文件的搜寻
33、文件与目录的默认权限与隐藏权限
32、文件内容查阅
31、文件与目录管理:
30、目录与路径:
29、Linux目录配置
28、Linux 文件权限概念
27、使用者与群组
26、启动过程的问题排解
25、正确的关机方法
24、超简单文书编辑器: nano
23、Linux系统的在线求助man page与info page
22、文本模式下命令的下达
21、首次登陆系统
20、关於大硬盘导致无法开机的问题
19、多重开机安装流程与技巧
18、安装后的首次设定
17、开始安装CentOS 5
16、本练习机的规划--尤其是分割参数
15、安装Linux前的规划
14、磁盘分区
13、Linux与硬件的搭配
12、鸟哥的建议(重点在Solution的学习):
11、有心朝Linux作业系统学习者的学习态度
10、鸟哥的Linux苦难经验全都录
9、Linux当前的应用角色
8、Linux的特色
7、Torvalds的Linux发展
6、Linux是什么
5、第零章、计算机概论:重点回顾、本章习题、参考数据与延伸阅读
4、第零章、计算机概论:软件程序运作
3、第零章、计算机概论:数据表示方式
2、第零章、计算机概论:个人计算机架构与周边设备
1、第零章、计算机概论:計算机:辅助人脑的好工具
41、文件系统的特殊观察与操作
资源编号:76665
linux
鸟哥的Linux私房菜
热度:121
原文:http://cn.linux.vbird.org/linux_basic/0230filesystem_6.php
文件系统实在是非常有趣的东西,鸟哥学了好几年还是很多东西不很懂呢! 在学习的过程中很多朋友在讨论区都有提供一些想法!这些想法将他归纳起来有底下几点可以参考的数据呢! # 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 这几篇文章有几个重点,归纳一下如下: * superblock 的大小为 1024 bytes; * 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 用的啰! 所以整个分割槽的文件系统分区有点像底下这样的图示:  图 6.1.1、1K 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 来使用。  图 6.1.2、4K block 的 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 』去查询更详细的数据。比较有趣的地方在于分割表的输出。我们将上述的分割表示意拆成六部分来说明: * Number:这个就是分割槽的号码啦!举例来说,1号代表的是 /dev/hdc1 的意思; * Start:起始的磁柱位置在这颗磁盘的多少 MB 处?有趣吧!他以容量作为单位喔! * End:结束的磁柱位置在这颗磁盘的多少 MB 处? * Size:由上述两者的分析,得到这个分割槽有多少容量; * Type:就是分割槽的类型,有primary, extended, logical等类型; * 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 这个程序来进行分割喔!拜托拜托! # 重点回顾 * 基本上 Linux 的正统文件系统为 Ext2 ,该文件系统内的信息主要有: * superblock:记录此 filesystem 的整体信息,包括inode/block的总量、使用量、剩余量, 以及文件系统的格式与相关信息等; * inode:记录文件的属性,一个文件占用一个inode,同时记录此文件的数据所在的 block 号码; * block:实际记录文件的内容,若文件太大时,会占用多个 block 。 * Ext2 文件系统的数据存取为索引式文件系统(indexed allocation) 需要碎片整理的原因就是文件写入的 block 太过于离散了,此时文件读取的效能将会变的很差所致。 这个时候可以透过碎片整理将同一个文件所属的 blocks 汇整在一起。 * Ext2文件系统主要有:boot sector, superblock, inode bitmap, block bitmap, inode table, data block 等六大部分。 data block 是用来放置文件内容数据地方,在 Ext2 文件系统中所支持的 block 大小有 1K, 2K 及 4K 三种而已 * inode 记录文件的属性/权限等数据,其他重要项目为: 每个 inode 大小均固定为 128 bytes; 每个文件都仅会占用一个 inode 而已; 因此文件系统能够创建的文件数量与 inode 的数量有关; * 文件的 block 在记录文件的实际数据,目录的 block 则在记录该目录底下文件名与其 inode 号码的对照表; * 日志式文件系统 (journal) 会多出一块记录区,随时记载文件系统的主要活动,可加快系统复原时间; * Linux 文件系统为添加效能,会让主存储器作为大量的磁盘高速缓存; * 实体链接只是多了一个文件名对该 inode 号码的链接而已; * 符号链接就类似Windows的快捷方式功能。 * 磁盘的使用必需要经过:分割、格式化与挂载,分别惯用的命令为:fdisk, mkfs, mount三个命令 * 启动自动挂载可参考/etc/fstab之配置,配置完毕务必使用 mount -a 测试语法正确否; # 参考数据与延伸阅读 * 注1:根据The Linux Document Project的文件所绘制的图示,详细的参考文献可以参考如下连结: Filesystem How-To: http://tldp.org/HOWTO/Filesystems-HOWTO-6.html * 注2:参考维基百科所得数据,链接网址如下: 条目: Ext2 介绍 http://en.wikipedia.org/wiki/Ext2 * 注3:PAVE为一套秀图软件,常应用于数值模式的输出文件之再处理: PAVE 使用手册: http://www.ie.unc.edu/cempd/EDSS/pave_doc/index.shtml * 注4:详细的 inode 表格所定义的旗标可以参考如下连结: John's spec of the second extended filesystem: http://uranus.it.swin.edu.au/~jn/explore2fs/es2fs.htm * 注5:参考 Ext2 官网提供的解说文件,这份文件非常值得参考的! 文章名称:『Design and Implementation of the Second Extended Filesystem 』 http://e2fsprogs.sourceforge.net/ext2intro.html * 注6:Red Hat 自己推出的白皮书内容: 文章名称:Whitepaper: Red Hat's New Journaling File System: ext3 http://www.redhat.com/support/wpapers/redhat/ext3/ * 注7:其他值得参考的 Ext2 相关文件系统文章之连结如下: The Second Extended File System - An introduction: http://www.freeos.com/articles/3912/ ext3 or ReiserFS? Hans Reiser Says Red Hat's Move Is Understandable http://www.linuxplanet.com/linuxplanet/reports/3726/1/ 文件系统的比较:维基百科:http://en.wikipedia.org/wiki/Comparison_of_file_systems * 注8:NTFS 文件系统官网:Linux-NTFS Project: http://www.linux-ntfs.org/ * 注9: Linux 核心所支持的硬件之装置代号(Major, Minor)查询: http://www.kernel.org/pub/linux/docs/device-list/devices.txt * 注10:与 Boot sector 及 Superblock 的探讨有关的讨论文章: 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