安装基础系统

安装基础系统

我的电脑中有以下 3 个驱动器:

/dev/sda240GB 固态硬盘Sandisk SSDSDA240G

/dev/sdb1TB 硬盘WDC WD10EZEX-08WN4A0

/dev/sdc2TB 固态硬盘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%如果您想要一些预留空间。
      • 用作加密的物理卷
  • /dev/sdc——TS2TSSD230S

    • 第一名: 最大限度 | debian_crypt_2
      • 在创建时只需使用尺寸最大限度获得剩余的动力。或者如果你想要一些储备,则为 90%。
      • 用作加密的物理卷
  • 手动分区:步骤加密的 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

进一步阅读

相关内容