如何强制 mdadm 停止 RAID5 阵列?

如何强制 mdadm 停止 RAID5 阵列?

我有/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/md127mountmdadm --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 用户),移动到其他地方,然后umountmdadm --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 在停用卷组时不会删除设备映射器设备。您可以手动删除它。

  1. 确保 的输出中没有任何内容sudo vgdisplay
  2. 查看/dev/mapper/。除了文件之外control,还应该有一个以您的卷组命名的设备映射器设备,例如VolGroupArray-name
  3. 运行sudo dmsetup remove VolGroupArray-name(替换VolGroupArray-name为 Device Mapper 设备的名称)。
  4. 您现在应该可以运行了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成功了。

相关内容