Могу ли я переименовать файл внутри образа ISO, не перестраивая его полностью?

Вопрос или проблема

У меня есть bash-скрипт, который должен загрузить файл образа Windows 10 с сайта Microsoft и затем изменить имена двух файлов в этом образе, чтобы убрать сообщение “Нажмите любую клавишу для загрузки с этого CD/DVD…”.

По сути, я просто хочу поменять имена этих двух файлов:

вставьте описание изображения здесь

Таким образом, cdboot.efi становится cdboot_noprompt.efi.
А cdboot_noprompt.efi становится cdboot.efi.

Я знаю, что мог бы смонтировать образ, скопировать содержимое куда-то, модифицировать его по своему усмотрению, а затем использовать mkisofs/genisoimage для создания нового образа, примерно так:

sudo mount -o loop -t iso9660 /path/to/windows.iso /mnt
sudo cp /mnt/ /mnt_copy/
cd /mnt_copy/efi/microsoft/boot
sudo mv cdboot.efi tmp.efi
sudo mv cdboot_noprompt.efi cdboot.efi
sudo mv tmp.efi cdboot_noprompt.efi
sudo genisoimage -J -joliet-long -r -allow-lowercase -allow-multidot -o "/path/to/new/windows.iso" "/mnt_copy/"
# И затем волшебным образом сделать образ снова загружаемым. Не знаю, как это сделать.

Но я хотел бы избежать всего этого ненужного объема работы.

Я столкнулся с этой проблемой в Windows 11. Мне удалось успешно создать загрузочный ISO, используя параметры из статьи в вики Arch о Windows PE. Я добавил несколько параметров UID, чтобы соответствовать стандартному ISO:

$ mkisofs \
    -no-emul-boot \
    -b "efi/microsoft/boot/efisys.bin" \
    -iso-level 4 \
    -udf \
    -joliet \
    -disable-deep-relocation \
    -omit-version-number \
    -relaxed-filenames \
    -output "win11-modified.iso" \
    -uid "$(id -u nobody)" \
    -gid "$(id -g nobody)" \
    win11/

После замены cdboot.efi на cdboot_noprompt.efi и efisys.bin на efisys_noprompt.bin, это успешно загружает Windows 11 для меня, по крайней мере в QEMU. Я также смог, например, добавить autounattend.xml в корневую директорию, так что можно предположить, что вы можете внести любые другие изменения, которые вам нужны.

Ответ или решение

К сожалению, вы не можете просто переименовать файлы внутри ISO-образа, не создавая новый образ, поскольку файловая система внутри ISO-файла не поддерживает изменения таким образом. Однако вы можете это сделать, минимизируя при этом необходимый трудозатраты.

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

  1. Смонтировать ISO-образ:

    Сначала смонтируйте ваш ISO-образ в каталог, чтобы получить доступ ко всем его файлам:

    sudo mount -o loop -t iso9660 /path/to/windows.iso /mnt
  2. Копирование содержимого:

    Создайте копию содержимого ISO-образа в отдельный каталог:

    sudo cp -r /mnt /mnt_copy
  3. Переименование файлов:

    Теперь перейдите в каталог, где находятся файлы, которые вы хотите переименовать, и выполните переименование:

    cd /mnt_copy/efi/microsoft/boot
    sudo mv cdboot.efi tmp.efi
    sudo mv cdboot_noprompt.efi cdboot.efi
    sudo mv tmp.efi cdboot_noprompt.efi
  4. Создание нового ISO-образа:

    Теперь вы можете создать новый ISO-образ с помощью genisoimage (или mkisofs):

    sudo genisoimage -J -joliet-long -r -allow-lowercase -allow-multidot -o "/path/to/new/windows.iso" "/mnt_copy/"
  5. Обеспечение загрузки нового ISO:

    Чтобы сделать новый ISO-образ загрузочным, вам нужно будет добавить параметры, аналогичные тем, которые вы использовали для оригинального ISO. Вот базовый пример (может потребоваться адаптация в зависимости от реализации):

    sudo genisoimage -no-emul-boot -b "efi/microsoft/boot/efisys.bin" -o "/path/to/new/windows.iso" "/mnt_copy/"

    Убедитесь, что вы указываете правильные пути к файлам, чтобы ваш новый образ был загрузочным.

  6. Проверка нового ISO:

    Наконец, рекомендуется протестировать новый ISO-образ в эмуляторе, например, QEMU:

    qemu-system-x86_64 -boot d -cdrom /path/to/new/windows.iso

Этим способом вы сможете модифицировать содержимое вашего ISO-образа без необходимости полного его воссоздания с нуля. Однако помните, что все изменения в файлах могут повлиять на их функциональность, поэтому всегда важно протестировать изменения в контролируемой среде.

Оцените материал
Добавить комментарий

Капча загружается...