LUKS Filesystems
When setting up a new Linux installation, I decided to take advantage of LUKS (Linux Unified Key System) to encrypt the data on my device. The setup is pretty turn-key, most Linux distributions offer an option for guided LUKS setup during installating. When rebooting my device you get a prompt to enter a password and the storage is decrypted.
I recently decided to retire my internal SSD to use it as external storage instead. Before formatting the SSD, I had hoped to mount it to a new Kubuntu 22.04 installation and copy over any files I wanted to keep. This was the first time I had ever tried mounting a LUKS filesystem manually, and it took a bit of messing around. Mostly I think this was because both SSDs were full installations of Kubuntu, so the partitions happened to be named the same - they were both created with guided setup for LUKS.
For some context, here's output of vgdisplay
and all currently mapped devices on my system before making any modifications. It may be useful to compare this against later output to help see what's happening.
sudo vgdisplay
[sudo] password for kapper:
--- Volume group ---
VG Name vgkubuntu
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 1
Act PV 1
VG Size <1.82 TiB
PE Size 4.00 MiB
Total PE 476372
Alloc PE / Size 476372 / <1.82 TiB
Free PE / Size 0 / 0
VG UUID uACwRN-syEc-S99E-tznk-3hYD-062d-oWVbKv
ls /dev/mapper/
control nvme0n1p3_crypt vgkubuntu-root vgkubuntu-swap_1
When initially plugging the device in, we run lsblk
and check the output to find the name of the device we want to access is sda3
. My system automatically mounted sda2
which is /boot
- not what we want, but understandable since the other partition was encrypted and not immediately available for mounting.
lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
loop0 7:0 0 4K 1 loop /snap/bare/5
loop1 7:1 0 61.9M 1 loop /snap/core20/1405
loop2 7:2 0 55.6M 1 loop /snap/core18/2538
loop3 7:3 0 62M 1 loop /snap/core20/1587
loop4 7:4 0 163.3M 1 loop /snap/firefox/1635
loop5 7:5 0 163.3M 1 loop /snap/firefox/1670
loop6 7:6 0 400.8M 1 loop /snap/gnome-3-38-2004/112
loop7 7:7 0 164.8M 1 loop /snap/gnome-3-28-1804/161
loop8 7:8 0 248.8M 1 loop /snap/gnome-3-38-2004/99
loop9 7:9 0 81.3M 1 loop /snap/gtk-common-themes/1534
loop10 7:10 0 91.7M 1 loop /snap/gtk-common-themes/1535
loop11 7:11 0 43.6M 1 loop /snap/snapd/15177
loop12 7:12 0 47M 1 loop /snap/snapd/16292
loop13 7:13 0 169.4M 1 loop /snap/spotify/60
sda 8:0 0 931.5G 0 disk
├─sda1 8:1 0 512M 0 part
├─sda2 8:2 0 732M 0 part /media/kapper/20e58d66-eaa7-4c73-b40f-b293f9a468da
└─sda3 8:3 0 930.3G 0 part
└─luks-f08f6bfc-fd1f-49cc-8882-c566f19189a3
253:3 0 930.3G 0 crypt
mmcblk0 179:0 0 3.7G 0 disk
└─mmcblk0p1 179:1 0 3.7G 0 part
nvme0n1 259:0 0 1.8T 0 disk
├─nvme0n1p1 259:1 0 512M 0 part /boot/efi
├─nvme0n1p2 259:2 0 1.7G 0 part /boot
└─nvme0n1p3 259:3 0 1.8T 0 part
└─nvme0n1p3_crypt 253:0 0 1.8T 0 crypt
├─vgkubuntu-root 253:1 0 1.8T 0 lvm /
└─vgkubuntu-swap_1 253:2 0 976M 0 lvm [SWAP]
Now we can use cryptsetup
to open the LUKS device and map the unencrypted data to a device. We choose the name of the mapped device - so you can change the ssd
name below to be anything you want. The mapped device will be created in /dev/mapper/
.
sudo cryptsetup luksOpen /dev/sda3 ssd-kubuntu
Enter passphrase for /dev/sda3:
Note that if your current system is using LUKS, some mappings may already exist - you should provide unique names for each device.
ls /dev/mapper/
control nvme0n1p3_crypt ssd-kubuntu ssd--kubuntu-root ssd--kubuntu-swap_1 vgkubuntu-root vgkubuntu-swap_1
If you did not provide a unique name or if the devices default name happened to collide with an existing mapped device, you can change it with vgrename
. This command needs to reference a UUID to rename the mapped device though, so we first use vgdisplay
to get this information.
sudo vgdisplay
[sudo] password for kapper:
WARNING: VG name vgkubuntu is used by VGs 3Ab6YC-AsQ0-BKfF-F5QA-OXb3-HvIu-hsLuyX and uACwRN-syEc-S99E-tznk-3hYD-062d-oWVbKv.
Fix duplicate VG names with vgrename uuid, a device filter, or system IDs.
--- Volume group ---
VG Name vgkubuntu
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size <930.28 GiB
PE Size 4.00 MiB
Total PE 238151
Alloc PE / Size 238151 / <930.28 GiB
Free PE / Size 0 / 0
VG UUID 3Ab6YC-AsQ0-BKfF-F5QA-OXb3-HvIu-hsLuyX
--- Volume group ---
VG Name vgkubuntu
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 1
Act PV 1
VG Size <1.82 TiB
PE Size 4.00 MiB
Total PE 476372
Alloc PE / Size 476372 / <1.82 TiB
Free PE / Size 0 / 0
VG UUID uACwRN-syEc-S99E-tznk-3hYD-062d-oWVbKv
The two devices above may have the same name but they provide unique UUIDs. The device I want to rename is 1TB, so here I'll use the 3Ab6YC-AsQ0-BKfF-F5QA-OXb3-HvIu-hsLuyX
UUID to rename it. You may get a warning here. The warning is referring to the device we just renamed - notice the matching UUIDs. We just need to update our VG devices with the new name, which we will do in the next step.
sudo vgrename 3Ab6YC-AsQ0-BKfF-F5QA-OXb3-HvIu-hsLuyX ssd-kubuntu
WARNING: VG name vgkubuntu is used by VGs 3Ab6YC-AsQ0-BKfF-F5QA-OXb3-HvIu-hsLuyX and uACwRN-syEc-S99E-tznk-3hYD-062d-oWVbKv.
Fix duplicate VG names with vgrename uuid, a device filter, or system IDs.
Processing VG vgkubuntu because of matching UUID 3Ab6YC-AsQ0-BKfF-F5QA-OXb3-HvIu-hsLuyX
Volume group "3Ab6YC-AsQ0-BKfF-F5QA-OXb3-HvIu-hsLuyX" successfully renamed to "ssd-kubuntu"
Activate the devices - this will resolve the warning from the previous step. If you still get a warning here, you do have two devices with the same name. Check the output of vgdisplay
to determine which device needs to be renamed.
sudo vgchange -ay
2 logical volume(s) in volume group "ssd-kubuntu" now active
2 logical volume(s) in volume group "vgkubuntu" now active
Check the devices were activated successfully
sudo lvscan
ACTIVE '/dev/ssd-kubuntu/root' [929.32 GiB] inherit
ACTIVE '/dev/ssd-kubuntu/swap_1' [976.00 MiB] inherit
ACTIVE '/dev/vgkubuntu/root' [<1.82 TiB] inherit
ACTIVE '/dev/vgkubuntu/swap_1' [976.00 MiB] inherit
See information for the activated VG devices -
sudo lvdisplay
--- Logical volume ---
LV Path /dev/ssd-kubuntu/root
LV Name root
VG Name ssd-kubuntu
LV UUID VgiJki-nRap-tE3q-etn0-HKJz-2g6V-9TXg19
LV Write Access read/write
LV Creation host, time kubuntu, 2021-12-06 09:26:51 -0500
LV Status available
# open 0
LV Size 929.32 GiB
Current LE 237907
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:4
--- Logical volume ---
LV Path /dev/ssd-kubuntu/swap_1
LV Name swap_1
VG Name ssd-kubuntu
LV UUID feQi9r-QVBH-ukjv-sE6P-jgzX-x46p-ahxPz9
LV Write Access read/write
LV Creation host, time kubuntu, 2021-12-06 09:26:52 -0500
LV Status available
# open 0
LV Size 976.00 MiB
Current LE 244
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:5
--- Logical volume ---
LV Path /dev/vgkubuntu/root
LV Name root
VG Name vgkubuntu
LV UUID 00Zi9e-JF5h-WNZn-527p-Tfqq-RGc2-kRdtds
LV Write Access read/write
LV Creation host, time kubuntu, 2022-07-29 19:47:38 -0400
LV Status available
# open 1
LV Size <1.82 TiB
Current LE 476128
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:1
--- Logical volume ---
LV Path /dev/vgkubuntu/swap_1
LV Name swap_1
VG Name vgkubuntu
LV UUID ATtx1E-9CDY-R349-pzqJ-f6id-RGd0-Zz136a
LV Write Access read/write
LV Creation host, time kubuntu, 2022-07-29 19:47:38 -0400
LV Status available
# open 2
LV Size 976.00 MiB
Current LE 244
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:2
Finally, create the directory where you want to mount the device if it doesn't exist already, then mount the device.
It's likely that you can skip this step. If for some reason your device isn't automatically mounted, this is an example of how to mount a mapped device. On Kubuntu 22.04, my device was automatically mounted at /media/kapper/174fdc5d-0e9b-4be2-aeea-1c2fbfd65c28
and avaialble to browse in Dolphin.
mkdir /mnt/ssd
sudo mount /dev/ssd-kubuntu/root /mnt/ssd/
ls /mnt/ssd/
bin cdrom etc lib lib64 lost+found mnt proc run snap swapfile tmp var
boot dev home lib32 libx32 media opt root sbin srv sys usr
Done! You can now access the filesystem from your last LUKS installation and transfer any files you want to keep.
No Comments