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 / 问题 / 1140273
Accepted
Xu Shijie
Xu Shijie
Asked: 2019-05-04 06:54:21 +0800 CST2019-05-04 06:54:21 +0800 CST 2019-05-04 06:54:21 +0800 CST

如何更改 /boot/grub/grub.cfg 中的 UUID

  • 772

我在问如何更改uuid,/boot/grub/grub.cfg以便 grub 可以在指定的分区上加载操作系统。

我有两个磁盘:

  • SSD /dev/sda1 与 uuid d7f0cf11-3edf-4859-b65a-3b5bc60ea7b9
  • 硬盘 /dev/sdb1 与 uuid 47d9205b-00a8-40e5-88d6-e8b9571799a7

两个磁盘都包含相同的内容(一个 Ubuntu 根目录)但不同的分区 uuid sda1,sdb1因为clonezilla

问题是/boot/grub/grub.cfg,它是自动生成的,包含:

           if [ x$feature_platform_search_hint = xy ]; then
              search --no-floppy --fs-uuid --set=root --hint-bios=hd1,msdos1 --hint-efi=hd1,msdos1 --hint-baremetal=ahci1,msdos1  47d9205b-00a8-40e5-88d6-e8b9571799a7
            else
              search --no-floppy --fs-uuid --set=root 47d9205b-00a8-40e5-88d6-e8b9571799a7
            fi
            echo    'Loading Linux 4.4.0-146-generic ...'
            linux   /boot/vmlinuz-4.4.0-146-generic root=UUID=47d9205b-00a8-40e5-88d6-e8b9571799a7 ro  quiet splash $vt_handoff

表明 grub 选择 Ubuntu rootsdb1而不是sda1,而我希望它选择sda1.

我尝试直接替换所有47d9205b-00a8-40e5-88d6-e8b9571799a7,d7f0cf11-3edf-4859-b65a-3b5bc60ea7b9然后运行update-grub,但随后一切都恢复了。

那么还有其他更好的解决方案吗?/boot/grub/grub.cfg实际上是自动生成的。如果我分离了sdb1,grub 将无法启动,因为它找不到sdb1.

谢谢


更新:

shijiex@shijie:~$ cat /etc/fstab
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
proc            /proc           proc    nodev,noexec,nosuid 0       0
# / was on /dev/sda1 during installation
UUID=d7f0cf11-3edf-4859-b65a-3b5bc60ea7b9  /               ext4    errors=remount-ro 0       1

#UUID=47d9205b-00a8-40e5-88d6-e8b9571799a7 /old_os               ext4    errors=remount-ro 0       2
# /backup was on /dev/sda5 during installation
UUID=d36e69de-3af8-4302-a2b1-f32c2538493d /backup         ext4    defaults        0       0
# /home was on /dev/sda7 during installation
UUID=95ffe5be-ed1c-4d2b-b745-e31ba62ca63d /home           ext4    defaults        0       2
#UUID=e2ae897d-62b1-45d3-a17a-49e7a1b8fbe7 /home           ext4    defaults        0       2

# /vm was on /dev/sda8 during installation
#UUID=222bf555-b2d3-4607-a856-f5fd785b1862  /vm            ext4    defaults        0       2
# /opt was on /dev/sda8 during installation
UUID=ffbc1ea0-f426-4def-9349-a6f68b486b2f  /opt       ext4    defaults        0       0
# /other was on /dev/sda6 during installation
UUID=657778bc-fde8-4261-9fe6-4134c6a7fb3f /other          ext4    defaults        0       0


# /other was on /dev/sda6 during installation
#UUID=6db98036-2350-4289-b9ef-8e0a2ae52eeb /win           ext4    defaults        0       2


# swap was on /dev/sda9 during installation
UUID=71c498b2-3484-4d5b-b64a-270cc352841b  none            swap    sw              0       0
#UUID=05f1ba29-4188-40d1-8597-de708b48ed50  /tmp           swap    sw              0       0

和blkid:

 shijiex@shijie:~$ sudo blkid 

[sudo] password for shijiex: 
/dev/sda1: UUID="d7f0cf11-3edf-4859-b65a-3b5bc60ea7b9" TYPE="ext4" PARTUUID="2fe05ff9-01"
/dev/sda3: UUID="95ffe5be-ed1c-4d2b-b745-e31ba62ca63d" TYPE="ext4" PARTUUID="2fe05ff9-03"
/dev/sda4: UUID="8d114eed-5ce4-4d6f-8a28-8a7092b01d46" TYPE="ext4" PARTUUID="2fe05ff9-04"
/dev/sda5: UUID="94b0fb65-f56d-426d-81f9-d05a8ac783eb" TYPE="ext4" PARTUUID="2fe05ff9-05"
/dev/sdb1: UUID="47d9205b-00a8-40e5-88d6-e8b9571799a7" TYPE="ext4" PARTUUID="0001c588-01"
/dev/sdb10: LABEL="New Volume" UUID="6db98036-2350-4289-b9ef-8e0a2ae52eeb" TYPE="ext4" PARTUUID="0001c588-0a"
/dev/sdb11: UUID="ffbc1ea0-f426-4def-9349-a6f68b486b2f" TYPE="ext4" PARTUUID="0001c588-0b"
/dev/sdb5: UUID="d36e69de-3af8-4302-a2b1-f32c2538493d" TYPE="ext4" PARTUUID="0001c588-05"
/dev/sdb6: UUID="657778bc-fde8-4261-9fe6-4134c6a7fb3f" TYPE="ext4" PARTUUID="0001c588-06"
/dev/sdb7: UUID="e2ae897d-62b1-45d3-a17a-49e7a1b8fbe7" TYPE="ext4" PARTUUID="0001c588-07"
/dev/sdb8: UUID="222bf555-b2d3-4607-a856-f5fd785b1862" TYPE="ext4" PARTUUID="0001c588-08"
/dev/sdb9: UUID="71c498b2-3484-4d5b-b64a-270cc352841b" TYPE="swap" PARTUUID="0001c588-09"
/dev/loop0: TYPE="squashfs"
/dev/loop1: TYPE="squashfs"
/dev/loop2: TYPE="squashfs"
/dev/loop3: TYPE="squashfs"
/dev/loop4: TYPE="squashfs"
grub2 boot partitioning mount uuid
  • 5 5 个回答
  • 22513 Views

