磁盘阵列

2018-06-01 10:18:19

磁盘阵列全名是“ Redundant Arrays of Inexpensive Disks, RAID ”,英翻中的意思是:容错式廉价磁盘阵列。 RAID可以通过一个技术(软件或硬件) ,将多个较小的磁盘整合成为一个较大的磁盘设备; 而这个较大的磁盘,他还具有数据保护的功能。 整个 RAID 由于选择的等级 (level) 不同,而使得整合后的磁盘具有不同的功能,基本常见 的 level 有这几种

raid-0(等量模式)-性能最好

这种模式如果使用相同型号与容量的磁盘来组成时,效果较佳。这种模式的 RAID 会将磁盘 先切出等量的区块(名为chunk,一般可设置 4K~1M 之间) , 然后当一个文件要写入 RAID 时,该文件会依据 chunk 的大小切割好,之后再依序放到各个磁盘里面去。由于每个磁盘会交错的存放数据, 因此当你的数据要写入 RAID 时,数据会被等量的放置在各个磁盘上面。 举例来说,你有两颗磁盘组成 RAID-0 , 当你有 100MB 的数据要写入时,每个磁盘会各被分 配到 50MB 的储存量。RAID-0 的示意图如下所示

在组成 RAID-0 时,每颗磁盘 (Disk A 与 Disk B) 都会先被区隔成为小区块 (chunk) 。 当有数据要写入 RAID 时,数据会先被切割成符合小区块的大小,然后再依序一 个一个的放置到不同的磁盘去。 由于数据已经先被切割并且依序放置到不同的磁盘上面, 越多颗磁盘组成的 RAID-0 性能会越好,因为每颗负责的数据量就更低了! 此外,磁盘总容量也变大了! 因为每颗磁盘的容量最终会加总成为 RAID-0 的总容量。

只是使用此等级你必须要自行负担数据损毁的风险,由上图我们知道文件是被切割成为适合每颗磁盘分区区块的大小, 然后再依序放置到各个磁盘中。如果某一颗磁盘损毁 了,那么文件数据将缺一块,因此 RAID-0 只要有任何一颗磁盘损毁,在 RAID 上面的所有数据都会遗失而无法读取。

另外,如果使用不同容量的磁盘来组成 RAID-0 时,由于数据是一直等量的依序放置到不同磁 盘中,当小容量磁盘的区块被用完了, 那么所有的数据都将被写入到最大的那颗磁盘去。

RAID-1(映射模式, mirror)-完整备份

这种模式也是需要相同的磁盘容量的,最好是一模一样的磁盘!如果是不同容量的磁盘组成 RAID-1 时,那么总容量将以最小的那一颗磁盘为主!这种模式主要是“让同一份数据,完整的保存在两颗磁盘上头”。举例来说,如果我有一个 100MB 的文件,且我仅有两颗磁盘组成 RAID-1 时, 那么这两颗磁盘将会同步写入100MB 到他们的储存空间去。 因此,整体 RAID 的容量几乎少了 50%。由于两颗硬盘内容一模一样,好像镜子映照出来一样, 所以我们也称他为 mirror模式。

如上图所示,一份数据传送到 RAID-1 之后会被分为两份,并分别写入到各个磁盘里头去,因此如果要写入 100MB 时,数据传送到 I/O 总线后会被复制多份到各个磁盘, 结果就是数据量感觉变大了!因此在大量写入 RAID-1 的 情况下,写入的性能可能会变的非常差 (因为我们只有一个南桥啊!) 。 好在如果你使用的是硬件 RAID (磁盘阵列卡) 时,磁盘阵列卡会主动的复制一份而不使用系统的 I/O 总线, 性能方面则还可以。 如果使用软件磁盘阵列,可能性能就不好了。

由于两颗磁盘内的数据一模一样,所以任何一颗硬盘损毁时,你的数据还是可以完整的保留下来的! 所以我们可以说, RAID-1 最大的优点大概就在于数据的备份!不过由于磁盘容量有一半用在备份, 因此总容量会是全部磁盘容量的一半而已。虽然 RAID-1 的写入性能不佳,不过读取的性能则还可以啦!这是因为数据有两份在不同的磁盘上面,如果多个 processes 在读取同一笔数据时, RAID会自行取得最佳的读取平衡。

RAID 1+0,RAID 0+1

RAID-0 的性能佳但是数据不安全,RAID-1 的数据安全但是性能不佳。所谓的 RAID 1+0 就是:
1.先让两颗磁盘组成 RAID 1,并且这样的设置共有两组。
2.将这两组 RAID 1 再组成 一组 RAID 0。这就是 RAID 1+0 啰!反过来说,RAID 0+1 就是先组成 RAID-0 再组成 RAID- 1 的意思。

如上图所示,Disk A + Disk B 组成第一组 RAID 1,Disk C + Disk D 组成第二组 RAID 1, 然 后这两组再整合成为一组 RAID 0。 如此一来不论哪一组 RAID 1 的磁盘损毁,由于是 RAID 1 的图像数据,因此就不会有任何问题发生了!这也是目前储存设备厂商最推荐的方法。

RAID 5:性能与数据备份的均衡考虑

RAID-5 至少需要三颗以上的磁盘才能够组成这种类型的磁盘阵列。这种磁盘阵列的数据写入有点类似 RAID-0 , 不过每个循环的写入过程中 (striping) ,在每颗磁盘还加入一个同位检查数据 (Parity) ,这个数据会记录其他磁盘的备份数据, 用于当有磁盘损毁时的救援。 RAID-5 读写的情况有点像下面这样

如上图所示,每个循环写入时,都会有部分的同位检查码 (parity) 被记录起来,并且记录 的同位检查码每次都记录在不同的磁盘, 因此,任何一个磁盘损毁时都能够借由其他磁盘的检查码来重建原本磁盘内的数据!不过需要注意的是, 由于有同位检查码,因此 RAID5 的总容量会是整体磁盘数量减一颗。而且当损毁的磁盘数量大于等于两颗时,这整组 RAID 5 的数据就损毁了。 因为 RAID 5 默认仅能支持一颗磁盘的损毁情况。

在读写性能的比较上,读取的性能还不赖!与 RAID-0 有的比!不过写的性能就不见得能够增加很多! 这是因为要写入 RAID 5 的数据还得要经过计算同位检查码 (parity) 的关系。由于加上这个计算的动作, 所以写入的性能与系统的硬件关系较大!尤其当使用软件磁盘阵列时,同位检查码是通过 CPU 去计算而非专职的磁盘阵列卡, 因此性能方面还需要评估。不过好在现在cpu越来越快。

由于 RAID 5 仅能支持一颗磁盘的损毁,因此近来还有发展出另外一种等级,就是 RAID 6 ,这个 RAID 6 则使用两颗磁盘的容量作为 parity 的储存,因此整体的磁盘容量就会少两颗,但是允许出错的磁盘数量就可以达到两颗了! 也就是在 RAID 6的情况下,同时两颗磁盘损毁时,数据还是可以救回来

Spare Disk:预备磁盘的功能

当磁盘阵列的磁盘损毁时,就得要将坏掉的磁盘拔除,然后换一颗新的磁盘。换成新磁盘并且顺利启动磁盘阵列后, 磁盘阵列就会开始主动的重建 (rebuild) 原本坏掉的那颗磁盘数据到新的磁盘上!然后你磁盘阵列上面的数据就复原了! 这就是磁盘阵列的优点。不过,我们还是得要动手拔插硬盘,除非你的系统有支持热拔插,否则通常得要关机才能这么做。

为了让系统可以实时的在坏掉硬盘时主动的重建,因此就需要预备磁盘 (spare disk) 的辅助。 所谓的 spare disk 就是一颗或多颗没有包含在原本磁盘阵列等级中的磁盘,这颗磁盘平时并不会被磁盘阵列所使用, 当磁盘阵列有任何磁盘损毁时,则这颗 spare disk 会被主动的拉进磁盘阵列中,并将坏掉的那颗硬盘移出磁盘阵列! 然后立即重建数据系统。若你的磁盘阵列有支持热拔插那就更完美了! 直接将坏掉的那颗磁盘拔除换一颗新的,再将那颗新的设置成为 spare disk ,就完成了!

磁盘阵列的优点
1. 数据安全与可靠性。
2. 读写性能:例如 RAID 0 可以加强读写性能,让你的系统 I/O 部分得以改善。
3. 容量:可以让多颗磁盘组合起来,故单一文件系统可以有相当大的容量。

©著作权归作者所有
收藏
推荐阅读
  • xfs文件系统

    CentOS 7 开始,默认的文件系统已经由原本的 EXT4 变成了 XFS 文件系统了! EXT最不好的就是格式化超慢! Ext采用的是预先规划出所有的 inode/block/meta data ...

  • err
    ext2文件系统

    我们知道,当磁盘被分区后还是不能使用,要经过格式化成相应格式的文件系统才能被操作系统正式使用。较新的操作系统的文件数据除了文件实际内容外, 通常含有非常多的属性,例如 L...

  • err
    BIOS与UEFI开机检测程序

    BIOSBIOS则是一个写入到主板上的一个固件(固件就是写入到硬件上的一个软件程序) 。这个BIOS就是在开机的时候,计算机系统会主动执行的第一个程序了。接下来BIOS会...

  • err
    磁盘分区格式mbr、gpt

    MSDOS(MBR)早期的Linux系统为了兼容于Windows 的磁盘,因此使用的是支持 Windows 的 MBR(Master Boot Record, 主要开机纪...

  • err
    磁盘知识和读写原理

    相关名词翻译英文中文disk磁盘head磁头sector扇区track磁道cylinder柱面units单元块(一个柱面的大小)block数据块(系统最小读取单元)一般来...

  • nginx模块 ngx_http_headers_module

    ngx_http_headers_module 模块是用来增加 Expires 和 Cache-control,或者是任意的响应头。Syntax: add_header name value [alw...

  • nginx模块 ngx_http_gunzip_module、ngx_http_gzip_module、ngx_http_gzip_static_module

    ngx_http_gunzip_module 模块将文件解压缩后并在响应头加上 "Content-Encoding: gzip" 返回给客户端。为了解决客户端不支持gzip压缩。编译的时候带上 --w...

  • nginx模块 ngx_http_flv_module、ngx_http_mp4_module

    ngx_http_flv_module模块提供了对 flv 视频的伪流支持。编译的时候带上 --with-http_flv_module。它会根据指定的 start 参数来指定跳过多少字节,并在返回数...

  • nginx模块 ngx_http_fastcgi_module

    ngx_http_fastcgi_module 模块使得nginx可以与 fastcgi 服务器通信。比如目前要使得 nginx 支持 php 就得使用 fastcgi技术,在服务器上装上 nginx...

  • nginx模块 ngx_http_autoindex_module

    ngx_http_autoindex_module 模块可以将uri以 / 结尾时,列出里面的文件和目录。Syntax: autoindex on | off; Default: autoindex ...

简介
天降大任于斯人也,必先苦其心志。