LINUX.ORG.RU

Вышел fuse-zip 0.2.0: первая файловая система для FUSE с поддержкой модификации ZIP-архивов

 , , ,


0

0

Вышла fuse-zip 0.2.0. Релиз хоть и минорный, но революционный по своей сути.

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

fuse-zip не имеет аналогов, так как из всех существующих файловых систем изменять содержимое архива может только виртуальная файловая система mc, требующая для своего использования специальной доработки в программе.

По производительности fuse-zip превосходит все известные аналоги, будь то KIO, Gnome GVFS, mc vfs, unpackfs, avfs или файловая система, построенная на основе fuse-j, на больших архивах и не уступает им на малых объёмах данных.

Тесты производительности VFS: http://code.google.com/p/fuse-zip/wik...

>>> Скачать

Комментарии по тестам производительности

Комментарии по методике сравнения принимаются. Если не нравится, как я считал производительность -- предоставьте свой вариант.

avfs оказалась не настолько плоха, как я предполагал. На небольших тестах она шла с моей ФС на равных, однако на распаковке сорсов ядра всё-таки отстала.

Удивительно быстрым(для программы, написанной на Java) оказался тестовый пример от жавовских биндингов к FUSE.

И вообще, mc vfs ужасен. Как можно было столько лет пользоваться этой какашкой!?

P.S. Флеймогонный вывод: GVFS, сказывается, ещё тормознее чем KIO :)

gaa ★★
() автор топика

И ещё: оказалось, что ни одна из VFS, привязанных к DE, не умеет писать в архивы.

На распаковке fuse-zip быстрее чем mc vfs в 700 раз, чем kio-zip -- в 4,7 раза, чем gvfs -- в 50 раз. А на сжатии fuse-zip превосходит единственно умеющую изменять архивы mc vfs в 420 раз.

gaa ★★
() автор топика

респектище! было бы время — прикрутил бы для него аналог kfuseiso. но наверное не соберусь в ближайшее время…

dmiceman ★★★★★
()

вот мне видится такое применение - музыку хранить в zip архивах, чтобы было удобно расшаривать ее в осле, и через fuze-zip содиржимое этих архивов отправлять в плеер.

в связи с этим встает вопрос что будет если примонтировать тысяч так 10 архивов, нужно только чтение.

vasaka ★★★
()

Воистину респект, тема курсовой развивается дальше ;)

tensai_cirno ★★★★★
()

$ cat INSTALL
-------------------------------------------------------
You need the following libraries:

libfuse >= 2.6  http://fuse.sourceforge.net
libzip >= 0.8   http://www.nih.at/libzip/

The following tools are required:

C++ compiler    g++ 4.2.3 or other modern C++ compiler
pkg-config      http://pkg-config.freedesktop.org/
GNU make        http://www.gnu.org/software/make/
-------------------------------------------------------

Соблюдено.

$ make
Package fuse was not found in the pkg-config search path.
[ skip ]
make: *** [fuse-zip.o] Error 1

Полный листинг: http://home.vir.uz:8080/listing

VirRaa ★★★
()

Круто, снимаю шляпу. Побольше бы таких проектов.

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

На всякий случай решил поставить libfuse-dev, ну и действительно. Общая картина изменилась:

