28

Here is the output from mdadm -Esv:

ARRAY /dev/md127 level=raid0 num-devices=2 UUID=d89d9d45:9a420812:c44c77eb:7ee19756 devices=/dev/sdb8,/dev/sda8

This is a v0.90 array. The question is as follows: how does mdadm assign the name for an according device, where does it store it and how does one change it?

What I want to accomplish is to rename md127 to something different to my liking.

XXL
  • 1,469
  • 4
  • 20
  • 34

4 Answers4

37

Warning: Please make a backup before following any advise given here :-)

Option #1:

Edit /etc/mdadm.conf:

ARRAY /dev/md1 level=raid0 num-devices=2 UUID=d89d9d45:9a420812:c44c77eb:7ee19756 devices=/dev/sdb8,/dev/sda8

I just entered your own output and changed 127 to 1. Reboot and it should be md1 now.

Option #2:

If you don't have mdadm.conf, and want it to assemble to md1 automagically, you can do this:

mdadm has a concept of a "preferred minor". E.g. once a certain minor number is assigned to an array, and stored in the superblock, it will be used each time this array is auto-assembled. Verify this:

mdadm --detail /dev/md127

If it says "Preferred Minor : 127" this this is your problem. You need to update the preferred minor. How to do this:

You cannot just change the preferred minor. You need to boot into recovery or single user-mode if this is your root device, unmount the filesystem, after that:

mdadm --stop /dev/md127
mdadm --assemble --update=super-minor /dev/md1 /dev/sdb8 /dev/sda8

Then you'll have your md127 assembled as md1. And it should stay this way in the future too.

With 1.x arrays:

Newer arrays don't store a 'Preferred Minor' number and do not support "--update=super-minor". Instead they store a name which can be changed with:

mdadm --stop /dev/md127
mdadm --assemble --update=name --name=2 /dev/md1 /dev/sdb8 /dev/sda8

Or you can specify 'hostname:2' to keep everything consistent with other arrays (lookup the current name with --detail).

haimg
  • 22,193
  • 16
  • 79
  • 113
  • very good! just what i was looking for. so the trick was to also update the super-minor.. thank you! – XXL Oct 15 '11 at 16:58
  • You're a life-saver! I used this to unbrick a WD NAS device which uses md. – Vlad May 23 '12 at 20:57
  • This solution is theoretically correct, but it was difficult for me to implement for me on living system. Also Option #1 did not work for me. I went with http://superuser.com/questions/287462/how-can-i-make-mdadm-auto-assemble-raid-after-each-boot/909414#909414 – gorn May 04 '15 at 02:55
  • +1 for the last part of the solution which was very helpful when moving raid array from one machine to another. 'hostname:2' and changing md127 to md1 was exactly what i needed to keep names consistent – yahol Jan 01 '19 at 11:18
  • The name in the >1.x superblock also contains a hostname part. That can be changed similarly (at assemble time), cf. the --hostname option. Not sure if separating it with a colon still works. There is a special value "any" that works as a wildcard. – stefanct Sep 27 '22 at 00:00
14

Just to add to haimg's excellent answer. It may happen that even with a mdadm.conf, the system (at least for Ubuntu) may still auto-assemble the arrays prior to reading mdadm.conf. So when it finds it it just ignores the arrays that have just been assembled anyway.

To account for that, run sudo update-initramfs -u to regenerate the proper initrd.

Relevant links: http://ubuntuforums.org/showthread.php?t=1764861%29%3a

Wtower
  • 257
  • 3
  • 10
  • 2
    This fixed the problem for me (after another reboot) on Ubuntu 16.04. In my case it was because I had recreated the array, and it had a new UUID. After updating it in `mdadm.conf`, rebooting alone was not sufficient; updating the initramfs did the trick. – nh2 Nov 15 '18 at 01:19
5

None of the other answers worked for me but in Centos I used the following guide. The issue is that /etc/mdadm.conf is not really used at boot time and only gets updated when a new kernel is installed or initramfs is manually recreated. So essentially you just need:

dracut --force

source: http://realtechtalk.com/mdadm_change_wrong_device_name_md127_fix_and_solution_in_Linux-1783-articles

Areeb Soo Yasir
  • 255
  • 2
  • 3
2

Version 0.9 superblocks don't have a name, they were introduced in version 1. /dev/md127 is not the name of the array, it's the name of the array's device file, which is a direct consequence of the raid block device's minor number. This minor number is chosen rather arbitrarily when the array is assembled.

The UUID provides a unique identifier for the array, if you need one. If you prefer a human-readable or structured name, put an LVM physical volume in the array.

Gilles 'SO- stop being evil'
  • 69,786
  • 21
  • 137
  • 178
  • I am aware of the possibility of **--homehost** from the later version, that is why I have deliberately stated that this is a v0.90 metadata array. However, that is not my intention nor is it compatible. Looking through my posts I also somewhat can not notice where I mentioned that **/dev/md127** was the **name of the array**. I think I have provided the exact details of what I want to do. So the question still remains, how do I change it and where is this "minor number" stored? I presume it is part of the superblock? Will it ruin the superblocks checksum, when hex-edited? – XXL Oct 14 '11 at 21:39
  • @XXL That number is not stored anywhere, it is chosen rather arbitrarily when the array is assembled. – Gilles 'SO- stop being evil' Oct 14 '11 at 21:46
  • hmm.. I do not understand. Then why do I always get **/dev/md127** when i **mdadm -Esv**? Shouldn't I get something else, that is random, other than a static name? That is if it is really "arbitrary".. – XXL Oct 14 '11 at 21:51