Перейти к содержимому

Mkisofs linux как сделать iso

  • автор:

Команда dd. Создать образ из файлов папки?

в папке /var/cache/pacman/pkg много файлов. их нужно записать в iso образ.

Даю команду: dd if=/var/cache/pacman/pkg of=obraz.iso

И ничего не срабатывает. Пишет 0 файлов найдено и т.д.

dd работает только с отдельными файлами. а ты ему каталог отдаешь.
и еще, dd — это не команда для создания iso образов — это команда для побитового копирования. и то что ней клепают исо-шки, так это только потому что всякие /dev/sdc суть файлы, репрезентирующие блочные устройства.

почитай какую нить книгу про линукс — избавишься от таких ошибок

в папке /var/cache/pacman/pkg много файлов. их нужно записать в iso образ.

Даю команду: dd if=/var/cache/pacman/pkg of=obraz.iso

И ничего не срабатывает. Пишет 0 файлов найдено и т.д.

Жесть =). Команда dd просто читает данные из _одного_ файла и записывает в другой. Про директории и формат ISO она вообще ничего не знает. С помощью dd образ в формате ISO можно снять только с диска (/dev/cdrom), т.к. на диске и так всё уже в формате ISO.

Чтобы создать образ с нуля — воспользуйся mkisofs:

mkisofs это ущербная утилита. У CD дисков есть ограничение на глубину папок, имена файлов, папок. Можно потерять некоторые файлы.

в таком случае, можно создать образ раздела в файле.
dd if=/dev/zero of=image_file.img bs=1M count=1024 //получаем образ на 1 гиг
mkfs.ext4 image_file.img
потом файл монтируется в каталог и в него копируются нужные файлы.

Если нет желания пользоваться mkisofs (кстати, mironov_ivan , посоветовал неправильный ключ: -J не нужен, нужен -R, ибо joilet-расширение для мастдая) можно так:

1. Создаем командой dd файл с размером, равным размеру данных, влезающих на dvd:

2. Создаем на нем ext2:

3. В fstab прописываем:

3. Монтируем образ и записываем в него свои данные, как только место на образе кончится, отмонтируем и записываем на болванку:

4. Монтируем образ и удаляем содержимое для подготовки к записи следующей порции файлов.

Работает на ура. Из плюсов такого способа: можно постепенно подкидывать файлы на образ и записывать, когда он полностью забьется; 99% гарантии, что в мастдае такой диск никто не откроет. Ну, а если перед записью выставить права 0 на корень образа, то его можно будет прочитать только скопировав на диск, смонтировав и изменив права — т.е. так ваши данные будут в довольно надежной сохранности. При желании можно еще и зашифровать ФС на образе.

Создаем свой загрузочный диск Linux

В статье описывается, как создать собственный загрузочный диск Linux (оптический диск или флешку), добавить в него только нужные программы и убрать все лишнее. Полученный образ в экспериментах занял менее 25 Мб. Он позволяет быстро загружаться, работать в текстовом режиме, создавать, редактировать, удалять файлы на разных файловых системах, имеет поддержку русского языка. За основу взят Debian.

Для того, чтобы создать загрузочный диск, необходимо создать его образ, iso-файл, который затем можно записать на оптический диск или флешку. В общем случае порядок загрузки выглядит следующим образом:

Порядок загрузки Linux

Порядок загрузки Linux

Подготовка

Для начала необходимо создать пустой каталог livecd, в котором будет проводиться дальнейшая работа. В нем необходимо создать подкаталог iso, в котором будет формироваться образ диска. Используемые в статье названия файлов и каталогов не являются обязательными. Если какое-то название является обязательным, об этом будет указано.

Добавление загрузчика UEFI

Для добавления загрузчика UEFI понадобятся файлы, которые могут отсутствовать на компьютере. Чтобы их получить, необходимо установить ряд пакетов:

Далее в каталоге livecd необходимо создать вспомогательные файлы:

Загрузчик добавляется командой:

В результате в каталоге iso появятся два файла: grub.cfg и efiboot.img.

Добавление загрузчика BIOS

На древних компьютерах UEFI отсутствует. Вместо этого там используется BIOS. Чтобы создаваемый диск мог загружаться на таких компьютерах тоже, необходимо добавить загрузчик BIOS. Для получения файлов необходимо установить ряд пакетов:

Далее в каталоге livecd необходимо создать вспомогательный файл (отступ не обязателен):

