LINUX.ORG.RU

Создать ISO со служебной информацией из дерева каталогов. Чем?


0

1

Хаюшки Олл!

Краем мысли припоминаю что знал метод создания ISO образа из дерева каталогов с записью в образ только информации о файлах, без содержимого.

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

★★

Ответ на: комментарий от adriano32

а чтобы ты не ныл "не то"

man genisoimage
GENISOIMAGE(1)
...
SEE ALSO
       genisoimagerc(5), wodim(1), mkzftree(8), magic(5).
...
man mkzftree
MKZFTREE(1)

NAME
       mkzftree - Create a zisofs/RockRidge compressed file tree

SYNOPSIS
       mkzftree [OPTIONS]... INPUT OUTPUT

DESCRIPTION
       Takes  an input file tree (INPUT) and create a corresponding compressed
       file tree (OUTPUT) that can  be  used  with  an  appropriately  patched
       mkisofs(8)  to  create  a  transparent-compression  ISO 9660/Rock Ridge
       filesystem using the «ZF» compression records.
adriano32 ★★★ ()
Ответ на: а чтобы ты не ныл "не то" от adriano32

Re: а чтобы ты не ныл "не то"

«чтобы не ныл» - это вообще оскорбление. А «ныть» я все-же буду, ибо это НЕ ТО. Меня интересует не «упакованный» образ а «фейк». Там не должно быть ни каких реальных данных кроме имен файлов и всремени создания. Монитируешь скажем этот ISO а там содержимое всех файлов из нулей, но известны их имена, время создания/изменения и размеры.

n0mad ★★ ()
Ответ на: Re: а чтобы ты не ныл "не то" от n0mad

У тебя проблема с тем, чтобы создать копию каталога и забить содержимое этой копии нулями?

Led ★★★☆☆ ()

Бред какой-то. Я ничего не понял.

ISO-образ без файлов, только с данными о них? По-моему вы жутко объелись конфет :)

Othniel ()

n0mad, извини, быть может я и погарячился в определениях, но man'ов действительно вполне достаточно, и mkzftree действительно нужен, если ты хочешь иметь всю информацию о файле (включая размер) и при этом не копировать содержимое файла (sparse files), то ISO-файл будет без использования сжатия иметь всё равно такой размер, как если бы файлы были скопированы.

Почитаешь подробнее об опциях genisoimage, потому что с именами файлов больше 31 символа не проканает, а также файлы с # ~ в имени транслируются, ну и кодировка ...

Вот тебе проверенный рабочий пример без сжатия

DIR_PREFIX="/home/andrux0id/sot"
CUR_DIR=`pwd`
if [ -d "$DIR_PREFIX" ]; then
    echo $DIR_PREFIX" is already created, skipping."
  else
    mkdir "$DIR_PREFIX"
    chmod -fR 755 "$DIR_PREFIX"
fi
echo '#/bin/sh' > "$DIR_PREFIX/mod_script"
echo 'DIR_PREFIX='$DIR_PREFIX >> "$DIR_PREFIX/mod_script"
echo 'if [ -f "$1" ]; then' >> "$DIR_PREFIX/mod_script"
echo '  attrib=`stat -c %a -- "$1"`' >> "$DIR_PREFIX/mod_script"
echo '  owner=`stat -c %U -- "$1"`' >> "$DIR_PREFIX/mod_script"
echo '  group=`stat -c %G -- "$1"`' >> "$DIR_PREFIX/mod_script"
echo '  size=`stat -c %s -- "$1"`' >> "$DIR_PREFIX/mod_script"
echo 'dd if=/dev/null of="$DIR_PREFIX/$1" bs=1 seek=$size && chown $owner:$group -- "$DIR_PREFIX/$1" && chmod $attrib -- "$DIR_PREFIX/$1"' >> "$DIR_PREFIX/mod_script"
echo 'fi' >> "$DIR_PREFIX/mod_script"
find -type d -exec mkdir "$DIR_PREFIX"/"{}" \;
find -type f -exec sh "$DIR_PREFIX/mod_script" "{}" \;
rm -f $DIR_PREFIX/mod_script
genisoimage -allow-leading-dots -allow-lowercase -allow-multidot -iso-level 4 -l -o `date +%s`.iso "$DIR_PREFIX"
adriano32 ★★★ ()

