On 2013-03-14, Johnny Hughes johnny@centos.org wrote:
(...)
Maybe ... try this (everything done as root):
Boot on a kernel that works and do this:
- Backup you current initrd:
cp -a /boot/initramfs-2.6.32-358.2.1.el6.x86_64.img /boot/initramfs-2.6.32-358.2.1.el6.x86_64.img.bak
OK.
- Go to this directory:
cd /lib/modules/2.6.32-358.2.1.el6.x86_64/kernel/drivers/md/
For me the corresponding directory is /lib/modules/2.6.32-358.2.1.el6.i686/kernel/drivers/md.
- Figure out the md modules loaded in the old kernel:
lsmod | grep dm_
in my case, that output would be this:
[root@localhost md]# lsmod | grep dm_ dm_round_robin 2525 0 dm_multipath 17756 1 dm_round_robin dm_mirror 14133 0 dm_region_hash 12085 1 dm_mirror dm_log 9930 2 dm_mirror,dm_region_hash dm_mod 82839 12 dm_multipath,dm_mirror,dm_log
(note, dm-mod and dm_mod are the same thing)
In my case I have:
# lsmod | grep dm_ dm_mirror 11678 0 dm_region_hash 9609 1 dm_mirror dm_log 8322 2 dm_mirror,dm_region_hash dm_mod 66925 8 dm_mirror,dm_log
- Do an file list and make sure all the modules you need to include
(in my case the 6 in column 1):
ls
Note: make sure all the modules are listed ad you see the file names (should be for me: dm-round-robin.ko, dm-multipath.ko, dm-mirror.ko, dm-region-hash.ko, dm-log.ko, dm-mod.ko)
Yes, all are present:
# ls dm*.ko dm-bufio.ko dm-log-userspace.ko dm-queue-length.ko dm-service-time.ko dm-crypt.ko dm-memcache.ko dm-raid45.ko dm-snapshot.ko dm-delay.ko dm-mirror.ko dm-raid.ko dm-thin-pool.ko dm-flakey.ko dm-mod.ko dm-region-hash.ko dm-zero.ko dm-log.ko dm-multipath.ko dm-round-robin.ko
- Create a new initrd with all the relevant md modules preloaded (in
my case, this command line ... preload only the modules you need from your list .. again, have to do this as root):
mkinitrd -f --preload=3Ddm_round_robin --preload=3Ddm_multipath --preload=3Ddm_mirror --preload=3Ddm_region_hash --preload=3Ddm_log=20 --preload=3Ddm_mod /boot/initramfs-2.6.32-358.2.1.el6.x86_64.img 2.6.32-358.2.1.el6.x86_64
Note: The above mkinitrd command (and all the other commands) should be entered all on one line, I am sure it will wrap when posted.
(Indeed it did wrap.) The command I used was
mkinitrd -f --preload=dm_mirror --preload=dm_region_hash --preload=dm_log --preload=dm_mod /boot/initramfs-2.6.32-358.2.1.el6.i686.img 2.6.32-358.2.1.el6.i686
That produced a file of similar size to the original:
# ls -l /boot/initramfs-2.6.32-358.2.1.el6.i686.img* -rw-r--r--. 1 root root 15450686 Mar 14 15:13 /boot/initramfs-2.6.32-358.2.1.el6.i686.img -rw-r--r--. 1 root root 15450647 Mar 13 17:11 /boot/initramfs-2.6.32-358.2.1.el6.i686.img.bak
- This may not work, because there may need to be some other things
loaded that are not, like the disc controller's kernel module driver, etc. What I think is going on is either something has been removed from this kernel that existed before ... OR ... something is being mis-detected with this kernel on your machine.
Unfortunately, when rebooting into kernel 358.2.1 I get the same result as before.
Thanks for taking the time to look into this. Is it an upstream bug?