--- layout: post status: publish published: true title: Encrypted Partition Recovery on Ubuntu 10.10 wordpress_id: 1401 wordpress_url: https://www.martineve.com/?p=1401 date: !binary |- MjAxMS0wOC0wOCAwNzoyNjo1NiArMDIwMA== date_gmt: !binary |- MjAxMS0wOC0wOCAwNzoyNjo1NiArMDIwMA== categories: - Technology - InfoSec - Linux tags: - Linux - security - Encryption - Recovery comments: [] ---

The other day I was installing Xubuntu 10.10 onto an old Mac G4 Powerbook and got the keyboard layout wrong. I had encrypted the entire disk and so, with the keyboard mapped entirely incorrectly ("j" was enter), I was unable to unlock the disk to continue.

To solve this, I booted off the alternate CD and entered a recovery shell, hoping this would ask me to unlock the disk. Sadly, no luck, it dumped me to a minimal BusyBox command shell to work out the unlock procedure myself. Here's how I did it. Please note, I can take no responsibility if these instructions cause damage to your system; they didn't for me, but if you don't know what you are doing, you could lose data.

Many of these instructions are derived from the Debian crypto rescue document.

Enable LUKS Crypto

Execute the following commands in the rescue prompt. One or more may fail, this shouldn't matter.

{% highlight bash %} anna-install crypto-modules depmod -a modprobe dm-mod modprobe aes {% endhighlight %}

Determine which partition needs unlocking

Use fdisk (or on a Mac, parted/pdisk) to ascertain which is your root partition. You'll also need to determine your boot partition. I'm not going to go into details here as, if you don't know how to do this, you need to read more before you can safely complete this guide.

Decrypt the partition

Assuming your encrypted partition was hda4:

{% highlight bash %} cryptsetup luksOpen /dev/hda4 hda4_crypt {% endhighlight %}

Determine which logical volumes exist within the group

{% highlight bash %} lvdisplay | grep "LV Name" {% endhighlight %}

This produces an output like this:

{% highlight bash %} LV Name /dev/myhost/root LV Name /dev/myhost/home LV Name /dev/myhost/swap_1 {% endhighlight %}

As the group name is "myhost" in the above example (it will be different for you), enable the logical volume with:

{% highlight bash %} vgchange -a y myhost {% endhighlight %}

Mount partitions

Obviously substituting "myhost" for the group and "sda1" for your boot partition

{% highlight bash %} mkdir /target mount /dev/myhost/root /target mount /dev/myhost/home /target/home mount /dev/sda1 /target/boot mount proc /target/proc -t proc mount sysfs /target/sys -t sysfs {% endhighlight %}

Check that /target/etc/crypttab contains the correct name (in this example "myhost"). If it doesn't:

{% highlight bash %} dmsetup rename myhost name_according_to_crypttab {% endhighlight %}

Finally:

{% highlight bash %} chroot /target {% endhighlight %}

and if you want to reconfigure the keyboard, my entire reason for doing this:

{% highlight bash %} dpkg-reconfigure console-setup {% endhighlight %}

Featured image by joncallas under a CC-BY license.