Linux 磁盘与文件系统管理

Linux的磁盘与文件系统

磁盘简介

磁盘存储器(magnetic disk storage),以磁盘为存储介质的存储器。 它是利用磁记录技术在涂有磁记录介质的旋转圆盘上进行数据存储的辅助存储器。具有存储容量大、数据传输率高、存储数据可长期保存等特点。 磁盘可分为软盘和硬盘。

巨磁电阻效应

1988年,费尔和格林贝格尔各自独立发现了“巨磁电阻”效应: 非常弱小的磁性变化就能导致巨大电阻变化。所以可以使磁盘体积越来越小,容量越来越大。

磁盘类型

IDE :  IDE是俗称的并口,SATA是俗称的串口,这两种硬盘是个人电脑和低端服务器常见的硬盘。

SCSI:SCSI的英文全称为“Small Computer System Interface”(小型计算机系 统接口),是同IDE(ATA)完全不同的接口,IDE接口是普通PC的标准接口,而SCSI并不是专门为硬盘设计的接口,是一种广泛应用于小型机上的高速数据传输技术。
SCSI接口具有应用范围广、多任务、带宽大、CPU占用率低,以及热插 拔等优点,但较高的价格使得它很难如IDE硬盘般普          及,因此SCSI硬盘主 要应用于中、高端服务器和高档工作站中。

SATA:使用SATA(Serial ATA)口的硬盘又叫串口硬盘。它采用点对点的方式实现了数据的分组传输从而带来更高的传输效率。 Serial ATA 1.0版本硬盘的起始传输速率就达150MB/s,而Serial ATA 3.0版本将实现硬盘峰值数据传输率为600MB/s,从而最终解决硬盘的系统瓶颈问题。

 SAS:SAS(Serial Attached SCSI)即串行连接SCSI,是新一代的SCSI技术。和 现在流行的Serial ATA(SATA)硬盘相同,都是采用串行技术以获得更高的传输速度,并通过缩短连结线改善内部空间等。SAS是并行SCSI接口之 后开发出的全新接口。此接口设计是为了改善存储系统的效能、可用性 和扩充性,并且提供与SATA硬盘的兼容性。

 FC:光纤通道,光纤通道的主要特性有:热插拔性、高速带宽、远程连接、 连接设备数量大等。 光纤通道是为在像服务器这样的多硬盘系统环境而设计,能满足高端 工作站、服务器、海量存储子网络、外设间通过集线器、交换机和点对点 连接进行双向、串行数据通讯等系统对高数据传输率的要求。

SSD:固态硬盘(Solid State Disk或Solid State Drive),也称作电子硬盘或者 固态电子盘,是由控制单元和固态存储单元(DRAM或FLASH芯片)组成 的硬盘。固态硬盘的接口规范和定义、功能及使用方法上与普通硬盘的相 同,在产品外形和尺寸上也与普通硬盘一致。由于固态硬盘没有普通硬盘 的旋转介质,因而抗震性极佳。其芯片的工作温度范围很宽(-40~85℃)。

 

三大存储类型

直连式存储(Direct-Attached Storage,简称DAS)

DAS存储在我们生活中是非常常见的,尤其是在中小企业应用中,DAS是最主要的应用模式,存储系统被直连到应用的服务器中,在中小企业中,许多的数据应用是必须安装在直连的DAS存储器上,直连式存储与服务器主机之间的连接通道通常采用 SCSI连接。

网络化存储(Fabric-Attached Storage,简称FAS)

网络化存储根据传输协议又分为

1.网络接入存储(Network-Attached Storage,简称NAS) 

NAS存储也通常被称为附加存储,顾名思义,就是存储设备通过标准的网络拓扑结构(例如 以太网)添加到一群计算机上。 NAS是文件级的存储方法,它的重点在于帮助工作组和部门级机构解决迅速增加存储容量的需求。

2.存储区域网络(Storage Area Network,简称SAN)

存储区域网络,从名字上我们也可以看出,这个是通过光纤通道交换机连接存储阵列和服务器主机, 最后成为一个专用的存储网络。SAN的结构允许任何服务器连接到任何存储阵列, 这样不管数据置放在那里,服务器都可直接存取所需的数据。因为采用了光纤接口,SAN还具有更高的带宽

三种存储架构区别说明

Linux 磁盘与文件系统管理

应用场景

DAS虽然比较古老了,但是还是很适用于那些数据量不大,对磁盘访问速度 要求较高的中小企业;
NAS多适用于文件服务器,用来存储非结构化数据,虽然受限于以太网的速度,但是部署灵活,成本低;
SAN则适用于大型应用或数据库系统,缺点是成本高、较复杂。

MBR: 主引导记录 (512byte) 

主引导记录(Master Boot Record,缩写:MBR),又叫做主引导扇区,是计算机开机后访问硬盘时所必须要读取的首个扇区,它在硬盘上的三维地址为(柱面,磁头,扇区)=(0,0,1)。在深入讨论主引导扇区内部结构的时候,有时也将其开头的446字节内容特指为“主引导记录”(MBR),其后是4个16字节的“磁盘分区表”(DPT),以及2字节的结束标志(55AA)。

标准MBR结构

Linux 磁盘与文件系统管理

主分区,扩展和逻辑

  • 主分区与扩展分区最多可以有四个(硬盘的限制)
  • 扩展分区最多只能有一个(操作系统的限制)
  • 逻辑分区是由扩展分配持续切割出来的分割槽;
  • 格式化后,作为数据存取的分割槽为主分区与逻辑分区。扩展分区无法格式化;
  • 逻辑分区的数量依操作系统而不同,在Linux系统中,IDE硬盘最多有59个逻辑分区(5号到63号), SATA硬盘则有11个逻辑分区(5号到15号)。

Linux的启动流程与主启动记录区(MBR)

1. BIOS:启动主动运行的载体,会认识第一个可启动的装置;

2. MBR:第一个可启动装置的第一个磁区内的主要启动记录区块,内含启动管理程序;

3. 启动管理程序(boot loader):一支可读取核心文件来运行的软件;

4. 核心文件:开始操作系统的功能...

 

文件系统

Linux文件数据除了文件实际内容外, 通常含有非常多的属性,例如 Linux 操作系统的文件权限(rwx)与文件属性(拥有者、群组、时间参数 等)。 

superblock:记录此 filesystem 的整体信息,包括inode/block的总量 、使用量、剩余量, 以及文件系统的格式与相关信息等; 

inode:记录文件的属性,一个文件占用一个inode,同时记录此文件的 数据所在的 block 号码; 

block:实际记录文件的内容,若文件太大时,会占用多个 block 。

inode

EXT2文件系统一开始就将 inode 与 block 规划好了,除非重新格式化 (或者利用 resize2fs 等命令变更文件系统大小),否则 inode 与 block 固定后就不再变动。
Ext2 文件系统在格式化的时候一般会分为多个区块群组 (block group) , 每个区块群组都有独立的 inode/block/superblock 系统。

EXT2文件系统

Linux 磁盘与文件系统管理

Superblock

Superblock 是记录整个 filesystem 相关信息的地方, 没有 Superblock ,就没有这个 filesystem 了。他记录的信息主要有:

• block 与 inode 的总量

• 未使用与已使用的 inode / block 数量

• block 与 inode 的大小 (block 为 1, 2, 4K,inode 为 128 bytes)

• filesystem 的挂载时间、最近一次写入数据的时间、最近一次检验磁 盘 (fsck) 的时间等文件系统的相关信息

• 一个 valid bit 数值,若此文件系统已被挂载,则 valid bit 为 0 ,若 未被挂载,则 valid bit 为 1 

block

1、data block 是用来放置文件内容数据地方

2、在 Ext2 文件系统中所支持的 block大小有 1K, 2K 及 4K 三种

3、在格式化时 block 的大小就固定了,且每个 block 都有编号,以方便 inode 的记录。

