磁盘分区、Linux文件系统

1,磁盘基础概念

1.1,磁盘是存储数据的物理元件。常用的磁盘种类有:scsi、sata、ide等。

  ide(Integrated Device Electronics:电子集成驱动器): 磁盘与磁盘控制器集成在一起。特点:并行传输。随着传输速率的提升,传输稳定性不高,反而影响传输速率。价格便宜。传输速率不高。

  sata: 串行传输,传输速率高。

  scsi(Small Computer System Interface:小型计算机系统接口): 传输速率更高,传输稳定。独立与系统总线的接口,系统占有率低。价格高,一般用于服务器。

1.2,硬盘的物理结构一般由磁头与碟片、电动机、主控芯片与排线等部件组成。当主电动机带动碟片旋转时,副电动机带动一组(磁头)到相对应的碟片上并确定读取正面还是反面的碟面,磁头悬浮在碟面上画出一个与碟片同心的圆形轨道(磁轨或称柱面),这时由磁头的磁感线圈感应碟面上的磁性与使用硬盘厂商指定的读取时间或数据间隔定位扇区,从而得到该扇区的数据内容。所有的盘片都固定在一个旋转轴上,这个轴即盘片主轴。而所有盘片之间是绝对平行的,在每个盘片的存储面上都有一个磁头,磁头与盘片之间的距离比头发 丝的直径还小。所有的磁头连在一个磁头控制器上,由磁头控制器负责各个磁头的运动。磁头可沿盘片的半径方向动作,而盘片以每分钟数千转到上万转的速度在高 速旋转,这样磁头就能对盘片上的指定位置进行数据的读写操作。

  •  磁道(Track)
当磁盘旋转时,磁头若保持在一个位置上,则每个磁头都会在磁盘表面划出一个圆形轨迹,这些圆形轨迹就叫做磁道(Track)。信息以脉冲串的形式记录在这些轨迹中,这些同心圆不是连续记录数据,而是被划分成一段段的圆弧(扇区),这些圆弧 的角速度一样。
  • 柱面 (Cylinder)
在有多个盘片构成的盘组中,由不同盘片的面,但处于同一半径圆的多个磁道组成的一个圆柱面(Cylinder)。所有盘面上的同一磁道构成一个圆柱,通常称做柱面(Cylinder),每个圆柱上的磁头由上而下从“0”开始编号。数据的读/写按柱面进行,即磁 头读/写数据时首先在同一柱面内从“0”磁头开始进行操作,依次向下在同一柱面的不同盘面即磁头上进行操作,只在同一柱面所有的磁头全部读/写完毕后磁头 才转移到下一柱面,因为选取磁头只需通过电子切换即可,而选取柱面则必须通过机械切换。电子切换相当快,比在机械上磁头向邻近磁道移动快得多,所以,数据 的读/写按柱面进行,而不按盘面进行。也就是说,一个磁道写满数据后,就在同一柱面的下一个盘面来写,一个柱面写满后,才移到下一个扇区开始写数据。读数 据也按照这种方式进行,这样就提高了硬盘的读/写效率。
  • 扇区(Sector)
磁盘上的每个磁道被等分为若干个弧段,这些弧段便是硬盘的扇区(Sector)。硬盘的第一个扇区,叫做引导扇区。操作系统以扇区(Sector)形式将信息存储在硬盘上,每个扇区包括512个字节的数据和一些其他信息。
  • 磁头(Head)
在硬盘系 统中,硬盘的每一个盘片都有两个盘面(Side),即上、下盘面,一般每个盘面都会利 用,都可以存储数据。盘面号又叫磁头号,因为每一个有效盘面都有一个对应的读写磁头。

1.3,磁盘读写原理

系统将文件存储到磁盘上时,按柱面、磁头、扇区的方式进行,即最先是第1磁道的第一磁头下(也就是第1盘面的第一磁道)的所有扇区,然后,是同一柱面的下一磁头,……,一个柱面存储满后就推进到下一个柱面,直到把文件内容全部写入磁盘。
 
系统也以相同的顺序读出数据。读出数据时通过告诉磁盘控制器要读出扇区所在的柱面号、磁头号和扇区号(物理地址的三个组成部分)进行。磁盘控制器则直接使磁头部件步进到相应的柱面,选通相应的磁头,等待要求的扇区移动到磁头下。在扇区到来时,磁盘控制器读出每个扇区的头标,把这些头标中的地址信息与 期待检出的磁头和柱面号做比较(即寻道),然后,寻找要求的扇区号。待磁盘控制器找到该扇区头标时,根据其任务是写扇区还是读扇区,来决定是转换写电路, 还是读出数据和尾部记录。找到扇区后,磁盘控制器必须在继续寻找下一个扇区之前对该扇区的信息进行后处理。如果是读数据,控制器计算此数据的ECC码,然 后,把ECC码与已记录的ECC码相比较。如果是写数据,控制器计算出此数据的ECC码,与数据一起存储。在控制器对此扇区中的数据进行必要处理期间,磁 盘继续旋转。其实我们的文件大多数的时候都是破碎的,在文件没有破碎的时候,摇臂只需要寻找1次磁道并由磁头进行读取,只需要1次就可以成功读取;但是如果文件破碎成11处,那么摇臂要来回寻找11次磁道磁头进行11次读取才能完整的读取这个文件,读取时间相对没有破碎的时候就变得冗长。 
 
因此,磁盘IO时的过程包括:
  • 第一步,首先是磁头径向移动来寻找数据所在的磁道。这部分时间叫寻道时间。
  • 第二步,找到目标磁道后通过盘面旋转,将目标扇区移动到磁头的正下方。
  • 第三步,向目标扇区读取或者写入数据。到此为止,一次磁盘IO完成,故:
所以,单次磁盘IO时间 = 寻道时间 + 旋转延迟 + 存取时间。 
  • 对于旋转延时,现在主流服务器上经常使用的是1W转/分钟的磁盘,每旋转一周所需的时间为60*1000/10000=6ms,故其旋转延迟为(0-6ms)。
  • 对于存取时间,一般耗时较短,为零点几ms。
  • 对于寻道时间,现代磁盘大概在3-15ms,其中寻道时间大小主要受磁头当前所在位置和目标磁道所在位置相对距离的影响。

2,磁盘分区

磁盘分区

为什么要进行磁盘分区?

1,保护数据。 

2,提示io性能。

3,区分系统与引用程序之间磁盘空间。

4,满足不同文件系统。

分区基本概念:

MBR分区:处于磁盘0号扇区,由引导代码、MBR分区表、MBR结束标志3部分构成,一共占用512个字节。

  • 引导代码:占MBR分区的前446字节,系统启动的时候会导入引导代码。如果引导代码被破坏,系统将无法启动。
  • MBR分区表:占引导代码后面的64个字节,是整个硬盘的分区表。每个分区使用的字节为16个,所以这确定了MBR分区方式最多只有4个主分区(包含扩展分区在内)。各分区信息的柱面地址存放在分区表。
  • MBR结束标志:占用最后2个字节,一直为"55AA"。

分区:由MBR分区表分区信息中柱面终始地址范围内的柱面构成。一般分区由Boot sector、super block、inode、block等信息组成。

  • Boot sector:分区引导根扇区。
  • super block:描述分区信息的超块。包含以下信息:
  1. 分区内block与inode的数量
  2. 挂载标识
  3. 使用/未使用的block与inode数量
  4. block与inode的大小
  5. 文件系统挂载时间,最近写入时间、修改时间。
  • inode:节点,描述文件元信息。包含以下信息:
  1. 文件字节数
  2. 文件拥有者id
  3. 组id
  4. 文件读、写、执行权限
  5. 文件时间戳。包含文件创建时间ctime、修改时间mtime、打开时间atime
  6. 文件链接数(软连接、硬连接)
  7. 文件数据block存储地址
  • block:块,文件实际数据存储单位。用于存放实际数据。文件系统中最小存储单元。一般为扇区大小的2^n倍。有1k、2k、4k

分区步骤:

  1. 列出磁盘分区情况。语法:fdisk -l 列出磁盘分区情况。
  2. 磁盘分区。语法:fdisk 未分区磁盘。
  3. 格式化磁盘。语法:mkfs -t 文件系统类型 准备分区磁盘。此过程初始化super block信息。
  4. 挂载磁盘。语法:mount 磁盘 目录。将分区文件系统绑定到根目录下,告诉操作系统分区文件系统可以被使用。

普通文件与目录文件创建:

创建文件,会在当前目录所属分区下分配一个inode,至少一个data block。并将新创建的文件名加入到当前目录文件的data block。普通文件与目录文件的区别在于data block中存储的数据。

普通文件中存放的是文件数据,目录文件存放的是当前目录下普通文件与目录文件的节点号与名称组成的映射数组、父目录节点号、自身节点号。

 

举个寻径例子:

终端命令输入路径 /var/test.txt。操作系统寻找路径如下: 首先会寻找挂载到‘/’下的磁盘分区(事实上操作系统存在缓存,不一定直接到磁盘寻找),在节点表中寻找‘/’的节点号,然后取data block数据。这些数据是节点号与文件名称的数组项。根据var文件名匹配到该文件的节点号。重复上述步骤,最终找到test.txt的文件。

 

Linux文件系统类型:

ReiserFS:ReiserFS 是一种文件系统格式。Linux内核从2.4.1版本开始支持ReiserFS。ReiserFS原先是Novell公司的SuSE Linux Enterprise采用的默认文件系统,直到2006年10月12日其宣称将在未来的版本改采 ext3 为默认。和同样在 Linux Kernel 2.4 版本下的 ext2 及 ext3 相比较,处理 4KB 以下的小文件时(tail packing enable),ReiserFS 的速度快了 10 到 15 倍[3]。但是,有些目录的操作在 ReiserFS 上面并不同步,(包括像 unlink(2)),可能会导致一些重度依赖文件锁(file-based lock)机制的应用程序上面数据的毁损。ReiserFS 在一个单一复合B+树中存储文件的亚数据信息(stat item)、目录文件信息(directory items)、索引节点中的块列表(indirect items),这些信息都有唯一的标识号作为B+树的索引值。

ext2:ext2 文件系统(也称为第二扩展文件系统)旨在克服早期 Linux 版本中使用的 Minix 文件系统的缺点。多年来,该文件系统一直广泛应用于 Linux。但 ext2 中没有日志,现在基本上已被 ext3 和最新的 ext4 所取代。

ext3:ext3 文件系统向标准 ext2 文件系统添加了日志功能,因此是一个非常稳定的文件系统的一个演化发展。它在大多数情况下提供合理的性能并且仍旧在改进。由于它在可靠的 ext2 文件系统上添加了日志功能,因此可以将现有 ext2 文件系统转换为 ext3 文件系统,并且在必要时还可以转换回来。

ext4:ext4 是作为 ext3 的扩展来启动的,它通过增加存储限制和提高性能来满足更大文件系统的需求。为了保留 ext3 的稳定性,在2006 年 6 月,该扩展被拆分成一个新的文件系统,即 ext4。ext4 文件系统在 2008 年 12 月正式发布,包含在 2.6.28 内核中。

vfat:vfat 文件系统(也称为 FAT32)没有日志功能,且缺乏完整的 Linux 文件系统实现所需的许多特性。它可用于在 Windows 和 Linux 系统之间交换数据,因为 Windows 和 Linux 都能读取它。不要将这个文件系统用于 Linux,除非要在 Windows 和 Linux 之间共享数据。

XFS:XFS 文件系统拥有日志功能,包含一些健壮的特性,并针对可伸缩性进行了优化。XFS 通常是相当快的。在大文件操作方面,XFS 在所有测试中一直处于领先地位。XFS 的性能非常接近 ReiserFS,并在大多数测试指标上都超过了 ext3。

IBM JFS:IBM 的 Journaled File System (JFS),目前用于 IBM 企业服务器,专为高吞吐量服务器环境而设计。它可用于 Linux,包含在几个发行版中。要创建 JFS 文件系统,使用 mkfs.jfs 命令。

选择文件系统:

选择合适的下一代 Linux 文件系统一直很简单。那些只寻求原始性能的人通常倾向于使用 ReiserFS,而那些更关心数据完整性特性的人则首选 ext3/4。然而,随着 XFS 的 Linux 版的发布,事情突然变得令人困惑。尤其是,对于 ReiserFS 是否依然是下一代文件系统性能方面的佼佼者,人们开始感到疑惑。
  • XFS 的性能非常接近 ReiserFS,并在大多数测试指标上都超过了 ext3。
  • 目前,ReiserFS 和 ext3 删除文件要比 XFS 快得多。 

软连接与硬连接:

可以用ln命令对一个已经存在的文件再建立一个新的连接,而不复制文件的内容。连接有软连接和硬连接之分,软连接又叫符号连接。它们各自的特点是:
  硬连接:是给文件一个副本,原文件名和连接文件名都指向相同的物理地址。目录不能有硬连接;硬连接不能跨越文件系统(不能跨越不同的分区)文件在磁盘中只有一个拷贝,节省硬盘空间;修改其中一个,与其连接的文件同时被修改。如果删除其中任意一个其余的文件将不受影响。由于删除文件要在同一个索引节点属于唯一的连接时才能成功,因此可以防止不必要的误删除。

  符号连接(软连接):用ln -s命令建立文件的符号连接符号连接是linux特殊文件的一种,作为一个文件,它的数据是它所连接的文件的路径名。类似windows下的快捷方式。
  当然删除这个连接,也不会影响到源文件,但对连接文件的使用、引用都是直接调用源文件的。

文件管理命令

磁盘和文件空间 :fdisk df du

文件目录与管理: cd pwd mkdir rmdir ls cp rm mv

查看文件内容 cat、tac、more、less、head 、tail

文件目录与权限 :chmod chown chgrp umask

文件查找:which、whereis、locate、find、find 

 

操作系统文件系统结构涉及到三个层面接口:用户层面 --> VFS --> devices。涉及到内核态与用户态。这块涉及到操作系统运行时分析,后续跟进。

鄙人新手,欢迎指教。

感谢前辈们的贡献,参考

https://www.cnblogs.com/sammyliu/p/4521315.html

http://www.178linux.com/9960

 

posted @ 2018-10-10 12:47  Program_青菜  阅读(317)  评论(0)    收藏  举报