LINUX.ORG.RU

Программеры есть? А можете на халяву реализовать небольшой проект? Думаю можно даже на скриптовом языке. Идея: «Дерево дырок»

 , ,


4

8

Идея: Компактный индекс съёмного носителя.
Реализация: Делать дырявую копию дерева каталогов/файлов - сохраняя владельцев/время/права доступа. Затем делать .sq из этого дерева и при желании иметь возможность подмонтировать и посмотреть это дерево.
В течение 25+ лет работы ИТшником - набралось масса барахла на съёмных носителях. Есть куча флешек, куча винтов... Надо это как то индексировать.

Изначально спрашивал в Админ форуме. Думал это уже реализовано - но никто не подсказал пруфлинков. Лишь некий driano32 в Ветке: Создать ISO со служебной информацией из дерева каталогов. Чем? дал простейший скрипт генерящий дерево дырок. Но работает оно очень долго....
Мог бы кто то реализовать эту идею в одной программе на скриптовом языке? У меня в экспериментах это стало выглядеть
tree-hole.sh:

#!/bin/sh
#Упаковка Фантома каталога
timestamp=`date +%y%m%d-%H%M%S`
echo $timestamp
if [ "$1" = "" ]; then
echo "Запускать надо так: $0 <Каталог> <Архив/дырка>"
else
echo "Аргументы = $1 $2"
fi

DIR_PREFIX="/opt/pub/_T3T/Data/tree-$2"
SOURCE=$1
TARGET=$2
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 $SOURCE -type d -exec mkdir "$DIR_PREFIX"/"{}" \;
find $SOURCE -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"
echo Start: $timestamp|tee -a $2.time
timemid=`date +%y%m%d-%H%M%S`
echo Mid: $timemid|tee -a $2.time
mksquashfs "$DIR_PREFIX/$1" $2.sq
timeend=`date +%y%m%d-%H%M%S`.
echo End: $timeend|tee -a $2.time
###Fucking Sheet rm -rf $DIR_PREFIX


Небольшой каталог в 32Gb оно за 6 минут ужимает в 69килобайтный .sq,а вот 1.7Тб каталог крутит со вчерашнего вечера...

Может кто поддержит и реализует эту идею? Тогда у общественности появится механизм индексации носителей

Этот механизм можно потом и развить - скажем добавляя в дерево md5 суммы файлов исходного каталога и получить механизм верификации изменений в ФС. Можно так и хранить долгоживущую дырку и инкрементально апдейтить хэши в ней.

Вот как то так...

P.S. Пробовал разные каталогизаторы (не помню всех имён), но ни один из них (даже cdcat из официального Debian репозитария) не смог переварить дерево 1.7Тб и кажется даже дерево 500Гб.
Просто работал, работал, работал и вдруг умирал...

★★★

Последнее исправление: n0mad (всего исправлений: 1)

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

К сожалению .sq этого каталога получить не удалось. Буду общаться с автором для дебага.

То есть мой скрипт на нём свалился по какой-то причине?

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

То есть мой скрипт на нём свалился по какой-то причине?

Да, именно свалился. Я отправил письмо на @gmail - но пока не уверен что отправил что надо. Урывками нападал уже на стоявшее после краша. Процеса не видел. В одном из вариантов возможно был краш после того как запущенный из скрипта mksquashfs покрашился. В другом были нечитаемые файлы и не было времени чтобы понять. Надо было срочно собраться и свалить и сейчас уже пока не имею туда доступа. Вообще по какому адресу лучше с Вами связываться? Попробую воспроизвести ситуацию в другом месте.

Как я писал у меня накопителей много и крашилось немного по разному.

n0mad ★★★
() автор топика
Последнее исправление: n0mad (всего исправлений: 1)
Ответ на: комментарий от n0mad

Я отправил письмо на gmail - но пока не уверен что отправил что надо.

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

Вообще по какому адресу лучше с Вами связываться?

По этой теме лучше прямо тут и писать. ЛОР я читаю чаще почты 8).

По куску лога понятно только то, что упал подпроцесс, ответственный за создания дерева дырок во временной директории. Сама причина видимо потерялась где-то выше по логу. Чтобы понять что именно произошло, надо сохранить полный лог, желательно со включенным дебагом. Сделать это можно примерно так:

fsholetree -l D <остальные обычные опции> 2>&1 | tee fsholetree.log

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

Предполагаю, что при чтении файлов или директорий возникла ошибка чтения. Или при создании дырок ошибка записи. Либо где-то в именах файлов мусор вместо юникода или какая-то другая кодировка.

В текущей реализации какой-либо умной обработки ошибок нет: как только что-то начинает идти не как задумано, всё завершается с ошибкой.

Deleted
()
Последнее исправление: Deleted (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.