2.5 Logical Components of the Host
==========================
宿主的逻辑组件包括用于用户数据通讯的软件应用程序和协议, 以及物理组件. 下面是宿主的逻辑组件:
■■操作系统
■■设备驱动
■■卷管理器-Volume manager
■■文件系统-File system
■■应用程序-Application
Logical Volume Manager(LVM)的进化允许了文件系统容量的动态扩展, 还有高效的存储管理. LVM是运行在宿主计算机上的软件, 他管理着逻辑的和物理的存储. LVM是结语文件系统和物理磁盘间的可选的中间层. 它可以聚集许多小硬盘来形成一个大的虚拟硬盘, 或者将一个大容量的硬盘分区为虚拟的, 小容量的磁盘, 这些小容量的磁盘被呈现给应用程序. LVM提供了优化的存储访问并简化了存储资源的管理. 他隐藏了物理磁盘的细节, 还隐藏了磁盘数据位置的信息; 他使得管理员不修改硬件就可以修改存储分配, 甚至在应用程序还在运行中的时候也可以修改存储分配.
基本的LVM组件包括物理卷(physical volume), volume group, 和logic volumes. 在LVM的专门名词中, 每个连接着宿主的物理磁盘都是一个physical volume(PV). LVM转换物理卷的提供的物理存储为一个存储的逻辑视图, 之后它就可以被操作系统和应用程序使用了. volume group是通过聚集一个或多个physical volume而构建的. 每一个physical volume都被分配给了一个独一无二的physical volume identifier(PVID). Physical volume可以在volume group中动态地添加或移除. 它们不能在不同的volume group间共享. 整个physical volume就是volume group的一部分. 在volume group被创建出来的时候, 每个physical volume都被分区为等大小的叫做physical extents的数据块.
Logical volume是在一个给定的volume group上创建出来的. logical volume可以被看作是一个虚拟的硬盘分区, 整个volume group本身可以被看作是一块硬盘. 一个volume group可以有许多个logical volume. logical volume的大小是在多个physical extent的基础上的. logical volume在操作系统看起来是一个物理设备. 一个logical volume可以由多个不连续的物理分区组成, 并且可以跨多个physical volume. 可以在一个logical volume上创建出一个文件系统, logical volume可以为了应用程序更优的性能而配置, 也可以被做为镜像来增强数据的可用性(availability).
2.5.4 File System
-----------------------------
一个文件就是相关记录或数据的集合, 该集合作为一个单位而存储, 并且拥有一个名字. 一个文件系统就是文件的层级结构. 文件系统使得访问存储在磁盘中, 磁盘分区中, 或逻辑分卷中的文件比较容易访问. 文件系统需要基于宿主的逻辑结构和控制文件访问的软件. 它提供给用户创建, 修改, 删除, 和访问文件的功能. 访问磁盘上的文件是被文件所有者给出的权限来控制的, 该权限也由文件系统保存管理.
文件系统通过使用文件夹来按照结构化的分层方式组织数据, 文件夹也就是指向多个文件的指针的容器. 所有的文件系统都维护有一个文件夹, 子文件夹, 和文件的指针地图. 有些常见的文件系统如下:
■■ FAT 32 (File Allocation Table) for Microsoft Windows
■■ NT File System (NTFS) for Microsoft Windows
■■ UNIX File System (UFS) for UNIX
■■ Extended File System (EXT2/3) for Linux
除了文件和文件夹, 文件系统还包括很多其他相关的记录, 它们被统称为metadata(元数据). 比如说, 在UNIX环境中, metadata由superblock, inodes, 空闲的和正在使用的data block的列表. 文件系统的元数据必须有一致性, 这样文件系统才能被认为是健康的. superblock包括文件系统的重要信息, 比如说文件系统类型, 创建和修改日期, 大小, 布局, 可用资源的数目(比如说空闲的block, inode等), 还有文件系统容量的标志位. Inode与每一个文件和文件夹相关, 并包含文件长度, 所有者, 访问权限, 最后的访问和修改时间, 链接的数目, 寻找数据存储在物理盘的什么位置的地址信息.
文件系统的block是物理磁盘空间分配数据的最小容器. 每个文件系统的block都是物理磁盘上的一片连续区域. 文件系统的block大小在它创建的时候就是固定的了. 文件系统大小取决于block的大小和存储的block的总数. 一个文件可以跨多个block, 因为多数文件都比文件系统预定义的block的尺寸要大. 当新的block被添加或删除的时候, 文件系统的blocks是可以不连续的. 随着时间的流逝, 当文件变得越来越大, 文件系统就会变的越来越碎片化. 图2-12展示了通过LVM映射用户文件到磁盘子系统的过程.
1. 文件是由用户和应用程序创建和管理的.
2. 这些文件存储在文件系统中.
3. 文件系统之后被映射为数据单位, 即文集系统的block.
4. 文件系统的block被映射到逻辑扩展上.
5. 之后, 这些依次被映射到磁盘物理扩展上, 要么是通过操作系统, 要么是通过LVM.
6. 这些物理扩展被映射到磁盘存储系统上.
如果没有LVM, 那么就没有逻辑扩展. 没有LVM, 文件系统的block是直接映射到磁盘扇区上的. 文件系统的树结构起始与根目录. 根目录有一些子目录. 文件系统使用前需要被加载的.
文件系统可以是日志文件系统, 可以是一个非日志文件系统. 非日志文件系统有可能会丢失文件的潜在风险, 因为他们会使用许多分开的写操作来更新他们的数据和元数据. 如果系统在写操作时崩溃, 数据可能会丢失或损坏.
当系统重启的时候, 文件系统会通过检验和修复元数据结构来试图更新它们. 这个操作在大文件系统上会花费很长时间, 如果没有如走的信息来重建需要的结构或者是以前的结构, 文件就会被错误放置或丢失, 结果就是文件系统的崩溃.
日志文件系统使用叫做log或journal的分开区域. 这日志会包括所有的将要写入的数据(physical journal), 或者可以仅包括要更新的metadata(logical journal). 在修改写入到文件系统之前, 他们会先写入到这个分开的区域. 一旦日志被更新, 文件系统中的操作就可以被执行了. 如果系统在操作期间崩溃了, 日志中的信息足够"重放"操作, 并完成这个操作. 日志记录的结果就是文件系统比较快速, 因为他仅仅关注大的文件系统中活跃的,最近刚被写入的部分. 另外, 由于将要执行的操作被存储了, 文件丢失的风险也降低了.
日志文件系统的缺点是他们比其他的文件系统要慢一点. 这缓慢是每次文件系统变化的时候不得不执行额外的记录日志的操作引起的. 然而, 系统自检的时间缩短了, 系统完整性的的提高弥补了这个缺陷. 今天几乎所有的文件系统的实现都是日志类型的.
专门的文件系统可以被安装来在网络上分享和管理大量的文件. 这些文件服务器支持多种文件系统, 他们使用针对操作系统的文件分享协议 - 比如说NFS, 和CIFS. 这些协议在第七章详细介绍.
2.5.5 Application
------------------------
应用程序是为计算提供逻辑的计算机程序. 他提供了用户和一台或多台宿主计算机之间的接口. 传统的使用数据库的商业应用程序有三层结构- 应用程序用户接口形成了前段层, 计算机逻辑(应用程序本身)形成了中间层, 底下的数据库形成了后台层. 应用程序发送请求给底层的操作系统来在存储系统上执行读写操作. 应用程序可以在数据库之上, 一次使用操作系统服务来对存储系统执行读写操作. 这些读写操作使得前段和后台的层次间的事务(transaction)成为可能.
数据访问可以被分类为block-level的或file-level的两类, 取决于应用程序是使用logic block address还是使用文件名以及文件信息标识来从磁盘进行读写.
Block-Level Access
Block-level的访问是磁盘访问的基本机制. 在这种访问中, 数据的存储和取回都给予磁盘的几何配置. block的大小定义了应用程序存或取的数据的基本单位. 当IO操作执行的时候, 诸如SQL Server或Oracle的数据库定义了数据访问的block size, 还使用术语logical block address磁盘上的数据的位置.
File-Level Access
File-level访问是block-level访问的一种抽象. file-level访问数据是通过制定文件名和文件的路径来做到的. 它使用了底层的block-level的访问来存储和对应用程序和DBMS隐藏了logical block addressing(LBA).