You can automatically unlock and mount LUKS encrypted volumes at boot by specifying the volumes and their keys in /etc/crypttab.

For the sake of this article, I am working with non-critical volumes. Volumes for storage. Not volumes required to boot your machine properly. I am not discussing how to mount an encrypted root volume.

I like to keep my keyfiles on USB drives. You do not need to use a USB device to unlock your volumes, but it is a bit silly to keep the key on a permanent disk connected to your machine, right?

You can specify an /etc/fstab entry for your USB key like so.

# /etc/fstab
UUID=1ed7fee7-0ea5-4643-bb0c-a4937da77a3f   /mnt/key    ext4    defaults,nofail,x-systemd.device-timeout=1

It is less a recommendation, and more a requirement, that you mount the key using a UUID or some other less flexible identifier. Names like /dev/sdc1 can vary wildly for a USB device.

I specify nofail and x-systemd.device-timeout because I consider my encrypted volume non-critical. It is a secondary volume. So if I forget to put my USB key in my computer, it is fine. It will timeout after 1 second and boot normally. Without these settings, your computer will hang at boot forever or for a very long time if you forget to connect your USB key before booting.

nofail

The system will not wait for the device to show up and be unlocked at boot, and not fail the boot if it does not show up.

x-systemd.device-timeout=

Configure how long systemd should wait for a device to show up before giving up on an entry from /etc/fstab. Specify a time in seconds or explicitly append a unit such as "s", "min", "h", "ms".

Now we can specify in /etc/crypttab which encrypted volume(s) to mount at boot, and where the keyfiles are.

# /etc/crypttab
storage1    UUID=d719b16d-d9e3-4a7d-97f4-661bc7904a69   /mnt/key/mykey.keyfile  nofail

Note above. I have an encrypted volume identified by a UUID that will be opened using the name storage1. The keyfile used to unlock that volume lives at /mnt/key/ and is named mykey.keyfile. nofail indicates that this is not a critical drive, and if a failure occurs, booting should continue normally.

There is a bit of a catch here. /etc/crypttab is processed before /etc/fstab. So /mnt/key will not be available at the right time.

To get around that, we create /etc/cryptdisks like so.

# /etc/default/cryptdisks
CRYPTDISKS_MOUNT='/mnt/key'

This tells the crypt software to mount /mnt/key before processing /etc/crypttab.

With all that in place, when you reboot, the volume should be available, unencrypted, at /dev/mapper/storage1.

A standard /etc/fstab entry to mount that unencrypted device to a standard location can be done as you would for any other unencrypted volume.

# /etc/fstab
/dev/mapper/storage1    /mnt/storage1   ext4    defaults,nofail 0   1