Hello, Karl.

On Fri, Dec 20, 2024 at 15:50:53 +0100, k...@aspodata.se wrote:
> Alan Mackenzie:
> ...
> > The cause was me booting up the machine with a rescue disk.  This
> > assembled my RAID partitions /dev/md127 and /dev/md126 reversed, but
> > also wrote those wrong identifiers, 126 and 127, into the "preferred
> > minor" field of the partitions' super blocks.  In essence, they got
> > swapped.
> ...
> > Just for the record, all my RAID arrays have metadata version 0.90, the
> > (old fashioned) one that allows auto-assembly by the kernel without the
> > need of an initramfs.

> > The moral of the story: if your system uses software RAID, be careful
> > indeed before you boot up with a rescue disk.

> So, why don't you simple add "root=902 md=2,/dev/sda2,/dev/sdb2" or similar to
> your boot loader kernel command line ?

Because I didn't know about it.  I found out about it this morning, and
immediately tested it by setting up an
"md=126,/dev/nvme0n1p4,/dev/nvme1n1p4" on the kernel command line, using
the rescue disk to make the "preferred minor"s wrong, and testing it.
It worked!

If I understand things correctly, with this mechanism one can have the
kernel assemble the RAID arrays at boot up time with a modern metadata,
but still without needing the initramfs.  My arrays are still at
metadata 0.90.

> ///

>  And... what is the need for dynamic minors now when dev_t is 32bits:

Dynamic minors?  I don't think I follow you, here.

> $ grep dev_t /Net/git/linux-stable/include/linux/types.h 
> typedef u32 __kernel_dev_t;
> typedef __kernel_dev_t          dev_t;
> $

>  and we have 20 bits minors:

> $ grep -A1 MINORBITS /Net/git/linux-stable/include/linux/kdev_t.h 
> #define MINORBITS       20
> #define MINORMASK       ((1U << MINORBITS) - 1)

> #define MAJOR(dev)      ((unsigned int) ((dev) >> MINORBITS))
> #define MINOR(dev)      ((unsigned int) ((dev) & MINORMASK))
> #define MKDEV(ma,mi)    (((ma) << MINORBITS) | (mi))

> Regards,
> /Karl Hammar

-- 
Alan Mackenzie (Nuremberg, Germany).

Reply via email to