Fix from #28 extended to support LVM (so, I think, it is universal clean fix of this bug). Change recordfail section in /etc/grub.d/00_header to:
if [ "$quick_boot" = 1 ]; then
cat <<EOF
function recordfail {
set recordfail=1
EOF
GRUBMDDEVICE="$(grub-probe --target=disk "${grubdir}")"
GRUBLVMDEVICE="$(grub-probe --target=disk "${grubdir}")"
if echo "$GRUBMDDEVICE" | grep "/dev/md" > /dev/null; then
cat <<EOF
# GRUB lacks write support for $GRUBMDDEVICE, so recordfail support is disabled.
EOF
elif echo "$GRUBLVMDEVICE" | grep "/dev/mapper" > /dev/null; then
cat <<EOF
# GRUB lacks write support for $GRUBLVMDEVICE, so recordfail support is disabled.
EOF
else FS="$(grub-probe --target=fs "${grubdir}")"
case "$FS" in
btrfs | cpiofs | newc | odc | romfs | squash4 | tarfs | zfs)
cat <<EOF
# GRUB lacks write support for $FS, so recordfail support is disabled.
EOF
;;
*)
cat <<EOF
if [ -n "\${have_grubenv}" ]; then if [ -z "\${boot_once}" ]; then save_env recordfail; fi; fi
EOF
esac
fi
cat <<EOF
}
Fix from #28 extended to support LVM (so, I think, it is universal clean fix of this bug). Change recordfail section in /etc/grub. d/00_header to:
if [ "$quick_boot" = 1 ]; then E="$(grub- probe --target=disk "${grubdir}")" CE="$(grub- probe --target=disk "${grubdir}")"
FS="$( grub-probe --target=fs "${grubdir}")"
cat <<EOF
function recordfail {
set recordfail=1
EOF
GRUBMDDEVIC
GRUBLVMDEVI
if echo "$GRUBMDDEVICE" | grep "/dev/md" > /dev/null; then
cat <<EOF
# GRUB lacks write support for $GRUBMDDEVICE, so recordfail support is disabled.
EOF
elif echo "$GRUBLVMDEVICE" | grep "/dev/mapper" > /dev/null; then
cat <<EOF
# GRUB lacks write support for $GRUBLVMDEVICE, so recordfail support is disabled.
EOF
else
case "$FS" in
btrfs | cpiofs | newc | odc | romfs | squash4 | tarfs | zfs)
cat <<EOF
# GRUB lacks write support for $FS, so recordfail support is disabled.
EOF
;;
*)
cat <<EOF
if [ -n "\${have_grubenv}" ]; then if [ -z "\${boot_once}" ]; then save_env recordfail; fi; fi
EOF
esac
fi
cat <<EOF
}
Then run update-grub