注意,由于 block 大小的差异,会导致该文件系统能够支持的最大磁盘容量与最大单一文件容量并不相同。 因为 block 大小而产生的 Ext2 文件系统限制如下

Linux 磁盘与文件系统管理

block的基本限制

  • 原则上,block 的大小与数量在格式化完就不能够再改变了(除非重新 格式化);
  • 每个 block 内最多只能够放置一个文件的数据;
  • 承上,如果文件大于 block 的大小,则一个文件会占用多个 block 数量;
  •  承上,若文件小于 block ,则该 block 的剩余容量就不能够再被使 用了(磁盘空间会浪费)。
     

注:如上第四点所说,由于每个 block 仅能容纳一个文件的数据而已, 因此如果你的文件都非常小,但是你的 block 在格式化时却选用最大的 4K 时,可能会产生较多的容量浪费。

inode table

inode 的内容主要是记录文件的属性以及该文件实际数据是放置在哪几 号 block 内! 基本上,inode 记录的文件数据至少有底下这些:
• 该文件的存取模式(read/write/excute)

• 该文件的拥有者与群组(owner/group)

• 该文件的容量 • 该文件创建或状态改变的时间(ctime)

• 最近一次的读取时间(atime) • 最近修改的时间(mtime)

• 该文件真正内容的指向 (pointer)大小为4byte

iNode:128 bytes 其中属性占 68 byte

剩余 60 byte 分为12个直接 1个间接 1个双间接 1个三间接
一个pointer 占4byte 所以 12+1+1+1=15===15*4=60 byte,记录block的pointer

iNode与block的关系

Linux 磁盘与文件系统管理

如图所示,双间接为iNode连接一个block块 ,并将它作为真正数据block块号的存储区,若block大小为4k,则能存储1k个pointer指向。三间接同理。

区块对照表(block bitmap )

从 block bitmap 当中 可以知道哪些 block 是空的,因此我们的系统就能够很快速的找到可 使用的空间来处置文件。同样的,如果你删除某些文件时,那么那些文件原本占用的 block 号 码就得要释放出来, 此时在 block bitmap 当中相对应到该 block 号码的标志就得要修改成为『未使用中』!这就是 bitmap 的功能。

inode bitmap (inode对照表)

这个其实与 block bitmap 是类似的功能,只是 block bitmap 记录的 是使用与未使用的 block 号码, 至于 inode bitmap 则是记录使用与未 使用的 inode 号码!

创建一个目录时文件系统做了什么

当创建一个目录时, ext2 会分配一个 inode 与至少一块 block 给该目录。其中,inode 记录该目录的相关权限与属性,并可记录分配到的那块 block 号码; 而 block 则是记录在这个目录下的文件名与这些文件名占用的 inode 号码数据。 

创建一个文件时文件系统做了什么

当在 Linux 下的 ext2 创建一个一般文件时, ext2 会分配一个 inode 与相对于该文件大小的 block 数量给该文件。

例如:假设我的一个 block 为 4 Kbytes ,而我要创建一个 100 KBytes 的文件,那么 linux 将分配一个 inode 与 25 个 block 来储存该文件! 但同时请注意,由于 inode 仅有 12 个直接指向,因此还要多一个 block 来作为区块号码的记录!

共需要26个block块,因为有一个双间接,需要一个block来存储指向。

磁盘目录与容量

df:列出文件系统的整体磁盘使用量; 

du:评估文件系统的磁盘使用量(常用在推估目录所占容量)

df

Linux 磁盘与文件系统管理

df ——将系统内的所有文件系统列出来

df -h——将容量以易读的方式列出来

df -h / ——查看指定目录

df -ih ——查看分区中可用的inode剩余量与总容量

du

Linux 磁盘与文件系统管理

du ——列出目前目录下的所有目录容量

du -a ——列出文件及目录的容量

ln

在 Linux 底下的连结档有两种,一种是类似 Windows 的快捷方式功能 的文件,可以让你快速的链接到目标文件(或目录); 另一种则是透过文件系统的 inode 连结来产生新档名,而不是产生新文件!这种称为实体链接 (hard link)。

