Как заставить GRUB2 загружать файл ISO, такой как USB/CD?

Используйте findдля вызова find!

find. -type d \( -exec sh -c 'cd "$0"; find. \( -name. -o -prune \) -name "*.grid" | grep -q.' {} \; -o -print \)

Это соответствует стандарту POSIX -, благодаря этому ответу:

Кроме того, это будет работать независимо от пробелов, специальных символов или даже новых строк в именах файлов или каталогов.:)

(Н.Б. :Если у вас есть специальные символы или новые строки в именах ваших каталогов, вы должны изменить этот последний -printпервичный на любое действие, которое вы хотите выполнить с каталогами, поскольку вы не сможете безопасно разобрать получившийся напечатанный список, если вы просто используете -print.)

Вот версия с разрывами строк, добавленными в возможно ошибочной попытке улучшить читабельность:

find. -type d \
  \( \
    -exec sh -c '
      cd "$0";
      find. \( -name. -o -prune \) -name "*.grid" |
        grep -q.
    ' {} \; \
    -o -print \
  \)

0
10.05.2021, 05:16
1 ответ

Я использую для этого memdiskиз syslinux. Я не знаю, какой это пакет в Centos, но в Debian он находится в пакете syslinux-common. Пакет, вероятно, имеет похожее имя на Centos.

Я также использую приведенный ниже сценарий для автоматического создания записей для всех файлов .isoи .img, найденных в /boot/memdisk/, при каждом запуске update-grub.

В системах, отличных от -Debian, вы должны запустить grub-mkconfig -o /boot/grub/grub.cfgвместоupdate-grub-update -grub — это просто простая оболочка вокруг grub -mkconfig.

В своих системах я сохранил следующее как /etc/grub.d/42-memdiskи сделал его исполняемым с помощью chmod +x. Число в начале имени файла влияет на порядок его выполнения. grub-mkconfigзапускает сценарии из /etc/grub.d/в отсортированном порядке. В моей системе это последний выполненный скрипт, поэтому записи memdiskнаходятся внизу меню grub.

#!/bin/sh
set -e

IMAGES=/boot/images
. /usr/lib/grub/grub-mkconfig_lib
if test -e /boot/memdisk ; then
  echo "Found memdisk: $MEMDISKPATH" >&2
  MEMDISKPATH="$( make_system_path_relative_to_its_root "/boot/memdisk" )"

  find "$IMAGES" -name '*.img' -o -name '*.iso' | sort | 
  while read image ; do
      IMAGEPATH="$( make_system_path_relative_to_its_root "$image" )"
      echo "Found image: $IMAGEPATH" >&2
      cat << EOF
menuentry "Bootable image: $(basename $IMAGEPATH | sed -E -e 's/\.(img|iso)$//i')" {
EOF
      prepare_grub_to_access_device ${GRUB_DEVICE_BOOT} | sed -e 's/^/\t/'
      cat << EOF
        linux16 $MEMDISKPATH bigraw
        initrd16 $IMAGEPATH
}
EOF
  done
fi
1
28.07.2021, 11:33

Теги

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