Chinaunix首页 | 论坛 | 博客

KEN

  • 博客访问: 66231
  • 博文数量: 7
  • 博客积分: 246
  • 博客等级: 二等列兵
  • 技术积分: 143
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-25 11:11
文章分类
文章存档

2011年(7)

我的朋友

分类: LINUX

2011-07-02 17:10:50

1、什么是文件系统:
     文件系统定义了把文件存储于磁盘时所必须的数据结构及磁盘数据 的管理方式。如果磁盘扇区之间不建立任何关系,其中的文件将无法访问,我们不知道文件从哪个扇区开始的、占了几个扇区、文件有什么属性等等。因此为了访问 磁盘上的数据,需要一种逻辑上的数据存储结构。而建立这种逻辑结构就是文件系统要做的事了。在磁盘上建立文件系统的过程通常称为“格式化”。
    一个比喻:一块硬盘就像一块空地,文件像不同的材料,我们首先得在空地上建起仓库(分区),并且指定好仓库(格式化)对材料的管理规范(文件系统),这样才能将材料运到仓库保管。
    注意:
     1)文件不会受所在分区的文件系统的影响,因为文件在不同的分区中差别仅仅是放置和管理方法的不同而已,就像同样是汽车轮胎在仓库A可能是直接堆在地上,而在仓库B中则是挂在墙上的,它们并不因此而有所不同。因此,文件可以在具有不同文件系统的分区间移动(如NTFS分区和FAT32分区之间),其内容绝不会有所改变。
     2)文件系统是对应分区的,而不是硬盘,不管是将硬盘分为一个分区,还是几个分区。因此,“我的硬盘是FAT32格式的”或“C盘是NTFS格式”等说法是不合适的,因为NTFS或者FAT32并不是格式,他们是管理文件的系统(规范)。
    

2、
常见文件系统:

    1)
FAT12: 是IBM第一台个人电脑中的MS-DOS 1.0使用的文件系统,主要用于软盘。这种系统限制分区的容量最大为16MB——但这根本算不上问题,因为软盘容量从来没有达到16MB。 

2)FAT16:它被很多操作系统支持,兼容性最好,但分区最大只能到2GB,并且空间浪费现象比较严重。并且由于FAT16文件系统是单用户文件系统,不支持任何安全性及长文件名。 

3)FAT32:是在FAT16基础上发展而来,随着Windows 95 OSR2一起发布,可以被大多数操作系统支持,FAT32比FAT16更有效地利用了硬盘空间,并且最大分区的上限已经达到了32GB,适合一般家庭使用。 

4)ISO9660:CD-ROM的文件系统,不过现在已经延伸出很多新的文件系统,对它的一些缺点进行了弥补,如Juliet等。 

5)UDF:可读写光盘的文件系统。 

6)Mac HFS:苹果电脑的文件系统,对大容量磁盘有比较好的支持。不过,现在大多数苹果电脑还在使用FAT32文件系统。 

      7)NTFS:它的英文全称为“NT File System”,中文意为NT文件系统,它随着1996年7月的Windows NT 4.0诞生的,但直到Windows 2000,它才开始在个人用户中间得以推广,跨入了主力分区文件系统的行列。今天,Windows XP/2003和NTFS早已是“如胶似漆”了。 
     
    NTFS是随着 Windows NT操作系统而产生的,它的优点和FAT文件系统相比是有更好的安全性和稳定性,在使用中不易产生文件碎片,NTFS分区对用户权限作出了非常严格的限 制,同时它还提供了容错结构日志,从而保护了系统的安全。但NTFS分区格式的兼容性不好,Windows 98/ME操作系统均不能直接访问该分区。  对于超过4GB以上的硬盘,使用NTFS分区,可以减少磁盘碎片的数量,大大提高硬盘的利用率;NTFS可 以支持的文件大小可以达到64GB,远远大于FAT32下的4GB;支持长文件名,支持的最大分区为 2TB。 


3、其他:
    1、文件系统分析:常见的FAT
(File Allocation Table)文件系统(见参考资料[2])
    
1)FAT文件系统的组成:
        FAT文件系统有两个重要的组成部分:FAT表(File Allocation Table)和数据存储区。
        FAT表是FAT文件系统的名称来源,
它定义了存储数据的簇(Cluster,由2的n次方个Sector组成,n值根据分区 大小而定,需综合考虑数据存取效率和存储空间的利用率)之间的链接关系,这种链接关系是一个单向链表,指向0xFF表示结束

       
数据区存储的数据包含文件目录项(Directory Entries)和文件数据。
       
       
FAT表和文件目录项是为了文件的访问和管理而建立的。
      应用程序要访问一个文件时,根据文件路径(逻辑分区号+目录,如F:/software)和文件名称(如setup.exe)可从文件目录项中获得存储文 件数据的起始簇号,之后从FAT表查询这个簇号对应的链表,就可以获得该文件对应的全部簇编号。从这些簇中读出全部数据,就得到一个完整的文件。 

   2)FAT12、FAT16和FAT32文件系统的由来:
      
依据一个簇编号所用bit数的不同,可分为FAT12、FAT16和FAT32文件系统。

2、
在Linux系统中,每个分区都是一个文件系统,都有自己的目录层次结构。Linux的最重要特征之一就是支持多种文件系统,并可以和许多其它种操作系统共存。

 


参考资料:
    [1]http://hi.baidu.com/willwillyes/blog/item/23f89202d161ab0a4bfb51bf.html
    [2]http://hi.baidu.com/willwillyes/blog/item/0ed79db1fcf55b5109230297.html
    [3]Linux文件系统剖析
            http://www.ibm.com/developerworks/cn/linux/l-linux-filesystem/
    [4]有关文件系统的博客资料:
          %5Fzeus/blog/category/%CE%C4%BC%FE%CF%B5%CD%B3

二、根文件系统:
网上的观点:(关于根文件系统的困惑

       简单地说,文件系统是数据保存到设备上所使用的一种组织结构或格式。也可以说是操作系统访问外部设备数据所约定的一种通用访问接口格式。 所涉及的设备可以是普通的块设备,也可以是其他形式的虚拟设备。例如位于内存中的虚拟磁盘、网络设备等。
      而根文件系统是Linux(或者说是UNIX类) 操作系统运行时所需要的特有文件系统。该文件系统不仅具有普通文件系统的存储数据文件的功能,还被操作系统用来存储运行时所需要的一些特殊文件。这些特殊 文件包括操作系统运行时的配置数据文件(通常位于/etc目录下)和设备文件(位于/dev目录下)。设备文件实际上保存着对应设备的一些相关参数,操作 系统通过使用它们来与应用程序进行接口,并与设备进行交互。因此根文件系统是Linux运行时所必须的。

当然,你也可以设计一种操作系统,他完全不需要文件系统来支持。或者说你的操作系统已经完全自我支持外部数据的保存和访问。

[1]Linux根文件系统

[2]
嵌入式Linux文件系统简介
http://pine721.blog.163.com/blog/static/1774710220080302225811/
[3]什么是根文件系统
http://blog.csdn.net/LinuxBoy1985/archive/2008/03/04/2146746.aspx
[4]cramfs文件系统
http://blog.21ic.com/more.asp?name=good02xaut&id=14921
[5] 根文件系统


还有一篇文章:
[6] Linux操作系统文件系统基础知识详解
        
讲解了一些文件系统的基础知识。对于我来说,重要的几点如下:


1、linux下一些主要目录的功用:(只记录不熟悉的)
/etc/rc.d 启动的配置文件和脚本
/lib 标准程序设计库,又叫动态链接共享库,作用类似windows里的.dll文件
/lost+found 这个目录平时是空的,系统非正常关机而留下“无家可归”的文件(windows下叫什么.chk)就在这里
/var 某些大文件的溢出区,比方说各种服务的日志文件
/usr 最庞大的目录,要用到的应用程序和文件几乎都在这个目录。其中包  含:
/usr/X11R6 存放X window的目录
/usr/bin 众多的应用程序
/usr/sbin 超级用户的一些管理程序
/usr/doc linux文档
/usr/include linux下开发和编译应用程序所需要的头文件
/usr/lib 常用的动态链接库和软件包的配置文件
/usr/man 帮助文档
/usr/src 源代码,linux内核的源代码就放在/usr/src/linux里
/usr/local/bin 本地增加的命令
/usr/local/lib 本地增加的库
2、 linux文件系统组织:
       linux系统中每个分区都是一个文件系统,都有自己的目录层次结构。linux会将这些分属不同分区的、单独的文件系统按一定的方式形成一个系统的总的目录层次结构。这里所说的“按一定方式”就是指的挂载。
      将一个文件系统的顶层目录挂到另一个文件系统的子目录上,使它们成为一个整体,称为挂载。把该子目录称为挂载点。比如根分区和/usr分区。而且如果我们在linux下访问windows下的分区,就需要挂载。

       
每次开机访问windows分区都要运行mount命令显然太烦琐,有人会问:为什么我开机后访问其他的linux分区不用使用mount命令呢,直接可见呢? 
       原因:/etc/fstab文件
       其实,每次开机时,linux自动将需要挂载的linux分区挂载上了。那么我们是不是可以设定让linux在启动的时候也挂载我们希望挂载的分区,如windows分区,以实现文件系统的自动挂载呢?

      这是完全可以的。在/etc目录下有个fstab文件,它里面列出了linux开机时自动挂载的文件系统的列表。
     详细内容,可参阅参考资料[6]。 转至http://hi.baidu.com/xuym04/blog/item/a1d3268ffe60d3ebf01f3623.html
阅读(352) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~