После этого нужно выполнить команды:

В результате в каталоге iso появится еще ряд файлов.

Создание образа и диска

Образ (файл livecd.iso) создается командой:

Далее эта команда будет называться (1). Образ записывается на оптический диск командой:

Образ записывается на флешку командой (будем считать, флешка является устройством /dev/sdz):

Указывать нужно саму флешку, а не раздел на ней, то есть /dev/sdz , но не /dev/sdz1 .

Удалить linux с флешки и отформатировать ее обратно можно командой:

Проверка работоспособности созданного образа

Проверить созданный образ можно как на настоящем компьютере, так и с помощью виртуальной машины. Например, в VMware можно создать новую виртуальную машину без жесткого диска, но с CD-приводом, в качестве образа указать файл livecd.iso. Переключение между UEFI и BIOS осуществляется в настройках этой виртуальной машины в разделе Options – Advanced – Firmware type.

Переключение между UEFI и BIOS в VMware

Переключение между UEFI и BIOS в VMware

При загрузке в режиме UEFI отобразится меню загрузчика:

Загрузчик GRUB

Загрузчик GRUB

Загрузчик попытается загрузить Linux, но поскольку он еще не добавлен, отобразится сообщение об ошибке «file /linux not found».

При загрузке в режиме BIOS отобразится меню загрузчика:

Загрузчик Syslinux

Загрузчик Syslinux

Поскольку Linux еще не добавлен, это меню уйдет в бесконечный цикл.

Добавление ядра Linux

Ядро Linux обычно хранится в каталоге /boot и представляет собой файл с названием «vmlinuz-XXX», где XXX — версия ядра. Добавить текущее ядро в создаваемый образ можно командой:

После этого в каталоге iso появится файл linux. Далее необходимо пересобрать образ командой (1), указанной выше в разделе «Создание образа и диска».

