С ш
while read a;do i=$((i+1));printf "%05d%s\n" $i "${a##*[0-9]}";done < infile > outfile
замена на месте
printf '%s\n' $(while read a;do i=$((i+1));printf "%05d%s\n" $i "${a##*[0-9]}";done < infile) > infile
Using Linux Mint 19 64 bits as host OS. It's quite safe to assume that similar distros and releases, like Ubuntu for example, will behave the same.
Установите grub-efi-amd64
для совместимости с GRUB EFI.
sudo apt install -y grub-efi-amd64
Отформатируйте USB с таблицей разделов msdos
. Раздел должен быть отформатирован в FAT. Отметьте раздел как загрузочный.
Подключить USB. Запишите :, какое устройство является, т. е. /dev/sdc1
, и путь, на котором оно установлено, т. е. /media/foo/USB/
. С этого момента я буду использовать эти два примера в качестве руководства.
Установить GRUB:
dirs=(bin dev etc lib lib64 proc sbin sys usr)
for dir in "${dirs[@]}"; do
mkdir /media/foo/USB/$dir && sudo mount --bind /$dir /media/foo/USB/$dir
done
sudo chroot /media/foo/USB/
# chroot environment
# first we install grub efi
grub-install --force --removable --target=x86_64-efi --efi-directory=/ /dev/sdc1
# now we install grub i386
grub-install --force --removable --target=i386-pc --boot-directory=/ /dev/sdc
# exit the chroot
exit
WARNING!! Be very careful with the next command, since you could remove binded directories and harm you system. Use tab completion for the paths instead of typing them.
for dir in "${dirs[@]}"; do
sudo umount /media/foo/USB/$dir && rm -rf /media/foo/USB/$dir
done
Смонтируйте ISO и скопируйте файл /boot/grub/grub.cfg
в /media/foo/USB/boot/grub
. Измените имена, например ubuntu.cfg
и debian.cfg
Скопируйте ISO-файлы на USB-накопитель.
Создайте в /media/foo/USB/grub
файл grub.cfg
и поместите туда следующее содержимое:
set root='(hd0,1)'
configfile /boot/grub/grub.cfg
Создайте в /media/foo/USB/boot/grub
файл grub.cfg
и поместите туда следующее содержимое:
menuentry 'Ubuntu 19' {
configfile /boot/grub/ubuntu.cfg
}
menuentry 'Debian 10' {
configfile /boot/grub/debian.cfg
}
Отредактируйте файл /media/foo/USB/boot/grub/ubuntu.cfg
и добавьте следующие строки вверху:
set iso_path=/ubuntu-19.04-desktop-amd64.iso # the name of the ISO
loopback loop $iso_path
Заменить все вхождения строки /casper/
на(loop)/casper/
Заменить все вхождения строки vmlinuz
наvmlinuz iso-scan/filename=$iso_path
Отредактируйте файл /media/foo/USB/boot/grub/debian.cfg
и добавьте следующие строки вверху:
set iso_path=/debian-live-10.2.0-i386-lxqt+nonfree.iso # the name of the ISO
loopback loop $iso_path
Заменить все вхождения строки /live/
на(loop)/live/
Заменить все вхождения строки /d-i/
на(loop)/d-i/
Теперь мы готовы проверить, правильно ли работает USB, просто загрузите компьютер с подключенным USB, и в зависимости от BIOS/EFI у вас будут разные варианты выбора между загрузкой BIOS или EFI или просто вариант загрузки с USB на старых машинах.
For the sake of simplicity, and because this method is moderately advanced, I omit lots of details which I assume the user will be able to sort out. Anyway, suggestions, critics, improvements are welcome. This answer can be edited to add GRUB configurations for other Linux systems if you ask.