After removing a LVM physical device without unmounting and deactivating the volumes first, you see this kind of error:
~ # pvs /dev/vg_foo/lv_bar: read failed after 0 of 4096 at 53687025664: Input/output error /dev/vg_foo/lv_bar: read failed after 0 of 4096 at 53687083008: Input/output error /dev/vg_foo/lv_bar: read failed after 0 of 4096 at 0: Input/output error /dev/vg_foo/lv_bar: read failed after 0 of 4096 at 4096: Input/output error PV VG Fmt Attr PSize PFree /dev/md127 vg_fnords lvm2 a-- 742.96g 177.71g : :
To get rid of them, you have to check for /dev/dm-
XX device corresponding to the logical volume(s) in question:
~ # ls -la /dev/disk/by-label total 0 drwxr-xr-x 2 root root 840 Jul 12 16:40 ./ drwxr-xr-x 8 root root 160 Jul 12 16:40 ../ : lrwxrwxrwx 1 root root 11 Jul 12 16:22 foobar -> ../../dm-37 :
(assuming the filesystem label of the logical volume in question has been “foobar”)
No you can remove that device mapper device from the system by
~ # dmsetup remove /dev/dm-37
… and your lvm commands are quiet again
Recent Ubuntu and Mint distributions seem to have trouble booting systems where relevant filesystems on LVM are referenced by label or uuid instead of /dev/
… .
Tracking this down on Mint 18.2 lead me to the file /usr/share/initramfs-tools/scripts/local-block/lvm2
, where lvm lvchange
is only called for devices matching the pattern /dev/*/*
enigmaticPhysicist on Ask Ubuntu regarding Can't find LVM root dropped back to initramfs had a solution to this by adding an initrd script:
#!/bin/sh PREREQ="" prereqs() { echo "$PREREQ" } case $1 in prereqs) prereqs exit 0 ;; esac . /scripts/functions # Begin real processing below this line # This was necessary because ubuntu's LVM autodetect is completely broken. This # is the only line they needed in their script. It makes no sense. # How was this so hard for you to do, Ubuntu?!?!? lvm vgchange -ay
N.B.: Ubuntu Bug #1573982 seems to handle this.