Christian Jaeger wrote:
>> and if the missing recursion of get_lvm_deps() is really
>> the reason, why does it only fail on some kernels for you?
>>
>
> As I did say in my previous mails, I don't know.
>
> And I don't know whether it's got anything to do with kernels. Or the
> order in which something is initialized at boot, or the phase of moon,
> or maybe whether I've got snapshots running.
>
Hey, I've tested now with and without snapshots and it's clearly the
culprit.
See the attached observation log.
You can see (1) that while there is a snapshot on the root volume, on my
setup, the current cryptsetup from Debian is broken; it is *not* broken
if I remove the snapshot. (2) I see confirmed that my patch works for me
in both cases.
So, I hope now you've got at least something to reproduce the case.
Christian.
novo:/usr/src/linux# make modules_install
...
DEPMOD 2.6.27.9
novo:/usr/src/linux# make install
sh /mnt/rootextend/usr/src/linux_2.6.27/arch/x86/boot/install.sh 2.6.27.9
arch/x86/boot/bzImage System.map "/boot"
novo:/usr/src/linux# linux-initrd-createinstall -c 2.6.27.9
update-initramfs: Generating /boot/initrd.img-2.6.27.9
cryptsetup: WARNING: found more than one resume device candidate:
/dev/mapper/main-swap
/dev/mapper/plain-plainswap
W: mdadm: /etc/mdadm/mdadm.conf defines no arrays.
novo:/tmp/root/t# rm -rf *; gunzip < /boot/initrd.img-2.6.27.9|cpio --extract
&& find |sort > ../a
35897 blocks
novo:/tmp/root# grep cryptroot a
./conf/conf.d/cryptroot
./scripts/local-top/cryptroot
This was with my patched cryptsetup:
ii cryptsetup 2:1.0.6-6.cj
configures encrypted block devices
Now I'm going to install the upstream one:
novo:~# aptinstall cryptsetup=2:1.0.6-6
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be DOWNGRADED:
cryptsetup
0 upgraded, 0 newly installed, 1 downgraded, 0 to remove and 152 not upgraded.
Need to get 308kB of archives.
After this operation, 135kB of additional disk space will be used.
Do you want to continue [Y/n]?
...
Setting up cryptsetup (2:1.0.6-6) ...
update-initramfs: deferring update (trigger activated)
Processing triggers for initramfs-tools ...
update-initramfs: Generating /boot/initrd.img-2.6.27.9
cryptsetup: WARNING: found more than one resume device candidate:
/dev/mapper/main-swap
/dev/mapper/plain-plainswap
W: mdadm: /etc/mdadm/mdadm.conf defines no arrays.
novo:/tmp/root/t# rm -rf *; gunzip < /boot/initrd.img-2.6.27.9|cpio --extract
&& find |sort > ../b
35897 blocks
novo:/tmp/root# diff -u a b
novo:/tmp/root#
Remember, I've got no snapshot on the root volume -- and it works (gives same
results as my patched version).
To be sure, run the same thing manually (using my old wrapper script):
novo:/usr/src/linux# linux-initrd-createinstall 2.6.27.9
update-initramfs: Generating /boot/initrd.img-2.6.27.9
cryptsetup: WARNING: found more than one resume device candidate:
/dev/mapper/main-swap
/dev/mapper/plain-plainswap
W: mdadm: /etc/mdadm/mdadm.conf defines no arrays.
novo:/tmp/root/t# rm -rf *; gunzip < /boot/initrd.img-2.6.27.9|cpio --extract
&& find |sort > ../c
35897 blocks
novo:/tmp/root# diff -u a c
novo:/tmp/root#
still ok.
Now going to create a snapshot volume:
novo:~# lvcreate -s -L1G -n snap_test /dev/main/root
/dev/md1: read failed after 0 of 4096 at 0: Input/output error
Logical volume "snap_test" created
novo:~#
--- Logical volume ---
LV Name /dev/main/root
VG Name main
LV UUID M51c6n-rw9j-vKBU-UnIJ-GvXD-nVw0-7yisre
LV Write Access read/write
LV snapshot status source of
/dev/main/snap_test [active]
LV Status available
# open 2
LV Size 17.43 GB
Current LE 4462
Segments 2
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:11
novo:/usr/src/linux# linux-initrd-createinstall 2.6.27.9
update-initramfs: Generating /boot/initrd.img-2.6.27.9
cryptsetup: WARNING: found more than one resume device candidate:
/dev/mapper/main-swap
/dev/mapper/plain-plainswap
W: mdadm: /etc/mdadm/mdadm.conf defines no arrays.
novo:/tmp/root# diff -u a d
--- a 2008-12-16 03:05:35.100636522 +0100
+++ d 2008-12-16 03:10:11.183837682 +0100
@@ -39,7 +39,6 @@
./conf
./conf/arch.conf
./conf/conf.d
-./conf/conf.d/cryptroot
./conf/conf.d/md
./conf/conf.d/resume
./conf/conf.d/uswsusp
The snapshot broke it!
novo:~# lvremove /dev/main/snap_test
/dev/md1: read failed after 0 of 4096 at 0: Input/output error
Do you really want to remove active logical volume "snap_test"? [y/n]: y
Logical volume "snap_test" successfully removed
novo:~#
novo:/usr/src/linux# linux-initrd-createinstall 2.6.27.9
update-initramfs: Generating /boot/initrd.img-2.6.27.9
cryptsetup: WARNING: found more than one resume device candidate:
/dev/mapper/main-swap
/dev/mapper/plain-plainswap
W: mdadm: /etc/mdadm/mdadm.conf defines no arrays.
novo:/usr/src/linux#
novo:/tmp/root/t# rm -rf *; gunzip < /boot/initrd.img-2.6.27.9|cpio --extract
&& find |sort > ../e
35897 blocks
novo:/tmp/root# diff -u a e
novo:/tmp/root#
Removing the snapshot fixed it!
Ok, we're going to break it again, then upgrade to my patched cryptsetup
version:
novo:~# lvcreate -s -L1G -n snap_test /dev/main/root
/dev/md1: read failed after 0 of 4096 at 0: Input/output error
Logical volume "snap_test" created
novo:~#
novo:/usr/src/linux# linux-initrd-createinstall 2.6.27.9
update-initramfs: Generating /boot/initrd.img-2.6.27.9
cryptsetup: WARNING: found more than one resume device candidate:
/dev/mapper/main-swap
/dev/mapper/plain-plainswap
W: mdadm: /etc/mdadm/mdadm.conf defines no arrays.
novo:/tmp/root/t# rm -rf *; gunzip < /boot/initrd.img-2.6.27.9|cpio --extract
&& find |sort > ../f
35897 blocks
novo:/tmp/root# diff -u a f
--- a 2008-12-16 03:05:35.100636522 +0100
+++ f 2008-12-16 03:11:52.054081741 +0100
@@ -39,7 +39,6 @@
./conf
./conf/arch.conf
./conf/conf.d
-./conf/conf.d/cryptroot
./conf/conf.d/md
./conf/conf.d/resume
./conf/conf.d/uswsusp
confirmed brokenness.
novo:/SRCREBUILD# dpkg -i cryptsetup_1.0.6-6.cj_amd64.deb
(Reading database ... 235730 files and directories currently installed.)
Preparing to replace cryptsetup 2:1.0.6-6 (using
cryptsetup_1.0.6-6.cj_amd64.deb) ...
Unpacking replacement cryptsetup ...
Setting up cryptsetup (2:1.0.6-6.cj) ...
update-initramfs: deferring update (trigger activated)
Processing triggers for man-db ...
Processing triggers for initramfs-tools ...
update-initramfs: Generating /boot/initrd.img-2.6.27.9
cryptsetup: WARNING: found more than one resume device candidate:
/dev/mapper/main-swap
/dev/mapper/plain-plainswap
W: mdadm: /etc/mdadm/mdadm.conf defines no arrays.
novo:/tmp/root/t# rm -rf *; gunzip < /boot/initrd.img-2.6.27.9|cpio --extract
&& find |sort > ../g
35897 blocks
novo:/tmp/root# diff -u a g
novo:/tmp/root#
My patch confirmedly fixed this.
(For confirmation:
novo:/usr/src/linux# linux-initrd-createinstall 2.6.27.9
update-initramfs: Generating /boot/initrd.img-2.6.27.9
cryptsetup: WARNING: found more than one resume device candidate:
/dev/mapper/main-swap
/dev/mapper/plain-plainswap
W: mdadm: /etc/mdadm/mdadm.conf defines no arrays.
novo:/tmp/root/t# rm -rf *; gunzip < /boot/initrd.img-2.6.27.9|cpio --extract
&& find |sort > ../h
35897 blocks
novo:/tmp/root# diff -u a h
novo:/tmp/root#
still fixed.
)