我想创建一个加密的 LUKS 容器:
# dd if=/dev/random of=pvt.img bs=1M count=512
# cryptsetup -y luksFormat pvt.img
WARNING!
========
This will overwrite data on pvt.img irrevocably.
Are you sure? (Type uppercase yes): YES
Enter passphrase:
Verify passphrase:
Cannot find a free loopback device.
Device pvt.img doesn't exist or access denied.
# ls /dev/loop*
ls: cannot access '/dev/loop*': No such file or directory
我没有任何循环设备(不知道为什么 - 这是一个 VPS),所以我尝试手动创建一个:
# mknod /dev/loop0 b 7 0
# ls -l /dev/loop0
brw-r--r-- 1 root root 7, 0 Jan 7 14:51 /dev/loop0
但是,当我再次尝试时,会出现同样的错误。
这里有什么问题?
答案1
您的系统可能缺少循环设备的驱动程序。通常,设备/dev/loop*
会在驱动程序加载时由 udev 创建;手动创建/dev
条目不会有帮助,因为驱动程序不存在。
检查是否/sys/module/loop
存在。如果没有,则不会加载循环设备驱动程序。它可以作为一个模块提供:trymodprobe
循环。如果这没有帮助,那么你的 VPS 就设置为没有循环模块,这在技术上是可行的,但让我觉得 VPS 服务的一个奇怪的选择。
也有可能循环驱动程序存在,但由于某种原因(可能是某处配置错误)设备/dev/loop-control
不存在。该设备用于动态分配循环设备。
mknod -m 660 /dev/loop-control c 10 237
答案2
我创建了一个 Amazon EC2 实例并尝试了您想要执行的操作。它工作时没有任何循环错误。
以下是我采取的步骤:
dd if=/dev/zero of=test2 bs=1M count 512 : create 512MB blank file
sudo cryptsetup luksFormat test2 : asks for confirmation and passphrase
sudo mkdir /mnt/tmp : create a mount point
sudo chown -R ubuntu:ubuntu /mnt/tmp : make sure I can write to mount point
sudo cryptsetup luksOpen test2 somename : open luks container with a name
sudo mkfs.ext2 /dev/mapper/somename : create a filesystem in the luks container
sudo mount /dev/mapper/somename /mnt/tmp : mount containter, so it can be used
touch /mnt/tmp/MYTESTFILE : create arbitrary file in container
echo "Some data to be double sure it works" > /mnt/tmp/MYTESTFILE : add content
________________________________________________________
Reboot the VPS, then after reboot log back in and check:
________________________________________________________
sudo cryptsetup luksOpen test2 somename : open new container again
sudo mount /dev/mapper/somename /mnt/tmp : mount it
ls /mnt/tmp : should see MYTESTFILE here
cat /mn/tmp/MYTESTFILE : show the data put in the file earlier