n0mad, для сжатия последнюю строку скрипта заменить на

mkzftree "$DIR_PREFIX" "$DIR_PREFIX"zf
genisoimage -allow-leading-dots -allow-lowercase -allow-multidot -iso-level 4 -l -R -z -o `date +%s`.iso "$DIR_PREFIX"zf

Для сравнения, вместо 300-мегабайтного образа каталога я получил 500-килобайтный файлик, который тем не менее могу смонтировать на петлефом устройстве, и могу видеть правильные имена, размеры файлов, владельца и атрибуты.

adriano32 ★★★ ()
Ответ на: комментарий от Othniel

Я не конфет объелся, недельку в коме провалялся и теперь вот "новая жизнь" :)

Из «старой» местами помню все лишь видениями :)

n0mad ★★ ()
Ответ на: комментарий от adriano32

Огромное спасибо за наводки.

Спасибо за подсказки решения моей задачи. Похоже что странное ко мне пришло «видение» :) О том что это было на раз-два и так жил каталог моих CD доступный и в Linux и в Windows для поиска интересующего. Тем более что результатов того что «было» пока так и не нашел. Отмазаться могу лишь тем, что перенес тяжелый ушиб мозга и недельку комы - потому смутно помню порой что-то из «прошлой жизни». Однако если все-же «найду», то обязательно отпишусь :) Еще раз спасибо за инфу! Удачи!

n0mad ★★ ()
Ответ на: комментарий от adriano32

Проверил скрипт, респект!

Проверил сейчас как работет скрипт, очень интересный результат. Получившийся ISO монтируется и в Linux и в Windows, правда в Windows размеры файлов не соответствуют реальным. В любом случае решение очень интересное, спасибо.

n0mad ★★ ()
Ответ на: Проверил скрипт, респект! от n0mad

Это значит, что выбранный вендовый софт не поддерживает zf-сжатие внутри iso-образов. Чем пользовался?

И да, можно делать обычный образ, но для хранения в squashfs загонять, потому что размер iso будет соответствовать суммарному размеру каталогов, но будут там все нули, кроме метаданных (размер, владелец, атрибуты).

Соответственно требуется либо буферное место для создания образа, либо на лету загонять в squashfs.

adriano32 ★★★ ()
Ответ на: комментарий от adriano32

Пользовался Alchogol 52% - тем что бесплатный :) Сейчас скрипт трудится над 200 Гб набором данных, посмотрим на результат. Вариант с загонянием в squashfs не интересен, интересен вариант результатами которого можно воспользоваться и в Win и в Linux и жить ему на Flash USB. Возможно вообще придется остановится на каком-либо виндовом каталогизаторе и из под Linux пускать его в Wine/VirtualBOX

n0mad ★★ ()
Ответ на: комментарий от n0mad

Попробуй UltraISO или Daemon Tools Lite под вендой. Должны смонтировать. И отправь фичреквест в Portable WinCDEmu.

Сейчас скрипт трудится над 200 Гб набором данных, посмотрим на результат.

Со сжатием или без? Максимальная длина имени файла какая, больше 31? Имена латиницей или кириллицей?

adriano32 ★★★ ()

Нифига не понял...

Вам надо, что ли, сделать cp -rs /src/dir /dest/dir, а потом записать содержимое /dest/dir на болванку?

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от Eddy_Em

Во-первых, у симлинков не сохраниться размер равным исходному файлу. Во-вторых, дата создания и модификации, атрибуты и владелец. в-третьих, надо будет указать софту перед сборкой образа, чтоб не ходил по симлинкам.

Короче не то. ТС хотел софтину, которая сдампит дерево файлов со всеми потрохами, но без самого содержания в ISO, что я и сделал.

adriano32 ★★★ ()
Ответ на: комментарий от Eddy_Em

Нужно это, чтобы смонтировать на петле ISO-образ и сверить, что было и какого размера.

