How to Recover a LUKS Encrypted Disk

This morning, my Ubuntu laptop won’t boot up. My immediate reaction was shivers at the back of my neck and then down the shoulders. I don’t understand why it felt that way. It’s like one of those situations when you suddenly discovered you left your wallet, your laptop, or something valuable in a restaurant and your mind started racing trying to figure out how to get back quickly and at the same time thinking what would happen and what would you do if you can’t locate it anymore… And all those thoughts happening in just two or three seconds.

In this case, my laptop won’t boot up, it uses LUKS full disk encryption, I have no idea how to recover it, I haven’t done it before, I don’t know if it can be recovered, and I’ve got tons of important data in there!

Fortunately, those were just a couple of seconds and after that you go back to your sane state and do what most everyone else does – Google your way out. Thanks again to Google, it was easy to research on how to recover an LUKS-encrypted disk.

I missed the old days when recovering a disk from a failed system was as simple as attaching the disk to another system, mounting it, and start accessing your data back. Life has changed. With most of our valuables in digital format nowadays, you need to apply the same security you do with physical valuables – you lock them up with a key. But instead of locking with a door, you lock the data by encrypting it.

Below are the steps to recover a LUKS encrypted disk. There are tons of information like this online but I thought I just need to add another document among hundreds already out there in case one poor soul can only find this one.

Summary:

  1. Boot the system from a rescue disk or Live CD. If this is not possible, attach the encrypted disk to another Linux system
  2. Identify the device name of the encrypted disk
  3. Identify the encrypted partition in the disk
  4. Unlock the encrypted partition
  5. If the partition is using logical volumes, identify the volume group(s) used
  6. If the partition is using logical volumes, enable the volume group
  7. Mount the logical volume desired. If the partition is not using logical volumes, mount the mapped device directly.
  8. Unmount and lock the encrypted partition when done

Details:

Step 1. Remove the disk from the bad system and attach it to another Linux machine. If the machine is still running fine but the problem was just the OS being corrupted or something, you can boot from a rescue or Live CD.

Step 2. Once the disk is attached to another system, identify the device name of the disk as to how it got attached. You can view this by viewing /proc/partitions. If you are booting from a rescue disk or Live CD, do the same, but you’ll discover that it is easier to identify the disk since you won’t be confusing it with other disks like when it is attached to another system.

Below is a sample output. In this case the device you need to recover is /dev/sda with partitions sda1, sda2, and sda5.

# cat /proc/partitions
major minor #blocks name

7 0 731040 loop0
8 0 58605120 sda
8 1 248832 sda1
8 2 1 sda2
8 5 58353664 sda5

It’s probably easier to use the fdisk command to get a much clearer view of the layout of the partitions.

# fdisk -l /dev/sda

Disk /dev/sda: 60.0 GB, 60011642880 bytes
255 heads, 63 sectors/track, 7296 cylinders, total 117210240 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00089bcb

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048      499711      248832   83  Linux
/dev/sda2          501758   117209087    58353665    5  Extended
/dev/sda5          501760   117209087    58353664   83  Linux

Step 3. Next, find the partition that is encrypted. This is where the actual data resides. Run the cryptsetup command on each partition and find the one that says something like “LUKS header information…”

# cryptsetup -v luksDump /dev/sda1
Device /dev/sda1 is not a valid LUKS device.
Command failed with code 22: Device /dev/sda1 is not a valid LUKS device.

 

# cryptsetup -v luksDump /dev/sda2
Device /dev/sda2 is not a valid LUKS device.
Command failed with code 22: Device /dev/sda2 is not a valid LUKS device.

 

# cryptsetup -v luksDump /dev/sda5
LUKS header information for /dev/sda5

Version:       	1
Cipher name:   	aes
Cipher mode:   	xts-plain64
Hash spec:     	sha1
Payload offset:	4096
MK bits:       	512
MK digest:     	21 84 3e c0 3e 9e 23 1e 34 9b 39 05 8f b9 47 61 89 a6 2a 81
MK salt:       	fc ac 3d 4f 1e 3d d4 ce 66 6b d3 90 ba f4 79 a8
               	d9 c9 38 a0 c2 79 bc 47 71 c6 8f 49 23 46 f1 6b
MK iterations: 	22500
UUID:          	2c8d56ec-749f-4d95-ab39-4ea17edb4c01

Key Slot 0: ENABLED
	Iterations:         	90067
	Salt:               	e4 25 ae 7c 5d 62 81 5e ea 37 95 0f 59 7b c8 7f
	                      	13 4f bc 15 70 4e 82 e1 41 db 1d 4b 65 7a de 5c
	Key material offset:	8
	AF stripes:            	4000
Key Slot 1: DISABLED
Key Slot 2: DISABLED
Key Slot 3: DISABLED
Key Slot 4: DISABLED
Key Slot 5: DISABLED
Key Slot 6: DISABLED
Key Slot 7: DISABLED
Command successful.

From the sample output above, the partition we need to recover is /dev/sda5.

Step 4. Unlock the encrypted partition using the cryptsetup command. You will need the passphrase of the encrypted disk. I forgot to mention, you need this password to recover the data from the disk. If you don’t know the password or you forgot, then you’re out of luck. Unless you can guess the password or do a brute force password guessing, no current technology or witchcraft on earth can help you unlock the encryption.

That’s the whole idea of encrypting a disk so that in case your laptop got stolen, got lost, or got left at a restaurant, no one but you who knows the password can see your data.

# cryptsetup -v luksOpen /dev/sda5 sda5_crypt
Enter passphrase for /dev/sda5:
Key slot 0 unlocked.
Command successful.

Step 5. After unlocking the device, check if the partition is using LVM (Logical Volume Management). If your data resides in a logical volume, you’d need to identify those volumes so that you’d know what to mount. Run the lvdisplay command to see the volumes. Below is a sample output.

# lvdisplay
  --- Logical volume ---
  LV Path                /dev/ubuntu/root
  LV Name                root
  VG Name                ubuntu
  LV UUID                fy5LpG-HPX7-Spe1-C92m-nzPq-B3IB-eTjCFA
  LV Write Access        read/write
  LV Creation host, time ubuntu, XXXX
  LV Status              available
  # open                 0
  LV Size                53.61 GiB
  Current LE             13724
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           252:1

  --- Logical volume ---
  LV Path                /dev/ubuntu/swap_1
  LV Name                swap_1
  VG Name                ubuntu
  LV UUID                ZSwRl4-bdV1-kqJ3-V1lG-ndfZ-cdSh-P5X3kp
  LV Write Access        read/write
  LV Creation host, time ubuntu, XXXX
  LV Status              available
  # open                 0
  LV Size                1.99 GiB
  Current LE             509
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           252:2

Step 6. If the partition has logical volumes, enable the volume group using the vgchange command. From the sample above, the name of the volume group is ubuntu.

# vgchange -a y ubuntu
  2 logical volume(s) in volume group "ubuntu" now active

Step 7a. If the partiton is using logical volumes, mount the logical volume desired. Using the sample above, we want to mount /dev/ubuntu/root.

# mkdir /tmp/disk
# mount /dev/ubuntu/root /tmp/disk

Step 7b. If the partition does not have logical volumes, mount the mapped device directly.

# mkdir /tmp/disk
# mount /dev/mapper/sda5_crypt /tmp/disk

That’s it. You can now view your data in /tmp/disk.

Step 8. When you’re done accessing the data, don’t forget to unmount and close (lock) the encrypted partition.

# umount /tmp/disk
# cryptsetup luksClose /dev/mapper/sda5_crypt

22 thoughts on “How to Recover a LUKS Encrypted Disk

  1. I in addition to my buddies have been checking the best techniques from your website while unexpectedly came up with a horrible feeling I had not expressed respect to the website owner for those tips. Those guys are already consequently stimulated to read all of them and now have extremely been tapping into these things. Thanks for turning out to be well kind and then for figuring out this form of outstanding useful guides millions of individuals are really wanting to know about. Our sincere regret for not saying thanks to earlier.

  2. Pingback: centersquare.org

  3. I was suggested this website by way of my cousin. I’m now not certain whether or not this post is written by means of him as nobody else understand such detailed approximately my problem. You are wonderful! Thank you!

  4. Greetings. This was the post I was looking for, but unfortunately the command in step 4 gives me this error message:

    Enter passphrase for /dev/sda2:
    device-mapper: reload ioctl on failed: Invalid argument
    Failed to setup dm-crypt key mapping for device /dev/sda2.
    Check that kernel supports aes-cbc-essiv:sha256 cipher (check syslog for more info).
    Failed to read from key storage.
    Command failed with code 5: Failed to read from key storage.

    I am really a beginner in Linux. Can someone tell me what I did wrong?

  5. Pingback: Need help recovering formatted LUKS Ext4 partition

  6. Hey guys. I have a problem lol, my laptop has to hard drives, my os drive and my backup drive and well I encrypted the backup one. Yesterday I reinstalled Fedora only to realize that I could not unlock it even with the KNOWN to be correct pass phrase… the exact message is “No key available with this pass phrase.” Before you guys say anything about maybe the pass phrase is wrong, I had this drive set so I had to unlock it every time I needed it so I was unlocking it constantly and therefor know what it is for sure. Anyway,
    Thanks to anyone who tries to help,
    Joe

  7. Pingback: How to recover encrypted LUKS lubuntu data? - TecHub

  8. mount: Wrong fs type, bad option, bad superblock on /dev/mapper/ubuntu–vg-root,
    missing codepage or helper program, or other error.
    In some cases useful info is found in syslog – try dmesg | tail or so

  9. Pingback: How to Protect Your LUKS-encrypted Laptop from Evil Maid Attack | Alvin Abad Boldly Going Nowhere

  10. Small addition: to deactivate the logical volumes (right before the final close command) in the volume groutp ubuntu, use
    vgchange -a n ubuntu
    Thank you for your extremely helpful article, which is saying something in the StackOverflow era.

  11. if you happen to be getting a “Volume group (Volume_Group_Name) is exported” error then when the vg was last closed it, it may have been passed a “vgexport” command and you’ll have to “vgimport” it.

    This comment is more for me incase I fail to remember and find my way back here in the future. And on that note, HELO FUTURE ME!

  12. You have really saved my life today. An unfortunate and serendipitous mixture of Bitbucket being slow, Chrome being buggy (and maybe me being impatient?) could’ve ended up really bad for me and my work laptop today. I don’t know how, but I managed to nearly brick my LUKS partition today, getting all sorts of scary-looking errors and exceptions. It’s been a long and hard 2 hours of frantic troubleshooting but thanks to you and the almighty fsck, which managed to repair the corrupted superblocks of the partition, I can be writing this very post as if nothing had happened. Thank you, really.

  13. Pingback: Recover Deleted/Luks Encrypted Disk – 1OO Club

  14. I’ve tried this tutorial, but at the step 7a I have this message:
    mount: /dev/mapper/kubuntu-vg: can’t read superblock

Leave a comment