Вопрос или проблема
У меня есть 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-файла не поддерживает изменения таким образом. Однако вы можете это сделать, минимизируя при этом необходимый трудозатраты.
Вот пошаговый процесс, который позволит вам выполнить требуемые изменения:
-
Смонтировать ISO-образ:
Сначала смонтируйте ваш ISO-образ в каталог, чтобы получить доступ ко всем его файлам:
sudo mount -o loop -t iso9660 /path/to/windows.iso /mnt
-
Копирование содержимого:
Создайте копию содержимого ISO-образа в отдельный каталог:
sudo cp -r /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
-
Создание нового ISO-образа:
Теперь вы можете создать новый ISO-образ с помощью
genisoimage
(илиmkisofs
):sudo genisoimage -J -joliet-long -r -allow-lowercase -allow-multidot -o "/path/to/new/windows.iso" "/mnt_copy/"
-
Обеспечение загрузки нового ISO:
Чтобы сделать новый ISO-образ загрузочным, вам нужно будет добавить параметры, аналогичные тем, которые вы использовали для оригинального ISO. Вот базовый пример (может потребоваться адаптация в зависимости от реализации):
sudo genisoimage -no-emul-boot -b "efi/microsoft/boot/efisys.bin" -o "/path/to/new/windows.iso" "/mnt_copy/"
Убедитесь, что вы указываете правильные пути к файлам, чтобы ваш новый образ был загрузочным.
-
Проверка нового ISO:
Наконец, рекомендуется протестировать новый ISO-образ в эмуляторе, например, QEMU:
qemu-system-x86_64 -boot d -cdrom /path/to/new/windows.iso
Этим способом вы сможете модифицировать содержимое вашего ISO-образа без необходимости полного его воссоздания с нуля. Однако помните, что все изменения в файлах могут повлиять на их функциональность, поэтому всегда важно протестировать изменения в контролируемой среде.