5 个回答

  • Voted
  1. Best Answer
    heynnema
    2019-05-04T17:02:36+08:002019-05-04T17:02:36+08:00

    您表示您将 HDD 克隆到 SDD。但是,当我查看sudo blkidand时cat /etc/fstab,它并没有太大的相关性。分区不匹配。UUID 不匹配。我怀疑您所做的更改不仅仅是克隆和启动。

    在不确切知道你做了什么/如何做的情况下,很难为你想出一个简洁的答案......但你可以试试这个......

    • 打开你的机器,然后进入 GRUB 菜单
    • 按键e进入编辑模式
    • 使用箭头键找到“安静的飞溅”
    • UUID=xxxx在同一行的开头找到
    • 将整个UUID=xxxx部分更改为/dev/sda1
    • control+x或F10编辑后继续开机
    • 一旦启动sudo update-grub,,然后reboot
    • 进入 BIOS 启动菜单并选择 SDA 启动,或将启动顺序更改为 CD-ROM/SDA/SDB/etc。
    • 在 GRUB 菜单中,选择要从中引导的正确磁盘
    • 2
  2. ioMatrix
    2020-06-04T19:45:48+08:002020-06-04T19:45:48+08:00

    对于将来遇到这种情况的任何人。这将是在 grub 中更改根分区 UUID 配置的正确方法。在执行以下操作之前,请确保您具有要用作根 ( / ) 的设备的正确 UUID。

    编辑您的 /etc/default/grub 并添加以下变量:

    GRUB_DEVICE_UUID=***INSERT NEW UUID HERE***
    

    然后运行这个:

    sudo update-grub
    

    这不会更改搜索的提示条目,但无论如何都不会匹配,因此它应该可以工作。如果有人想研究改变那部分的方法,我很想知道。

    • 1
  3. WinEunuuchs2Unix
    2019-05-04T15:24:00+08:002019-05-04T15:24:00+08:00

    Clonezilla 限制

    我写了一个 bash 脚本来做 Clonezilla 所做的没有它的限制:

    • 用于将 Ubuntu 备份/克隆到另一个分区的 Bash 脚本

    Clonezilla 不为您做的脚本中的亮点:

    echo ""
    echo "====================================================================="
    echo "Making changes in: $TargetMnt/etc/fstab"
    echo "        from UUID: $SourceUUID"
    echo "          to UUID: $TargetUUID"
    sed -i "s/$SourceUUID/$TargetUUID/g" "$TargetMnt"/etc/fstab
    
    # Update /boot/grub/grub.cfg on clone partition with clone's UUID
    echo ""
    echo "====================================================================="
    echo "Making changes in: $TargetMnt/boot/grub/grub.cfg"
    echo "        from UUID: $SourceUUID"
    echo "          to UUID: $TargetUUID"
    echo "Also change 'quiet splash' to 'nosplash' for environmental awareness"
    echo "Suggest first time booting clone you make wallpaper unique"
    sed -i "s/$SourceUUID/$TargetUUID/g" "$TargetMnt"/boot/grub/grub.cfg
    #sed -i "s/quiet splash/nosplash/g" "$TargetMnt"/boot/grub/grub.cfg
    
    • #请注意,出于您的目的,您需要通过在前面插入sed如上面显示的最后一行所示来注释掉对 grub 的“安静飞溅”的更改。

    脚本的黑客版本

    我显然没有对此进行测试,但是您可以破解脚本并在从 HDD 启动后创建自己的运行版本。将这些命令放在被黑脚本中:

    #!/bin/bash
    SourceUUID="47d9205b-00a8-40e5-88d6-e8b9571799a7"
    TargetUUID="d7f0cf11-3edf-4859-b65a-3b5bc60ea7b9"
    TargetDev=/dev/sdaX # Replace `X`this with your actual number
    TargetMnt="/mnt/clone"
    mkdir -p "$TargetMnt"                       # '-p' directory may already exist
    mount -t auto -v $TargetDev "$TargetMnt" > /dev/null
    
    sed -i "s/$SourceUUID/$TargetUUID/g" "$TargetMnt"/etc/fstab
    sed -i "s/$SourceUUID/$TargetUUID/g" "$TargetMnt"/boot/grub/grub.cfg
    umount "$TargetMnt" -l              # Unmount the clone
    rm  -d "$TargetMnt"                 # Remove clone directory
    

    将其标记为可执行文件chmod a+x /path/to/MyHackedScript并使用 root 权限调用它sudo /pathto/MyHackedScript。

    与 Clonezilla 的其他区别

    • 您最终会得到两个 grub 引导条目,一个用于 HDD,一个用于 SSD
    • 您可以sudo update-grub在从 HDD 或 SSD 启动后运行
    • 如果您不想在 grub 菜单上使用 HDD,只需从 SSD 启动并更新 grub
    • 您可以使用该脚本每天克隆(完整备份),在这种情况下,它可能会快约 100 倍,因为仅重新克隆自昨天以来已更改的文件。rsync这是非常快的用于(重新)克隆过程。
    • 0
  4. murchu27
    2021-04-18T02:19:25+08:002021-04-18T02:19:25+08:00

    @heynnema 的回答让我大部分时间都在那里,但对我来说并没有完全做到,因为我的 BIOS 菜单没有显示该分区的引导条目(不知道为什么)。无论如何,我按照他们的步骤从启动菜单中选择磁盘:

    进入 BIOS 启动菜单并选择 SDA 启动,或将启动顺序更改为 CD-ROM/SDA/SDB/etc。

    我没有执行此步骤,而是像往常一样继续 grub,并引导与原始安装相对应的条目(所以在 @Xu 的情况下,应该是/dev/sdb1)。启动后,我sudo update-grub在该update-grub系统上运行,它获取了在新系统上运行后所做的更改。现在,当我从 grub 菜单中选择新条目时,它会引导至正确的系统。

    希望这可以帮助那些没有在他们的 BIOS 菜单中获得条目的人。

    • 0
  5. Pierre ALBARÈDE
    2022-08-30T13:08:51+08:002022-08-30T13:08:51+08:00

    您可以像以前一样直接更改 UUID /boot/grub/grub.cfg。 /boot/grub/grub.cfg不会自动更新。但是,如果您想保留可引导性,您还需要在其他地方相应地更改 UUID,例如,使用 EFI/UEFI 引导,在/boot/efi/EFI/ubuntu/grb.cfg和/etc/fstab.

    • 0

相关问题

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

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

  • 您对台式机和家庭服务器的驱动器分区方案有什么建议?[关闭]

  • 如何避免启动时出现“S to Skip”消息?

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