在运行 bash 脚本时,我想以编程方式从 USB 启动。BIOS 设置为从 HD 启动。这可能吗?有什么提示吗?
我为什么要这样做???我正在全国各地远程安装的一百多台机器上更新到 Ubuntu 20.04。我必须导出数据库,然后在更新后导入。整个过程需要几个小时才能完成。我希望整个过程自动进行,这样升级人员就不必照看了。
感谢您的慷慨回复。我可以提供更多详细信息:BIOS 设置为从我的硬盘启动。然后 Grub2 启动正常操作系统。
如果我插入 USB 拇指驱动器,我可以通过按 F11 键并选择 USB 拇指驱动器来从中启动 Ubuntu。因此,我在想,如果我执行 sudo update-grub,它应该会在拇指驱动器上找到操作系统并将其放入 grub 列表中。
以下是 grub.cfg 中的菜单项
dfr@m9kmission:~$ grep -i "menuentry '" /boot/grub/grub.cfg
menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-59e8ab4e-1d3d-4a1b-b97b-ec10766929e6' {
menuentry 'Ubuntu, with Linux 4.15.0-112-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.15.0-112-generic-advanced-59e8ab4e-1d3d-4a1b-b97b-ec10766929e6' {
menuentry 'Ubuntu, with Linux 4.15.0-112-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.15.0-112-generic-recovery-59e8ab4e-1d3d-4a1b-b97b-ec10766929e6' {
menuentry 'Ubuntu, with Linux 4.15.0-106-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.15.0-106-generic-advanced-59e8ab4e-1d3d-4a1b-b97b-ec10766929e6' {
menuentry 'Ubuntu, with Linux 4.15.0-106-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.15.0-106-generic-recovery-59e8ab4e-1d3d-4a1b-b97b-ec10766929e6' {
在我运行 sudo update-grub 后,菜单项相同,但 U 盘上的操作系统未添加。可能是操作系统探测器认为它不应该为可移动驱动器添加条目?我认为,如果我可以让 update-grub 为 U 盘上的操作系统添加菜单项,我就可以运行 sudo grub-reboot,然后当我重新启动计算机时,它将从 U 盘启动。下次重新启动将返回到正常操作系统。
问题:
- 我的想法正确吗?
- 我怎样才能让 update-grub 为我的拇指驱动器上的操作系统创建一个条目?
- 如果我不能,我应该将自己的条目插入到 /boot/grub/grub.cfg 中吗?
常规操作系统菜单项如下。也许我可以仿照它来设计我的新菜单项:(不过它看起来相当吓人。)
menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-59e8ab4e-1d3d-4a1b-b97b-ec10766929e6' {
recordfail
load_video
gfxmode $linux_gfx_mode
insmod gzio
if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
insmod part_msdos
insmod ext2
set root='hd1,msdos1'
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 59e8ab4e-1d3d-4a1b-b97b-ec10766929e6
else
search --no-floppy --fs-uuid --set=root 59e8ab4e-1d3d-4a1b-b97b-ec10766929e6
fi
linux /boot/vmlinuz-4.15.0-112-generic root=UUID=59e8ab4e-1d3d-4a1b-b97b-ec10766929e6 ro
initrd /boot/initrd.img-4.15.0-112-generic
}
The normal os is on sdb1. The thumb drive is sdc1.
dfr@m9kmission:~$ blkid
/dev/sda1: UUID="d210d958-9eea-4786-9d9f-8311f852b9df" TYPE="ext4" PARTUUID="98f91627-01"
/dev/sdb1: UUID="59e8ab4e-1d3d-4a1b-b97b-ec10766929e6" TYPE="ext4" PARTUUID="4c6a03f4-01"
/dev/sdb2: UUID="32251f52-55d0-4c14-8746-bbf48a3984c0" TYPE="ext4" PARTUUID="4c6a03f4-02"
/dev/sdc1: LABEL="UBUNTU 18_0" UUID="7EF3-2CBA" TYPE="vfat" PARTUUID="0ba7b71d-01"
这是拇指驱动器上的目录树。
dfr@m9kmission:~$ tree -d /media/dfr/UBUNTU\ 18_0/
/media/dfr/UBUNTU 18_0/
├── boot
│ └── grub
│ └── x86_64-efi
├── casper
├── dists
│ └── bionic
│ ├── main
│ │ ├── binary-amd64
│ │ ├── binary-i386
│ │ └── source
│ └── restricted
│ ├── binary-amd64
│ ├── binary-i386
│ └── source
├── EFI
│ └── BOOT
├── install
├── isolinux
├── pics
├── pool
│ ├── main
│ │ ├── b
│ │ │ ├── b43-fwcutter
│ │ │ └── build-essential
│ │ ├── d
│ │ │ ├── dkms
│ │ │ └── dpkg
│ │ ├── f
│ │ │ └── fakeroot
│ │ ├── g
│ │ │ ├── gcc-7
│ │ │ ├── gcc-8
│ │ │ ├── gcc-defaults
│ │ │ ├── glibc
│ │ │ ├── grub2
│ │ │ └── grub2-signed
│ │ ├── l
│ │ │ ├── linux
│ │ │ └── lupin
│ │ ├── liba
│ │ │ ├── libalgorithm-diff-perl
│ │ │ ├── libalgorithm-diff-xs-perl
│ │ │ └── libalgorithm-merge-perl
│ │ ├── m
│ │ │ ├── make-dfsg
│ │ │ ├── manpages
│ │ │ └── mouseemu
│ │ ├── s
│ │ │ ├── setserial
│ │ │ ├── shim
│ │ │ └── shim-signed
│ │ └── u
│ │ ├── ubiquity
│ │ ├── ubiquity-slideshow-ubuntu
│ │ └── user-setup
│ └── restricted
│ └── b
│ └── bcmwl
├── preseed
└── System Volume Information
Linux 文件似乎位于 Casper 文件夹中:
dfr@m9kmission:~$ ll /media/dfr/UBUNTU\ 18_0/casper/
total 2121880
drwxr-xr-x 2 dfr dfr 8192 Jul 24 07:14 ./
drwxr-xr-x 13 dfr dfr 8192 Dec 31 1969 ../
-rw-r--r-- 1 dfr dfr 56234 Jul 24 07:14 filesystem.manifest
-rw-r--r-- 1 dfr dfr 767 Jul 24 07:14 filesystem.manifest-minimal-remove
-rw-r--r-- 1 dfr dfr 3309 Jul 24 07:14 filesystem.manifest-remove
-rw-r--r-- 1 dfr dfr 10 Jul 24 07:14 filesystem.size
-rw-r--r-- 1 dfr dfr 2094698496 Jul 24 07:15 filesystem.squashfs
-rw-r--r-- 1 dfr dfr 68622117 Jul 24 07:23 initrd
-rw-r--r-- 1 dfr dfr 9371904 Jul 24 07:24 vmlinuz
也许我可以像这样编辑新的菜单项:
menuentry 'Ubuntu-rescue' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-7EF3-2CBA' {
recordfail
load_video
gfxmode $linux_gfx_mode
insmod gzio
if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
insmod part_msdos
insmod squashfs
set root='hd3,msdos1'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd3,msdos1 --hint-efi=hd3,msdos1 --hint-baremetal=ahci1,msdos1 7EF3-2CBA
else
search --no-floppy --fs-uuid --set=root 7EF3-2CBA
fi
linux /casper/vmlinuz root=UUID=7EF3-2CBA ro
initrd /casper/initrd
}
经过上述编辑,Ubuntu-rescue 将在 grub 菜单中提供。当我启动它时,我收到一条消息,内容为:
error: file `boot/grub/i386-pc/squashfs.mod' not found
我注意到拇指驱动器上有一个文件:
./boot/grub/x86_64-efi/squash4.mod
如果我可以让 grub 在那里寻找文件,它可能就接近了。
有任何想法吗???
谢谢!
答案1
成功了!如果我把这个作为第一个菜单项放入 /boot/grub/grub.cfg 中,计算机就会从拇指驱动器启动:(当然,您必须用拇指驱动器的真实 UUID 替换 DRIVE_UUID。)
menuentry "Boot from LIVE USB Drive" {
search --set=root --fs-uuid DRIVE_UUID
linux ($root)/casper/vmlinuz boot=casper quiet splash --
initrd ($root)/casper/initrd.lz
}
在我的例子中,DRIVE_UUID 是 7EF3-2CBA
dfr@ubuntu:~$ blkid /dev/sda1: UUID="d210d958-9eea-4786-9d9f-8311f852b9df" TYPE="ext4" PARTUUID="98f91627-01" /dev/sdb1: UUID="59e8ab4e-1d3d-4a1b-b97b-ec10766929e6" TYPE="ext4" PARTUUID="4c6a03f4-01" /dev/sdb2: UUID="32251f52-55d0-4c14-8746-bbf48a3984c0" TYPE="ext4" PARTUUID="4c6a03f4-02" /dev/sdc1: LABEL="usi-utility" UUID="E2F2EA5AF2EA3309" TYPE="ntfs" PARTLABEL="我的护照" PARTUUID="a01d9bcb-63db-4837-a4b0-5bdde565421e" /dev/sdd1:LABEL="UBUNTU 18_0"UUID="7EF3-2CBA“类型=”vfat“PARTUUID=”0ba7b71d-01“
答案来自这篇文章: 如何添加 GRUB2 菜单项以启动 USB 驱动器上安装的 Ubuntu?
使用拇指驱动器启动后,我将 grub.cfg 恢复到原来的状态,以便计算机能够以正常操作系统重新启动。