如何重命名mdadm RAID阵列?


23

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

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

~$ 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>

如您所见,该名称仍被报告为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在启动之间保留设备文件?

Answers:


19

您实际上必须给它起个名字,--name=例如:

sudo mdadm --assemble /dev/md/alpha --name=newname --update=name /dev/sd[gf]

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

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


1
为了清楚起见,对该命令行进行了较小的更新,就像我在“ --update =”之后输入数组的原始名称一样。 sudo mdadm --assemble /dev/md/alpha --name={newname} --update=name /dev/sd[gf] 希望有意义或更清楚
。...–天文学家

嗨,在发出命令之后#sudo mdadm --assemble / dev / md127 --name = md0 --update = name / dev / sd [ab]我得到mdadm:/ dev / sda很忙-跳过mdadm:/ dev / sdb很忙-跳过任何思想?当然,我先卸载了阵列!
razor7

2
@ razor7mdadm --stop --scan md127
Daniel Dinnyes 2014年

12

使Ubuntu在整个启动过程中保持名称更改的方法是更新initramfs。更新阵列名称和mdadm.conf之后,您需要发出以下命令:

sudo update-initramfs -u

整个过程:

sudo mdadm --stop /dev/md125
sudo mdadm --assemble /dev/md/alpha --name=alpha --update=name /dev/sd[fg]
sudo mdadm -Db /dev/md/alpha

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

ARRAY /dev/md/alpha metadata=1.2 name=omicron:alpha UUID=5b024352:3a940335:233aa23f:5c6b2a1f

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

sudo mdadm -Db /dev/md/alpha >> /etc/mdadm/mdadm.conf

下一轮:

sudo update-initramfs -u

最后,重新启动。

这次讨论很有用


8

pille和NN作品的第一个答案。

这里的窍门是,当您不指定该--name选项时,唯一的重命名操作mdadm就是从已分配的设备号中分配阵列名称。在这个问题中它是0,所以新的数组名称是0。

由于您指定了在汇编命令中使用的设备名称(此处为“ alpha”),因此它将创建并使用此设备名称。但是在自动启动时,mdadm将基于它在超级块中看到的名称创建一个设备,在这种情况下,该名称为0,因此您在assemble命令中指定的设备名称将丢失。

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

mdadm --assemble /dev/md/alpha --name=alpha --update=name /dev/sd[gf]

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

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


2

似乎您要寻找的答案正确在mdadm手册页中

[create, build, grow]
      -N, --name=
          Set  a name for the array.  This is **currently only effective when creat‐
          ing an array** with a version-1 superblock, or an  array  in  a  DDF  con‐
          tainer.   The  name is a simple textual string that can be used to iden‐
          tify array components when assembling.  If name is needed but not speci‐
          fied, it is taken from the basename of the device that is being created.
          e.g. when creating /dev/md/home the name will default to home.

和组装

       -N, --name=
          Specify the name of the array to assemble.  **This must be the  name  that
          was  specified  when  creating the array**.  It must either match the name
          stored in the superblock exactly, or it  must  match  with  the  current
          homehost prefixed to the start of the given name.

这就解释了为什么name属性设置后不粘滞。如果您确实可以使用它,请附上注释,其中的答案对您有用。另外,您始终可以使用udev规则和数组的UUID作为锚点来创建符号链接。

我看不到将假名添加到/etc/mdadm.conf的意义,因为您已经在使用UUID,即规范的数组名。添加另一个您认为可以更改的变量只是不必要的维护,并且会遇到麻烦,例如数组无法启动。

除了这些观察结果之外,了解为什么为什么在运行时无法更新名称的最佳方法是对linux-raid邮件列表进行ping操作。


1

更改名称后,是否尝试更新您的名称mdadm.conf

 mdadm --examine --scan --config=mdadm.conf >> /etc/mdadm.conf

0

当内部创建Raid卷时,其名称带有空格时,mdadm有一个错误。由于生成的/etc/mdadm/mdadm.conf文件中的格式错误,这些卷将无法正确安装。您需要在那里重命名它们,但是它不会持久存在。因此,重命名内部名称是必要的...但是并非所有阻止其元数据并且不支持name选项的RAID控制器都支持该名称。我看不到如何重命名这些卷(即使它们的UUID在内部被引用,其名称也是Linux使用的名称;相反,Windows没有此类错误,并且可以完美地装载名称中包含空格的RAID卷)!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.