Chinaunix首页 | 论坛 | 博客
  • 博客访问: 630981
  • 博文数量: 244
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 130
  • 用 户 组: 普通用户
  • 注册时间: 2016-06-27 09:53
个人简介

记录学习,记录成长

文章分类

全部博文(244)

我的朋友

分类: LINUX

2015-07-17 15:30:31

设备准备:
1.直接使用硬盘硬件设备,不需要分区
2.如果要使用某个硬盘的分区做RAID,需要fdisk特定的分区,并给它指定分区类型:fd
此次以/dev/sdb硬盘的分区做RAID
一.以RAID0的方式创建大小为2G的磁盘阵列,有两个盘,大小都是1G (最好是关机另外添加一块硬盘以免有某些错误发生)
1.先创建分区并将分区大小调试好


   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         888     7132828+  83  Linux
/dev/sdb2             889        1100     1702890   83  Linux
/dev/sdb3            1101        1500     3213000   83  Linux
/dev/sdb4            1501        2088     4723110    5  Extended
/dev/sdb5            1501        1632     1060258+  83  Linux
/dev/sdb6            1633        1764     1060258+  83  Linux


2.将5和6的分区类型调整为fd
Command (m for help): t
Partition number (1-6): 5
Hex code (type L to list codes): fd
Changed system type of partition 5 to fd (Linux raid autodetect)
Command (m for help): t
Partition number (1-6): 6
Hex code (type L to list codes): fd
Changed system type of partition 6 to fd (Linux raid autodetect)


3.保存退出并用partprobe命令让内核重读分区,最后可以cat  /proc/partitions查看一下是否生效
[root@localhost ~]# cat /proc/partitions 
major minor  #blocks  name
   8       16   16777216 sdb
   8       17    7132828 sdb1
   8       18    1702890 sdb2
   8       19    3213000 sdb3
   8       20          1 sdb4
   8       21    1060258 sdb5
   8       22    1060258 sdb6


4.用 mdadm命令将/dev/sdb5和/dev/sdb6组成磁盘阵列,其中-C表示mdadm的创建模式,-a  yes    表示是自动创建,-l    表示该磁盘阵列的级别为0,-n    表示块设备个数为2
[root@localhost ~]# mdadm -C /dev/md0 -a yes -l 0 -n 2 /dev/sdb5 /dev/sdb6
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.


5.1用cat  /proc/mdstat  查看当前系统上所有以启用的RAID设备
[root@localhost ~]# cat /proc/mdstat 
Personalities : [raid0] 
md0 : active raid0 sdb6[1] sdb5[0]
      2119680 blocks super 1.2 512k chunks
unused devices: 


5.2可以查看此时/dev/md0设备的信息
[root@localhost mnt]# fdisk -l /dev/md0
Disk /dev/md0: 2170 MB, 2170552320 bytes
2 heads, 4 sectors/track, 529920 cylinders
Units = cylinders of 8 * 512 = 4096 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 524288 bytes / 1048576 bytes
Disk identifier: 0x00000000
或者
[root@localhost mnt]# mdadm -D /dev/md0
/dev/md0:
        Version : 1.2
  Creation Time : Thu Jul 16 00:11:03 2015
     Raid Level : raid0
     Array Size : 2119680 (2.02 GiB 2.17 GB)
   Raid Devices : 2
  Total Devices : 2
    Persistence : Superblock is persistent
    Update Time : Thu Jul 16 00:11:03 2015
          State : clean 
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0
     Chunk Size : 512K
           Name : localhost.localdomain:0  (local to host localhost.localdomain)
           UUID : 06c59420:313d1041:a56140c8:efb718be
         Events : 0
    Number   Major   Minor   RaidDevice State
       0       8       21        0      active sync   /dev/sdb5
       1       8       22        1      active sync   /dev/sdb6
6.格式化RAID设备md0,注意:是此时格式化,而不是创建分区类型后格式化
[root@localhost ~]# mke2fs -j /dev/md0
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=128 blocks, Stripe width=256 blocks
132736 inodes, 529920 blocks
26496 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=545259520
17 block groups
32768 blocks per group, 32768 fragments per group
7808 inodes per group
Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376, 294912
Writing inode tables: done                            
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 20 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
7.挂载该设备
[root@localhost mnt]# mount /dev/md0 /mnt/
[root@localhost mnt]# ls /mnt/
lost+found