Чтобы не зависеть от версии ядра, указанной здесь командой « cp $(ls -t … » ядро не просто копируется, а переименовывается в linux без указания версии. Именно это имя файла указано вторым элементом в файлах grub.cfg и syslinux.cfg в строке « linux linux ». Если в каталоге /boot имеется несколько ядер, можно использовать любое, главное, запомнить его версию. Далее в статье будет рассматриваться использование текущего ядра.

После добавления ядра загрузчики UEFI и BIOS перестанут ругаться на его отсутствие и запустят его выполнение. В свою очередь ядро успешно запустится и, в условиях отсутствия файловой системы, выдаст сообщение об ошибке «Kernel Panic. Unable to mount root fs».

Добавление файловой системы

В данной статье в качестве корневой файловой системы рассматривается использование временной файловой системы, которая размещается в оперативной памяти (initramfs). Для ее создания необходимо создать в каталоге livecd подкаталог initramfs, в нем пустой файл с названием init. Файл с таким названием почему-то обязательно должен быть и находиться в корне файловой системы, иначе ядро проигнорирует такую initramfs. Далее необходимо выполнить команды:

В результате в подкаталоге iso появится файл init.ram. Его необходимо указать в файле grub.cfg, добавив перед закрывающей фигурной скобкой строку « initrd /init.ram ».

В конец файла syslinux.cfg нужно добавить строку « initrd init.ram» .

После этого необходимо пересобрать образ командой (1), указанной выше в разделе «Создание образа и диска». Теперь при загрузке Linux будет сообщать об ошибке «Kernel Panic. No working init found». В данном случае это сообщение означает, что ядро успешно запустилось и даже признало файловую систему initramfs, нашло в нем файл init и попыталось его запустить, но не получилось, потому что этой пустой файл.

Минимальный работающий init

В каталоге initramfs нужно создать следующую структуру файлов:

В initramfs должен получиться один подкаталог lib с двумя файлами в нем, одна символическая ссылка lib64 и один файл init. В скобках указано, какие файлы нужно взять из текущего работающего компьютера. Файлы должны быть исполняемыми. Далее необходимо пересобрать образ командами:

Далее эти команды будут называться командой (2).

Если все сделать правильно, получится минимальный работающий образ с командной строкой. В моем случае его размер составил чуть более 12 Мб. В командной строке не работают никакие команды, они будут добавлены позже. Если по-прежнему отображается сообщение об ошибке «No working init found», необходимо проверить:

Названия файлов, каталога и символической ссылки.

Права доступа: в каталог можно зайти, файлы должны быть исполняемыми.

Файлы предназначены для одной архитектуры x86_64. На некоторых компьютерах могут одновременно быть установлены 32 и 64 битные версии программ и библиотек. Узнать архитектуру файла можно командой objdump -p <имя файла> . В начале вывода должна быть строка типа «формат файла elf64-x86-64».

Если завершить работу командной строки командой exit , ядро выдаст ошибку «Kernel Panic. Attempted to kill init». Командная строка была первым и единственным процессом (PID=1) и после его завершения ядро не знает, что делать дальше.

Наполнение initfamfs простыми программами

Простой программой здесь называется программа, состоящая из одного исполняемого файла, например dash, mkdir, mount. В противоположность сложные программы содержат большое количество обязательных дополнительных файлов, например: текстовые, аудио и видеоредакторы, браузеры и т.п.

По сложившейся традиции программы размещаются в каталоге bin. В каталоге initramfs нужно создать подкаталог bin и скопировать туда файл ls из одноименного каталога работающей системы.

Многие программы в своей работе используют вспомогательные so-файлы (программные библиотеки), без которых они не запустятся. Узнать, какие so-файлы нужны программе, можно с помощью уже упоминавшейся команды objdump -p <имя файла> .

Вывод команды « objdump -p ls »:

Файл libc.so.6 в initfamfs уже есть, а вот файл libselinux.so.1 нужно найти на работающем компьютере и скопировать в каталог initramfs/lib к другим so-файлам. Список каталогов, в которых нужно искать требуемый so-файл, можно взять из файлов /etc/ld.so.conf и /etc/ ld.so.conf.d/*. Библиотека libselinux.so.1 в свою очередь также зависит от других библиотек. С помощью команды objdump -p libselinux.so.1 можно узнать, что кроме уже имеющихся файлов libc.so.6 и libc.so.6 дополнительно требуется libpcre2-8.so.0. На работающей системе этот файл представляет собой символическую ссылку на файл libpcre2-8.so.0.11.0. При копировании в initramfs можно оставить имеющуюся структуру, т.е. скопировать libpcre2-8.so.0 как символическую ссылку и далее скопировать файл libpcre2-8.so.0.11.0. Можно поступить по-другому и скопировать файл libpcre2-8.so.0.11.0, переименовав его в libpcre2-8.so.0. Команда objdump -p libpcre2-8.so.0 показывает, что каких-либо других so-файлов, отсутствующих в initramfs, больше не требуется. В результате должна получиться следующая структура каталога initramfs:

В скобках указана символьная ссылка.

При копировании so-файлов нужно не забывать проверять их архитектуру, если на компьютере есть файлы разных архитектур.

С помощью команды (2) из раздела «Минимальный работающий init» можно пересоздать образ, запустить и убедиться, что команда ls работает.

Автоматизация наполнения initfamfs простыми программами

В предыдущем разделе показано, что добавление простых программ требует рекурсивного поиска и копирования дополнительных so-файлов. Эту задачу можно автоматизировать, написав свой скрипт, либо используя программу copyso. При ее использовании достаточно указать требуемые для копирования программы, после чего выполнить еще несколько команд, чтобы сформировать оставшуюся часть структуры каталогов. В каталоге livecd необходимо заново создать пустой подкаталог initramfs и выполнить следующие команды:

Первая команда копирует программы dash, ls, ln, mkdir, cat, mount. Остальные нужны, чтобы правильно сформировать структуру каталогов.

Получившаяся структура каталогов

В скобках указаны символьные ссылки.

После этого можно командой (2) из раздела «Минимальный работающий init» пересоздать образ, запустить и убедиться, что добавленные команды работают.

Добавление программ посложнее

Универсальный способ копирования сложных программ в initramfs предложить сложно. В самый неожиданный момент времени такая программа может обратиться к какому-нибудь файлу, который нигде не указан, но подразумевается автором программы и даже создается при штатной установке. Описываемый в статье способ подразумевает копирование существующих программ, а не их полноценную установку. Однако можно предложить способ, основанный на особенностях deb-пакетов в операционной системе Debian. В каталоге /var/lib/dpkg/info есть list-файлы для каждого установленного пакета. В этих list-файлах содержится перечень файлов, созданных при установке пакета. Не все из них являются обязательными, но, как сказано выше, с каждым нужно разбираться индивидуально либо копировать все, что есть. Для копирования всего пакета можно использовать следующий скрипт:

В первой строке перечисляются нужные пакеты (в примере их два), дальнейшие команды копируют файлы. Последняя команда удаляет файлы, которые скорее всего не понадобятся.

Если добавить таким образом Midnight Commander (команда mc ), можно убедиться, что он запустится (условно). Скорее всего, таким вы его еще не видели.

Добавление модулей ядра

Модули ядра это файлы с расширением «ko», которые расположены в подкаталогах каталога /lib/modules/<версия ядра>/. Есть модули для работы с жесткими дисками, с разными файловыми системами, с устройствами USB и т.д. Составление перечня модулей, необходимых для каждого конкретного устройства, в данной статье не рассматривается. Предполагается, читатель знает, какие именно модули ему нужны.

Доя добавления нужных модулей в initramfs нужно скопировать их в формируемую файловую структуру с сохранением пути. Например, модуль для работы с жесткими дисками /lib/modules/6.0.0-6-amd64/kernel/drivers/scsi/sd_mod.ko нужно скопировать в initramfs/lib/modules/6.0.0-6-amd64/kernel/drivers/scsi/sd_mod.ko, создав недостающие каталоги (на момент написания статьи использовалось ядро версии 6.0.0-6-amd64).

Как и so-файлы, ko-файлы могут требовать для своей работы наличия других ko-файлов. Эти зависимости указаны в файле /lib/modules/<version>/modules.dep. В частности, sd_mod.ko зависит от scsi_mod.ko, scsi_common.ko, crc64.ko и других. Их также необходимо скопировать с сохранением пути и учетом того, что они, в свою очередь, могут зависеть от других модулей и так далее рекурсивно.

Эту задачу, как и предыдущую, можно автоматизировать, написав свой скрипт, либо используя программу copyko. При ее использовании для добавления модулей ядра необходимо выполнить команды:

Первая команда копирует модули ahci и sd_mod в initramfs. Вторая копирует информацию о модулях (функционале ядра), которые уже встроены в ядро. Последняя команда создает информацию о зависимостях модулей друг от друга. Стоит отметить, что речь идет только о дисках SATA. При работе в VMware, если жесткий диск представлен как SCSI, дополнительно необходим модуль mptspi. При работе с другими дисками, например NVMe, нужны свои модули. Также понадобится программа modprobe:

После обновления образа командой (2) можно загрузиться с него и проверить, что появился доступ к жесткому диску компьютера. Для этого в командной строке созданного образа необходимо выполнить команды:

При использовании других типов дисков, отличных от SATA, необходимо загрузить соответствующие им модули. После выполнения указанных команд в каталоге /dev/ появятся устройства типа sda, sda1, sda2, обозначающие найденные жесткие диски и разделы на них. Для автоматической загрузки всех имеющихся модулей можно использовать команду:

Использующиеся здесь программы find и basename нужно заранее добавить в образ. Чтобы эта команда выполнялась автоматически, нужно создать загрузочный скрипт:

Этот скрипт нужно сохранить в файл initramfs/init вместо созданной ранее символической ссылки, и сделать его исполняемым.

Помимо указанных двух модулей скорее всего понадобится множество других. Для автоматизации их добавления можно предложить скрипт:

Скрипт добавления популярных модулей

Настройка консоли

Далее приводится несколько рекомендаций, как настроить консоль образа, сделать ее более удобной. Для этого требуется программа настройки консоли:

Чтобы в Midnight Commander заработали клавиши со стрелками, необходимо добавить в образ нужный файл командами:

Чтобы Midnight Commander стал цветным, необходимо добавить цвета в образ:

Чтобы Midnight Commander не выдавал сообщение «Pipe failed» при попытке редактирования файлов:

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

а в скрипт «init» добавить команду загрузки шрифта:

Чтобы можно было вводить с клавиатуры текст на русском языке, нужно добавить русскую раскладку клавиатуры:

а в скрипт «init» добавить команду загрузки этой раскладки:

Чтобы в командной строке работали клавиши со стрелками, нужно вместо dash использовать bash.

Чтобы отображались имена файлов на русском языке, нужно добавить в образ локаль:

а в скрипт «init» добавить команду загрузки локали:

Итого

На основе представленной информации создан небольшой набор скриптов (2 шт.) для создания загрузочного диска. Для работы с ними необходимо:

How to Use Mkisofs on Ubuntu?

An ISO file or ISO image is an archive file and an identical copy of DVD/CD having the same data on it. ISO file is used to distribute immense file sets over the internet or back up optical discs that are planned to be built on an optical disc. Most of the Operating systems that are present today come in the ISO format which has all the required installation files. ISO file/image format is the ideal candidate to represent all our operating systems files and folders and this is the file that gets executed.

We can backup/archive our files into an ISO file and then make it act like an external drive or bootable USBs or even CD/DVD which we can use for installation, sharing it with someone, or just save as a backup.

Mkisofs is a command in Linux/Ubuntu that makes an ISO file from a folder that can be used to be written on CD-ROM devices where the cdrecord utility will burn the disk and then the mkisofs command will prepare the files to actually burn on the medium. To put it simply, mkisofs just creates an iso file which is the image file of the optical disk. To look at it in a little more detail then it takes a snapshot of the directory/file tree after which it produces a binary image that correlates with the ISO file.

Installing mkisofs

The first step in installing mkisofs is to first update all the packages of your Ubuntu system by executing the following command in your Ubuntu terminal:

The next step is to install the mkisofs on our Ubuntu 20.04 however you can install it on almost any Linux distribution with the below command:

The above command will install all the required dependencies of genisoimage which can be seen in the below output:

Using mkisofs utility

Let us first view the command of mkisofs which will create an ISO that can be used to back up another ISO file which we can then use to modify or edit later:

The -o option is defining the ISO file name that we want to create and then the path of the directory of the ISO file that we want a backup for. Let’s implement the above command with a real example of creating an ISO file from the /boot directory and afterward saving it to the file bootiso.iso which will be achieved with the command shown below:

We have successfully created the bootiso file and saved it to the current directory as shown above.

List Iso file Content

We can use the isoinfo command to list the content of the ISO file:

Mount ISO File

This step involves mounting the ISO file to a directory for which we will first make a directory with the following command:

Next, we will mount the boot.iso file to testiso with the use of the following command:

We can view the original content of the /boot directory with the ls in the following manner:

In the same manner, we can view the file names mapped to the looped/ directory as follows:

You can see that the testiso directory and /boot/ contents are different in the sense that the uppercase letters are in lowercase and not all the files are available as well as the file’s names are shorter. We can use some options that will help us in solving this problem:

-L option will allow the dotfiles

-l option will allow full filenames with up to 31 characters

-allow-lowercase option will allow lowercase characters to appear in filenames

-input-charset option will specify a character set.

-allow-multidot option will allow multiple dots in a filename.

Let us now use the above options in mounting the iso file. All the steps taken are the same as above just the following command will be different because of the additional options:

In the above screenshot, it can be seen that all the files are now available and with the same name in testiso directory. We can also use the mkisofs –help option in the Ubuntu terminal to find the list of all the available options we can use:

Conclusion

The ISO file is a single file that is a perfect representation of an entire Cd or DVD as the entire data of the disc can be duplicated in an ISO file. ISO files/images are utilized to distribute immense programs over the internet. Most of the Os these days comes with the ISO format as all the necessary installation files and folders of our operating system can be put in one single file. The mkisofs command is used to create an ISO file that we can edit, modify or create based on your requirements.

In this article, we first installed mkisofs and then used them to create and mount an ISO file. We also provided you with simple steps on how to use mkisofs on Ubuntu.

Wpilot

Хотите создать резервную копию содержимого диска или у вас скопилось много файлов и папок из которых вы желаете создать резервную копию и архивировать посмотрим как же создавать файлы ISO в Linux.

Используем файловый менеджер чтобы создать ISO-файл.

Откройте диспетчер файлов. Выберите файлы и папки из которых хотите создать резервную копию. Щелкните по папке или файлу правой кнопкой мыши и выберите << Добавить в архив. >>

Выберите опцию <<.iso>> и нажмите Создать. Все выбранные файлы и папки в превратятся в файл ISO.

Второй способ с помощью команд в терминале.

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

Так выглядит команда.

dd if=source of=destination

Например если ваша флешка определилась как / dev / hdd и вы хотите создать резервную копию содержимого вашей флешки в файле usb.iso вы можете использовать следующую команду:

dd if=/dev/hdd of=/home/mint/usb.iso

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

Кроме того вы можете также использовать команду mkisofs для создания файла ISO. Преимущество mkisofs заключается в том что эта команда дает вам больше возможностей для настройки того как вы хотите чтобы файл ISO был создан.

mkisofs -o destination filename source

Например используйте следующую команду для резервного копирования папки mint:

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *