阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Linux下软RAID md符号链接不到RAID设备节点的解决方法

128次阅读
没有评论

共计 3114 个字符,预计需要花费 8 分钟才能阅读完成。

在存储服务器上乃至一些服务器上,为了增加对关键、重要数据的可靠性,RAID(Redundant Array of Independent Disk) 是一个经常用到的技术。RAID 既可以通过硬件卡实现,也可以通过软件实现,前者性能好、速度快,后者配置灵活、成本低。

在没有 RAID 硬件功能的服务器上,就必须通过 RAID 软件来实现。在 Linux 系统下,

mdamd 工具正是用来管理 radi 的系统工具,它可以创建、修复、扩展 raid,也可以从 / 往 raid 中删除 / 增加数据盘和冗余盘。为此,熟练掌握 RAID 工具既能及时处理软 raid 常见的各种问题,又能加深我们对各种 RAID 的特性的直观认识。

下面和大家分享一下在双控系统上碰到 Linux 下软 RAID md 符号链接不到 RAID 设备节点的解决方法法,如果有不同的想法或解决方法,欢迎一起切磋。

1. 复现问题出现的步骤

首先,基于四个分区创建一个 RAID1:

mdadm –create -f /dev/md/sysdbase –auto=yes -l 1 -n 4  /dev/sdd2 /dev/sde2 /dev/sdf2 /dev/sdg2

也可以用下面的命令:

mdadm –create -f -v  –assume-clean /dev/md/sysdbase –auto=yes -l 1 -n 4 /dev/sdd2  /dev/sde2 /dev/sdf2 /dev/sdg2

成功之后,可以看大 /dev/ 下有新的 md 节点生成:

[root@localhost ~]# ls -alt /dev/md/sysdbase

lrwxrwxrwx 1 root root 8 Feb 15 11:03 /dev/md/sysdbase -> ../md127

然后用 mdadm -D 查看新建立的 RAID 的状况:

[root@localhost dev]# mdadm -D /dev/md/sysdbase

/dev/md/sysdbase:

Version : 1.2

Creation Time : Fri Feb  3 20:17:28 2016

Raid Level : raid1

Array Size : 2095104 (2046.34 MiB 2145.39 MB)

Used Dev Size : 2095104 (2046.34 MiB 2145.39 MB)

Raid Devices : 4

Total Devices : 4

Persistence : Superblock is persistent

Update Time : Wed Feb 15 12:47:42 2016

State : clean

Active Devices : 4

Working Devices : 4

Failed Devices : 0

Spare Devices : 0

Name : localhost.localdomain:sysdbase  (local to host localhost.localdomain)

UUID : 68d360a9:41db99b2:5b369ddc:f807722c

Events : 91

Number  Major  Minor  RaidDevice State

0      8      50        0      active sync  /dev/sdd2

1      8      66        1      active sync  /dev/sde2

2      8      82        2      active sync  /dev/sdf2

3      8      98        3      active sync  /dev/sdg2

如果要重建 /dev/md/sysdbase,根据下面的命令先关掉所有 md array:

mdadm –stop –scan

然后重建:

mdadm –create /dev/md/sysdbase –auto=yes -l 1 -n 4 /dev/sdc2 /dev/sdd2 /dev/sde2 /dev/sdf2

接着修改之前的配置文件,相关的配置文件在 /var/run/mdadm/map:

[root@localhost ~]# cat /var/run/mdadm/map
md127 1.268d360a9:41db99b2:5b369ddc:f807722c/dev/md/sysdbase

把 md127 换成 md126:

[root@localhost ~]# cat /var/run/mdadm/map
md1261.2 68d360a9:41db99b2:5b369ddc:f807722c/dev/md/sysdbase

接着用新的盘创建 /dev/md/sysdbase:

mdadm –create /dev/md/sysdbase –auto=yes -l 1 -n 2 /dev/sdc3 /dev/sdd3

可以看到,此时 /dev/ 下有两个 md 节点:

[root@localhost script]# ls -lart /dev/md*
brw-rw—-. 1 root disk 9, 127 Nov 10 20:47 /dev/md127
brw-rw—-. 1 root disk 9, 126 Nov 10 20:48 /dev/md126

/dev/md:
total 0
lrwxrwxrwx.  1 root root    8 Nov 10 20:48 sysdbase -> ../md126
drwxr-xr-x. 22 root root 4820 Nov 10 20:48 ..
drwxr-xr-x.  2 root root  60 Nov 10 20:48 .

如果此时重启机器触发 fail over,可以看到在新启动成功的机器上 /dev/md/sysdbase 有时候会链接到 /dev/md127 设备节点,有时又会链接到 /dev/md126 节点,而实际我们期望的读写操作都基于先产生的 /dev/md27 上,因此这样就会出问题。

2. 尝试解决问题的方法

那么该如何保证 /dev/md/sysdbase 始终链接到 /dev/md127 上去呢?

首先尝试直接停掉停掉:/dev/md126:

mdadm –stop –scan  /dev/md126.

但是重启之后或者切机之后,上面的问题还是出现了。

接着,尝试删除后面添加的 /dev/md126:

dd if=/dev/zero of=/dev/sdd3 bs=1M count-1024

用 dd 先擦除了默认 /dev/sdc3、/dev/sdd3 的前面 1M 数据,然后去掉了一个盘:

mdadm /dev/md126 -f /dev/sdd3 -r /dev/sdd3

但是剩下的一个盘 /dev/sdc3 无论如何从 /dev/md126 中都删除不掉,这样就无法删除 /dev/md126.

最后通过仔细阅读 mdadm man 手册,找到了上面对 config 的描述,知道 mdadm 默认根据

/etc/mdadm.conf 自动组建 RAID, 因此只需要根据 mdadm.conf 往里面添加规则就可以了,

如下所示:

[root@localhost ~]# cat /etc/mdadm.conf

DEVICE /dev/sdg2 /dev/sdd2 /dev/sde2 /dev/sdf2

ARRARY /dev/md127 level=raid1 num-devices=4 UUID=68d360a9:41db99b2:5b369ddc:f807722c devices=/dev/sdg2,/dev/sdd2,/dev/sde2,/dev/sdf2

最后通过重启和反复 fail over 测试,都没有额外的 /dev/md126 的生成。因此,碰到类似问题,可通过增加 /etc/mdadm.conf 的配置,指定 RAID 的自动生成方式,这样就能保证每次重启之后系统能根据指定的设备列表来使用正确的 raid。

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2017-02/140724.htm

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-21发表,共计3114字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中