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.

4 Answers 4

36

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).

5
  • very good! just what i was looking for. so the trick was to also update the super-minor.. thank you!
    – XXL
    Oct 15, 2011 at 16:58
  • You're a life-saver! I used this to unbrick a WD NAS device which uses md.
    – Vlad
    May 23, 2012 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 superuser.com/questions/287462/…
    – gorn
    May 4, 2015 at 2: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 1, 2019 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, 2022 at 0: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

1
  • 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, 2018 at 1: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

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.

3
  • 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, 2011 at 21:39
  • @XXL That number is not stored anywhere, it is chosen rather arbitrarily when the array is assembled. Oct 14, 2011 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, 2011 at 21:51

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.