免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1516 | 回复: 0
打印 上一主题 下一主题

linux文件系统 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-06-27 19:42 |只看该作者 |倒序浏览

  Linux支持数量众多的本地文件系统类型和几种通过网络访问远程磁盘的文件系统,分析/proc/filesystems文件的内容即可找出当前Linux内核提供了对哪些文件系统的支持。
  Linux默认直接支持的文件系统是ext2文件系统。
  一,exe2文件系统
  当前,ext2文件系统(即second extended filesystem)是Linux默认直接支持的文件系统。ext2文件系统和其他现代Unix使用的文件系统非常相似,但更接近于BSD系统所用的Berkeley Fast Filesystem。ext2文件系统的最大容量是4 TB,但目前它的最大文件大小被Linux内核限制为2 GB。
  ext2的核心是两个内部数据结构,即superblock和inode。superblock是一个包含文件系统重要信息的表格,比如标签、大小、inode的数量等,它是对文件系统结构的基础性的、全局性的描述。因此,没有了superblock的文件系统将不再可用。由于这个原因,文件系统中不同位置存放着superblock的多个副本。
  inode是基本的文件级数据结构,文件系统中的每一个文件都可以在其中一个inode中找到其描述。inode描述的文件信息包括:文件的创建和修改时间,文件大小,实际存放文件数据的块列表,等等。对于较大的文件,块列表可能包含附加数据块列表的磁盘位置(称为间接块),甚至有可能出现二重或三重的间接块列表。文件名字通过目录项(Directory Entry)关联到inode,目录项由“文件名字-inode”对构成。
  二,创建和管理文件系统
  Linux提供了大量用于创建和管理文件系统的工具。接下来我们将以新增磁盘(或分区)为线索,介绍各种要用到的工具。尽管完成这一任务的过程并不复杂,但这些操作还得在Linux命令行进行,这是因为大多数图形界面的工具在这方面的支持非常有限。
  1,确定设备文件
  为新加入的物理磁盘(或磁盘分区)创建文件系统之前,首先必须知道该磁盘具体的设备名字。我们可以用好几种方法来找出它的设备名字。例如,可以通过dmesg命令分析启动日志(通过管道传送给grep,并搜索[hs]d[a-z]);如果已经用syslog截取,则可以查看日志文件。另外,大多数Linux发行版都默认启用/proc文件系统,如果你也使用了它,则可以分析/proc/partitions文件,查看系统认可的所有磁盘分区的清单。
  有时我们需要手工为磁盘创建设备文件,但这种情况极其罕见。设备文件可以用/dev目录下面的MAKEDEV脚本创建。例如,下面的命令将为第六个SCSI磁盘创建设备文件:
# cd /dev; MAKEDEV sdf
  2、创建分区
  确定磁盘的设备文件之后,接下来就要用fdisk之类的工具将磁盘分区。输入fdisk命令并在参数中指定目标磁盘
即可启动该工具:
# fdisk /dev/sdf
用fdisk修改好分区定义之后,可以用W命令保存更新后的分区表,用Q命令直接退出cfdisk则表示忽略所有已经作出的改动。只要对磁盘分区表作了任何实质性的改动(即,不仅仅指定分区标签或改变分区类型),则在继续处理之前 应当重新启动系统。
  3,创建文件系统
用mkfs命令创建文件系统(或者,更精确地说是用mke2fs命令。mkfs是一个统一的前端工具,为所有不同文件系统类型的创建命令提供)。如下例所示,该命令最简单的形式是通过-t参数指定文件系统的类型,然后加上创建该文件系统的分区。下面这个命令在第二个SCSI磁盘的第二个分区上创建一个ext2文件系统:
#mkfs -t ext2 /dev/sdb2
# mke2fs /dev/sdb2
  上面的第二个命令是直接使用mke2fs时的等价命令。
mke2fs的参数
-L label
指定分区的标签(最长11个字符)。
-b size
文件系统的块大小,以字节计,默认值1024。块是文件系统分配磁盘空间的单位。
-c
在创建文件系统之前检查分区的坏块。
-m percent
指定保留的文件系统空间百分比,这部分空间只能由root访问。默认值是磁盘的百分之五,这是传统Unix默认值的一半。在今天普遍使用大容量磁盘的情况下,即使是这个百分比也值得再加斟酌,比如可以将它降低到百分之二或者三。
-i ratio
指定每个inode的字节数,即为每个指定大小的字节块创建一个inode。默认值是4096,这个值所创建的inode通常超过实际可能用到的,但一般没有必要改变它,因为节省下来的磁盘空间非常有限。另外,用“-N 数字”可以显式地指定创建inode的数量。
-v -q
分别表示详细输出或简略输出
  4,其他工具
  Linux下有许多用于检测现有ext2文件系统状态以及重新进行配置的工具。tune2fs就是其中一个,它的-l选项将列出指定ext2文件系统的各种属性。其中大多数属性的含义都非常明确,这些属性与可在mke2fs命令中指定的选项相对应。个别属性决定fsck何时对文件系统进行下一次检查。默认情况下,Linux将每隔20次系统启动或者30天对文件系统进行检查(这里的时间间隔周期以秒指定)。
  这些文件系统属性中的很大一部分都可以用tune2fs的相应参数进行修改。例如,下面的命令通过设置两次检查