$ make
Package libzip was not found in the pkg-config search path.
Perhaps you should add the directory containing `libzip.pc'
to the PKG_CONFIG_PATH environment variable
No package 'libzip' found
g++ -c  -Wall -Wextra -D_FILE_OFFSET_BITS=64 -I/usr/include/fuse    fuse-zip.cpp -o fuse-zip.o
fuse-zip.cpp:26:17: error: zip.h: No such file or directory
In file included from fileNode.h:25,
                 from fuse-zip.cpp:33:
bigBuffer.h:37: error: use of enum ‘zip_source_cmd’ without previous declaration
In file included from fuse-zip.cpp:33:
fileNode.h:68: error: field ‘stat’ has incomplete type
fuse-zip.cpp: In function ‘int fusezip_getattr(const char*, stat*)’:
fuse-zip.cpp:85: error: ‘class FileNode’ has no member named ‘stat’
fuse-zip.cpp:94: error: invalid use of incomplete type ‘struct zip_stat’
fileNode.h:68: error: forward declaration of ‘struct zip_stat’
fuse-zip.cpp:95: error: invalid use of incomplete type ‘struct zip_stat’
fileNode.h:68: error: forward declaration of ‘struct zip_stat’
fuse-zip.cpp: In function ‘int remove_node(FileNode*)’:
fuse-zip.cpp:223: error: ‘zip_delete’ was not declared in this scope
fuse-zip.cpp: In function ‘int fusezip_mkdir(const char*, mode_t)’:
fuse-zip.cpp:265: error: ‘zip_add_dir’ was not declared in this scope
fuse-zip.cpp: In function ‘int fusezip_rename(const char*, const char*)’:
fuse-zip.cpp:327: error: ‘zip_rename’ was not declared in this scope
fuse-zip.cpp:331: error: ‘zip_rename’ was not declared in this scope
fuse-zip.cpp: In function ‘int main(int, char**)’:
fuse-zip.cpp:391: error: ‘ZIP_CHECKCONS’ was not declared in this scope
fuse-zip.cpp:391: error: ‘ZIP_CREATE’ was not declared in this scope
fuse-zip.cpp:391: error: ‘zip_open’ was not declared in this scope
fuse-zip.cpp:393: error: ‘zip_error_to_str’ was not declared in this scope
make: *** [fuse-zip.o] Error 1

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

Re^2: Вышел fuse-zip 0.2.0: первая файловая система для FUSE с поддержкой модификации ZIP-архивов

> Не прошло и недели.

Прошла как раз неделя :)

gaa ★★
() автор топика

ква... простите...
fuse 2.7.3
libzip 0.8

make
g++ -c  -Wall -Wextra -D_FILE_OFFSET_BITS=64 -I/usr/include/fuse     fuse-zip.cpp -o fuse-zip.o
In file included from fuse-zip.cpp:32:
types.h: In member function ‘bool ltstr::operator()(const char*, const char*) const’:
types.h:33: ошибка: нет декларации ‘strcmp’ в этой области видимости
fuse-zip.cpp: In function ‘int fusezip_getattr(const char*, stat*)’:
fuse-zip.cpp:77: ошибка: нет декларации ‘memset’ в этой области видимости
fuse-zip.cpp: In function ‘int fusezip_rename(const char*, const char*)’:
fuse-zip.cpp:293: ошибка: нет декларации ‘strlen’ в этой области видимости
fuse-zip.cpp:298: ошибка: нет декларации ‘malloc’ в этой области видимости
fuse-zip.cpp:302: ошибка: нет декларации ‘strcpy’ в этой области видимости
fuse-zip.cpp: In function ‘int main(int, char**)’:
fuse-zip.cpp:381: ошибка: нет декларации ‘EXIT_FAILURE’ в этой области видимости
fuse-zip.cpp:385: ошибка: нет декларации ‘EXIT_FAILURE’ в этой области видимости
fuse-zip.cpp:395: ошибка: нет декларации ‘EXIT_FAILURE’ в этой области видимости
fuse-zip.cpp:403: ошибка: нет декларации ‘EXIT_FAILURE’ в этой области видимости
fuse-zip.cpp:407: ошибка: нет декларации ‘EXIT_FAILURE’ в этой области видимости
fuse-zip.cpp:447: ошибка: нет декларации ‘EXIT_FAILURE’ в этой области видимости
fuse-zip.cpp:451: ошибка: нет декларации ‘EXIT_SUCCESS’ в этой области видимости
fuse-zip.cpp:451: ошибка: нет декларации ‘EXIT_FAILURE’ в этой области видимости
make: *** [fuse-zip.o] Ошибка 1

gcc 4.3.1

uname -a
Linux ergil-laptop 2.6.25-gentoo-r2-ergil #1 SMP Mon May 5 21:34:34 MSD 2008 x86_64 Intel(R) Core(TM)2 CPU T5600 @ 1.83GHz GenuineIntel GNU/Linux

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

Re^2: Вышел fuse-zip 0.2.0: первая файловая система для FUSE с поддержкой модификации ZIP-архивов

> в связи с этим встает вопрос что будет если примонтировать тысяч так 10 архивов, нужно только чтение.

Лучше один архив с 10000 файлов. Быстрее будет, да и ядро меньше нагрузит.

Кстати, по умолчанию в fuse стоит ограничение в тысячу примонтированных ФС на пользователя.

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

Re^2: Вышел fuse-zip 0.2.0: первая файловая система для FUSE с поддержкой модификации ZIP-архивов

> На всякий случай решил поставить libfuse-dev, ну и действительно. Общая картина изменилась:

Если подумать ещё чуть-чуть, то можно поставить ещё и libzip-dev...

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

Re^2: Вышел fuse-zip 0.2.0: первая файловая система для FUSE с поддержкой модификации ZIP-архивов

> "...не имеет аналогов..." и "...превосходит все известные аналоги..." Кхм... =)

Да, коряво. Превосходит все vfs для работы с zip и не имеет аналогов среди fuse-based в том, что может _писать_ в архив

gaa ★★
() автор топика

>Лучше один архив с 10000 файлов. Быстрее будет, да и ядро меньше >нагрузит.

>Кстати, по умолчанию в fuse стоит ограничение в тысячу >примонтированных ФС на пользователя.

вот в таком виде это уже не применить так как я хотел :-).

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

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

Re^2: Вышел fuse-zip 0.2.0: первая файловая система для FUSE с поддержкой модификации ZIP-архивов

> types.h:33: ошибка: нет декларации ‘strcmp’ в этой области видимости ...

У меня в 4.2.3 не ругался :( Но хедеры я, конечно, добавлю.

Через пару дней, видимо, стабилизирующую версию выкладывать надо...

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

Велосипед vs Reiser4.

> вот мне видится такое применение - музыку хранить в zip архивах, чтобы было удобно расшаривать ее в осле, и через fuze-zip содиржимое этих архивов отправлять в плеер.

Чего только не делают люди, лишь бы не использовать Reiser4 с cryptocompress. На последнем, кстати, можно ещё и зашифровать варезную музыку на случай политического обострения в отдельно взятой северной стране.

Автору за fuse-zip благодарность.

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

Re^2: Вышел fuse-zip 0.2.0: первая файловая система для FUSE с поддержкой модификации ZIP-архивов

> А как у него с надёжностью?

У меня работает стабильно :D А тесты были довольно агрессивные.

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

Re^4: Вышел fuse-zip 0.2.0: первая файловая система для FUSE с поддержкой модификации ZIP-архивов

> а может тогда сочинить механизм автомонтирования, чтобы при обращении к какой-нибудь директории ls выдавал список сгенерированый из набора архивов, и при попытке обратиться в любую их этих директории туда монтировался архив, по таймауту чтобы отмонтировался.

Это умеет avfs. Она read-only и ненамного отстаёт по производительности.

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

Re^4: Вышел fuse-zip 0.2.0: первая файловая система для FUSE с поддержкой модификации ZIP-архивов

> Вы об этом здесь сообщите? Или надо будет мониторить?

В толксы кину, ибо новость про +=0.0.1 вряд ли пропустят.

gaa ★★
() автор топика

$ ls -l
total 0
-rw-r--r-- 1 root root 122350647495694336 Jan 21 23:41 ReactOS.iso


что то не то с размером файла
$ unzip ReactOS-0.3.4-REL-iso.zip
Archive: ReactOS-0.3.4-REL-iso.zip
inflating: ReactOS.iso
$ ls -l ReactOS.iso
-rw-r--r-- 1 silvy users 33888256 Jan 21 23:41 ReactOS.iso

Sylvia ★★★★★
()
Ответ на: Велосипед vs Reiser4. от Camel

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

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

О, велкам, как говорится, куда ж ты на gcc 4.3.1 залез, коли такую элементарщину пофиксить не можешь? Сползай на предыдущую ветку gcc, или добавь #include <string.h> в fuse-zip.cpp

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

$ cp ReactOS.iso /tmp cp: overwrite `/tmp/ReactOS.iso'? y cp: reading `ReactOS.iso': Invalid argument

