磁盘阵列分为硬件与软件。所谓的硬件磁盘阵列是通过磁盘阵列卡来达成阵列的目的。磁盘阵列卡上面有一块专门的芯片在处理 RAID 的任务,因此在性能方面会比较好。在很多任务 (例如 RAID 5 的同位检查码计算) 磁盘阵列并不会重复消耗原本系统的 I/O 总线,理论上性能会较佳。此外目前一般的中高阶磁盘阵列卡都支持热拔插,亦即在不关机的情况下抽换损坏的磁盘,对于系统的复原与数据的可靠性方面非常的好用。
软件磁盘阵列主要是通过软件来仿真阵列的任务, 因此会损耗较多的系统资源,比如说 CPU 的运算与I/O 总线的资源等。
CentOS 提供的软件磁盘阵列为 mdadm 这套软件,这套软件会以 partition 或 disk 为磁盘的单位,也就是说,你不需要两颗以上的磁盘,只要有两个以上的分区 (partition) 就能够设计你的磁盘阵列了。此外, mdadm 支持刚刚我们前面提到的RAID0/RAID1/RAID5/spare disk 等! 而且提供的管理机制还可以达到类似热拔插的功能,可以线上 (文件系统正常使用) 进行分区的抽换。
另外,硬件磁盘阵列在 Linux 下面看起来就是一颗实际的大磁盘,因此硬件磁盘阵列的设备文件名为 /dev/sd[a-p] ,因为使用到 SCSI 的模块之故。至于软件磁盘阵列则是系统仿真的,因此使用的设备文件名是系统的设备文件, 文件名为 /dev/md0,/dev/md1...,两者的设备文件名并不相同。
上面的语法中,最后面会接许多的设备文件名,这些设备文件名可以是整颗磁盘,例如/dev/sdb , 也可以是分区,例如 /dev/sdb1 之类。不过,这些设备文件名的总数必须要等于 --raid-devices 与 --spare-devices 的个数总和才行!
LVM 的全名是 Logical Volume Manager,中文可以翻译作逻辑卷轴管理员。LVM 的作法是将几个实体的partitions (或 disk) 通过软件组合成为一块看起来是独立的大磁盘 (VG) ,然后将这块大磁盘再经过分区成为可使用分区 (LV), 最终就能够挂载使用了。
Physical Volume, PV, 实体卷轴
我们实际的 partition (或 Disk) 需要调整系统识别码 (system ID) 成为 8e (LVM 的识别码),然后再经过 pvcreate 的指令将他转成 LVM 最底层的实体卷轴 (PV) ,之后才能够将这些 PV 加以利用。 调整 system ID 的方是就是通过 gdisk。
Volume Group, VG, 卷轴群组
所谓的 LVM 大磁盘就是将许多 PV 整合成这个 VG 的东西。VG 就是 LVM 组合起来的大磁盘。在默认的情况下, 使用 32位的 Linux 系统时,基本上 LV最大仅能支持到 65534 个 PE 而已,若使用默认的 PE 为 4MB 的情况下, 最大容量则仅能达到约 256GB 而已。
Physical Extent, PE, 实体范围区块
LVM 默认使用 4MB 的 PE 区块,而 LVM 的 LV 在 32 位系统上最多仅能含有 65534 个 PE(lvm1 的格式),因此默认的 LVM 的 LV 会有 4M*65534/(1024M/G)=256G。PE是整个LVM最小的储存区块,实我们的文件数据都是借由写入 PE来处理的。
Logical Volume, LV, 逻辑卷轴
LV的大小就与在此 LV 内的 PE 总数有关。 为了方便使用者利用 LVM 来管理其系统,因此 LV的设备文件名通常指定为“ /dev/vgname/lvname ”的样式。
实作流程
通过 PV, VG, LV 的规划之后,再利用 mkfs 就可以将你的 LV 格式化成为可以利用的文件系统了!而且这个文件系统的容量在未来还能够进行扩充或减少, 而且里面的数据还不会被影响。 整个流程由基础到最终的结果可以这样看:
图14.3.2、LVM 各元件的实现流程图示
如此一来,我们就可以利用 LV 这个玩意儿来进行系统的挂载了。依据写入机制的不同,有两种方式:
线性模式 (linear):假如我将 /dev/vda1, /dev/vdb1 这两个 partition 加入到 VG 当中,并且整个 VG 只有一个 LV 时,那么所谓的线性模式就是:当 /dev/vda1 的容量用完之后,/dev/vdb1 的硬盘才会被使用到, 这也是我们所建议的模式。
交错模式 (triped):那什么是交错模式?很简单啊,就是我将一笔数据拆成两部分,分别写入 /dev/vda1 与 /dev/vdb1 的意思,感觉上有点像 RAID 0 。如此一来,一份数据用两颗硬盘来写入,理论上,读写的性能会比较好。
基本上,LVM 最主要的用处是在实现一个可以弹性调整容量的文件系统上, 而不是在创建一个性能为主的磁盘上,所以,我们应该利用的是 LVM 可以弹性管理整个 partition 大小的用途上,而不是着眼在性能上的。因此, LVM 默认的读写模式是线性模式。