При запуске сценария 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, а затем, когда я перезагружаю компьютер, он загрузится с флэш-накопителя.Следующая перезагрузка вернется к нормальной ОС.
Вопросы:
Обычное меню операционной системы выглядит следующим образом. Может быть, я смогу скопировать свою новую запись по нему: (Хотя это выглядит довольно устрашающе.)
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 искать файл там, возможно, он приближается.
Есть идеи ???
Спасибо!
Успех! Если я помещу это в /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 в прежнее состояние, чтобы компьютер перезагрузился с нормальной ОС.