/boot
我正在尝试在 EFI 友好的主板上使用单独的分区和 lvm 实现 LUKS 加密的 CentOS 7 安装。
我已经从旧的 CentOS(从 GUI 安装)中对新的 CentOS 安装进行了分区,它看起来像这样:
sdb 8:16 0 745,2G 0 disk
├─sdb1 8:17 0 200M 0 part /home/user/target/boot/efi
├─sdb2 8:18 0 1G 0 part /home/user/target/boot
├─sdb3 8:19 0 700G 0 part
│ └─crypto 253:3 0 700G 0 crypt
│ ├─lv-swap 253:4 0 16G 0 lvm
│ ├─lv-root 253:5 0 50G 0 lvm /home/user/target
│ └─lv-home 253:6 0 634G 0 lvm /home/user/target/home
在 CentOS chroot 中引导也成功(使用这和这教程)现在准备生成启动映像。
问题是我决定在 cryptsetup 中使用非标准算法:
cryptsetup -v --cipher serpent-xts-plain64 --key-size 512 --hash sha256 --iter-time 3000 --use-random luksFormat /dev/sdb3
现在我想知道如何使用我的参数生成正确的 initrd 。
教程告诉我下一步是:
mkinitcpio -p linux
但是没有mkinitcpio
命令或/etc/mkinitcpio.conf
更改HOOKS
列表才能正常lvm
工作encrypt
。
initrd
然而,由于缺乏对基于 rpm 的发行版的了解,只有这一点对我来说是不熟悉的。为我的案例搜索 initrd 示例并不走运。
/boot
现在chroot 中有几个文件/目录:
bash-4.2# ls
config-3.10.0-514.16.1.el7.x86_64 grub2 symvers-3.10.0-514.16.1.el7.x86_64.gz
efi initramfs-3.10.0-514.16.1.el7.x86_64.img System.map-3.10.0-514.16.1.el7.x86_64
grub lost+found vmlinuz-3.10.0-514.16.1.el7.x86_64
但我怀疑它们是否支持蛇加密,甚至在引导过程中生成这些文件后就支持 luks。
所以,我的问题是如何从内核映像生成开始使用 luks 和 serpent 制作正确的启动工具链?
虽然也许我应该使用initramfs
而不是initrd
,所以任何关于这种方法的提示也值得赞赏。
答案1
最后,我完成了设置并准备分享如何在 CentOS 7 上完成的有限指令集。
我跳过了分区和手动引导 - 其他地方有很多完整的手册。
因此,开始使用这个分区变体:
sdb 8:16 0 745,2G 0 disk
├─sdb1 8:17 0 200M 0 part
├─sdb2 8:18 0 1G 0 part
└─sdb3 8:19 0 700G 0 part
└─crypto 253:3 0 700G 0 crypt
├─lv-swap 253:4 0 16G 0 lvm
├─lv-root 253:5 0 50G 0 lvm
└─lv-home 253:6 0 634G 0 lvm
然后,安装必要的驱动器,所以它变成:
sdb 8:16 0 745,2G 0 disk
├─sdb1 8:17 0 200M 0 part /home/user/target/boot/efi
├─sdb2 8:18 0 1G 0 part /home/user/target/boot
└─sdb3 8:19 0 700G 0 part
└─crypto 253:3 0 700G 0 crypt
├─lv-swap 253:4 0 16G 0 lvm
├─lv-root 253:5 0 50G 0 lvm /home/user/target
└─lv-home 253:6 0 634G 0 lvm
步骤0.准备chroot脚本。重复mount
每次重新启动都很乏味,所以我最终得到了这个基本的 chroot 脚本:
#!/bin/bash
sudo mount /dev/mapper/lv-root /home/user/target
sudo mount /dev/sdb2 /home/user/target/boot
sudo mount /dev/sdb1 /home/user/target/boot/efi
sudo mount --bind /proc /home/user/target/proc
sudo mount --bind /dev /home/user/target/dev
sudo mount --bind /sys /home/user/target/sys
sudo chroot /home/user/target /bin/bash -l
步骤 1. 安装缺少的 EFI 特定模块(在 chroot 之外):
sudo yum --installroot=/home/user/target install -y efibootmgr grub2-efi-modules
步骤 2. 编辑/etc/crypttab
crypto UUID=UUID_of_/dev/sdb3 none luks,discard
原因discard
- 我使用 SSD 并忽略了一点安全性以获得更好的 TRIM 性能。细节。
步骤 3. 编辑/etc/dracut.conf
omit_dracutmodules+="systemd"
add_dracutmodules+="crypt lvm" #sequencing could matter
hostonly="yes" #optional
lvmconf="yes"
步骤 4. 编辑/etc/fstab
UUID=UUID_of_/dev/sdb1 /boot/efi vfat umask=0077 0 0
UUID=UUID_of_/dev/sdb2 /boot ext2 defaults 0 0
UUID=UUID_of_/dev/mapper/lv-root / ext4 defaults 0 0
UUID=UUID_of_/dev/mapper/lv-home /home ext4 defaults 0 0
UUID=UUID_of_/dev/mapper/lv-swap none swap sw 0 0
步骤 5. 编辑/etc/default/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_CMDLINE_LINUX="rd.lvm.lv=lv/swap vconsole.font=latarcyrheb-sun16 vconsole.keymap=us rd.luks.options=discard rd.luks.uuid=UUID_of_/dev/sdb3 crashkernel=auto rd.lvm.lv=lv/root rd.lvm.lv=lv/home nomodeset"
GRUB_THEME="/boot/grub2/themes/system/theme.txt"
rd.luks.options=discard
- 可能是多余的,如果是的话请纠正我。
nomodeset
- 消除硬件驱动程序并发性(noveaufb 与 EFI VGA)
步骤 6. 执行grub2-mkconfig -o /boot/grub2/grub.cfg
步骤7.执行grub2-install --target=x86_64-efi --efi-directory=/boot/efi
步骤8.执行dracut -fv
除非另有说明,上述所有步骤都需要在 chroot 内完成。
事实证明,选择的加密算法不会受到任何影响 - grub 会自动加载所有需要的驱动程序。