8.测试
RAID0的读写能力有提升,但不提供冗余能力,无容错能力,磁盘利用数为n(n为磁盘数),其至少需要两块盘,损坏一块盘就完了,而且我在模拟损坏时总是显示这些,参考资料有的就没有出现,难道是因为他用的都是硬盘而我用的是分区?额,不知道为什么...
[root@localhost ~]# mdadm /dev/md0 -f /dev/sdb6
mdadm: set device faulty failed for /dev/sdb6:  Device or resource busy


RAID1的读性能提升但写性能下降,有冗余能力,磁盘利用数为n/2,至少需要两块盘,损坏一块还能继续用;
测试RAID1(每个盘大小为2G,创建过程和上面的一样)
其属性为
[root@localhost ~]# mdadm -D /dev/md1
/dev/md1:
        Version : 1.2
  Creation Time : Thu Jul 16 02:19:39 2015
     Raid Level : raid1
     Array Size : 2102400 (2.01 GiB 2.15 GB)
  Used Dev Size : 2102400 (2.01 GiB 2.15 GB)
   Raid Devices : 2
  Total Devices : 2
    Persistence : Superblock is persistent
    Update Time : Thu Jul 16 02:20:37 2015
          State : clean 
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0
           Name : localhost.localdomain:1  (local to host localhost.localdomain)
           UUID : c0bf61c5:2697069d:32c3b3ab:2b7c9523
         Events : 17
    Number   Major   Minor   RaidDevice State
       0       8       23        0      active sync   /dev/sdb7
       1       8       24        1      active sync   /dev/sdb8


(1)将/dev/sdb8模拟损坏
[root@localhost ~]# mdadm /dev/md1 -f /dev/sdb8
mdadm: set /dev/sdb8 faulty in /dev/md1
(2)查看此时/dev/md1的状态
[root@localhost ~]# mdadm -D /dev/md1
/dev/md1:
        Version : 1.2
  Creation Time : Thu Jul 16 02:19:39 2015
     Raid Level : raid1
     Array Size : 2102400 (2.01 GiB 2.15 GB)
  Used Dev Size : 2102400 (2.01 GiB 2.15 GB)
   Raid Devices : 2
  Total Devices : 2
    Persistence : Superblock is persistent
    Update Time : Thu Jul 16 02:21:36 2015
          State : clean, degraded 
 Active Devices : 1
Working Devices : 1
 Failed Devices : 1
  Spare Devices : 0
           Name : localhost.localdomain:1  (local to host localhost.localdomain)
           UUID : c0bf61c5:2697069d:32c3b3ab:2b7c9523
         Events : 19
    Number   Major   Minor   RaidDevice State
       0       8       23        0      active sync   /dev/sdb7
       1       0        0        1      removed
       1       8       24        -      faulty   /dev/sdb8
(3)查看该磁盘中的文件能否访问
损坏前
[root@localhost ~]# ll /mnt/RAID1
drwx------ 2 root root 16384 Jul 16 02:11 lost+found
-rw-r--r-- 1 root root     6 Jul 16 02:17 test.txt
[root@localhost ~]# cat test.txt 
hello
损坏后
[root@localhost ~]# ll /mnt/RAID1
drwx------ 2 root root 16384 Jul 16 02:20 lost+found
-rw-r--r-- 1 root root     6 Jul 16 02:21 test.txt
[root@localhost ~]# cat test.txt 
hello
可见该RAID1方式下其中一个盘损坏后文件还可以访问(其实就是镜像技术,两个2G的盘都存放数据,只不过一个是另一个的备份或者镜像)
(4)盘损坏后在该阵列中就没用了,可以移除出去
[root@localhost ~]# mdadm /dev/md1 -r /dev/sdb8
mdadm: hot removed /dev/sdb8 from /dev/md1
此时的/dev/md1信息是
[root@localhost ~]# mdadm -D /dev/md1
/dev/md1:
        Version : 1.2
  Creation Time : Thu Jul 16 02:19:39 2015
     Raid Level : raid1
     Array Size : 2102400 (2.01 GiB 2.15 GB)
  Used Dev Size : 2102400 (2.01 GiB 2.15 GB)
   Raid Devices : 2
  Total Devices : 1
    Persistence : Superblock is persistent
    Update Time : Thu Jul 16 02:35:14 2015
          State : clean, degraded 
 Active Devices : 1
Working Devices : 1
 Failed Devices : 0
  Spare Devices : 0
           Name : localhost.localdomain:1  (local to host localhost.localdomain)
           UUID : c0bf61c5:2697069d:32c3b3ab:2b7c9523
         Events : 22
    Number   Major   Minor   RaidDevice State
       0       8       23        0      active sync   /dev/sdb7          #只有这一块盘了
       1       0        0        1      removed
(5)此时的RAID还有一块盘,如果这个盘也损坏了,那就完了,所以可以另外添加一个(分区别忘了将它的类型改为fd,大小和前面的分区也要一致)
[root@localhost ~]# mdadm /dev/md1 -a /dev/sdb9
mdadm: added /dev/sdb9
此时的/dev/md1信息是
[root@localhost ~]# mdadm -D /dev/md1
/dev/md1:
        Version : 1.2
  Creation Time : Thu Jul 16 02:19:39 2015
     Raid Level : raid1
     Array Size : 2102400 (2.01 GiB 2.15 GB)
  Used Dev Size : 2102400 (2.01 GiB 2.15 GB)
   Raid Devices : 2
  Total Devices : 2
    Persistence : Superblock is persistent
    Update Time : Thu Jul 16 02:43:07 2015
          State : clean 
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0
           Name : localhost.localdomain:1  (local to host localhost.localdomain)
           UUID : c0bf61c5:2697069d:32c3b3ab:2b7c9523
         Events : 43
    Number   Major   Minor   RaidDevice State
       0       8       23        0      active sync   /dev/sdb7
       2       8       25        1      active sync   /dev/sdb9
补充:查看阵列信息
[root@localhost ~]# cat /proc/mdstat 
Personalities : [raid0] [raid1] 
md1 : active raid1 sdb9[2] sdb7[0]
      2102400 blocks super 1.2 [2/2] [UU]
md0 : active raid0 sdb6[1] sdb5[0]
      2119680 blocks super 1.2 512k chunks
unused devices: 
其中sdb9[2]:该设备在RAID1中的次序;[2/2]:RAID使用2个设备,当前有2个设备正常运行,当某一个设备出错时将会显示[2/1];     [UU]:RAID中所有磁盘运转正常。如果出错则显示[_U],则说明RAID中第一磁盘fail。;
(6)此时让/dev/adb7损坏还是可以查看盘中的内容
[root@localhost ~]# mdadm /dev/md1 -f /dev/sdb7
mdadm: set /dev/sdb7 faulty in /dev/md1
[root@localhost ~]# cat /mnt/RAID1/test.txt 
hello
(7)停止阵列
[root@localhost ~]# umount /mnt/RAID1
[root@localhost ~]# mdadm -S /dev/md1
mdadm: stopped /dev/md1
[root@localhost ~]# mdadm -D /dev/md1
mdadm: cannot open /dev/md1: No such file or directory
(8)装配RAID1
[root@localhost ~]# mdadm -A /dev/md1
mdadm: /dev/md1 not identified in config file.
此时并不让装配,因为它不知道/dev/md1中都有那些分区或盘


给/dev/md1添加设备(只不过此次两个设备中有一个是坏的)
[root@localhost ~]# mdadm -A /dev/md1 /dev/sdb7 /dev/sdb9
mdadm: /dev/md1 has been started with 1 drive (out of 2).


查看此时设备启动信息,可知md1又启动起来了
[root@localhost ~]# cat /proc/mdstat 
Personalities : [raid0] [raid1] 
md1 : active raid1 sdb9[2]
      2102400 blocks super 1.2 [2/1] [_U]
md0 : active raid0 sdb6[1] sdb5[0]
      2119680 blocks super 1.2 512k chunks
unused devices: 




补充:
1.[root@localhost ~]# mdadm -D --scan
ARRAY /dev/md0 metadata=1.2 name=localhost.localdomain:0 UUID=11d10bce:9fe2fbaf:ff0d1063:d7f88d10
ARRAY /dev/md1 metadata=1.2 spares=1 name=localhost.localdomain:1 UUID=c0bf61c5:2697069d:32c3b3ab:2b7c9523
该命令可以扫描当前的RAID信息


[root@localhost ~]# mdadm -D /dev/md1 > /etc/mdadm.conf命令
将其保存到主配置文件/etc/mdadm.conf中,以后再重新装配的时候就不用再指设备了,它会自动读取配置文件并装配;


2.(引用)mdadm的缺省配置文件为/etc/mdadm.conf。对于阵列而言不是必须的,主要是为了方便阵列的日常管理。
使用配置文件后,我们每次启动RAID时,就不需要再次输入建立RAID时的一大堆的参数。
mdadm.conf文件中要包含两行:
第一行是以DEVICE开头的行,它指明在阵列中的设备列表。
第二行是以ARRAY开头的行,它详细地说明了阵列的名称、模式、阵列中活动设备的数目以及设备的UUID号。
一般会有如下格式:
#cat /etc/mdadm.conf
===========================================================
DEVICE /dev/sdb /dev/sdc /dev/sdd /dev/sde
ARRAY /dev/md0 level=raid5 num-devices=3 spares=1 UUID=b5e3276f:ab97e843:e601b1a4:46720384
============================================================
生成方法:
#echo 'DEVICE /dev/sd[bcde]' > /etc/mdadm.conf
#mdadm -Ds >> /etc/mdadm.conf

#echo 'DEVICE /dev/sdb /dev/sdc /dev/sdd /dev/sde' > /etc/mdadm.conf
#mdadm -Ds >> /etc/mdadm.conf
3.配置mdadm开机自启动(引用):
使用配置文件后,RAID设备在重启后也可以正常的自动加载,因为系统在开机启动时会自动加载RAID。
#cat /etc/rc.d/rc.sysinit
=============================================================================
# RAID setup
update_boot_stage RCraid
[ -x /sbin/nash ] && echo "raidautorun /dev/md0" | nash --quiet
if [ -f /etc/mdadm.conf ]; then
    /sbin/mdadm -A -s
fi
=============================================================================
设备配置文件只能使系统在开机时正常启用RAID设备,但自动挂载RAID设备还是要再修改/etc/fstab
#vi /etc/fstab
===============================================
/dev/md0 /mnt/raid ext3 defaults 0 0
===============================================
4.mdadm用法(引用)
基本语法 : mdadm [mode] [options]
[mode] 有7种:
Assemble:将以前定义的某个阵列加入当前在用阵列。
Build:Build a legacy array ,每个device 没有 superblocks
Create:创建一个新的阵列,每个device 具有 superblocks
Manage: 管理阵列,比如 add 或 remove
Misc:允许单独对阵列中的某个 device 做操作,比如抹去superblocks 或 终止在用的阵列。
Follow or Monitor:监控 raid 1,4,5,6 和 multipath 的状态
Grow:改变raid 容量或 阵列中的 device 数目
可用的 [options]:
-A, --assemble:加入一个以前定义的阵列
-B, --build:Build a legacy array without superblocks.
-C, --create:创建一个新的阵列
-Q, --query:查看一个device,判断它为一个 md device 或是 一个 md 阵列的一部分
-D, --detail:打印一个或多个 md device 的详细信息
-E, --examine:打印 device 上的 md superblock 的内容
-F, --follow, --monitor:选择 Monitor 模式
-G, --grow:改变在用阵列的大小或形态
-h, --help:帮助信息,用在以上选项后,则显示该选项信息
--help-options
-V, --version
-v, --verbose:显示细节
-b, --brief:较少的细节。用于 --detail 和 --examine 选项
-f, --force
-c, --config= :指定配置文件,缺省为 /etc/mdadm/mdadm.conf
-s, --scan:扫描配置文件或 /proc/mdstat以搜寻丢失的信息。配置文件/etc/mdadm/mdadm.conf
create 或 build 使用的选项:
-c, --chunk=:Specify chunk size of kibibytes. 缺省为 64.
--rounding=: Specify rounding factor for linear array (==chunk size)
-l, --level=:设定 raid level.
--create可用:linear, raid0, 0, stripe, raid1,1, mirror, raid4, 4, raid5, 5, raid6, 6, multipath, mp.
--build可用:linear, raid0, 0, stripe.
-p, --parity=:设定 raid5 的奇偶校验规则:eft-asymmetric, left-symmetric, right-asymmetric, right-symmetric, la, ra, ls, rs.缺省为left-symmetric
--layout=:类似于--parity
-n, --raid-devices=:指定阵列中可用 device 数目,这个数目只能由 --grow 修改
-x, --spare-devices=:指定初始阵列的富余device 数目
-z, --size=:组建RAID1/4/5/6后从每个device获取的空间总数
--assume-clean:目前仅用于 --build 选项
-R, --run:阵列中的某一部分出现在其他阵列或文件系统中时,mdadm会确认该阵列。此选项将不作确认。
-f, --force:通常mdadm不允许只用一个device 创建阵列,而且创建raid5时会使用一个device作为missing drive。此选项正相反。
-a, --auto{=no,yes,md,mdp,part,p}{NN}: 
阅读(3513) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~