В моем файловом сервере linux четыре диска USB-3 с шифрованием LUKS. Немного запутанно монтировать их все: хотя они могут получить те же буквы дисков, что и в прошлый раз, могут и не получить, что приводит к некоторым пробам и ошибкам.
Чтобы установить их, я обычно говорю что-то вроде этого (обычно для каждого из c, d, e и f):
sudo cryptsetup open --type luks /dev/sdc d1
sudo mount /dev/mapper/d1 /d1
(Обратите внимание, что сценарий угрозы здесь заключается в том, что кто-то крадет мое оборудование. Цель состоит в том, чтобы при отключении питания я снова его включил. Допустимо, что файловый сервер не обслуживает файлы в мое отсутствие.)
Я вижу UUID в /dev/disk/by-uuid/
, хотя это не UUID LUKS. Я подозреваю, что они стабильны.
Я также вижу информацию о USB-порте в /dev/disk/by-path/
(не очень хорошо, зависит от того, где он подключен) и WWID в /dev/disk/by-id/
. В обоих случаях я мог бы создать короткий сценарий (для запуска вручную), который сканирует знакомые имена и использует sed
, чтобы вытащить номер диска, а затем выполнить две строки выше, чтобы открыть и смонтировать том.
Но, возможно, у этой проблемы есть лучшее решение. Какие-либо предложения?
Я бы настроил / и т.д. / crypttab и используйте UUID, например
usb1 UUID=d665864f-08e1-49ed-9adc-c608deadbeef
который настроит / dev / mapper / usb1 с соответствующего диска. Затем вы можете использовать записи fstab и т. Д. Для монтирования файлов. Во время загрузки система запрашивает парольную фразу для разблокировки диска, никаких дополнительных сценариев не требуется.
В итоге я написал короткий сценарий bash монтировать по UUID.
Ссылка выше покажет текущее состояние (которое может включать мертвые), поэтому вот как оно выглядит сегодня:
#!/bin/bash
# Mount all LUKS partitions that I know about that are connected to
# this machine but not already mounted.
luks_mount() {
# This is the UUID we can see before luksOpen.
uuid="$1"
# Where to mount it. Should be at the root of the root file
# system with no trailing slash. That is, /foo, not /foo/,
# /foo/bar or simply foo.
mount_point="$2"
if [ ! -d $mount_point ]; then
echo "$mount_point does not exist or is not a directory."
return
fi
root_id=$(stat -c '%D %m' /)
mount_id=$(stat -c '%D %m' "$mount_point")
if [ "$root_id" != "$mount_id" ]; then
echo "$mount_point is already mounted (is not part of the root filesystem)."
echo "$root_id != $mount_id"
return
fi
if [ ! -e /dev/disk/by-uuid/$uuid ]; then
echo "LUKS volume for $mount_point not available."
return
fi
drive_letter=$(stat /dev/disk/by-uuid/$uuid -c '%N' | \
sed -e 's/^.*sd//;' | \
tr -d "'")
device=/dev/sd$drive_letter;
mapping=$(echo $mount_point | tr -d /);
echo "Mounting $mount_point:"
sudo cryptsetup open --type luks $device $mapping;
sudo mount /dev/mapper/$mapping /$mapping;
}
luks_mount 4d4bc0a0-e67a-4f9b-8c70-05cfdbf9282c /jma-4t
luks_mount 4b824f8c-94d4-4655-8e56-67ead167ed4c /jma-3t
luks_mount 5d6777f0-f475-451e-bad8-3cdf6e80f7c5 /sb-4t
luks_mount 4ea3852f-8cdd-4ed9-898e-d86a851e0a9c /sb-3t