洛阳铲的日志

2011年08月2日

Raid Setting for Gentoo

Filed under: 生活小札 — 洛阳铲 @ 12:05

所需的软件,Linux Kernal 2.4及2.4以上,可以通过检查/proc/mdstat来验证

接下来是需要一组管理工具,首选的是mdadm,现在已经成了linux中raid管理事实上的标准,
对于gentoo而言,emerge mdadm就可以安装此工具。另外一个稍微老点的工具是 raidtools,
raidtools不再维护、更新。此文,使用的是内核2.6,mdadm 3.1.4来做raid1的演示。
首先准备好两个块设备,比如 /dev/sdb1 /dev/sdb2来做raid1的块设备。别惊讶/dev/sdb1和
/dev/sdb2是在同一个硬盘上面,mdadm智能的多,只关心是不是一个独立的块设备,而不要求
raid的设备必须是一个物理磁盘,换句话说mdadm不仅仅可以把两个大小一样的磁盘做成raid1
也可以把一个磁盘分成两部分或者多个部分,来做raid1,就如/dev/sdb1、/dev/sdb2那样。

上线准备好两个块设备/dev/sdb1和/dev/sdb2,记得把文件系统的id设置为“fd”,也就
是linux raid autodetect

现在可以使用mdadm –create来创建

过一会儿:

再过一会儿:

然后可以针整个/dev/md0来格式化,当然也可以对/dev/md0使用fdisk来进行分区,
现在/dev/md0看起来就像/dev/sdb一样,像一个独立的物理磁盘。

如果想停掉这个磁盘阵列,可以使用–stop

停掉后不能可以使用–assemble来重新组装,或者重新再来创建一次:

停掉一个raid,用mdadm -S或者mdadmin –stop

再次组装一个阵列,用mdadm -A 或者 mdadm –assemble

给已有阵列增加一个多余的磁盘(对于raid1):
用mdadm -a 或者mdadm –add :

OK,现在模拟一下raid盘中/dev/sdb1失效的情况:
用 mdadm -f 标记某个设备失效:

现在可以发现/dev/sdb1状态为faulty,然后系统会自动重建/dev/sdb3,然后加入磁盘阵列。

重建完成后:

现在把坏掉的/dev/sdb1从阵列中删掉:

在上面这些磁盘的删除、增加、替换过程中,毫不影响我们对/dev/md0的正常读写使用:

现在做些高级的实验,对已经存在大小为10G的/dev/md0进行在线的动态扩容,换句话说
用/dev/sdb[34]替换掉/dev/sdb[12],然后将整个/dev/md0的大小扩展到30G(31457280 Blocks).

首先,把/dev/sdb[34]加到/dev/md0中,然后依次把/dev/sd[12]从md0中删掉(不能同时删掉,需要
给系统留下足够的时间rebuild新加的sdb3和sdb4)。

现在我们知道/dev/sdb[34]两个设备其实又30G大小,但是/dev/md0依然是10G,

增加两个设备:

root@zuichage.com:~ ]# mdadm -Q -D  /dev/md0
/dev/md0:
        Version : 1.2
  Creation Time : Sat Jul 30 19:16:15 2011
     Raid Level : raid1
     Array Size : 20970496 (20.00 GiB 21.47 GB)
  Used Dev Size : 20970496 (20.00 GiB 21.47 GB)
   Raid Devices : 4
  Total Devices : 4
    Persistence : Superblock is persistent

    Update Time : Tue Aug  2 08:37:16 2011
          State : clean
 Active Devices : 4
Working Devices : 4
 Failed Devices : 0
  Spare Devices : 0

           Name : zuichage.com:0  (local to host zuichage.com)
           UUID : 2816f025:bb186f0b:55af5f21:dc84c2b6
         Events : 274

    Number   Major   Minor   RaidDevice State
       2       8       19        0      active sync   /dev/sdb3
       3       8       20        1      active sync   /dev/sdb4
       4       8       17        2      active sync   /dev/sdb1
       5       8       18        3      active sync   /dev/sdb2
root@zuichage.com:~ ]# fdisk -l /dev/sdb
……
……

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1       167774208   251660287    41943040   fd  Linux raid autodetect
/dev/sdb2       251660288   335546367    41943040   fd  Linux raid autodetect
/dev/sdb3        41945088   104859647    31457280   fd  Linux raid autodetect
/dev/sdb4       104859648   167774207    31457280   fd  Linux raid autodetect

Partition table entries are not in disk order
……
……
root@zuichage.com:~ ]# mdadm   /dev/md0  -f /dev/sdb3 /dev/sdb4
mdadm: set /dev/sdb3 faulty in /dev/md0
mdadm: set /dev/sdb4 faulty in /dev/md0
root@zuichage.com:~ ]# mdadm -Q -D  /dev/md0
/dev/md0:
        Version : 1.2
  Creation Time : Sat Jul 30 19:16:15 2011
     Raid Level : raid1
     Array Size : 20970496 (20.00 GiB 21.47 GB)
  Used Dev Size : 20970496 (20.00 GiB 21.47 GB)
   Raid Devices : 4
  Total Devices : 4
    Persistence : Superblock is persistent

    Update Time : Tue Aug  2 15:31:19 2011
          State : clean, degraded
 Active Devices : 2