的时间间隔秒数(-i)为0禁止了根据时间周期执行的检查:
# tune2fs -i 0 /dev/hdb5
  三,日志文件系统reiserfs
  在1997年7月23日,Hans Reiser把他的基于平衡树结构的ReiserFS文件系统在网上公布 。 这是ReiserFS的第一次公开亮相。此后,ReiserFS一直在Hans Reiser和领导下的开发小组下开发和发展,SuSE Linux也对它的发展起了重大的帮助。由于ReiserFS有一些很有用的特性,更主要的是它比ext2fs要快得多,所以它很快被很多人使用。目前,bluepoint linux 2.0 和suse linux 7.3都直接支持ReiserFS,更重要的是在Linux内核2.4.1版本开始已支持ReiserFS,估计ReiserFS很快就会普及。
  ReiserFS是一种新型的文件系统,你可以选择它来装载你的Linux操作系统和其他应用程序和数据文件。它通过一种与众不同的方式--完全平衡树结构来容纳数据,包括文件数据,文件名以及日志支持。ReiserFS还以支持海量磁盘和磁盘阵列,并能在上面继续保很快的搜索速度和很高的效率。ReiserFS文件系统一直以来被用在高端Unix系统上如SGI等。
搜寻方式  
ReiserFS是基于平衡树的文件系统结构,尤其对于大量文件的巨型文件系统,如服务器上的文件系统,搜索速度要比ext2快;ext2使用局部的二分查找法,综合性能比不上ReiserFS。
  空间分配和利用情况
  ReiserFS里的目录是完全动态分配的,因此不存在ext2中常见的无法回收巨型目录占用的磁盘空间的情况。ReiserFS里小文件(<4K)可以直接储进树,小文件读取和写入的速度更快,树内节点是按字节对齐的,小的文件可共享同一个硬盘块,节约大量空间。Ext2使用固定大小的块分配策略,也就是说,不到4K的小文件也要占据4K的空间,导致的空间浪费比较严重。
  先进的日志机制
  ReiserFS有先进的日志(Journaling/logging)机制,在系统意外崩溃的时候,未完成的文件操作不会影响到整个文件系统结构的完整性。 ext2虽然健壮性很强,但一旦文件系统被不正常地断开,在下一次启动时它将不得不进行 漫长的检查系统数据结构的完整性的过程,这是为了防止数据丢失而必需的操作。对于较大型的服务器文件系统,这种"文件系统检查"可能要持续好几个小时,在很多场合下这样长的时间是无法接受的,解决这个问题一种技术"日志文件系统"。在日志的帮助下,每个对数据结构的改变都被记录下来,日志在机制保证了在每个实际数据修改之前,相应的日志已经写入硬盘。正因为如此,在系统突然崩溃时,在下次启动几秒钟后就能恢复成一个完整的系统,系统也就能很快的使用了。
  支持海量磁盘和优秀的综合性能
  ReiserFS是一个相当现代化的文件系统,相比之下,ext2虽然性能已经很好了,但其设计还只是19世纪80年代的水准。ReiserFS的出现,使Linux拥有了像Irix/AIX那样的高档商用Unix才有的高级文件系统。ReiserFS可轻松管理上百G的文件系统,在企业级应用中有其用武之地,由于它的高效存储和快速小文件I/O特点,它在桌面系统上也表现出色:启动X窗口系统的时间ReiserFS比ext2少1/3。而ext2则无法管理2G以上的单个文件,这也使得ReiserFS在某些大型企业级应用中比ext2要出色。
  ReiserFS一个最受人批评的缺点是每升级一个版本,都将要将磁盘重新格式化一次,这个缺点也正在改进中。
http://www.devlinux.com/namesys下载reiserfs的补丁程序,要确保下载的补丁版本和你的kernel版本是一致的。 下载后用root身份登录进入系统,切换至/usr/src/linux目录,执行命令:
#gunzip /path/to/linux-2.2.16-reiserfs-3.5.22-patch.gz
#patch -p1 -i /path/to/linux-2.2.16-reiserfs-3.5.22-patch
  在做完上面的两步后,重新编译kernel,将reiserfs编译进kernel或做成一个模块。
  Reiserfs的相关应用程序在 /usr/src/linux/fs/reiserfs/utils 目录下。你可以用下面方法安装它们:
#mkdir bin
#make
#make install
  最后,你可以用“fdisk”命令重新分区或用“mkreiserfs”命令重新格式化一个已经存在的分区。 指定reiserfs类型加载这个分区,如“mount -t reiserfs /dev/hda2/download”,这样你就可以使用这个新的分区了。


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/8793/showart_133458.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP