Как перезагрузиться с USB-накопителя с помощью сценария bash

При запуске сценария bash я хотел бы программно перезагрузиться с USB-накопителя. BIOS настроен на загрузку с HD. Это возможно? Есть подсказки?

Почему я хочу это сделать ??? Я обновляюсь до Ubuntu 20.04 на сотне или более машин, установленных по всей стране в удаленных местах. Мне нужно экспортировать базу данных, а затем импортировать ее после обновлений. Весь процесс занимает часы. Я хочу, чтобы весь процесс происходил автоматически, чтобы человеку, выполняющему обновление, не приходилось присматривать за мной.


Спасибо за ваши щедрые ответы. Я могу дать более подробную информацию: BIOS настроен на загрузку с моего жесткого диска. Затем Grub2 загружает обычную ОС.

Если я подключу свой USB-накопитель, я могу загрузиться с него в Ubuntu, нажав клавишу F11 и выбрав USB-накопитель. Итак, я думаю, что если я выполню 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 элементы меню остаются прежними, операционная система на флэш-накопителе не добавляется. Может быть, os-prober считает, что не следует добавлять запись для съемного диска? Я думаю, что если бы я мог получить update-grub для добавления пункта меню для ОС на флэш-накопитель, я мог бы запустить sudo grub-reboot, а затем, когда я перезагружаю компьютер, он загрузится с флэш-накопителя.Следующая перезагрузка вернется к нормальной ОС.

Вопросы:

  1. Правильно ли я думаю?
  2. Как я могу получить update-grub, чтобы сделать запись для операционной системы на моем флэш-накопителе?
  3. Если я не могу, я должен вставить свою собственную запись в /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 искать файл там, возможно, он приближается.

Есть идеи ???

Спасибо!

0
задан 31 July 2020 в 21:44

1 ответ

Успех! Если я помещу это в /boot/grub/grub.cfg в качестве первого пункта меню, компьютер загрузится с флэш-накопителя: (Конечно, вы должны заменить DRIVE_UUID на реальный 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" ТИП="ext4" PARTUUID="98f91627-01" /dev/sdb1: UUID="59e8ab4e-1d3d-4a1b-b97b-ec10766929e6" ТИП="ext4" PARTUUID="4c6a03f4-01" /dev/sdb2: UUID="32251f52-55d0-4c14-8746-bbf48a3984c0" ТИП="ext4" PARTUUID="4c6a03f4-02" /dev/sdc1: LABEL="usi-утилита" UUID="E2F2EA5AF2EA3309" TYPE="ntfs" PARTLABEL="Мой паспорт" PARTUUID="a01d9bcb-63db-4837-a4b0-5bdde565421e" /dev/sdd1: LABEL="UBUNTU 18_0" UUID="7EF3-2CBA" TYPE="vfat" PARTUUID="0ba7b71d-01"

Ответ пришел из этого поста: Как добавить пункт меню GRUB2 для загрузки установленной Ubuntu с USB-накопителя?

После загрузки с флэш-накопителя я вернул файл grub.cfg в прежнее состояние, чтобы компьютер перезагрузился с нормальной ОС.

1
ответ дан 7 August 2020 в 17:54

Другие вопросы по тегам:

Похожие вопросы: