Use this script via curl -L -O https://gist.github.com/dragon788/e777ba64d373210e4f6306ad40ee0e80/raw/a86f3d05fb56feb6ef01fc2d61a4feb2fd82b281/crypt-fix.sh
and sudo bash ./crypt-fix.sh
.
You may need to edit the DEVICE variable to reflect your disk and partition layout (this was created on an EFI system using LUKS and LVM).
It will prompt you for your disk password once to mount and discover the correct name for the encrypted volume mount and
then prompt again to mount with the correct name so that the update-initramfs
command succeeds with the appropriate mapping,
if this wasn't done you would get a warning and your next boot would still fail.
-
-
Save ericpardee/a81cdad817b2b6097acbad8cc412b43f to your computer and use it in GitHub Desktop.
Repair "ubuntu--vg-root" not found with LUKS and LVM encryption
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# Call with `sudo bash DEBUG=1 ./crypt-fix.sh` for verbose output | |
[ -n "$DEBUG"] && set -x | |
# Prompt user for device from /dev/sd* /dev/nvme* /dev/mmc* prefixes? | |
# For /dev/sda probably sda1 is EFI and sda2 is boot and sda3 is encrypted | |
DEVICE=/dev/nvme0n1 | |
EFIPATH="${DEVICE}p1" | |
BOOTPATH="${DEVICE}p2" | |
CRYPTPATH="${DEVICE}p3" | |
TARGETPATH=/mnt | |
# Need root for mounting stuff | |
if ! (( $EUID == 0 )); then echo "Please run with `sudo $0`"; fi | |
clear_mounts () { | |
# Clears mounts in case of interrupt or upon exit to allow running script multiple times | |
umount $TARGETPATH/boot/efi | |
umount $TARGETPATH/boot | |
umount $TARGETPATH/proc | |
umount $TARGETPATH/dev | |
umount $TARGETPATH | |
vgchange -an | |
cryptsetup close temp_name | |
cryptsetup close $CRYPTNAME | |
set +x | |
} | |
trap clear_mounts INT EXIT | |
cryptsetup open $CRYPTPATH temp_name | |
vgchange -ay | |
# Can't get this until LVM devices are scanned above | |
ROOTPATH=$(ls /dev/mapper/* | grep root) | |
# Make sure nothing else is mounted on our $TARGETPATH | |
umount $TARGETPATH | |
wait | |
mount $ROOTPATH $TARGETPATH | |
# Find the name that is required for `update-initramfs` to properly update things | |
CRYPTNAME=$(cat $TARGETPATH/etc/crypttab | awk '/^[ ]*[^#]/ { print $1; exit }') | |
umount $TARGETPATH | |
vgchange -an | |
cryptsetup close temp_name | |
# This proper name is required for `update-initramfs` to properly update things | |
cryptsetup open $CRYPTPATH $CRYPTNAME | |
wait | |
vgchange -ay | |
ROOTPATH=$(ls /dev/mapper/* | grep root) | |
mount $ROOTPATH $TARGETPATH | |
mount $BOOTPATH $TARGETPATH/boot | |
mount $EFIPATH $TARGETPATH/boot/efi | |
mount -t proc proc $TARGETPATH/proc | |
mount -o bind /dev $TARGETPATH/dev | |
# Have also seen people mounting dev/pts and run and sys, they don't appear to be necessary | |
chroot $TARGETPATH update-initramfs -c -k all | |
echo "Completed crypt-fix, try rebooting and you should get prompted for your passphrase after grub" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment