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 / 问题 / 1413776
Accepted
Wingarmac
Wingarmac
Asked: 2022-06-14 00:00:34 +0800 CST2022-06-14 00:00:34 +0800 CST 2022-06-14 00:00:34 +0800 CST

制作 grub 启动项以加载恢复菜单

  • 772

制作 grub 启动项以加载恢复菜单

使用 Lubuntu 22.04 LTS

我正在尝试添加一个能够加载菜单的 grub 条目。这个菜单应该有 4 个选项:

  1. 备份sda dd if=/dev/nvme0n1 of=/mnt/data/backup/nvme0n1.img bs=4M conv=noerror status=progress
  2. 恢复 sdadd if=/mnt/data/backup/nvme0n1.img of=/dev/nvme0n1 bs=4M conv=noerror status=progress
  3. 返回 grub 根菜单
  4. 重启

我在这里找到了如何制作一个 bash 脚本来制作一个菜单,该菜单将使用 dd 来备份或恢复我的系统磁盘。这是我做的:

#!/bin/sh
show_menu(){
    normal=`echo "\033[m"`
    menu=`echo "\033[36m"` #Blue
    number=`echo "\033[33m"` #yellow
    bgred=`echo "\033[41m"`
    fgred=`echo "\033[31m"`
    printf "\n${menu}*********************************************${normal}\n"
    printf "${menu}**${number} 1)${menu} Backup sda ${normal}\n"
    printf "${menu}**${number} 2)${menu} Restore sda ${normal}\n"
    printf "${menu}**${number} 3)${menu} Restart computer ${normal}\n"
    printf "${menu}**${number} 4)${menu} Back to grub ${normal}\n"
    printf "${menu}**${number} 5)${menu} Test${normal}\n"
    printf "${menu}*********************************************${normal}\n"
    printf "Please enter a menu option and enter or ${fgred}x to exit. ${normal}"
    read opt
}

option_picked(){
    msgcolor=`echo "\033[01;31m"` # bold red
    normal=`echo "\033[00;00m"` # normal white
    message=${@:-"${normal}Error: No message passed"}
    printf "${msgcolor}${message}${normal}\n"
}

clear
show_menu
while [ $opt != '' ]
    do
    if [ $opt = '' ]; then
      exit;
    else
      case $opt in
        1) clear;
            option_picked "Option 1 Picked";
            dd if=/dev/nvme0n1 of=/mnt/data/backup/nvme0n1.img bs=4M conv=noerror status=progress;
            show_menu;
        ;;
        2) clear;
            option_picked "Option 2 Picked";
            dd if=/mnt/data/backup/nvme0n1.img of=/dev/nvme0n1 bs=4M conv=noerror status=progress;
            show_menu;
        ;;
        3) clear;
            option_picked "Option 3 Picked";
            "back to root menu";
            show_menu;
        ;;
        4) clear;
            option_picked "Option 4 Picked";
            reboot;
            show_menu;
        ;;
        x)exit;
        ;;
        \n)exit;
        ;;
        *)clear;
            option_picked "Pick an option from the menu";
            show_menu;
        ;;
      esac
    fi
done

此 bash 脚本在 Ubuntu 服务器上运行的结果: 此 bash 脚本在 Ubuntu 服务器上运行的结果 它可以解决问题,但这并不容易我可能在磁盘和文件位置上犯了错误,因为我的系统无法再启动了。我很适合重新安装它。

我想在我的默认 grub 中加入这样的菜单项。因此,我想我可以在/etc/grub.d/40.custom中添加一个条目

#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.

menuentry 'Lubuntu Root Terminal' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-5bba636c-5b61-4ef9-857b-c5d4bf51c2cd' {
    recordfail
    load_video
    gfxmode $linux_gfx_mode
    insmod gzio
    if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
    insmod part_gpt
    insmod ext2
    search --no-floppy --fs-uuid --set=root 5bba636c-5b61-4ef9-857b-c5d4bf51c2cd
    linux   /boot/vmlinuz-5.15.0-37-generic root=UUID=5bba636c-5b61-4ef9-857b-c5d4bf51c2cd \ ro init=/bin/bash rw $vt_handoff
    initrd  /boot/initrd.img-5.15.0-37-generic
}

我还没有通过这个菜单项让系统启动到终端。我可能做错了什么。

我正在寻找如何通过此条目在我的 grub 菜单中添加 TTY 选项,但没有找到确切的方法。例如,我想知道如何以 root 身份安装系统并使用制作的 bash 启动 shell。

Ubuntu 服务器最小化在同一磁盘的一个小分区上。 从那里我将尝试设置 bash 以启动。问题是服务器命令和配置似乎不同。我无法让我的 raid-0 分区工作/映射。所以我无权访问我的文件进行测试。

我试图构建一个自定义内核 ,我在构建后安装这些包时出错了。重点是在不包含 X11 模块的恢复分区上构建内核。对我来说,这似乎是一个复杂的过程。我在证书方面遇到了问题,并且在我的系统上安装了软件包时,一切都崩溃了。

TTS0 grub 条目:我还找到了有关可以添加到 grub 的终端 TTS0 会话的信息。但是当我在启动时选择它时,我就像往常一样进入我的系统。

这是我的自定义 grub 条目 TTYS0:

recordfail
load_video
gfxmode $linux_gfx_mode
insmod gzio
if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
insmod part_gpt
insmod ext2
set root='hd0,gpt2'
if [ x$feature_platform_search_hint = xy ]; then
  search --no-floppy --fs-uuid --set=root --hint='hd0,gpt2'  adf801ee-4bd7-4e13-aeef-210e10ef58e8
else
  search --no-floppy --fs-uuid --set=root adf801ee-4bd7-4e13-aeef-210e10ef58e8
fi
linux   /boot/vmlinuz-5.15.0-25-generic root=UUID=adf801ee-4bd7-4e13-aeef-210e10ef58e8 ro  quiet splash $vt_handoff  vga=787 console=tty0 console=ttyS0,115200n8
initrd  /boot/initrd.img-5.15.0-25-generic

我知道我在这里有更多问题:

  1. 什么是最好的:

    一个。 一个启动我的脚本菜单的终端?

    湾。一个单独的系统引导来克隆分区?

  2. 如何添加进入 TTY 的 grub 条目以加载 bash 脚本?

  3. 或者我如何构建自定义内核(如果它是正确的替代方案)以在没有桌面的情况下启动我在另一个分区上的相同安装并将此条目添加到启动。

我在 Help Ubuntu 上找到的信息建议了一种使用 dd 备份我的系统的方法。我正在寻找一些已经可用、小型且可通过 bash 命令行访问的东西。

我需要有关 make 命令的帮助,以便为我的目标构建获取正确的配置。

或者

我想在添加 grub 条目的方式上获得帮助,该条目使用我当前的系统 TTY 在启动时加载菜单 bash。

有没有办法做到这些?

我找到了一个很好的例子:Clonezilla on HD

我按照说明使用Grub Customizer将其添加到 /etc/grub.d/40_custom 中:

menuentry "Clonezilla" {
insmod gzio
if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
insmod part_gpt
insmod ext2
set root=(hd0,gpt1)
linux /recovery/vmlinuz boot=live union=overlay username=user config components quiet noswap nolocales edd=on nomodeset ocs_live_run=\"ocs-live-general\" ocs_live_extra_param=\"\" keyboard-layouts= ocs_live_batch=\"no\" locales= vga=788 ip=frommedia nosplash live-media-path=/recovery bootfrom=/dev/nvme0n1 toram=recovery,syslinux,EFI
initrd /recovery/initrd.img
}

这是Linux系统盘分区信息:

nvme0n1                259:0    0 119.2G  0 disk   
├─nvme0n1p1            259:1    0  26.1G  0 part   
├─nvme0n1p2            259:2    0  87.9G  0 part   /
└─nvme0n1p3            259:3    0   5.3G  0 part   /boot/efi
  • p1 是恢复分区
  • p2 是 lubuntu 根分区
  • p3 是 efi-boot 分区

当我尝试启动此引导条目时,它会创建一个新条目。当我尝试新的时,我收到一个错误,它找不到所需的引导文件。

这是我的恢复分区的内容:

ls /mnt/recovery
amd64-release.txt                         EFI                  live
boot                                      GPL                  lost+found
clonezilla-live-20220522-jammy-amd64.zip  home                 syslinux
Clonezilla-Live-Version                   linux-5.18.4.tar.xz  utils

