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

简介:

在存储服务器上乃至一些服务器上,为了增加对关键、重要数据的可靠性,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。


3.参考链接

http://www.toxingwang.com/linux-unix/linux-basic/1048.html

http://neil.brown.name/blog/mdadm

http://blog.csdn.net/a7320760/article/details/10442715

http://blog.csdn.net/u012317833/article/details/14051147

man mdadm
















本文转自存储之厨51CTO博客,原文链接:http://blog.51cto.com/xiamachao/1898022 ,如需转载请自行联系原作者


相关文章
|
27天前
|
Linux 数据处理 开发者
Linux命令ld.bfd:二进制文件的强大链接器
`ld.bfd`是GNU链接器的变体,利用BFD库处理多种目标文件格式(如ELF, COFF)。它收集文件,解析符号,执行重定位,生成可执行文件。特点包括多格式支持,高效符号管理和诊断信息。常用命令如`ld.bfd -o output file1.o file2.o -lc`。注意文件路径、链接顺序,利用诊断信息和文档,保持工具更新以优化使用。
|
27天前
|
Linux 编译器 数据处理
深入了解Linux命令ld.gold:快速链接器的奥秘
`ld.gold`是GNU的快速链接器,设计用于加速大型项目的链接,尤其擅长并行处理和增量链接。它与标准的`ld`高度兼容,可通过`-fuse-ld=gold`选项启用。例如,`gcc -o my_program file1.c file2.c file3.c -Wl,--ld-as-needed -fuse-ld=gold`命令使用`ld.gold`链接多个源文件。最佳实践包括确保环境支持、利用多线程和启用增量链接。
|
4天前
|
存储 Linux Windows
【Linux】文件系统软硬链接的那些事儿
本文介绍了Linux文件系统的磁盘结构、逻辑结构以及文件和inode的关系,重点讲解了软链接和硬链接的区别,强调了它们在文件管理中的作用。
16 7
|
12天前
|
消息中间件 负载均衡 NoSQL
|
19天前
|
安全 Linux
蓝易云 - Linux学习之RAID
以上就是Linux中RAID的基本概念和使用方法。
17 1
|
24天前
|
Shell Linux 网络安全
Linux怎样在使用ssh 链接时就指定gcc 的版本
Linux怎样在使用ssh 链接时就指定gcc 的版本
22 7
|
21天前
|
安全 Linux
蓝易云 - Linux学习之RAID
最后,你可以使用 `mdadm --detail /dev/md0`命令检查RAID状态。
19 2
|
23天前
|
Linux vr&ar C语言
Linux怎样更新Centos下Gcc版本支持C17?Centos7快速安装gcc8.3.1 可支持C++17(附gcc相关链接整理)
Linux怎样更新Centos下Gcc版本支持C17?Centos7快速安装gcc8.3.1 可支持C++17(附gcc相关链接整理)
80 2
|
23天前
|
Ubuntu Unix Linux
Linux 用户使用sudo时 显示xxx is not in the sudoers file.This incident will be reported.的解决方法
Linux 用户使用sudo时 显示xxx is not in the sudoers file.This incident will be reported.的解决方法
24 1
|
16天前
|
Linux 数据处理
探索Linux下的readlink命令:解析符号链接的利器
`readlink`命令在Linux中用于揭示符号链接的指向,显示它们所链接的实际文件或目录的路径。它可以显示简洁的绝对路径(-f),处理循环链接(-e),或不加换行符输出(-n)。例如,查看`link.txt`指向:`readlink link.txt`;获取绝对路径:`readlink -f link.txt`。使用时要注意链接是否存在、权限问题和可能的循环链接。