Linux 文件系统

来源:互联网 发布:万方学术论文数据库 编辑:程序博客网 时间:2024/06/16 11:30

继上一篇介绍了linux设备管理之后,本文我们主要介绍linux的文件系统。

linux分区

在挂载了设备之后,我们需要对该设备进行分区划分,然后格式化才能使用该设备!

1.划分分区

sudo fdisk /dev/sdb 

//下面是分区表的信息

Disk /dev/sdb: 8004 MB, 8004304896 bytes
255 heads, 63 sectors/track, 973 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xcad4ebea

Device Boot      Start         End      Blocks   Id  System
/dev/sdb4   *           1         974     7816672+  83  Linux
Partition 4 has different physical/logical endings:
     phys=(972, 254, 63) logical=(973, 34, 21)

注意,划分分区是针对整个设备而言的

2.创建文件系统

sudo mkfs -t  ext3 /dev/sdb4

root@peter-desktop:~# mkfs -t ext3 /dev/sdb4
mke2fs 1.41.11 (14-Mar-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)

Stride=0 blocks, Stripe width=0 blocks
488640 inodes, 1954168 blocks
97708 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2004877312
60 block groups
32768 blocks per group, 32768 fragments per group
8144 inodes per group
Superblock backups stored on blocks: 
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632


Writing inode tables: done  

任何时候添加额外的存储设备到系统中时,都可以使用这个分区和格式化的过程!!因为每个操作系统的所设定的属性和权限都不一样,所以必须对分区进行格式化,操作系统才能识别分区用来存储数据

3.检查文件系统完整性

sudo fsck  /dev/sdb4


linux  文件系统

在linux中文件系统是单独存在的,即使设备没有挂载在目录树下,该文件系统还是独立存在的,文件系统是和分区对应的,一个文件系统对应一个分区!


硬盘

在linux中分为两种类型:IDE和SCSI。

IDE硬盘的设备名称根据插槽位置的不同依次为/etc/hda----/etc/hdd。SCSI硬盘的设备名称根据linux核心扫描到该盘片的顺序依次为/etc/sd[a-p]。

磁盘的最小的数据存储单位是扇区sector,一般是512bytes,磁盘分区的最小单位是柱面,分区表记录的就是分区的起始和结束柱面。


硬盘分区

在linux中,要想使用硬盘,必须要将硬盘分区和格式化(各种系统使用的系统类型不一致),硬盘格式化之后才能被系统识别。在linux中存放MBR的512bytes中只有64bytes来存放设备的分区表信息,所以主分区和拓展分区最多只能有四个,同时扩展分区最多只能有一个。

主分区和扩展分区从1到4命名,但是任何逻辑分区的索引是从5开始的,不管前面的主分区和逻辑分区是怎么划分的。(主分区和逻辑分区不一定是四个)


分割表中记录的是每个分区的其实柱面和结束柱面。这里将磁盘分割为四个分区,p1-p4。加入这里的设备名称为sda,那么四个分区的名称分别为:

  • P1:/dev/sda1
  • P2:/dev/sda2
  • P3:/dev/sda3
  • P4:/dev/sda4


上面图中将磁盘分为一个主分区和一个拓展分区,并且将拓展分区分割为5个逻辑分区。在linux中拓展分区是使用额外的磁区记录分区表,拓展分区本身不能被格式化。

假设磁盘的设备名称为sda,那么各个分区名称为:

  • P1:/dev/sda1
  • P2:/dev/sda2
  • L1:/dev/sda5
  • L2:/dev/sda6
  • L3:/dev/sda7
  • L4:/dev/sda8
  • L5:/dev/sda9

注意逻辑分区是从sda5开始的,中间的设备名称给主分区和扩展分区预留


分区格式化

分区格式化是使用分区的最后一步操作。因为文件系统类型的多样性,操作系统不一定识别当前分区的类型,所以需要将当前分区格式化为当前操作系统能够识别的文件系统格式,此操作称为格式化。就如windows系统识别的是fat32类型的文件系统,linux识别ext2或者ext3类型的文件系统。


文件系统的组成部分:

superblock(超级块):记录文件系统的整体情况,包括inode/block的总量,使用情况,以及文件系统的其他属性。

inode:记录文件的属性,同时记录文件内容所在的block块号。

block:记录文件的内容,若文件内容过大,会占用多个block,每个block一般是512bytes。使用dumpe2fs 可以查看。


inode/block文件系统



在inode/block文件系统中,分区格式化的时候会先划分出inode区域和block区域,然后使用该文件系统。使用文件时首先找到文件所对应的inode块,读出block块号,然后可以找出文件的内容,效率比较高。


windows  fat文件系统


在非inode/block文件系统中,文件的块号是直接存在block块中的,必须读取完一个block块的内容才能读取下一个block块的内容,如果block块分布很分散,那么读取效率会很低,所以时不时的需要磁盘重组,将同一个文件的block块尽量排成连续的,提高读取效率。



ext2文件系统讲解


在linux文件系统中,当磁盘很大时,将inode区域和block区域都放在一起效率也不高,此时我们将分区变成多个群组,每个群组有自己独立的superblock/inode/block系统。boot sector用来进行开机多启动选项。


每个群组中inode对应表和block对应表都是反映当前的空闲和占用的inode或者block,类似于bitmap。


inode table



每个inode的大小为128或者256bytes,在分区格式化的时候就已经确定了。一个inode能存储128/4或者256/4个block号,那么最大的文件也无法满足需求,所以需要使用间接存储。可以计算出支持的支持的单个文件的最大字节。


目录和inode

在linux下,新建一个目录,那么linux会给该目录分配一个inode和至少一个block块用来存储目录下的文件名和对应的inode号。


一个目录的block中记录的是文件名及其对应的inode号,可以使用ls -li来查看任意目录下所有文件的inode号


参考资料:

http://linux.vbird.org/linux_basic/0130designlinux.php

http://linux.vbird.org/linux_basic/0230filesystem.php


0 0
原创粉丝点击