Working Devices : 2
 Failed Devices : 2
  Spare Devices : 0

           Name : zuichage.com:0  (local to host zuichage.com)
           UUID : 2816f025:bb186f0b:55af5f21:dc84c2b6
         Events : 276

    Number   Major   Minor   RaidDevice State
       0       0        0        0      removed
       1       0        0        1      removed
       4       8       17        2      active sync   /dev/sdb1
       5       8       18        3      active sync   /dev/sdb2

       2       8       19        –      faulty spare   /dev/sdb3
       3       8       20        –      faulty spare   /dev/sdb4
root@zuichage.com:~ ]# mdadm   /dev/md0  -r /dev/sdb3 /dev/sdb4
mdadm: hot removed /dev/sdb3 from /dev/md0
mdadm: hot removed /dev/sdb4 from /dev/md0
root@zuichage.com:~ ]# mdadm -Q -D  /dev/md0
/dev/md0:
        Version : 1.2
  Creation Time : Sat Jul 30 19:16:15 2011
     Raid Level : raid1
     Array Size : 20970496 (20.00 GiB 21.47 GB)
  Used Dev Size : 20970496 (20.00 GiB 21.47 GB)
   Raid Devices : 4
  Total Devices : 2
    Persistence : Superblock is persistent

    Update Time : Tue Aug  2 15:31:27 2011
          State : clean, degraded
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

           Name : zuichage.com:0  (local to host zuichage.com)
           UUID : 2816f025:bb186f0b:55af5f21:dc84c2b6
         Events : 280

    Number   Major   Minor   RaidDevice State
       0       0        0        0      removed
       1       0        0        1      removed
       4       8       17        2      active sync   /dev/sdb1
       5       8       18        3      active sync   /dev/sdb2
root@zuichage.com:~ ]# mdadm –grow -n 2   /dev/md0
root@zuichage.com:~ ]# mdadm -Q -D  /dev/md0
/dev/md0:
        Version : 1.2
  Creation Time : Sat Jul 30 19:16:15 2011
     Raid Level : raid1
     Array Size : 20970496 (20.00 GiB 21.47 GB)
  Used Dev Size : 20970496 (20.00 GiB 21.47 GB)
   Raid Devices : 2
  Total Devices : 2
    Persistence : Superblock is persistent

    Update Time : Tue Aug  2 15:31:47 2011
          State : clean
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

           Name : zuichage.com:0  (local to host zuichage.com)
           UUID : 2816f025:bb186f0b:55af5f21:dc84c2b6
         Events : 285

    Number   Major   Minor   RaidDevice State
       4       8       17        0      active sync   /dev/sdb1
       5       8       18        1      active sync   /dev/sdb2
root@zuichage.com:~ ]# ll /mnt/raid/
total 32
drwxr-xr-x 5 root root  4096 Aug  2 07:57 .
drwxr-xr-x 7 root root  4096 Jul 30 15:57 ..
drwxr-xr-x 2 root root  4096 Aug  2 07:50 2
drwx—— 2 root root 16384 Aug  2 04:35 lost+found
-rw-r–r– 1 root root     0 Aug  2 04:51 test
drwxr-xr-x 2 root root  4096 Aug  2 06:50 test_dir
-rw-r–r– 1 root root     0 Aug  2 07:57 test_file

现在使用–grow来增加raid的大小:
root@zuichage.com:~ ]# mdadm –grow   /dev/md0 –size=max
mdadm: component size of /dev/md0 has been set to 41942016K
root@zuichage.com:~ ]# fdisk -l  /dev/md0

Disk /dev/md0: 42.9 GB, 42948624384 bytes
2 heads, 4 sectors/track, 10485504 cylinders, total 83884032 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disk /dev/md0 doesn’t contain a valid partition table
root@zuichage.com:~ ]# df -h /dev/md0
Filesystem            Size  Used Avail Use% Mounted on
/dev/md0               20G  156M   19G   1% /mnt/raid

raid1设备的大小虽然已经增加了,但是文件系统并未增加,现在的/dev/md0大小依然为20G,
这个时候需要使用resize2fs来重新调整文件系统的大小。需要说明的是目前resize2fs目前只支持
在2.6内核上的ext3文件系统的在线动态容量调整。

root@zuichage.com:~ ]# resize2fs -p /dev/md0
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/md0 is mounted on /mnt/raid; on-line resizing required
old desc_blocks = 2, new_desc_blocks = 3
Performing an on-line resize of /dev/md0 to 10485504 (4k) blocks.
The filesystem on /dev/md0 is now 10485504 blocks long.

resize2fs之后,可以看到文件系统的大小已经变成了40G。

root@zuichage.com:~ ]# df -h /dev/md0
Filesystem            Size  Used Avail Use% Mounted on
/dev/md0               40G  159M   38G   1% /mnt/raid
root@zuichage.com:~ ]# fdisk -l  /dev/md0

Disk /dev/md0: 42.9 GB, 42948624384 bytes
2 heads, 4 sectors/track, 10485504 cylinders, total 83884032 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disk /dev/md0 doesn’t contain a valid partition table

作为在线的磁盘整理,对其进行监控是安全生产的保障,这方面mdadm一样做的相当出色,
使用–monitor可以进行对磁盘阵列进行监控,其–mail参数,可以让mdadm在磁盘阵列状态
发生改变的时候,发出报警邮件。在gentoo中,只需要设置一下/etc/conf.d/mdadm即可:

MDADM_OPTS=”–mail=raid_adm@domain.com
当然不要忘记把mdadm设为自动启动的服务,这样服务器一启动,就自动监控磁盘阵列。

reference:

  1. Linux Raid
  2. The Software-RAID HOWTO
  3.  Linux Raid FAQ

Powered by WordPress