Як редагувати зображення ISO (включаючи завантажувальні ISO)


30

Я шукаю інструменти для Ubuntu, які можна використовувати для редагування ISO Images. У тому числі ISO-зображення, які завантажуються, такі як Ubuntu та Windows ISO. Не тільки редагуйте, але зберігайте відредагований ISO і все ще можете завантажуватися при записі на USB-накопичувач або CD / DVD.

Відповіді:


42

Майстер ISO встановити ізомастер

Я раніше використовував ISO Master для додавання файлів до ISO. Він підходить для того, що вам потрібно, оскільки він зберігає стан завантаження ISO чи ні. Раніше я використовував це для додавання іншого вмісту (наприклад, музики) на живий диск. Однак зауважте, що після внесення змін у ISO-файл ви можете лише "Зберегти як", тобто буде створено інший файл ISO, тому переконайтеся, що у вас є достатньо місця на диску для обох.

ізомастер


2

PowerISO щойно випустив версію Linux свого програмного забезпечення для редагування ISO. Як і ISO Master , він зберігає стан завантаження ISO чи ні. Однак це дозволяє зберегти безпосередньо у вихідний файл (попередньо видаливши його), тому немає необхідності мати достатньо місця на диску для обох файлів. Я також вважаю, що його інтерфейс простіший та інтуїтивніший у використанні, ніж ISO Master.

скріншот PowerISO для Linux


1

Загальна відповідь на це - розпакувати ізо-файл, змінити його та знову запакувати. Схоже, "ISO Master", як згадується у відповіді dv3500ea, є гарним передовим процесом для цього.

Якщо:

  • у вас не вистачає місця для цього
  • ви хочете зробити хірургічну модифікацію, а не переписувати всю справу
  • ви хочете змінити запам'ятовуючий пристрій, що містить файлову систему isofs (aka iso9660), не копіюючи весь пристрій, або
  • якщо ви думаєте, що ця різання / перепаковка річ просто не надто хитра

Тоді ця відповідь саме для вас!

Підводячи підсумок, ми замінимо існуючий файл у файловій системі isofs на потрібний файл. Наш бажаний файл повинен бути меншим, ніж існуючий (цільовий) файл, і пробіли пробілів (або сміття) повинні бути прийнятними. Для цього потрібні лише дві команди, але будьте обережні: помилка друку може повністю знищити цільову файлову систему або навіть перезаписати вихідний файл. Резервні копії - ваш друг!

У моєму випадку я хотів зберігати скрипт у прямому завантаженні, тому мені не доведеться повторно вводити його. Сценарій є, script.pyа мій ціль (USB-накопичувач) знаходиться на /dev/sdc. Розмір сценарію - 202 байти, тому наш перший крок - знайти файл, більший за 202 байти, щоб ми могли його перезаписати. Після його встановлення /mntя знайшов відповідний файл у /mnt/info.txt.

Ми не можемо просто перезаписати info.txtна точку монтажу, вона скаржиться, що це файлова система лише для читання. Ми все ж кореневі, тож давайте покажемо їм, що це означає! Нам потрібно розібратися, де info.txtзнаходиться у файловій системі. Знайдіть рядок, який (мабуть) є унікальним info.txt, наприклад This is the official distribution CD of X., і знайдіть його на диску:

$ sudo strings -a -t d /dev/sdc | grep 'CD of X.'
2573588480 This is the official distribution CD of X. See INSTALL for how to [...]

З іншого боку , це також може бути зроблено з Grep, яка набагато швидше, але тоді ви повинні вказати його з самого початку: $ sudo grep -oba 'This is ...' /dev/sdc.

Тепер, коли ми знаємо, де він знаходиться, нам просто потрібно замінити ці байти на наш файл:

$ sudo dd if=script.py of=/dev/sdc conv=notrunc bs=1 seek=2573588480 count=202

Цей рядок:

  • копіює байти з вхідного файлу ( if) у вихідний файл ( of), і не байдуже, що вихідний файл насправді є пристроєм, оскільки "все - це файл".
  • conv=notrunc вказує не усікати вихідний файл, тому що ми хочемо лише перезаписати кілька байтів, а не перезаписати файл з певного моменту.
  • bs=1 встановлює розмір блоку на 1. Ви зазвичай хочете розмір блоку 4k або вище, але це обидва дозволяє уникнути необхідності (вбудованої) математики і дозволяє нам вказати місце розташування точно до байту.
  • seek=Nшукає певного пункту у вихідному файлі (зауважте, seek=Nвін відрізняється від того, skip=Nщо skipпропускає байти з вхідного файлу!). Ми встановлюємо його, звичайно, там, де знаходиться цільовий текст.
  • count=Nскопіюйте лише це багато байтів. Я думаю, що це можна опустити, оскільки він помітить кінець вхідного файлу, але я залишив це лише для впевненості.

І вуаля, файл перезаписаний!

Але зачекайте, цільовий файл був більшим, ніж наш сценарій, тому на USB-накопичувачі файл тепер щось на зразок: "поки робити, якщо run () blah; blah (); yright 2007 X Inc.". Є затяжне сміття. Два способи виправити це: збільшити наш вхідний файл довше (додати пробіли) або додати символ коментаря наприкінці. Зверніть увагу , що багато редакторів додати нову рядок в кінці, так що ви можете встановити count=в N-1байтах (якщо ваш файл тепер 203 байт, і ви помітите , що останній байт є символ нового рядка, набір відлік до 202). Ви можете перевірити файл на нові рядки, скориставшись xxd script.py | tailі перевіривши, чи є останній байт 0a(або, у дивних випадках 0d).

Процес ідентичний для .isoфайлу, просто подумки замінити /dev/sdcз your.iso.

Зауважте, що перевіряючи ціль у точці монтажу, щоб побачити, чи спрацювала вона, можливо, вам доведеться stringsзнову використовувати (на цей раз пошук вашого сценарію), оскільки файл, ймовірно, все ще знаходиться в кеш-пам'яті зчитування.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.