文件系统


格式化

        格式化是指对磁盘磁盘中的分区(partition)进行初始化的一种操作,这种操作通常会导致现有的磁盘或分区中所有的文件被清除。

格式化通常分为低级格式化和高级格式化。如果没有特别指明,对硬盘的格式化通常是指高级格式化,而对软盘的格式化则通常同时包括这两者。

 

格式化的种类

        磁盘格式化牵涉两个不同的程序:低级与高级格式化。前者处理磁盘表面格式化赋与磁片扇区数的特质;低级格式化完成后,硬件磁盘控制器(disk controller)即可看到并使用低级格式化的成果;后者处理“伴随着操作系统所写的特定信息”。

低级格式化

        低级格式化(Low-LevelFormatting)又称低层格式化或物理格式化(Physical Format),对于部分硬盘制造厂商,它也被称为初始化(initialization)。现今,随着软盘的逐渐退出日常应用,应用新的编址方法和接口的磁盘的出现,这个词已经失去了原本的含义,大多数的硬盘制造商将低级格式化(Low-Level Formatting)定义为创建硬盘扇区sector)使硬盘具备存储能力的操作。[1]现在,人们对低级格式化存在一定的误解,多数情况下,提及低级格式化,往往是指硬盘的填零操作。

高级格式化

        高级格式化又称逻辑格式化,它是指根据用户选定的文件系统(如FAT12、FAT16、FAT32、NTFS、EXT2、EXT3等),在磁盘的特定区域写入特定数据,以达到初始化磁盘或磁盘分区、清除原磁盘或磁盘分区中所有文件的一个操作。高级格式化包括对主引导记录分区表相应区域的重写、根据用户选定的文件系统,在分区中划出一片用于存放文件分配表目录表等用于文件管理的磁盘空间,以便用户使用该分区管理文件。

 

 

文件系统

        文件系统是一种用于向用户提供底层数据访问的机制。它将设备中的空间划分为特定大小的块(扇区),一般每块512字节。数据存储在这些块中,大小被修正为占用整数个块。由文件系统软件来负责将这些块组织为文件和目录,并记录哪些块被分配给了哪个文件,以及哪些块没有被使用。

不过,文件系统并不一定只在特定存储设备上出现。它是数据的组织者和提供者,至于它的底层,可以是磁盘,也可以是其它动态生成数据的设备(比如网络设备)。

 

        计算机的文件系统是一种存储和组织计算机数据的方法,它使得对其访问和查找变得容易,文件系统使用文件和树形目录的抽象逻辑概念代替了硬盘和光盘等物理设备使用数据块的概念,用户使用文件系统来保存数据不必关心数据实际保存在硬盘(或者光盘)的地址为多少的数据块上,只需要记住这个文件的所属目录和文件名。在写入新数据之前,用户不必关心硬盘上的那个块地址没有被使用,硬盘上的存储空间管理(分配和释放)功能由文件系统自动完成,用户只需要记住数据被写入到了哪个文件中。

文件系统通常使用硬盘光盘这样的存储设备,并维护文件在设备中的物理位置。但是,实际上文件系统也可能仅仅是一种访问数据的界面而已,实际的数据是通过网络协议(如NFSSMB9P等)提供的或者内存上,甚至可能根本没有对应的文件(如 proc文件系统)。

严格地说, 文件系统是一套实现了数据的存储、分级组织、访问和获取等操作的抽象数据类型(Abstract data type)。

 

认识EXT2 文件系统

        Ext2文件系统通常会将文件属性及数据分别存放在不同的区块,权限与属性放置到inode中,至于实际数据则放置到data block 区块中。还有一个超级区块(superblock)会记录整个文件系统的整体信息,包括inode与block的总量、使用量、剩余量等。

每个inode与 block 都有编号:

  • Superblock : 记录此filesystem的整体信息,包括inode/block的总量、使用量、剩余量,以及文件系统的格式与相关信息等。
  • Inode : 记录文件的属性,一个文件占用一个inode,同时记录此档案的数据所在的block号码。
  • Block : 实际记录文件的内容,一个文件可能会占用多个block.


Inode 的内容记录文件的权限与相关属性,block区块则是记录文件的实际内容。在高级格式化的时候,文件系统就将inode与block固定好了,除非重新格式化。

 

Block 的特点

1.     block的大小与数量在格式化完成之后就不能再改变(除非重新格式化)

2.     每个block内最多只能够放置一个文件的数据

3.     如果文件大于block的大小,则一个文件会占用多个block数量,自动分配

4.     如果文件小于block的大小,则该block的剩余容量就不能再被其他文件使用

 

Inode

l  文件的字节数

l  文件拥有者的User ID

l  文件的Group ID

l  文件的读、写、执行权限

l  文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。

l  链接数,即有多少文件名指向这个inode

l  文件数据block的位置

 

可以使用stat 命令来查看某个文件的inode信息:

stat myfile.py

        每个inode都有一个编号,操作系统利用inode编号来标识不同的文件。对于linux/UNIX 操作系统来说,内部不使用文件名,而使用inode编号来标识文件。有过编程经验的同学都知道,对于计算机来说数字比字符串处理起来更简单。文件名只是为了便于用户记忆而已。

  • inode不包含文件名或目录名的字符串,只包含文件或目录的“元信息”。
  • Unix的文件系统的目录也是一种文件。打开目录,实际上就是读取“目录文件”。目录文件的结构是一系列目录项(dirent)的列表。每个目录项,由两部分组成:所包含文件或目录的名字,以及该文件或目录名对应的inode号码。
  • 文件系统中的一个文件是指存放在其所属目录的“目录文件”中的一个目录项,其所对应的inode的类别为“文件”;文件系统中的一个目录是指存放在其“父目录文件”中的一个目录项,其所对应的inode的类别为“目录”。可见,多个“文件”可以对应同一个inode;多个“目录”可以对应同一个inode。
  • 文件系统中如果两个文件或者两个目录具有相同的inode号码,那么就称它们是“硬链接”关系。实际上都是这个inode的别名。换句话说,一个inode对应的所有文件(或目录)中的每一个,都对应着文件系统某个“目录文件”中唯一的一个目录项。
  • 创建一个目录时,实际做了3件事:在其“父目录文件”中增加一个条目;分配一个inode;再分配一个存储块,用来保存当前被创建目录包含的文件与子目录。被创建的“目录文件”中自动生成两个子目录的条目,名称分别是:“.”和“..”。前者与该目录具有相同的inode号码,因此是该目录的一个“硬链接”。后者的inode号码就是该目录的父目录的inode号码。所以,任何一个目录的"硬链接"总数,总是等于它的子目录总数(含隐藏目录)加2。即每个“子目录文件”中的“..”条目,加上它自身的“目录文件”中的“.”条目,再加上“父目录文件”中的对应该目录的条目。
  • 通过文件名打开文件,实际上是分成三步实现:首先,操作系统找到这个文件名对应的inode号码;其次,通过inode号码,获取inode信息;最后,根据inode信息,判断是否有相应权限,找到文件数据所在的block,读出数据。

 

1.     每个inode大小一般固定为128 bytes / 256 bytes

2.     每个文件仅会占用一个inode而已

3.     文件系统能够建立的文件数量与inode的数量有关

4.     系统读取文件时需要先找到inode,并分析inode所记录的权限等是否符合,若符合才能够实际读取block的内容。

Inode需要记录block编号,而block号码需要存储空间。所以每个inode能记录的block号码有限。

 

Superblock

        记录整个filesystem相关信息。相当重要,因为此文件系统的基本信息都写在这里。为了安全考虑,每个block group都可能含有superblock。事实上除了第一个block group内会含有superblock,其他后续的block group 如果含有,则是作为备份。

 

目录

        A directory is a file that contains directory entries.Most implementations of UNIX systems don’t store attributes in the directoryentries themselves, because of the difficulty of keeping them in synch when afile has multiple hard links.

         目录文件的结构非常简单,就是一系列目录项(dirent)的列表。每个目录项,由两部分组成:所包含文件的文件名,以及该文件对应的inode号码。也就是说目录分配的block仅仅记录了此目录下的文件名和其相应的inode号码。


什么是文件链接数??

【有多少个文件名链接到这个 inode 号码】


通过 ls –i 命令列出整个目录文件,即文件名和inode编号:

(未完待续 …)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值