summaryrefslogtreecommitdiff
path: root/LINUX/iso fs _ ISO9660.md
diff options
context:
space:
mode:
Diffstat (limited to 'LINUX/iso fs _ ISO9660.md')
-rw-r--r--LINUX/iso fs _ ISO9660.md46
1 files changed, 46 insertions, 0 deletions
diff --git a/LINUX/iso fs _ ISO9660.md b/LINUX/iso fs _ ISO9660.md
new file mode 100644
index 0000000..0ca6fa5
--- /dev/null
+++ b/LINUX/iso fs _ ISO9660.md
@@ -0,0 +1,46 @@
+Так, а чем по своей сути вообще является iso файл? Грубо говоря, это несжатый архив с точной копией данных блочного устройства **(hdd, ssd, cd)** в формате файловой системы **ISO9660**:
+
+`file linuxmint-22.1-xfce-64bit.iso
+
+linuxmint-22.1-xfce-64bit.iso: ISO 9660 CD-ROM filesystem data (DOS/MBR boot sector) ... (bootable)
+
+В зависимости от содержимого образ может быть загрузочным и не загрузочным. Давайте из приведенного выше описания iso-шника выведем возможные способы работы с ним:
+1) он представляет собой архив - его можно **распаковать**;
+2) он содержит файловую систему ISO9660 - его можно **монтировать**;
+
+Начнем с "**распакоуки**". Для этого можем воспользоваться утилитой **7z**:
+
+`sudo apt install p7zip-full
+$ 7z x linux*.iso -o./extract
+
+После завершения процесса мы вольны вносить в файловую структуру свои коррективы. После правок нужно будет заново собрать установочный iso образ. Для этого есть утилитка **mkisofs**, которая корректно собирает **ISO9660** архивы из файлов и каталогов.
+
+**Второй способ** - монтировать образ и скопировать его содержимое. 
+
+В привычном для нас понимании, монтирование относится к блочным устройствам **(usb, ssd, hdd)**, которые содержат определенную файловую систему **(exFAT, ext, zfs)**. Такой механизм позволяет нам получить доступ к содержимому носителей.
+
+Но вот в чем дело, **iso** файл не является **блочным устройством** и его нельзя просто так примонтировать... Ничего, есть решение - механизм **loop device**.
+
+**Loop device** — это виртуальное блочное устройство, которое позволяет использовать обычный ресурс с файловой системой, как физический девайс. Через него можно смонтировать образ и получить доступ к его файловой системе. 
+
+Посмотреть то, какое устройство с каким ресурсом соотносится, можно через команду **losetup**:
+
+`sudo losetup -a
+
+/dev/loop13: [64512]:2672215 (/path/to/output.iso)
+
+Для того, чтобы создать и монтировать "**loop device**", используем **mount**:
+
+$ sudo mount -o loop test.iso ./mnt_point
+
+Теперь, т.к. файловая система **ISO9660** является "**read-only**", нам нужно скопировать все содержимое образа в отдельный каталог:
+
+`mkdir new_mnt_point
+
+`cp -rT mnt_point new_mnt_point
+
+Далее "по уму" редактируем образ и пересобираем его с помощью **mkisofs**:
+
+`sudo mkisofs -o ./new.iso -quiet -R -b boot/grub/bios.img -no-emul-boot -boot-load-size 4 -boot-info-table ./new_mnt_point
+
+Если все сделано правильно, на выходе мы получим "**bootable**" образ. \ No newline at end of file