Hard Link     ln  原文件名   硬链接名

hard link 只是在某个目录下新增一笔档名链接到某 inode 号码的关联记录而已。链接的inode和原文件的inode的是一样的,来源删除硬链接还能使用

注意:

不能跨Filesystem

不能Link目录

Symbolic Link 符号链接    ln -s   原文件名    链接名

Symbolic link 就是在创建一个独立的文件,而这个文件会让数据的读取指向他 link 的那个文件的档名!由于只是利用文件来做为指向的动作, 所以,当来源档被删除之后,symbolic link 的文件会打开失败。

关于目录的链接数量

当我们创建一个新目录名称为/tmp/testing时,基本会有三个东西,分别为/tmp/testing  /tmp/testing/.  /tmp/testing/..  而其中 /tmp/testing 与 /tmp/testing/. 其实是一样的!都代表该目录 ,而 /tmp/testing/.. 则代表 /tmp 这个目录,所以说,当我们创建一个 新的目录时, 新的目录的 link 数为 2 ,而上一级目录的 link 数则会添 加 1 。

当我们对目录用ls-ld 进行详细查看时,权限后的数字也就是第二个字段为该目录的链接数量

 

磁盘的分割、格式化、检验与挂载

分区

首先在虚拟机中添加一块新磁盘,然后是系统发现该磁盘,有两种方式

  1. 重启系统,系统会发现新添加的磁盘
  2. 输入echo "- - -" >  /sys/class/scsi_host/host0/scan  然后使用fdisk -l 命令查看是否发现磁盘 如果没有发现可将路径中的host0改为host1 或者host2 分别尝试。

系统发现磁盘后可使用fdisk  设备名  对其进行分区分区,会有如下几种状况

• 1-4 号尚有剩余,且系统未有扩展分区(extended):此时会出现让你挑选 Primary / Extended 的项目,且你可以指定 1~4 号间的号码;

• 1-4 号尚有剩余,且系统有扩展分区(extended):此时会出现让你挑选 Primary / Logical 的项目;若选择 p 则你还需要指定 1~4 号间的号码;若选择 l(L的小写) 则不需要配置号码,因为系统会自动指定逻辑分割槽的文件名号码;

• 1-4 没有剩余,且系统有 extended:此时不会让你挑选分割槽类型 ,直接会进入 logical 的分割槽形式。

进入分区时可使用m对分区命令进行浏览

基本常用的有 n—创建分区 d—删除分区 q—不保存退出 t—改变分区类型 w—保存退出

格式化

mkfs [-t 文件系统格式] 装置文件名 

-t  :可以接文件系统格式,例如 ext3, ext2, vfat 等(系统有支持才会生效)

例: mkfs –t ext4 /dev/hdc6

挂载

首先关于挂载有两个文件一个是/etc/fatab将设备信息加入此文件后开机设备会自动挂载,还有一个/etc/mtab是实时显示挂载信息的文件。

挂载命令 mount [-t 文件系统] [-L Label名] [-o 额外选项] \[-n]  装置文件名 挂载点 

-a:依照配置文件 /etc/fstab 的数据将所有未挂载的磁盘都挂载上来

-l:单纯的输入 mount 会显示目前挂载的信息。加上 -l 可增列 Label 名称!

-t:与 mkfs 的选项非常类似的,可以加上文件系统种类来指定欲挂载 的类型。

-n:在默认的情况下,系统会将实际挂载的情况实时写入 /etc/mtab 中 ,以利其他程序的运行。但在某些情况下(例如单人维护模式)为了避免问题,会刻意不写入。此时就得要使用这个 -n 的选项了。

-o:后面可以接一些挂载时额外加上的参数!比方说账号、密码、读写 权限等:

解挂

umount [-fn] 装置文件名或挂载点 

-f :强制卸除!可用在类似网络文件系统 (NFS) 无法读取到的情况下;

-n :不升级(不修改) /etc/mtab 情况下卸除。