Команда mkisofs позволяет задействовать одноименную утилиту, предназначенную для создания файлов образов оптических дисков или ISO-файлов на основе файлов из указанных директорий. Данная утилита предназначена лишь для создания файлов образов дисков; она на позволяет записывать эти файлы на оптические диски. Она позволяет создавать файлы образов, соответствующие стандарту ISO9660 с расширениями Joliet и Rock Ridge.
Дело в том, что в соответствии со стандартом ISO9660 файловая система оптического накопителя должна содержать файлы с именами в формате 8.3 из латинских символов в верхнем регистре, цифр и символов подчеркивания (то есть, каждый из файлов должен явно идентифицироваться с помощью имени длиной не более 8 символов без пробелов, символа точки и расширения длиной не более трех символов; каждая из директорий — с помощью имени длиной не более 8 латинских символов без пробелов и точек) и иметь не более 8 уровней вложенности директорий. Исходя из этого, при создании файловой системы ISO9660 без расширений имена файлов будут урезаться до 8 символов, все символы точек кроме последнего будут заменяться на символы подчеркиваний, а в концы имен файлов будут добавляться номера версий файлов, отделенные с помощью символа точки с запятой. Эта проблема решается с помощью расширений, которые могут использоваться в любых сочетаниях. Расширение Joliet предложено компанией Microsoft, позволяет давать файлам имена длиной до 64 символов в кодировке UCS-2 и поддерживается всеми актуальными операционными системами. Расширение Rock Ridge предназначено для POSIX-совместимых операционных систем и позволяет давать файлам произвольные имена длиной до 255 символов, иметь произвольное количество уровней вложенности директорий, сохранять права доступа к файлам, идентификаторы их владельцев и групп владельцев, количество жестких ссылок и метки времени создания и последнего доступа, а также добавляет поддержку специальных типов файлов — разреженных файлов, символьных ссылок, файлов устройств, файлов сокетов и файлов именованных каналов. Данная информация сохраняется в специальных скрытых директориях, а само расширение поддерживается всеми актуальными операционными системами, в том числе, Linux.
По умолчанию утилита выводит данные в стандартный поток вывода, поэтому имя результирующего файла обычно явно указывается.
Базовый синтаксис команды выглядит следующим образом:
$ mkisofs [параметры] имя-директории-с-файлами
Команда может принимать множество параметров и имя директории с файлами для упаковки в ISO-файл. Актуальными для обычного пользователя параметрами являются параметр -o, позволяющий задать имя результирующего ISO-файла, параметр -J, позволяющий добавить расширение Joliet, параметр -R, позволяющий добавить расширение Rock Ridge, а также параметр -V, позволяющий задать метку тома.
Перед созданием ISO-файла следует создать директорию с исходными файлами. В нашем случае эта директория будет иметь имя ISO и содержать следующие файлы изображений:
$ ls -al iso/
итого 3052
drwxrwxr-x 2 alex alex 4096 мар 30 22:18 .
drwx--x--x 39 alex alex 4096 мар 30 22:19 ..
-rw-rw-r-- 1 alex alex 668474 сен 11 2016 beach.webp
-rw-rw-r-- 1 alex alex 94532 сен 11 2016 childrens_park_day.webp
-rw-rw-r-- 1 alex alex 75058 сен 11 2016 childrens_park_evening.webp
-rw-rw-r-- 1 alex alex 69626 сен 11 2016 childrens_park_night.webp
-rw-rw-r-- 1 alex alex 113740 сен 11 2016 'commercial building.webp'
-rw-rw-r-- 1 alex alex 527966 сен 11 2016 'deep dark fantasy.webp'
-rw-rw-r-- 1 alex alex 95250 сен 11 2016 generic_bg_park.webp
-rw-rw-r-- 1 alex alex 52878 сен 11 2016 home_evening.webp
-rw-rw-r-- 1 alex alex 80400 сен 11 2016 home_morning.webp
-rw-rw-r-- 1 alex alex 45036 сен 11 2016 home_night.webp
-rw-rw-r-- 1 alex alex 214270 сен 11 2016 lets_pretend_they_are_cherry_blossom.webp
-rw-rw-r-- 1 alex alex 104706 сен 11 2016 lonely_building.webp
-rw-rw-r-- 1 alex alex 103730 сен 11 2016 old_apartment_afternoon.webp
-rw-rw-r-- 1 alex alex 30588 сен 11 2016 old_apartment_dawn.webp
-rw-rw-r-- 1 alex alex 57768 сен 11 2016 old_apartment_evening.webp
-rw-rw-r-- 1 alex alex 70978 сен 11 2016 old_apartment_morning.webp
-rw-rw-r-- 1 alex alex 90430 сен 11 2016 old_apartment_noon.webp
-rw-rw-r-- 1 alex alex 174706 сен 11 2016 pampublikong_kubeta.webp
-rw-rw-r-- 1 alex alex 119338 сен 11 2016 park_afternoon.webp
-rw-rw-r-- 1 alex alex 66286 сен 11 2016 park_day.webp
-rw-rw-r-- 1 alex alex 95846 сен 11 2016 park_evening.webp
-rw-rw-r-- 1 alex alex 92074 сен 11 2016 park_night0.webp
-rw-rw-r-- 1 alex alex 23678 сен 11 2016 park_night.webp
Для создания ISO-файла достаточно использовать утилиту mkisofs, задав имя результирующего файла с помощью параметра -o:
$ mkisofs -o sample.iso iso/
I: -input-charset not specified, using utf-8 (detected in locale settings)
Using PARK_000.WEB;1 for /park_night0.webp (park_night.webp)
Using OLD_A000.WEB;1 for /old_apartment_noon.webp (old_apartment_morning.webp)
Using OLD_A001.WEB;1 for /old_apartment_morning.webp (old_apartment_evening.webp)
Using OLD_A002.WEB;1 for /old_apartment_evening.webp (old_apartment_dawn.webp)
Using OLD_A003.WEB;1 for /old_apartment_dawn.webp (old_apartment_afternoon.webp)
Using CHILD000.WEB;1 for /childrens_park_night.webp (childrens_park_evening.webp)
Using CHILD001.WEB;1 for /childrens_park_evening.webp (childrens_park_day.webp)
Total translation table size: 0
Total rockridge attributes bytes: 0
Total directory bytes: 0
Path table size(bytes): 10
Max brk space used 0
1682 extents written (3 MB)
Утилита выводит информацию об изменении имен файлов и параметрах созданного ISO-файла. Для проверки корректности создания файла следует смонтировать его:
$ mkdir isomount
# mount -o loop sample.iso isomount
mount: /home/alex/isomount: WARNING: source write-protected, mounted read-only.
$ ls -al isomount/
итого 3008
dr-xr-xr-x 1 root root 2048 мар 30 22:18 .
drwx--x--x 39 alex alex 4096 мар 30 22:19 ..
-r-xr-xr-x 1 root root 668474 сен 11 2016 beach.web
-r-xr-xr-x 1 root root 69626 сен 11 2016 child000.web
-r-xr-xr-x 1 root root 75058 сен 11 2016 child001.web
-r-xr-xr-x 1 root root 94532 сен 11 2016 children.web
-r-xr-xr-x 1 root root 113740 сен 11 2016 commerci.web
-r-xr-xr-x 1 root root 527966 сен 11 2016 deep_dar.web
-r-xr-xr-x 1 root root 95250 сен 11 2016 generic_.web
-r-xr-xr-x 1 root root 52878 сен 11 2016 home_eve.web
-r-xr-xr-x 1 root root 80400 сен 11 2016 home_mor.web
-r-xr-xr-x 1 root root 45036 сен 11 2016 home_nig.web
-r-xr-xr-x 1 root root 214270 сен 11 2016 lets_pre.web
-r-xr-xr-x 1 root root 104706 сен 11 2016 lonely_b.web
-r-xr-xr-x 1 root root 90430 сен 11 2016 old_a000.web
-r-xr-xr-x 1 root root 70978 сен 11 2016 old_a001.web
-r-xr-xr-x 1 root root 57768 сен 11 2016 old_a002.web
-r-xr-xr-x 1 root root 30588 сен 11 2016 old_a003.web
-r-xr-xr-x 1 root root 103730 сен 11 2016 old_apar.web
-r-xr-xr-x 1 root root 174706 сен 11 2016 pampubli.web
-r-xr-xr-x 1 root root 92074 сен 11 2016 park_000.web
-r-xr-xr-x 1 root root 119338 сен 11 2016 park_aft.web
-r-xr-xr-x 1 root root 66286 сен 11 2016 park_day.web
-r-xr-xr-x 1 root root 95846 сен 11 2016 park_eve.web
-r-xr-xr-x 1 root root 23678 сен 11 2016 park_nig.web
Без расширений результирующий ISO-файл содержит файлы с урезанными именами. Из-за четырехсимвольного расширения, которое урезано до трех символов, они могут некорректно открываться в ряде приложений. Кроме того, информация о владельце и правах доступа не была сохранена.
Для отмонтирования ISO-файла следует использовать команду umount:
# umount isomount
Теперь попробуем использовать расширения Joliet и Rock Ridge (они могут использоваться и по отдельности, но утилита выводит сообщение о том, что для достижения максимальной совместимости рекомендуется использовать их совместно):
$ mkisofs -J -R -o sample.iso iso/
I: -input-charset not specified, using utf-8 (detected in locale settings)
Using PARK_000.WEB;1 for /park_night0.webp (park_night.webp)
Using OLD_A000.WEB;1 for /old_apartment_noon.webp (old_apartment_morning.webp)
Using OLD_A001.WEB;1 for /old_apartment_morning.webp (old_apartment_evening.webp)
Using OLD_A002.WEB;1 for /old_apartment_evening.webp (old_apartment_dawn.webp)
Using OLD_A003.WEB;1 for /old_apartment_dawn.webp (old_apartment_afternoon.webp)
Using CHILD000.WEB;1 for /childrens_park_night.webp (childrens_park_evening.webp)
Using CHILD001.WEB;1 for /childrens_park_evening.webp (childrens_park_day.webp)
Total translation table size: 0
Total rockridge attributes bytes: 2316
Total directory bytes: 0
Path table size(bytes): 10
Max brk space used 0
1690 extents written (3 MB)
# mount -o loop sample.iso isomount
mount: /home/alex/isomount: WARNING: source write-protected, mounted read-only.
$ ls -al isomount/
итого 3010
drwxrwxr-x 2 alex alex 4096 мар 30 22:18 .
drwx--x--x 39 alex alex 4096 мар 30 22:19 ..
-rw-rw-r-- 1 alex alex 668474 сен 11 2016 beach.webp
-rw-rw-r-- 1 alex alex 94532 сен 11 2016 childrens_park_day.webp
-rw-rw-r-- 1 alex alex 75058 сен 11 2016 childrens_park_evening.webp
-rw-rw-r-- 1 alex alex 69626 сен 11 2016 childrens_park_night.webp
-rw-rw-r-- 1 alex alex 113740 сен 11 2016 'commercial building.webp'
-rw-rw-r-- 1 alex alex 527966 сен 11 2016 'deep dark fantasy.webp'
-rw-rw-r-- 1 alex alex 95250 сен 11 2016 generic_bg_park.webp
-rw-rw-r-- 1 alex alex 52878 сен 11 2016 home_evening.webp
-rw-rw-r-- 1 alex alex 80400 сен 11 2016 home_morning.webp
-rw-rw-r-- 1 alex alex 45036 сен 11 2016 home_night.webp
-rw-rw-r-- 1 alex alex 214270 сен 11 2016 lets_pretend_they_are_cherry_blossom.webp
-rw-rw-r-- 1 alex alex 104706 сен 11 2016 lonely_building.webp
-rw-rw-r-- 1 alex alex 103730 сен 11 2016 old_apartment_afternoon.webp
-rw-rw-r-- 1 alex alex 30588 сен 11 2016 old_apartment_dawn.webp
-rw-rw-r-- 1 alex alex 57768 сен 11 2016 old_apartment_evening.webp
-rw-rw-r-- 1 alex alex 70978 сен 11 2016 old_apartment_morning.webp
-rw-rw-r-- 1 alex alex 90430 сен 11 2016 old_apartment_noon.webp
-rw-rw-r-- 1 alex alex 174706 сен 11 2016 pampublikong_kubeta.webp
-rw-rw-r-- 1 alex alex 119338 сен 11 2016 park_afternoon.webp
-rw-rw-r-- 1 alex alex 66286 сен 11 2016 park_day.webp
-rw-rw-r-- 1 alex alex 95846 сен 11 2016 park_evening.webp
-rw-rw-r-- 1 alex alex 92074 сен 11 2016 park_night0.webp
-rw-rw-r-- 1 alex alex 23678 сен 11 2016 park_night.webp
Очевидно, что помимо корректных имен файлов была сохранена информация о владельце и правах доступа.
Отмонтирование ISO-файла осуществляется аналогичным образом:
# umount isomount
Исходя из вышесказанного, следует использовать расширения при любых обстоятельствах, в том числе, при подготовке диска, который будет читаться на машинах с ОС Windows.