如何重命名 mdadm raid 阵列?

Zaz*_*Zaz 26 server raid devices mdadm

出于某种原因,当我尝试将 mdadm raid 数组重命名为文本名称时,更改不会发生。

我尝试了这个serverfault question的建议,但无济于事。

~$ mdadm --version
mdadm - v3.1.4 - 31st August 2010

~$ sudo mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
  Creation Time : Tue Sep 27 08:32:32 2011
     Raid Level : raid1
     Array Size : 1953513424 (1863.02 GiB 2000.40 GB)
  Used Dev Size : 1953513424 (1863.02 GiB 2000.40 GB)
   Raid Devices : 2
  Total Devices : 2
    Persistence : Superblock is persistent
    Update Time : Sun Oct  2 17:59:37 2011
          State : clean
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

           Name : omicron:0  (local to host omicron)
           UUID : 75c4a555:482aecd0:ade70dfc:1547926a
         Events : 17

Number   Major   Minor   RaidDevice State
   0       8       80        0      active sync   /dev/sdf
   1       8       96        1      active sync   /dev/sdg

~$ sudo mdadm --stop /dev/md0
mdadm: stopped /dev/md0

~$ sudo mdadm --assemble /dev/md/alpha --update=name /dev/sd[gf]
mdadm: /dev/md/alpha has been started with 2 drives.

~$ sudo mdadm --detail /dev/md0
/dev/md0:
        Version : 1.2
  Creation Time : Tue Sep 27 08:32:32 2011
     Raid Level : raid1
     Array Size : 1953513424 (1863.02 GiB 2000.40 GB)
  Used Dev Size : 1953513424 (1863.02 GiB 2000.40 GB)
   Raid Devices : 2
  Total Devices : 2
    Persistence : Superblock is persistent
    Update Time : Sun Oct  2 18:06:11 2011
          State : clean
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

           Name : omicron:0  (local to host omicron)
           UUID : 75c4a555:482aecd0:ade70dfc:1547926a
         Events : 17

Number   Major   Minor   RaidDevice State
   0       8       80        0      active sync   /dev/sdf
   1       8       96        1      active sync   /dev/sdg

~$ cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 sdf[0] sdg[1]
      1953513424 blocks super 1.2 [2/2] [UU]

md126 : active (auto-read-only) raid1 sdd[0] sde[1]
      1953513424 blocks super 1.2 [2/2] [UU]

md127 : active (auto-read-only) raid1 sdb[0] sda[1]
      976762496 blocks [2/2] [UU]

unused devices: <none>
Run Code Online (Sandbox Code Playgroud)

如您所见,该名称仍报告为omicron:0并且仍可通过旧设备文件访问。尝试sudo mdadm --detail /dev/md/alpha将工作,并报告相同的错误名称,直到下一次重新启动,当它停止工作时。

似乎在确定要输入的名称时,mdadm 感到困惑,而只是创建了设备文件。


在旁边

有没有办法让 mdadm 强制更新超级块的名称部分(即显式设置您希望数组具有的名称)而不必显式重新创建超级块?(即sudo mdam --zero-superblock /dev/sd[fg]; sudo mdadm --create /dev/md/alpha --raid-devices=2 --level=1 --assume-clean --name=alpha /dev/sd[fg]


问题是重新启动后,尽管添加ARRAY /dev/md/alpha metadata=1.2 name=omicron:alpha UUID=c66a267...到 mdadm.conf,命名设备文件消失并替换为标准格式之一。(/dev/md125 或类似的)

如何使重命名的 mdadm 数组保留其名称?- 即 - 我怎样才能让 ubuntu 在引导之间保留设备文件?

小智 22

你必须给它起个名字,--name=比如:

sudo mdadm --assemble /dev/md/alpha --name=newname --update=name /dev/sd[gf]
Run Code Online (Sandbox Code Playgroud)

要在重启时保持一致的行为,您必须在 --name 参数中使用与设备最后一部分相同的名称。这将是: sudo mdadm --assemble /dev/md/alpha --name=alpha --update=name /dev/sd[gf]

有关完整说明,请参阅下面 Khassad 的帖子。

  • 为了清楚起见,对此命令行进行了一个小更新,就像我在“--update=”之后输入数组的原始名称一样。`sudo mdadm --assemble /dev/md/alpha --name={newname} --update=name /dev/sd[gf]` 希望这是有道理的或者让它更清楚...... (2认同)
  • @razor7`mdadm --stop --scan md127` (2认同)

Swo*_*gan 15

让 Ubuntu 在启动时保持名称更改的方法是更新您的 initramfs。更新阵列名称和 mdadm.conf 后,您需要发出以下命令:

sudo update-initramfs -u
Run Code Online (Sandbox Code Playgroud)

整个过程:

sudo mdadm --stop /dev/md125
sudo mdadm --assemble /dev/md/alpha --name=alpha --update=name /dev/sd[fg]
sudo mdadm -Db /dev/md/alpha
Run Code Online (Sandbox Code Playgroud)

第三个命令应该返回如下内容:

ARRAY /dev/md/alpha metadata=1.2 name=omicron:alpha UUID=5b024352:3a940335:233aa23f:5c6b2a1f
Run Code Online (Sandbox Code Playgroud)

将结果粘贴到 /etc/mdadm/mdadm.conf (替换旧行)。或者执行:

sudo mdadm -Db /dev/md/alpha >> /etc/mdadm/mdadm.conf
Run Code Online (Sandbox Code Playgroud)

下一次运行:

sudo update-initramfs -u
Run Code Online (Sandbox Code Playgroud)

最后,重启。

这个讨论很有用


Kha*_*sad 9

pille 和 NN 的第一个答案有效。

这里的技巧是,当您不指定--name选项时,唯一完成的重命名mdadm是从它分配的设备编号分配数组名称。在这个问题中它是 0 所以新的数组名称是 0。

由于您指定了要在 assemble 命令中使用的设备名称(此处为“alpha”),因此它将创建并使用此设备名称。但是在自动启动时,它mdadm会根据它在超级块中看到的名称(在本例中为 0)创建一个设备,因此您在 assemble 命令中指定的设备名称将丢失。

为了使您的名称更改具有粘性和连贯性,您必须在设备名称的最后一部分和新阵列名称中使用相同的名称。在这种情况下,对于设备“alpha”,您必须使用以下命令行:

mdadm --assemble /dev/md/alpha --name=alpha --update=name /dev/sd[gf]
Run Code Online (Sandbox Code Playgroud)

您还可以更改主机名,为此您必须使用-name=<hostname>:<array_name>语法显式声明它。

这可能很有用,例如在机器名称更改后。