![如何强制 mdadm 停止 RAID5 阵列?](https://linux22.com/image/1328674/%E5%A6%82%E4%BD%95%E5%BC%BA%E5%88%B6%20mdadm%20%E5%81%9C%E6%AD%A2%20RAID5%20%E9%98%B5%E5%88%97%EF%BC%9F.png)
我有/dev/md127
由四个驱动器组成的 RAID5 阵列。我设法将它们从阵列中热移除,目前/dev/md127
没有任何驱动器:
cat /proc/mdstat Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] md0 : active raid1 sdd1[0] sda1[1]
304052032 blocks super 1.2 [2/2] [UU]
md1 : active raid0 sda5[1] sdd5[0]
16770048 blocks super 1.2 512k chunks
md127 : active raid5 super 1.2 level 5, 512k chunk, algorithm 2 [4/0] [____]
unused devices: <none>
和
mdadm --detail /dev/md127
/dev/md127:
Version : 1.2
Creation Time : Thu Sep 6 10:39:57 2012
Raid Level : raid5
Array Size : 8790402048 (8383.18 GiB 9001.37 GB)
Used Dev Size : 2930134016 (2794.39 GiB 3000.46 GB)
Raid Devices : 4
Total Devices : 0
Persistence : Superblock is persistent
Update Time : Fri Sep 7 17:19:47 2012
State : clean, FAILED
Active Devices : 0
Working Devices : 0
Failed Devices : 0
Spare Devices : 0
Layout : left-symmetric
Chunk Size : 512K
Number Major Minor RaidDevice State
0 0 0 0 removed
1 0 0 1 removed
2 0 0 2 removed
3 0 0 3 removed
我尝试过mdadm --stop /dev/md127
但是:
mdadm --stop /dev/md127
mdadm: Cannot get exclusive access to /dev/md127:Perhaps a running process, mounted filesystem or active volume group?
我确认它已被卸载,umount -l /dev/md127
并确认它确实已被卸载:
umount /dev/md127
umount: /dev/md127: not mounted
我尝试将每个驱动器的超级块清零,并得到(对于每个驱动器):
mdadm --zero-superblock /dev/sde1
mdadm: Unrecognised md component device - /dev/sde1
输出如下lsof | grep md127
:
lsof|grep md127
md127_rai 276 root cwd DIR 9,0 4096 2 /
md127_rai 276 root rtd DIR 9,0 4096 2 /
md127_rai 276 root txt unknown /proc/276/exe
我还能做什么?LVM 甚至没有安装,所以它不是一个因素。
经过一番摸索,我终于找到了阻止我停止阵列的原因。这是 SAMBA 进程。在 service smbd stop 之后,我能够停止阵列。不过这很奇怪,因为虽然阵列曾经通过 SAMBA 安装和共享过,但当我尝试停止它时,它已经被卸载了。
答案1
我意识到这是一个老问题,并且原始发帖人认为 SAMBA 是问题所在,但我遇到了完全相同的问题,并且认为问题很可能不是 SAMBA(我实际上甚至没有 SAMBA),因为它没有出现在输出中lsof
,而是当用户切换到 root 或执行 sudo 时,他们已经在 RAID 挂载点目录中。
就我而言,问题在于,当我的普通用户位于该已安装/dev/md127
驱动器上的目录中时,我启动了我的根 shell。
user1@comp1:/mnt/md127_content/something$ su -
root@comp1:~# umount /dev/md127
umount: /dev/md127: target is busy
lsof
以下是我的案例的输出:
root@comp1:root@comp1:~# lsof | grep /dev/md127
md127_rai 145 root cwd DIR 253,0 4096 2 /
md127_rai 145 root rtd DIR 253,0 4096 2 /
md127_rai 145 root txt unknown /proc/145/exe
尽管lsof | grep md125
除了 之外没有显示任何进程[md127_raid1]
,但我无法卸载/dev/md127
。虽然的输出umount -l /dev/md127
隐藏了,但驱动器显然仍处于繁忙状态,尝试 时会显示相同的错误:/dev/md127
mount
mdadm --stop /dev/md127
mdadm: Cannot get exclusive access to /dev/md127:Perhaps a running process, mounted filesystem or active volume group?
解决方案很简单:检查是否有任何已登录的用户仍在该驱动器上的目录中。特别是,检查您使用的 root shell 是否在常规用户的当前目录位于该驱动器时启动。切换到该用户的 shell(可能只有exit
您的 root 用户),移动到其他地方,然后umount
就mdadm --stop
可以正常工作了:
root@comp1:~# exit
user1@comp1:/mnt/md127_content/something$ cd /
user1@comp1:/$ su -
root@comp1:~# umount /dev/md127
root@comp1:~# mdadm --stop /dev/md127
mdadm: stopped /dev/md127
答案2
如果您在 mdadm 上使用 LVM,有时 LVM 在停用卷组时不会删除设备映射器设备。您可以手动删除它。
- 确保 的输出中没有任何内容
sudo vgdisplay
。 - 查看
/dev/mapper/
。除了文件之外control
,还应该有一个以您的卷组命名的设备映射器设备,例如VolGroupArray-name
。 - 运行
sudo dmsetup remove VolGroupArray-name
(替换VolGroupArray-name
为 Device Mapper 设备的名称)。 - 您现在应该可以运行了
sudo mdadm --stop /dev/md0
(或任何设备的名称mdadm
)。
答案3
我遇到了类似的问题,但我没有以任何方式安装 raid 设备。停止 SAMBA 似乎也无济于事。什么也lsof
没显示。
一切只导致:
# mdadm --stop /dev/md2
mdadm: Cannot get exclusive access to /dev/md2:Perhaps a running process, mounted filesystem or active volume group?
最终为我修复该问题的是记住这是一个交换分区 - 所以我必须这样做swapoff /dev/md2
- 这让我mdadm --stop /dev/md2
成功了。