我认为它来自不正确的 grub 入口路径。 我不确定这个值必须填写什么......

bootfrom=/dev/nvme0n1

或者

bootfrom=/dev/nvme0n1p1

我在文件夹名称中发现了错误,应该更改为“live-hd”而不是“live”,并编辑了 grub 条目,如下所示:

我获取了 Lubuntu 的 grub 条目的信息,并根据我在 gnome-disk-utility 中看到的内容更改了磁盘 ID,并删除了 commands recordfail - load_video - gfxmode $linux_gfx_mode。

menuentry "Clonezilla" {
insmod gzio
if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
insmod part_gpt
insmod ext2
set root=(hd0,gpt1)
if [ x$feature_platform_search_hint = xy ]; then
  search --no-floppy --fs-uuid --set=root --hint='hd0,gpt1'  22d397bb-9bf4-4486-a84f-e2b193a49e85
else
  search --no-floppy --fs-uuid --set=root 22d397bb-9bf4-4486-a84f-e2b193a49e85
fi
linux /live-hd/vmlinuz boot=live union=overlay username=user config components quiet noswap nolocales edd=on nomodeset ocs_live_run=\"ocs-live-general\" ocs_live_extra_param=\"\" keyboard-layouts= ocs_live_batch=\"no\" locales= vga=788 ip=frommedia nosplash live-media-path=/live-hd bootfrom=/dev/nvme0n1p1 toram=live-hd,syslinux,EFI
initrd /live-hd/initrd.img
}

带有 Clonezilla 条目的默认 grub

之后,我选择了 Clonezilla,它在 grub 菜单中创建了一个具有相同名称的新条目:

双 Clonezilla 条目

所以我尝试在新条目上启动,它运行良好,但为什么它首先进入第二个条目?

关键是它启动了,我可以克隆安装 Clonezilla 的磁盘的系统分区作为恢复分区。

最重要的是,我很高兴 Clonezilla 在没有任何额外设置的情况下检测到我的 FakeRaid 及其上的分区。我可以将图像保存在上面而不会带来不便。

Clonezilla 分区到文件

包括验证在内大约需要 10 分钟。现在我仍在寻找如何使其成为仅在备份或还原之间进行选择的菜单,并且始终交替使用相同的源和目标。我想这一定是可能的,所以我继续我的研究。

grub2
  • 1 1 个回答
  • 394 Views

1 个回答

  • Voted
  1. Best Answer
    Wingarmac
    2022-06-18T00:42:18+08:002022-06-18T00:42:18+08:00

    我按照程序在硬盘驱动器上安装 Clonezilla并成功从 grub 菜单启动它。

    1. 我必须解压Clonezilla 的这个 zip 下载并将其解压到我的分区中。

    2. 我必须识别 UUID 和我的磁盘的分区号,我通过打开 gnome-disk-utility 来简单地做到这一点。

    3. 我比较了我的默认 grub 系统条目和 Clonezilla 默认提供的系统条目之间的差异,并根据我的磁盘和分区进行了调整。(详情见问题)

    4. 我保存了对 grub 的更改并更新了它sudo update-grub并重新启动了我的系统。

    5. 我已将包含我的系统的分区备份到我的英特尔 RAID 上的一个映像,该映像由我的 Windows 制作的 NTFS DATA 分区自动识别。

    6. 我测试了一个来自 Nvidia 的属性驱动程序,它使我的内核崩溃了。这使我有充分的理由测试恢复,并成功完成:

    恢复磁盘映像

    有了这个,我找到了一个正确的答案,可以使用 Clonezilla 在启动时创建恢复菜单条目。现在我可以选择保存或恢复我想要的分区。

    我还在这里找到了使用 Clonezilla 创建和使用脚本的步骤以及此处的脚本示例。

    • 0

相关问题

  • 有没有办法从 GUI/桌面管理我的 Grub 菜单选项?

  • grub 菜单中的“恢复”选项是什么?

  • 与 Grub 相比,使用 Grub2 有什么好处?

  • 如果旧版 grub 安装在引导分区扇区而不是 MBR 中,如何将 grub 更新为 grub2?

  • 如何在 Ubuntu 启动时显示或隐藏启动消息?

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