上一篇讲了DAS/NAS/SAN三种存储方式的区别,在最后的总结中给出了下面的图例:
大家可以看到,对SAN和NAS,两种存储一个是带文件系统(File System),一种是不带文件系统,因此我们需要对文件系统做一下说明,SAN是提供LUN方式给客户端使用,客户端需要MKFS,再MOUNT成文件系统。NAS是直接以文件系统方式提供给客户端使用,客户端不需要MKFS,如FTP、目录共享。
关于LUN方式,LUN是指硬件层分出的逻辑盘(LUN最早出自SCSI,后来引申到所有硬件层划分的逻辑盘)。当网络中的主机连接到存储设备时,就可以识别到存储设备上逻辑设备LUN,此时LUN相对于主机来讲就是一个“物理硬盘”,与C盘D盘所在IDC或SCSI硬盘的性质是相同的。在该“物理硬盘”上创建一个或多个分区,再创建文件系统,才可以得到一个VOLUM。此时VOLUME相对于主机是一个逻辑设备。
从容量大小方面比较VOLUME,分区、LUN、RAID的关系如下:
VOLUME = 分区 ≤ 主机设备管理器中的磁盘 = LUN ≤ RAID ≤ 存储设备中硬盘的总容量。
关于MKFS,该命令用来在特定的分区创建linux文件系统,常见的文件系统有ext2,ext3,vfat等,执行mkfs命令其实是在调用:mkfs.ext3 | mkfs.reiserfs |mkfs.ext2。
也就是SAN提供了“物理硬盘”,但没有分区,也没有挂在到客户端,NAS是直接以文件系统方式提供给客户端使用,客户端不需要MKFS,如FTP、目录共享,也就是已经有了文件系统了,能够被客户端直接识别的共享目录或ftp了。
换句话说:SAN提供了一块块的“物理硬盘”你爱咋用咋用,具体是什么文件系统取决于你的客户端,然后你再去处理和挂在。NAS则是已经有了文件系统,直接用共享目录的方式挂上去就行了。
另外,再说一下文件系统的类型,上图中的windows系统中的NTFS文件系统,还有以前的FAT32文件系统,这种存储挂到系统上就能识别了,但是对于ext2、ext3等都是linux下的文件系统,在windows下挂上去也识别不了,要么转换文件系统(重新格式化),要么借助软件转换,例如windows下挂载ext3存储,可以通过Ext2Read、Ext2Fsd等软件。
什么是文件系统?
文件系统实际上就是文件的存储方式,它存放在磁盘上的,磁盘被分成多个分区之后,每个分区都可以有一个独立的文件系统。而为硬盘安装文件系统的操作就被称为"格式化",格式化就是将一块盘使用命令组织成一定格式的文件系统的过程,在Windows下,我们常格式化的格式是NTFS,而在Linux下面,常用的是ext2、ext3或ext4。
文件系统的组成
下面是摘自网络的个人认为比较通用的解释文件系统原理的文章。
要管理,就得先划分,那按照什么粒度划分呢?因为磁盘上的数据要和内存交互,而内存通常是以4KB为单位的,所以从逻辑上,把磁盘按照4KB划分比较方便(称为一个block)。现在假设由一个文件系统管理64个blocks的一个磁盘区域:
empty disk
那在这些blocks中应该存储些什么?文件系统的基础要素自然是文件,而文件作为一个数据容器的逻辑概念,本质上是一些字节构成的集合,这些字节就是文件的user data(对应下图的"D")。
user data
除了文件本身包含的数据,还有文件的访问权限、大小和创建时间等控制信息,这些信息被称为meta data。meta data可理解为是关于文件user data的data,这些meta data存储的数据结构就是inode(对应下图的"I",有些文件系统称之为dnode或fnode)。
inode是"index node"的简称,在早期的Unix系统中,这些nodes是通过数组组织起来的,因此需要依靠index来索引数组中的node。假设一个inode占据256字节,那么一个4KB的block可以存放16个inodes,使用5个blocks可以存放80个inodes,也就是最多支持80个文件。
meta data + user data
同内存分配一样,当有了新的数据产生时,我们需要选择一个空闲的block来存放数据,此外还需要一个空闲的inode。所以,需要追踪这些inodes和data blocks的分配和释放情况,以判断哪些是已用的,哪些是空闲的。
最简单的办法就是使用bitmap,包括记录inode使用情况的bitmap(对应下图的"i"),和记录data block使用情况的bitmap(对应下图的"d")。空闲就标记为0,正在使用就标记为1。
bitmap + meta data + user date
因为block是最小划分单位,所以这里使用了两个blocks来分别存储inode bitmap和data block bitmap,每个block可以容纳的bits数量是4096*8。而这里我们只有80个inodes和56个data blocks,所以是绰绰有余的。
还剩下开头的一个block,这个block是留给superblock的(对应下图的"S")。
superblock + bitmap + meta data + user date
这个superblock包含了一个文件系统所有的控制信息,比如文件系统中有多少个inodes和data blocks,inode的信息起始于哪个block(这里是第3个),可能还有一个区别不同文件系统类型的magic number。因此,superblock可理解为是文件系统的meta data。