我的电脑中有以下 3 个驱动器:
/dev/sda
240GB 固态硬盘Sandisk SSDSDA240G
/dev/sdb
1TB 硬盘WDC WD10EZEX-08WN4A0
/dev/sdc
2TB 固态硬盘TS2TSSD230S
我想安装 Debian Bookworm (12) /dev/sda
。我的计划是这样的:
/dev/sda
:luks/
分区 + ESP
/dev/sdb
:目前不相关
/dev/sdc
:luks/home
分区
但是,debian 安装程序不允许通过引导或手动分区来执行此操作。你能帮忙吗?
答案1
您将两个问题结合在一起:加密和多个驱动器。
今天,我不得不用 Debian 12 网络安装程序进行类似的安装,也遇到了麻烦,但幸运的是 曾是能够设置多个 luks 加密驱动器。我使用“LUKS 内的 LVM”方案将两个驱动器合并在一起。(在笔记本电脑上我不使用 ZSF,但在 PC 上我更喜欢 ZSF 而不是 lvm,顺便说一句。)因为你的帖子以老式的“正常”分区(无 LVM)开始,你甚至没有提到交换分区,所以我决定针对更多没有经验的观众。所以我更详细地解释了我所做的事情并添加了一些旁注。这可能让人感到不知所措,但实际上,对于一些 Linux 经验来说,这是直接的“深入挖掘直到修复”方法。
如果一切太复杂或仍然无法正常工作:只需拔下除一个系统(根)驱动器之外的所有驱动器。然后使用“luks+lvm 引导安装,使用单独的(非常小的)主分区”安装您的 Linux。安装程序直接支持单驱动器安装。稍后,您可以将其他驱动器作为新物理卷添加到 VG,将您的家扩展到该空间。通过边学边做,您已经有一个可以运行的安装(最初是一个小家)
安装基础系统
使用高级选项 -> 专家安装程序
添加安装程序组件“crypto-dm-modules”和“parted-udeb”手动分区时使用 luks。(除了一些其他组件)
完成安装程序步骤。额外的选项大多使用默认值,例如网络。有关更多详细信息,尤其是(6.3.4. 分区和挂载点选择):第 6 章 使用 Debian 安装程序#组件
手动分区:步骤“创建分区”
- 我总是使用姓名标签使用下划线“_”分隔名称各部分(不是用“-”或“ ”作为分隔符),我倾向于为每个分区设置唯一的名称。这在排除故障时很有帮助。
- sata ssd 驱动器为“sdX”,nvme ssd 驱动器为“nvmeX”
/dev/sda-240GB SSD Sandisk SSDSDA240G
- 1 号:600 KB | BK ESP | efi_boot
- 用作:EFI-System-Partition”(设置 ESP 标志,并格式化 fat32)
- 启动标志设置(唯一具有启动标志的分区)
- 2:2 GB | boot_clear
- 变为未加密的 /boot
- 编号3:2 GB |引导_2
- 非常可选,如果您以后想要加密启动分区,但需要很多专家的摆弄。
- 用途: “不使用” - 初始安装后才会出现
- 4号: 最大限度 | debian_crypt_1
- 在创建时只需使用尺寸最大限度获取剩余的驱动器。或者90%如果您想要一些预留空间。
- 用作加密的物理卷
- 1 号:600 KB | BK ESP | efi_boot
/dev/sdc——TS2TSSD230S
- 第一名: 最大限度 | debian_crypt_2
- 在创建时只需使用尺寸最大限度获得剩余的动力。或者如果你想要一些储备,则为 90%。
- 用作加密的物理卷
- 第一名: 最大限度 | debian_crypt_2
手动分区:步骤加密的 LUKS 分区
- 确认你进入此阶段
- 创建这些 LUKS 分区。系统将为您提供所有的分区和驱动器的长列表。只需选择您的两个 LUKS 分区(/dev/sda4 和 /dev/sdc1) - 列表中列出了“crypto”。
- 完成后(“覆盖数据”选项为“是”),它们会充满随机性。这可能需要相当长的时间.不要堕胎。
- 您有多个 LUKS 容器。但请注意:使用 Debian 安装程序时只有一个密码,所有 LUKS 分区都相同。当需要获取一组驱动器以进行启动时,这很有意义。例如,使用 Gentoo Linux 时,可以更好地控制这些细节。但是坚持下去在安装过程中。(Debian 也是使用普通 LUKS 的 Linux,因此您可以在插槽中添加更多密码短语,并调整您认为必要的任何奇怪细节……但请不要在此安装程序过程中进行)
手动分区:步骤“逻辑卷管理器 - LVM”
确认你进入此阶段
创造一卷组名为“vg”(坚持使用这个名字,其他任何名字都可能在以后导致意外,因为这个默认名称长期以来被其他 linux 子事物“假定”,并且现在可能(很可能)是不必要的,我仍然避免由于不完整的实现而导致的意外)
将您的两个 /dev/mapper/XXX_crypt 设备添加为所谓的“物理卷”。奇迹就在这里发生了,你将两个驱动器合并成一个单一的驱动器、一个逻辑卷组、一个新的驱动器“vg”。(如果您最初只想使用单个系统驱动器进行安装,则只需添加这一个加密设备而不是两个。在接下来的步骤中,只需创建一个较小的 lv_home 逻辑卷,该逻辑卷仍可放入 vg 中)
创建“逻辑卷”(即加密的 LUKS 容器内的 LVM 分区)。我在名称前加上“lv_”,这样以后我就能轻松看出哪些是 lvm 内容,哪些不是。初始大小并不那么重要。安装后,只要您没有用完“vg”的整个可用空间,您就可以向分区添加更多内存(“扩展”)。我倾向于保留一些未分配的储备,这样以后几年我可以在需要的地方增加(对您来说:/ 或 /home)。
“lv_swap”,使其足够大以保存所有的RAM - 注意 GB(base10)不是 GiB(base2),“32GB RAM”几乎总是指 32GiB。如果不确定,请添加一些安全缓冲区。此交换稍后用于“休眠到磁盘”,如果因为交换太小而导致休眠崩溃,那就太可惜了)
“lv_root” - 我可以在上面花费 50-70GiB - 真的取决于情况。通常 30-40GiB 就可以了,但是一旦您使用占用大量空间的东西,例如大量 docker 镜像(在 /var 内)或大型数据库,您就需要更多(>>250GiB)。可以稍后扩展。
“lv_home”——您最初想要的数量以及下次需要的更多数量,但请记住:您可以稍后扩展。
完成此 LVM 步骤并返回手动分区页面。
手动分区:步骤“设置挂载点和选项”
在最终用户(未加密)分区端,这会将所有内容组合在一起。您会看到一长串内容,但只需关注链末端分区和逻辑卷(在 LUKS 和 LVM 完成其工作之后)
因为你使用 ssd 驱动器,最好减少不必要的写入负载。一个主要步骤是激活文件系统 mount-flags discard、noatime、nodiratime。还有更多的调整步骤,但所有步骤都可以在初始安装后进行改进。(所以超出了这已经太长的文字范围)。
lv_主页
- 使用 ext4 并带有标志“discard、noatime、nodiratime、usrquota、grpquota、user_xattr”
- 挂载点:/家
- 命名为“家”
- 1% 为 root 保留(默认的 5% 对于较大的文件系统来说太多了,root 并不需要)
- 典型用途:标准
lv_root
- 使用 ext4 并带有标志“discard、noatime、nodiratime、usrquota、grpquota、user_xattr”
- 挂载点:/
- 名称“root”
- 5% 为 root 保留(这里无关紧要)
- 典型用途:标准
lv_swap
- 用作:交换(这里不需要更多选项)
sda1“ESP efi_boot”(之前已经设置好了)
- 用作 EFI-Boot,启动标志:开启
sda2“boot_clear”
- 使用 ext4 并带有标志“discard、noatime、nodiratime、usrquota、grpquota、user_xattr”
- 挂载点:/启动
- 名称“引导”
- 5% 为 root 保留(无所谓)
- 典型用途:标准
现在继续安装。安装完成后,重新启动时会提示您输入一个 luks 密码,这将打开您创建的所有 LUKS 容器。但这里您的两个 luks 容器需要进行额外的调整。这将在下一步中完成。
手动添加多个 LUKS 分区的支持
如果你现在拔下安装程序媒体,只需重新启动系统,它就会失败。您必须添加安装后调整。
只为好奇者准备的笔记
在输入第一个加密分区的密码后,系统提示“放弃等待根文件系统设备”。然后你就进入了init 引导阶段(initramfs 作为你的根文件系统)并获得一些额外的提示:
常见问题:启动参数(cat /proc/cmdline)
- 检查 rootdelay=(系统是否等待足够长的时间?)
- 缺少模块 (cat /proc/modules; ls /dev )
ALERT /dev/mapper/vg-lv_root 不存在。转到 shell
现在您可以检查 init 阶段来查找问题。当然,您会输入提示的内容,但无济于事:
cat /proc/cmdline
BOOT_IMAGE = /mvlinuz-6.1.0-17-amd64 root =/dev/mapper/vg-lv_root ro quiet
cat /proc/modules
[-> 长列表,很高兴包括 dm_crypt dm_mod cryptd]
lvm pvs
WARNING could not find device UUIOD <nvme1n1p1> missing /dev/mapper/nvme1n1p1_crypt
cryptsetup open /dev/nvme1n1p1 nvme1n1p1_crypt
现在输入您的密码,瞧:成功了。它还会触发 lvm 系统,使现在打开的 LUKS 容器内的所有逻辑卷都可用。
ls /dev/mapper
[显示 vg-lv_root vg-lv_home]
cat /cryptroot/crypttab
这是实际的问题:在 initramfs 中,文件/cryptroot/crypttab两个 LUKS 容器中只有一个行。但它应该将两者列出。
现在你必须照顾你的 crypttab 文件 - 一个在你安装的系统中在/etc/crypttab中,还有一个位于启动过程的 initramfs 中,隐藏在/boot/initrd.img-6.1.0-17文件(当然,您的版本号会有所不同。并且每次内核更新时,您都会积累更多的版本号。) Crypttab 格式有更多信息。
尤其是看看选项 initramfs
“initramfs 钩子处理根设备、任何恢复设备以及任何设置了 initramfs 选项的设备。这些设备在启动的 initramfs 阶段进行处理。例如,这允许使用 dropbear 进行远程解锁。
此选项特定于 Debian crypttab 格式。它不受 systemd 支持。"
所以我们必须添加选项初始化内存文件系统到系统的 /etc/crypttab 文件中的每一行,并为每个内核版本重新创建并重新安装 initramfs。
解决方案
重新启动进入安装程序介质并开始救援会话。Debian 安装程序已经为您准备好了大部分工作。(与Debian live-medium 文档.)进入已安装的系统后,您需要修复和更新 initramfs。
启动救援模式
- 做你的语言/网络等等的事情。
- 系统会要求您输入密码来打开两个加密的 LUKS 分区。请输入密码。
- 选择/dev/vg-lv_root作为你的根。
- 将单独的启动分区挂载到 /boot (是的,你想要这个)
- 将单独的 ESP/efi 分区挂载到 /boot/efi。(是的,再一次)
- 你想在/dev/vg/lv_root
然后你进入 root shell里面您安装的 debian 系统,并可以修复 initramfs。
但首先您要挂载丢失的 lvm 分区,在您的情况下它只有 lv_home。(lv_root 已通过在 lv_root 中执行 shell 挂载到 /。)
mount /dev/mapper/vg-lv_home /home
mount
请放心,您的 boot_clear 分区实际上已安装到 /boot。否则也安装它。
cat /etc/crypttab
您的 SSD 驱动器的每个 XXX_crypt 分区都必须有一行。并且您会看到每个分区都有一个 UUID。 但是没有 initramfs 选项,因此启动时只打开根设备。
因此在其他选项“luks,discard”后面添加“initramfs”选项,两条线路。
nano /etc/crypttab
[..]_crypt UUID=[..] 无 luks,丢弃,initramfs
下一步需要文件在/etc/crypttab中为每个(两个)XXX_crypt 分区包含一条有效行。
您可以通过浏览您的 UUID 来重新检查 UUID 是否指向正确的分区:lsblk -f | less
对于我的测试设置在/etc/crypttab中没问题,但是 initramfs 里面的那个(对我来说/boot/initrd.img-6.1.0-17)错过了第二个XXX_crypt分区的行。
创建新的 initramfs 文件并将其安装到 /boot:
update-initramfs -u -k all
就是这样!
只需正常重启即可进入已安装的系统,希望一切正常。启动时,系统会提示您输入两个 luks 容器的密码。
您可以检查新创建的 initrd.img 文件,查看 crypttab 现在是否有两行适合您的两个 luks 容器,而不是只有一行。如何检查 Initramfs 的内容
mkdir /tmp/initram && cd /tmp/initram
cp /boot/initrd.img-6.1.0-17 ./
unmkinitramfs initrd.img-6.1.0-17 ./initramfs
cat ./initramfs/main/cryptroot/crypttab
(这是曾经有缺陷的文件的内容,现在希望已经修复 - 现在您的每个 luks 分区都有一行,对吗?)
最后的话
请记住:您的 ESP 和启动分区未加密,并且您的 UEFI/bios 也大多对各种攻击媒介开放。您的外围设备(例如 USB 插槽)也可能如此,这为进入您的系统打开了一条好路)为此,您应该在深入挖掘之前重新考虑您的风险状况。但是,在熟悉 OPSEC 并在第二台笔记本电脑上安装 QubesOS 时,请尽情享受乐趣……或者:保持原样。
完成所有这些操作后,您可能想查看新 Debian 系统中您创建了哪些互连存储。如今,Linux 系统对每个 [驱动器、分区、逻辑卷、RAID 等] 使用唯一 ID(=UUID)。要查看所有 ID,请尝试lsblk -f
。
进一步阅读
- 已解决 chroot 中的 update-initramfs,Debian Buster 2019-08-18 16:34https://forums.debian.net/viewtopic.php?t=143279
- Debian Bookworm 上的全盘加密(包括启动) https://www.dwarmstrong.org/fde-debian/
- Debian 12 Bookworm 中的全磁盘加密,包括使用 LVM 启动 https://linuxgeek11.github.io/2023/10/03/debian-12-bookworm-full-disk-encryption-boot.html