Незаменимая инфа, особенно для расследования взлома, для разбора спасённых чудом файлов (имена вида $#0123456, но размер верный) обратно в файловую систему, для проверки необходимости выполнения бэкапа, ну и много чего ещё можно придумать в качестве назначения.

adriano32 ★★★ ()
Ответ на: комментарий от Eddy_Em

Это не наглядно же :)

Куда гламурнее открыть в mc или в Krusader на одной половине текущий каталог, на другой - смонтированный на петле ISO-бэкап, выбрать команду «Сравнить каталоги» и всё - подробный отчёт :)

А так нужно заново получить список, затем как-то применить к нему diff, учитывая, что строки могли сдвинуться ...

Или ты имеешь в виду восстанавливать каталог при возникновении потребности из такого файла-списка и потом уже сравнивать? Даже не знаю, что удобней, наверное одинаково, но первый вариант элегантнее IMO

adriano32 ★★★ ()
Ответ на: комментарий от adriano32

Мне думается что первый вариант не только нагляднее но и универсальнее, ведь ISO в отличие от листингов можно много где смонтировать.

Впрочем ls -lR / >root.lst выдаст полную информацию и вполне подходит для ЛЮБОЙ ОС :)

Скрипт все еще трудится над большим разделом :) Сейчас на этапе dd делающего sparse файлы :)

n0mad ★★ ()

Мда-уж... ls -lR /opt/pub >ls-lR.txt Произвел на свет 512Mb файлик.

n0mad ★★ ()
Ответ на: комментарий от n0mad

Скрипт все еще трудится над большим разделом

Сейчас скрипт трудится над 200 Гб набором данных, посмотрим на результат.

Ты понимаешь, что без сжатия, он попытается создать ISO в 200Гб? Sparse файлы ничего не занимают в файловой системе, сколько бы ни был их размер, 10Гб или 1 Кб, но при сборке в ISO эта разряжённость преобразуется в нули, которые будут занимать место.

adriano32 ★★★ ()
Ответ на: комментарий от adriano32

Ты понимаешь, что без сжатия, он попытается создать ISO в 200Гб? Sparse файлы ничего не занимают в файловой системе, сколько бы ни был их размер, 10Гб или 1 Кб, но при сборке в ISO эта разряжённость преобразуется в нули, которые будут занимать место.

Я понимаю, потому хотел собрать пакованный iso но «факир был пьян и фокус не удался». На этвпе создания sparse файлов оно укушало около 1Gb места, но вот mkzftree начал делать жатое дерево, но укушав оставшиеся 5Gb места обломался на середине процесса. Я слабо представляю как sparse файлы уложились в 1 Gb, они вообще чтоли ни одного блока не распределяют? Потому как mkz дерево занимает размер 65,771,546 байт (по инфе mc) а вот по инфе du -s . = 5G и жило там на момент окончания места 1223756 файлов. Файловая система: jfs

n0mad ★★ ()
Ответ на: комментарий от n0mad

http://en.wikipedia.org/wiki/Sparse_file

Только в метаданных инфа о том, где разрежённость, а в этом конкретном случае, так как файлы пустые вообще, то файл занимает ровно столько, сколько одному inode выделяется места в ФС.

Ты молодец, конечно, с 5 GB свободного места пытаться 200GB «забекапить» таким макаром...

С записью дат разобрался?

Пробовал другие софтины под вендой?

К чему пришёл? К ненужности сабжа, надеюсь, и покупке ещё одного винта для бэкапов?

adriano32 ★★★ ()
Ответ на: комментарий от adriano32

Только в метаданных инфа о том, где разрежённость, а в этом конкретном случае, так как файлы пустые вообще, то файл занимает ровно столько, сколько одному inode выделяется места в ФС.

Вот тут и не понятно. Ведь упакованные тоже скушали 5Gb за счет inodes, почему sparse скушали сильно меньше? Хотя... если они не 1 а 5 inode занимают скажем это уже 5 Gb.

Ты молодец, конечно, с 5 GB свободного места пытаться 200GB «забекапить» таким макаром...

Увы все мелкими кусочками и не много места. Нет его на винтах.

С записью дат разобрался?

Даты не так актуальны, сначала надо было действующее что-то сделать. А оно вон на этапе упаковки кончилось.

Пробовал другие софтины под вендой?

В плане поддержки упаковки? Нет не пробовал, не получилось сделать огромный раздел а времени ушло море.

К чему пришёл? К ненужности сабжа, надеюсь, и покупке ещё одного винта для бэкапов?

Пришел к неопределенности, все-же сидит какое-то «знание» что такую задачу я решал в «прежней жизни». Ведь в то время создавал и обслуживал сервис одного из интернет провайдеров города в одиночку. Были и разделы по 1.2Тб во времена когда 250Gb было лучшим винтом (2003 год). В то время еще хлебнул пороха с xfs. Вроде и крутая fs на то время и партиции большие держит но через полгода работы раздела 1.2 Тб стал жутко тормозить - фрагментация стала жесткой а дефрагментировать никак, и заребилдить тоже никак, потому как скинуть некуда - и так жило на 8*250Gb винтах. После этого появилась нелюбовь к xfs, сейчас пользую jfs. Посмотрим какие у нее грабли есть. Правда пока лишь дома пользую, а тут мелко все, на приличную технику пока не заработал. Я не то чтобы жалуюсь, просто констатация факта. Я сейчас нахожусь в состоянии «жить не то чтобы хочется, но надо». Уже более 2х лет выкарабкиваюсь после тяжелого ушиба мозга. Новая жизнь. И ходить учился и есть, но на это месяц всего ушел, а вот «думать» до сих пор учусь но медленно это все идет. Вот такая забавная штука жизнь. Сначала пиписками меряемся на: http://www.youtube.com/watch?v=tZrZOg_EGGg а потом ббац, секунды и выпал из жизни, а впадать годами приходится. Сейчас вот думаю - а зачем? Показать свою крутость самому себе? Конечно хотелось «оседлать» природу, но она вот взбрыкнула :)

P.S. Извиняюсь если напряг посланием, что-то меня понесло опять :) Вот «отживу» и небось опять «летать» буду. Это как наркотики наверное (хотя не пробовал наркотиков), пока у меня вот 2 года воздержания, но вкушу и опять будет тянуть летать каждый день. Приятно чувствовать себя умеющем воспарить на восходящем потоке под облако, когда над тобой лишь кусочек ткани а под тобой пара километров :) - вспоминается из фильма: «и ... тишина ...., и мертвые с косами ...» :)

А пока вот гнию дома, бездельничаю на нищенскую пенсию «инвалида» :) Пытаюсь пока админить дома, хорошо что интернет пока есть и спасибо что помогают советами такие как ты. Жаль что в интернете гораздо больше желающих посмеяться. Увы пока не смог вспомнить как я делал каталоги, а доступ ко всем серверам что я раньше админил и где жили все наработки отсутствует как и часть этих серверов вообще - а жило все на них, дома не хранил к сожалению - хотя может и хранил но было дело «отошел» в мир иной 500 гиговый винтик и унес с собой многое.

В общем вот такой «поток мысли» получился. Олег.

n0mad ★★ ()
Ответ на: комментарий от n0mad

Вот тут и не понятно. Ведь упакованные тоже скушали 5Gb за счет inodes, почему sparse скушали сильно меньше? Хотя... если они не 1 а 5 inode занимают скажем это уже 5 Gb.

Видно, что ты не знаком с принципами работы архивации.

Попробуй создай файлы размером в, скажем, 0, 20, 40, 80 байт и загзипуй. Увидишь результат — поймёшь.

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

Таким образом, спарс файл ничего не занимает в ФС, потому что все данные уместились в метаданных inode (в курсе наверное, что файлы меньше определённого размера хранятся прямо в файловой таблице, вместе с метаданными, для спарс файлов в метаданных пишутся адреса промежутков вроде, так как тут промежуток один, то и запись о промежутке одна — места мало). Суммарный размер = место под один inode * на число inode в бэкап.

А вот ZF сжатый файл уже будет занимать, пускай и мало, но будет, потому что там уже вполне себе конкретные данные, разделимые с метаданными.

adriano32 ★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.