AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1457931
Accepted
Gabriel Staples
Gabriel Staples
Asked: 2023-03-06 08:50:01 +0800 CST2023-03-06 08:50:01 +0800 CST 2023-03-06 08:50:01 +0800 CST

在新的 LUKS 分区中安装新的 Ubuntu 版本后,如何将旧的 LUKS 加密的 Ubuntu 版本返回到 Grub 菜单

  • 772

我有一个 LUKS 加密的 Ubuntu 20.04 安装程序。我在这里按照我自己的说明缩小 LUKS 分区并安装 Ubuntu 22.04,也是 LUKS 加密的。现在,我的 grub 启动菜单不再提供启动旧 LUKS 加密 Ubuntu 20.04 版本的选项。相反,它只是启动新的 22.04。

如何重新添加 LUKS 加密的 Ubuntu 20.04 版本?

这是我的磁盘,如 gparted 所示,同时登录到新的 Ubuntu 22.04 操作系统。

描述:

  1. /dev/nvme0n1p1是 512 MiB EFI 分区
  2. /dev/nvme0n1p2是旧 Ubuntu 20.04 操作系统的 ext4/boot非加密分区
  3. /dev/nvme0n1p3是包含单个 LVM 卷的 LUKS 加密分区,其中包含 Ubuntu 20.04(不再在 grub 菜单中)
  4. /dev/nvme0n1p4是新的 Ubuntu 22.04 操作系统的 ext4/boot非加密分区
  5. /dev/nvme0n1p5是包含单个 LVM 卷的 LUKS 加密分区,其中包含 Ubuntu 22.04(在grub 菜单中,操作系统正在运行)

在此处输入图像描述

可能有用:

  1. 对于更有经验的人来说,这个对不同问题的回答可能有一些线索,但我不明白:How to get grub to boot from a newly encrypted partition
  2. /bootLUKS加密硬盘如何修复?
dual-boot
  • 1 1 个回答
  • 59 Views