ну и соответственно, что то не работает оно у меня

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

в данном случае мое дело не править, а сообщить автору о проблеме :)
будет у человека время, исправит :)

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

> Два вопроса - почему не GIO

Потому что оно небыстро в его текущем воплощении(gio и gvfs -- это ведь одно и тоже? или я путаю?).

Вот если авторы gio сделают мост для перенаправления своих вызовов через fuse-zip я буду очень рад.

> и когда убдет поддержка lzma?

Ну явно не через неделю :)

Надо тщательно обдумать, не повредит ли добавление новых типов архивов функциональности, выдумать хорошую абстракцию для доступа к разношёрстным архивам. А у меня ещё по кешированию много новых идей :)

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

> в данном случае мое дело не править, а сообщить автору о проблеме :)

+1

VirRaa ★★★
()

По fuse-zip планируется какая нить страничка с описанием возможных способов применения?

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

Re^2: Вышел fuse-zip 0.2.0: первая файловая система для FUSE с поддержкой модификации ZIP-архивов

> что то не то с размером файла

Спасибо за сообщение, буду фиксить

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

Re^2: Вышел fuse-zip 0.2.0: первая файловая система для FUSE с поддержкой модификации ZIP-архивов

> По fuse-zip планируется какая нить страничка с описанием возможных способов применения?

Ну а что подразумевается под "различными способами применения"?

Способ применения, как я это смыслю, один: mount;do_something;unmount

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

спасибо
попробую прикрутить в своем консольном файловом менеджере

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

>вот мне видится такое применение - музыку хранить в zip архивах, чтобы было удобно расшаривать ее в осле, и через fuze-zip содиржимое этих архивов отправлять в плеер.

А не проще воспользоватся cue?

DNA_Seq ★★☆☆☆
()

> fuse-zip не имеет аналогов

Добавь - в линаксе, в винде зипы открываются как папки начиная с ХР.

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

> По fuse-zip планируется какая нить страничка с описанием возможных способов применения?

А что сам не догадываешся? Ну посмотри как эта фича используется в винде начиная с ХР :)

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

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

vasaka ★★★
()

> Релиз хоть и минорный, но революционный по своей сути.

После включения fuse в ванильное ядро осталось сделать только один последний, самый революционный шаг: понять, что её можно использовать для решения своих задач. :) Очень простое (логически) и прямое средство.

const86 ★★★★★
()

>> types.h:33: ошибка: нет декларации ‘strcmp’ в этой области видимости ...

>У меня в 4.2.3 не ругался :( Но хедеры я, конечно, добавлю.

В gcc-4.3 многое поменяли: http://gcc.gnu.org/gcc-4.3/porting_to.html

ergil просто ССЗБ.

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