磁盘阵列即冗错廉价磁盘阵列;raid可以通过一些技术(软件或硬件)将多个较小的磁盘整合
成为一个较大的磁盘设备,这个较大磁盘的功能不止是存储而已,还具有数据保护功能。
整个RAID由于选择的等级(level)不同,而使得整合后的磁盘具有不同的功能,基本常见的有以下几种
级别没有高下之分,仅仅代表磁盘表示方式不同
1、Raid0 可以将多块磁盘或者磁盘分区组织起来当作一个硬盘使用;数据这样往上面写入,比如由两块硬盘组成一个Raid0
当一份数据写入到磁盘上的时候,是先把数据划分成多个块,按照某种固定大小(chunk 默认为64k)这里也用默认,如果来一个128k的数据
就会把数据划分为两片,各64k,把第一片数据写到第一块磁盘,第二片写到第二块磁盘;如果四块盘做raid0,每个为1G,则利用空间为4G
raid0的性能好,但是如果一块磁盘坏了,就都坏了,没有冗余能力,读写性能都好;随着磁盘块的增多,性能也会提高,坏掉的机率也高了。
2、Raid1 这种模式也需要相同的磁盘容量,最好是一模一样的磁盘,如果是不同容量的磁盘组成Raid1时,那么总容量将以最小的那块磁盘为主
raid1相当于镜像,两块磁盘存放的数据一样,它的读写速度较好,写入能力降低了,磁盘空间利用低,如果一块磁盘为1G,第二块1G 则有效空间为1G
3、Raid4 至少3块硬盘,一块用来做循环冗余校验,两块或多块用于存放数据,允许一块盘坏掉,因为一块盘坏掉,还有另一块盘和校验盘,校验盘
会根据没坏掉的盘计算出校验码从而找到数据,将坏掉的盘换掉,将找到的数据存到新硬盘上,空间利用率为n-1/n
4、Raid5 至少三块磁盘校验值是轮流存放的,没有固定的盘存放校验码,也是只允许坏掉一个盘磁盘,利用率为n-1/n
如果有8个1G的盘则空间利用为 8-1/8*8=7G
5、Raid10 至少四块磁盘,拿两块做raid1,再拿两块还做raid1.两个riad1组合成一个raid0
6、Raid6允许坏两块盘冗余好,raid6将校验值存放两次,至少要用四块盘,空间利用是n-2/n
与设置raid相关的命令 adadm
adadm 多磁盘管理工具
adadm 常见的模式化命令
1、Assemble 装配模式
2、Create 创建模式建立新的软raid设别
3、Follow or Monitor 监控模式
4、Grow 扩展或增长模式
5、Manage 管理模式,比如有坏掉的盘,就换块新的
使用的命令是mdadm
mdadm -A 装配模式 指定要创建的模式
-C 创建模式
-F 监控模式
-G 增长模式
#cat /proc/mdstat 查看已启用的软设备
mdadm -v 显示详细信息
-s 扫描配置文件
-S 停止某个盘
-A 重新装配
mdadm --add|--fail|--remove 跟这些参数时自动识别为在管理模式下
mdadm -n 指定创建raid设备时所用的磁盘数
-x 指定空闲盘数
-l 指定哪个级别的raid
-c 指定chunk大小,默认是4k
举一个例子,这里以创建一个空间大小为10G的raid4,chunk大小为32k为例
这里的硬盘以sda为例。
分析:10G的大小,上面我们提到过raid4至少需要三个盘,一个存放校验码,另外两个存放数据,这样可以允许坏掉一个盘
9G大小两个盘分,每个3G,因为校验码的空间至少的等于存放数据的大小,所以校验盘也是5G,再加一块空闲盘所以需要四块盘,
怎么算呢?四块盘如果每块xG 则n/n-1*4x=9 n是磁盘数
当然你也可以不用空闲盘,看自己喜好
1、创建4个分区,比如说是sda5、sda6、sda7、sda8
创建分区时要将system id 改为Linux raid sutodetect
# fdisk /dev/sda 用t 改system id 指定那块盘回车在指定type为fd
# partprobe /dev/sda 重新识别一下/dev/sda
# mdamd -C /dev/md1 -a yes -c 32 -l 4 -n 3 -x 1 /dev/sda{5,6,7,8}
# mke2fs -j /dev/md1 格式化为ext3
这样一个raid4就创建好了
2、创建一个2G的 raid0 用两块各1G的就行假如为sda9 sda10,别忘改system id
# partprobe /dev/sda
# mdadm -C /dev/md2 -a yes -l 0 -n 2 /dev/sda9 /dev/sda10
-a yes 如果文件不存在自动创建
# cat /proc/mdstat 显示软raid设别
# mke2fs -j /dev/md2 格式化
# mount /dev/md1 /mnt 挂载设备
3、创建2G raid1 还要一个空闲盘 再分三个分区 每个2G
# partprobe /dev/sda
# mdadm -C /dev/md3 -a yes -l 1 -n 2 -x 1 /dev/sda{11,12,13}
# mke2fs -j /dev/md3
# mount /dev/md3 /mnt
# cat /proc/mdstat
# mdadm --ditail /dev/md3 = # mdadm -D /dev/md3 在监控模式下查看详细信息
文件系统挂载时acl的功能是不被支持的
一、如何让文件系统挂载后支持acl
1、使用挂载选项acl
1)、暂时生效 # mount -o acl /dev/md1 /mydata
2)、若想开机自动挂在,需要编辑配置文件
# vim /etc/fstab 修改此文件,在下面添加一行,如将/dev/sda3挂载到/mydata
将/dev/sda3 /mydata ext3 defaults 0 0
改为
/dev/sda3 /mydata ext3 defaults,acl 0 0
2、用命令 # tune2fs -o acl /dev/md1
1、获取acl的命令
# getfacl FILENAME
2、设置acl
# setfacl -m u:username:mode FILE
# setfacl -m g:groupname:mode FILE
3、取消acl设置
# setfacl -x u:username:mode FILE
# setfacl -x g:groupname:mode FILE
如给redhat用户设定acl, 让redhat对文件root.file有读写权限则是
# setfacl -m u:username:rw- root.file
可以用命令# getfacl root.file 看一下redhat是否有这些权限
然后su到redhat,验证一下redhat对这个文件是否有读写权限
# su - redhat
# vim root.file 在下面添加一行后保存退出若能保存退出则redhat用户有写权限
# getfacl root.file
# exit
若在redhat.dir目录下每创建一个文件centos都有读写权限怎么办 默认d:
# su - redhat
# mkdir /tmp/redhat.dir
# setfacl -m d:u:centos:rw- /tmp/redhat.dir 这只对这个目录下新创建的文件有效,对这条命令执行之前就存在的文件无效
#mkdir test
# setfacl -m u:centos:rw- -R test/ 目录test下的所有文件都有读写权限-R 递归
tar 归档命令默认情况下不会保存文件的acl
用 # tar --acls 就可以保存acl功能了