我决定将 Debian 引导加载程序/boot
从硬盘驱动器移至 U 盘。我正在使用 LUKS 来加密/解密我的硬盘驱动器,引导加载程序是唯一未加密的分区。
我怎样才能轻松做到这一点?我想将其从硬盘驱动器中删除,调整任何分区(/
、/var
、/tmp
)的大小,以在删除后获得可用空间/boot
并将新的引导加载程序放在 USB 记忆棒上。使用的引导加载程序是 GRUB /dev/sda1
。
答案1
拧紧grub
。它可能引入了一些复杂性,使您相信这是一个难以解决的问题。如果您的计算机使用时间不到 5 年左右,那么您可能会从 UEFI 固件启动,在这种情况下,您的 Debian 构建的 Linux 内核已经是引导加载程序了。
对磁盘进行分区:
printf %c\\n o y n 1 '' '' ef00 w y | gdisk /dev/usb-stick/or-whatever-path
这是您想要以交互方式提供给程序的选项的脚本快捷方式。它将创建一个 GUID 分区表和一个类型为EFI系统跨越整个磁盘。
不过,该
gdisk
程序很容易使用 - 因此您最好以交互方式进行操作。运行时不应安装目标磁盘,并且您可能需要 root 权限才能w
写入更改。作为一般规则,您可以在该程序中做几乎任何您想做的事情,在您w
编写之前不会产生任何影响 - 所以请确保您执行时。
将棒格式化为 fat32:
mkfs.vfat -nLABEL /dev/usb-stick/or-whatever-path
- 标签是你想要的任何东西。你应该标签 全部在我看来,磁盘。
如果需要,安装启动菜单管理器。我喜欢酶标仪:
dpkg -i refind_0.8.7-1_amd64.deb
这可能不会自动安装到 USB,所以之后您可能想做...
/path/to/refinds/install/dir/install.sh --usedefault /dev/usbstick
如果您使用 rEFInd,您将需要在之后执行类似的操作:
mount /dev/usbstick /mnt mkdir -p /mnt/EFI/debian /esp cp -ar /boot/* /mnt/EFI/debian cat <<\TWONEWLINES >>/etc/fstab LABEL=LABEL /esp vfat defaults 0 2 /esp/EFI/debian /boot none bind,defaults 0 0 TWONEWLINES cat <<\ONESIMPLECONFIG >/mnt/EFI/debian/refind_linux.conf "Debian Menu Entry" root=LABEL=rootlabel other_kernel_params ONESIMPLECONFIG
但您可以跳过 rEFInd 并仅使用固件的启动菜单:
efibootmgr -c -d /dev/rootdevice \ -p 1 -L "Debian" \ -l '\EFI\debian\kernelfile' \ -u root=/dev/sda3 kparams \ initrd=EFI/debian/initramfs_image_file
差不多就是这样了。几乎永远 - 不再大惊小怪。固件从您在 U 盘上格式化的 EFI 系统分区加载内核。内核将其初始根加载到 initramfs 文件中。如果您已经成功启动 LUKS,那么您一定已经安排它以某种方式访问其密钥 - 您的密钥可能已经在 initramfs 映像中。如果没有,那么您需要将其放入其中或 USB 上。
启动分区是一个山在 UEFI 系统上 - 完全不需要围绕嵌入引导加载程序和 MBR 等所有旧式的肮脏行为。您只需从固件安装启动,加载内核可执行文件,然后继续您的快乐之路。
这些fstab
东西只是--bind
在您的 USB 记忆棒上安装一个目录/boot
- 因此所有内核更新都会像往常一样发生。不过,如果你喜欢自己,你会grub
完全卸载。它神秘的更新过程——一堆在邪恶链中读取和/或生成其他脚本的脚本——有点荒谬,而且是你可以轻松避免的噩梦。
不过,如果您接受我的建议,您将使用 rEFInd。它有漂亮的菜单,你永远不必担心它 -install.sh
上面脚本的效果可以很容易地重现(并且大部分在上面)只需一个cp
命令。它只是/EFI/BOOT
EFI 系统分区上调用的静态目录,其中包含一个小的 EFI 可执行文件,告诉固件在哪里可以找到内核。这核心是实际的引导加载程序 - 正如它应该的那样。
通过上面的设置,您可以启动任意数量的 EFI 可执行文件 - 只需将它们放入/boot
(或者无论他们的启动分区是什么)USB 记忆棒上/EFI
某处的内容,rEFInd 可能会自动找到它们,并将它们作为固件菜单中的选项提供给您 - 包括 Microsoft 系统。永远。
答案2
对于初学者来说,你可以
- 分区、格式化并挂载 U 盘
- 将旧文件中的所有文件复制
/boot
到 USB 记忆棒 - 更改您的
/etc/fstab
,使 USB 记忆棒文件系统成为新的/boot
umount /boot
,mount /boot
使其正式化- 在棒上安装引导加载程序(
grub-install /dev/sdx
或其他) - 重启看看是否有效
至于将旧的空间回收/boot
到已经加密的系统中。根据旧启动分区的大小,这可能不值得,因为它可能涉及移动所有其他数据(或额外的 LUKS 容器以及使用其中几个容器带来的所有复杂性)。如果您还没有其中之一,您可以将其用作加密交换分区。