1 个回答

  • Voted
  1. Best Answer
    Gabriel Staples
    2023-03-06T15:10:07+08:002023-03-06T15:10:07+08:00

    经过大量的努力和调查,我想通了!

    1. 如何将其他 LUKS 加密的 Linux 发行版添加回您的 Grub 引导加载程序启动菜单

    快速总结

    # 1. Open your `/etc/default/grub` file.
    sudo gedit /etc/default/grub
    # Then manually add these lines to the bottom of that file:
    # (required)
    GRUB_DISABLE_OS_PROBER=false
    # (optional)
    GRUB_ENABLE_CRYPTODISK=y
    
    # 2. Unlock your LUKS-encrypted partitions which contain other bootable
    # operating systems. In my case:
    sudo cryptsetup luksOpen /dev/nvme0n1p3 nvme0n1p3_crypt
    
    # 3. Update your Grub bootloader in your `/boot` partition. 
    sudo update-grub
    # When I run `update-grub`, my output now includes this line:
    #
    #       Found Ubuntu 20.04.5 LTS (20.04) on /dev/mapper/system-root
    
    # 4. Done. Reboot to see and use the new Grub entries!
    reboot
    

    如果您只想快速回答,请停在这里。

    细节

    1. 编辑您的文件以在其中/etc/default/grub添加行:GRUB_DISABLE_OS_PROBER=false

      # 1. Open /etc/default/grub in gedit
      sudo gedit /etc/default/grub
      
      # 2. Now manually add this line to the bottom of it. 
      GRUB_DISABLE_OS_PROBER=false
      # I also recommend this line, but it appears to *not* be necessary:
      GRUB_ENABLE_CRYPTODISK=y
      
      # 3. Manually save and close the file
      

      该GRUB_DISABLE_OS_PROBER=false行启用操作系统探测器,它会扫描您的文件系统以查找有效的操作系统并将它们添加到 Grub 引导加载程序。默认情况下禁用此功能,因此要启用它,我们设置GRUB_DISABLE_OS_PROBER=false。以下是 Grub 用户手册对此的说明:https://www.gnu.org/software/grub/manual/grub/html_node/Simple-configuration.html:

      GRUB_DISABLE_OS_PROBER

      具有grub-mkconfig使用外部 os-prober 程序发现安装在同一台机器上的其他操作系统并为它们生成适当的菜单条目的功能。默认情况下它是禁用的,因为 os-prober 的自动和静默执行以及基于该数据创建引导条目是一个潜在的攻击向量。将此选项设置为以false在命令中启用此功能grub-mkconfig。

      自我注意:虽然它似乎没有必要:如果以上内容本身不起作用,请尝试添加GRUB_ENABLE_CRYPTODISK=y。从上面的链接:

      GRUB_ENABLE_CRYPTODISK

      如果设置为y,grub-mkconfig将grub-install检查加密磁盘并生成在启动期间访问它们所需的其他命令。请注意,在这种情况下,无人值守的引导是不可能的,因为 GRUB 将等待密码来解锁加密的容器。

    2. 解锁所有包含您想要添加到 Grub 菜单的操作系统的 LUKS 加密分区。

      就我而言,我的旧 Ubuntu 20.04 操作系统在我的/dev/nvme0n1p3分区中,如我的问题中所述。

      注意:我喜欢在 GUI 分区编辑器中查看我的分区gparted。

      因此,这是解锁该分区的方法:

      sudo cryptsetup luksOpen /dev/nvme0n1p3 nvme0n1p3_crypt
      # You'll need to enter your `sudo` password, as well as the LUKS encryption
      # password. It won't show anything while you type them.
      
      # If you have other LUKS-encrypted partitions, unlock them now too. Ex:
      sudo cryptsetup luksOpen /dev/nvme0n1p6 nvme0n1p6_crypt
      sudo cryptsetup luksOpen /dev/sda2 sda2_crypt
      sudo cryptsetup luksOpen /dev/sda3 sda3_crypt
      # etc.
      

      如需更多帮助,请参阅man cryptsetup。请注意,该luksOpen选项等效于open --type luks.

    3. 现在您的 LUKS 加密分区已解锁,并且您已经告诉 Grub 在您的文件系统中搜索其他操作系统,更新 Grub 引导加载程序:

      sudo update-grub
      

      在其输出中,查找类似这样的行,表明它正在查找操作系统并将其添加到 Grub 菜单:

      Found Ubuntu 20.04.5 LTS (20.04) on /dev/mapper/system-root
      

      我的完整示例命令和输出,输出中包含上面的行:

      $ sudo update-grub
      Sourcing file `/etc/default/grub'
      Sourcing file `/etc/default/grub.d/init-select.cfg'
      Generating grub configuration file ...
      Found linux image: /boot/vmlinuz-5.19.0-32-generic
      Found initrd image: /boot/initrd.img-5.19.0-32-generic
      Found linux image: /boot/vmlinuz-5.15.0-60-generic
      Found initrd image: /boot/initrd.img-5.15.0-60-generic
      Memtest86+ needs a 16-bit boot, that is not available on EFI, exiting
      Warning: os-prober will be executed to detect other bootable partitions.
      Its output will be used to detect bootable binaries on them and create new boot entries.
      Found Ubuntu 20.04.5 LTS (20.04) on /dev/mapper/system-root
      Adding boot menu entry for UEFI Firmware Settings ...
      done
      

      要验证新的 Grub 菜单条目,您可以手动打开文件并在该文件中的注释后面/boot/grub/grub.cfg查找条目。不要直接编辑该文件。menuentry### BEGIN /etc/grub.d/30_os-prober ###

    故障排除、调试和额外信息。

    1. 运行时sudo update-grub,如果您在输出中看到这些行:

      Warning: os-prober will not be executed to detect other bootable partitions.
      Systems on them will not be added to the GRUB boot configuration.
      Check GRUB_DISABLE_OS_PROBER documentation entry.
      

      ...那么这意味着您忘记添加GRUB_DISABLE_OS_PROBER=false到您的/etc/default/grub文件中。

    2. 如果您sudo update-grub在没有首先解锁所有包含可启动操作系统的 LUKS 加密分区的情况下运行,那么当您运行时,这些操作系统将从您的 Grub 菜单中删除(如果它们以前存在)update-grub(请参阅下一节)。如果您发现自己处于这种情况,只需启动到 Grub 菜单中可用的任何 Linux 操作系统,然后按照上述步骤将其他操作系统添加回 Grub 菜单。

    3. sudo fdisk -l您可以通过查看和的输出来了解哪些分区已解锁lsblk。

      1. 只有我的运行分区 ( /dev/nvme0n1p5) 解锁(即:在重新启动后),这就是我的输出。请注意,在这两种情况下,只nvme0n1p5_crypt显示:

        # 1. `sudo fdisk -l | grep -i mapper` output:
        $ sudo fdisk -l | grep -i mapper
        Disk /dev/mapper/nvme0n1p5_crypt: 870.4 GiB, 934587400192 bytes, 1825366016 sectors
        
        # 2. `lsblk` output:
        $ lsblk
        NAME                MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINTS
        loop0                 7:0    0     4K  1 loop  /snap/bare/5
        loop1                 7:1    0  63.3M  1 loop  /snap/core20/1778
        loop2                 7:2    0  63.3M  1 loop  /snap/core20/1822
        loop3                 7:3    0  72.9M  1 loop  /snap/core22/522
        loop4                 7:4    0 240.6M  1 loop  /snap/firefox/2356
        loop5                 7:5    0 239.8M  1 loop  /snap/firefox/2391
        loop6                 7:6    0 400.8M  1 loop  /snap/gnome-3-38-2004/112
        loop7                 7:7    0 346.3M  1 loop  /snap/gnome-3-38-2004/119
        loop8                 7:8    0 452.4M  1 loop  /snap/gnome-42-2204/56
        loop9                 7:9    0  91.7M  1 loop  /snap/gtk-common-themes/1535
        loop10                7:10   0  45.9M  1 loop  /snap/snap-store/582
        loop11                7:11   0  45.9M  1 loop  /snap/snap-store/638
        loop12                7:12   0  49.8M  1 loop  /snap/snapd/17950
        loop13                7:13   0  49.8M  1 loop  /snap/snapd/18357
        loop14                7:14   0   304K  1 loop  /snap/snapd-desktop-integration/49
        loop15                7:15   0   428K  1 loop  /snap/snapd-desktop-integration/57
        nvme1n1             259:0    0   1.8T  0 disk  
        nvme0n1             259:1    0 953.9G  0 disk  
        ├─nvme0n1p1         259:2    0   512M  0 part  /boot/efi
        ├─nvme0n1p2         259:3    0   1.4G  0 part  
        ├─nvme0n1p3         259:4    0    80G  0 part  
        ├─nvme0n1p4         259:5    0   1.5G  0 part  /boot
        └─nvme0n1p5         259:6    0 870.4G  0 part  
          └─nvme0n1p5_crypt 253:0    0 870.4G  0 crypt /var/snap/firefox/common/host-hunspell
                                                       /
        
      2. 现在,在运行sudo cryptsetup luksOpen /dev/nvme0n1p3 nvme0n1p3_crypt以解锁 LUKS 加密的分区之后,这就是我所看到的。请注意,我现在也看到了nvme0n1p3_cryptLUKS加密分区中的逻辑卷 (LVM) 在/dev/mapper/system-root哪里:/dev/mapper/system-root/dev/mapper/nvme0n1p3

        # 1. `sudo fdisk -l | grep -i mapper` output:
        $ sudo fdisk -l | grep -i mapper
        Disk /dev/mapper/nvme0n1p5_crypt: 870.4 GiB, 934587400192 bytes, 1825366016 sectors
        Disk /dev/mapper/nvme0n1p3_crypt: 80 GiB, 85903540224 bytes, 167780352 sectors
        Disk /dev/mapper/system-root: 80 GiB, 85899345920 bytes, 167772160 sectors
        
        # 2. `lsblk` output:
        $ lsblk
        NAME                MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINTS
        loop0                 7:0    0     4K  1 loop  /snap/bare/5
        loop1                 7:1    0  63.3M  1 loop  /snap/core20/1778
        loop2                 7:2    0  63.3M  1 loop  /snap/core20/1822
        loop3                 7:3    0  72.9M  1 loop  /snap/core22/522
        loop4                 7:4    0 240.6M  1 loop  /snap/firefox/2356
        loop5                 7:5    0 239.8M  1 loop  /snap/firefox/2391
        loop6                 7:6    0 400.8M  1 loop  /snap/gnome-3-38-2004/112
        loop7                 7:7    0 346.3M  1 loop  /snap/gnome-3-38-2004/119
        loop8                 7:8    0 452.4M  1 loop  /snap/gnome-42-2204/56
        loop9                 7:9    0  91.7M  1 loop  /snap/gtk-common-themes/1535
        loop10                7:10   0  45.9M  1 loop  /snap/snap-store/582
        loop11                7:11   0  45.9M  1 loop  /snap/snap-store/638
        loop12                7:12   0  49.8M  1 loop  /snap/snapd/17950
        loop13                7:13   0  49.8M  1 loop  /snap/snapd/18357
        loop14                7:14   0   304K  1 loop  /snap/snapd-desktop-integration/49
        loop15                7:15   0   428K  1 loop  /snap/snapd-desktop-integration/57
        nvme1n1             259:0    0   1.8T  0 disk  
        nvme0n1             259:1    0 953.9G  0 disk  
        ├─nvme0n1p1         259:2    0   512M  0 part  /boot/efi
        ├─nvme0n1p2         259:3    0   1.4G  0 part  
        ├─nvme0n1p3         259:4    0    80G  0 part  
        │ └─nvme0n1p3_crypt 253:1    0    80G  0 crypt 
        │   └─system-root   253:2    0    80G  0 lvm   
        ├─nvme0n1p4         259:5    0   1.5G  0 part  /boot
        └─nvme0n1p5         259:6    0 870.4G  0 part  
          └─nvme0n1p5_crypt 253:0    0 870.4G  0 crypt /var/snap/firefox/common/host-hunspell
                                                       /
        
    4. 注意:对于每个分区的 UUID(通用唯一标识符)编号,请运行以下命令:

      blkid
      
    5. 请注意,要注意以下 3 个与磁盘相关的主要文件。查看它们cat:

      # filesystem table (fstab)
      cat /etc/fstab
      
      # Encrypted table
      cat /etc/crypttab
      
      # User-editable Grub config file
      # (read and used by `sudo update-grub`)
      cat /etc/default/grub
      
      # NON-user-editable final grub config file on your `/boot` partition
      # (created or updated by `sudo update-grub`)
      cat /boot/grub/grub.cfg
      

    2. 如何从 Grub 引导加载程序启动菜单中删除其他 LUKS 加密的 Linux 发行版

    要从 Grub 启动菜单中删除除正在运行的操作系统之外的所有操作系统,只需重新启动到您想要的操作系统(这将再次锁定所有其他 LUKS 加密的分区),然后运行:

    sudo update-grub
    

    由于没有其他 LUKS 加密分区被解锁,它们将自动从 Grub 引导加载程序中删除。以下是该命令和输出对我来说的样子:

    $ sudo update-grub
    Sourcing file `/etc/default/grub'
    Sourcing file `/etc/default/grub.d/init-select.cfg'
    Generating grub configuration file ...
    Found linux image: /boot/vmlinuz-5.19.0-32-generic
    Found initrd image: /boot/initrd.img-5.19.0-32-generic
    Found linux image: /boot/vmlinuz-5.15.0-60-generic
    Found initrd image: /boot/initrd.img-5.15.0-60-generic
    Memtest86+ needs a 16-bit boot, that is not available on EFI, exiting
    Warning: os-prober will be executed to detect other bootable partitions.
    Its output will be used to detect bootable binaries on them and create new boot entries.
    Adding boot menu entry for UEFI Firmware Settings ...
    done
    

    /boot如果您的所有操作系统都有一个共享分区(与我不同),那么就是这样!在此操作系统中运行sudo update-grub将更新该单个/boot分区,从而影响用于引导的 Grub 引导加载程序。或者,如果您使用的是最新安装的操作系统,它会更新/boot您的 Grub 引导加载程序实际使用的分区,就是这样!

    但是,如果您使用的是任何其他操作系统,它将更新自己的旧分区 /boot,而不是实际用于引导的最新分区。在这种情况下,您可能需要将最新的/boot分区重新挂载到/boot文件系统的目录中,然后sudo update-grub再次运行,或者您可以运行某种chroot魔法。但是,我没有时间这样做,所以这是我做的一个肮脏的黑客攻击:

    快速总结:

    我只是手动将新创建的/boot/grub/grub.cfg文件复制到实际(最新)引导分区上的正确位置,因为/boot创建它的路径位于旧的(现在未使用的)引导分区上。

    细节:

    1. 我启动到我的/dev/nvme0n1p3Ubuntu 20.04 操作系统,它自动将旧的(现在是错误的/未使用的)/dev/nvme0n1p2引导分区安装到 path 的文件系统中/boot。我跑去sudo update-grub更新/dev/nvme0n1p2path 上的那个(现在是错误的/未使用的)引导分区/boot。

    2. 我打开了一个 GUI 文件浏览器并双击位于 的新启动分区/dev/nvme0n1p4,以将其自动挂载到位于路径 的文件系统中/media/gabriel/abcd-1234-efgh-abcdefghij。换句话说,当我登录分区中的 Ubuntu 20.04 时,/dev/nvme0n1p3路径与登录分区中的 Ubuntu 22.04 操作系统时的路径/media/gabriel/abcd-1234-efgh-abcdefghij完全相同!/boot/dev/nvme0n1p5

    3. 肮脏的 hack:备份旧的 grub.cfg 文件并将新文件复制到它的位置。

    4. 命令总结:

      # running on the Ubuntu 20.04 OS: forcibly remove the Ubuntu 22.04 entry
      # from the Grub boot menu
      #--------------------------------------------
      
      # run withOUT first unlocking the Ubuntu 22.04 LUKS partition, so that the
      # Ubuntu 22.04 Grub entry will be removed from the "/boot/grub/grub.cfg"
      # file
      sudo update-grub  
      
      # manually mount the latest boot dir by double-clicking it in your file
      # manager
      
      # back up the old grub.cfg file in the new /boot dir
      sudo mv /media/gabriel/abcd-1234-efgh-abcdefghij/grub/grub.cfg \
          /media/gabriel/abcd-1234-efgh-abcdefghij/grub/grub.cfg.bak
      
      # dirty hack: copy over the Ubuntu 20.04-created grub.cfg file to the 
      # latest /boot dir mounted at this other place
      sudo cp /boot/grub/grub.cfg \
          /media/gabriel/abcd-1234-efgh-abcdefghij/grub/grub.cfg
      
      # now reboot, and all you'll see in the Grub boot menu is the old Ubuntu
      # 20.04 entry, *not* the new Ubuntu 22.04 entry
      reboot
      

      另一个用于撤消先前肮脏黑客的肮脏黑客:

      要撤消此操作,只需恢复grub.cfg您之前备份的旧文件grub.cfg.bak:

      sudo mv /media/gabriel/abcd-1234-efgh-abcdefghij/grub/grub.cfg.bak \
          /media/gabriel/abcd-1234-efgh-abcdefghij/grub/grub.cfg
      

    参考:

    1. 主要是我自己的反复试验,还有:
    2. Google 搜索grub Warning: os-prober will not be executed to detect other bootable partitions
    3. 我第一次了解添加GRUB_DISABLE_OS_PROBER=false到的地方/etc/default/grub:https://forum.manjaro.org/t/warning-os-prober-will-not-be-executed-to-detect-other-bootable-partitions/57849
    4. man update-grub
    5. ***** https://www.gnu.org/software/grub/manual/grub/html_node/Simple-configuration.html
    6. man 8 grub-mkconfig
    7. man cryptsetup
    8. 为什么我会收到“警告:将不会执行 os-prober 来检测其他可引导分区。” 运行“apt upgrade”后?
    9. 我的另一个问题:Unix & Linux:如何让双引导(2 个 Linux 操作系统)系统在 LUKS 加密时工作
    10. 如何修复 LUKS 加密硬盘上的 /boot?
    11. 将安装在 LUKS 分区上的 debian 添加到引导选项
    12. 如何让 grub 从新加密的分区启动<==
    13. 使用 mdadm 和多个 luks 分区安装 Ubuntu
    14. 具有根 LUKS 加密的 GRUB 引导加载程序:仅 grub shell
    15. man 5 crypttab和https://man7.org/linux/man-pages/man5/crypttab.5.html
    • 0

相关问题

  • 如何在 ubuntu 中挂载加密的 windows 分区?[关闭]

  • 如何使用 Debian 进行双引导?

  • 如何使用 Ubuntu 和 Windows XP 安装双启动配置?[关闭]

  • 如何让双启动 USB 驱动器在 Vista 中工作 [关闭]

  • 如何从双启动计算机访问加密的主文件夹?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve