реклама на сайте
подробности

 
 
> Архиватор в микроконтроллере с малым требованием к ресурсам, сделать в МК архив, который на PC можно будет штатно разжать
Ruslan1
сообщение Nov 22 2016, 08:58
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025



Здравствуйте!

Имеется кучка файлов, которые можно поделить на две группы
1) длинные текстовые- например, лог 6 мегабайт ежедневно
2) куча коротких текстовых - например, ежедневно директория с 1440 файлами по 200 байт (ежеминутные данные)

Хочу их заархивировать с целью:
группа1 - чтобы уменьшить размер (важно при передаче)
группа2 - чтобы уменьшить количество файлов, просто склейка в один файл без сжатия уже подходит (то есть что-то типа tar уже достаточно) - важно для хранения.

Архивация происходит периодически и не в реальном времени- например, раз в сутки для уже собранных файлов. То есть изменять архив не нужно и скорость работы функции не важна, фоновая задача.
Обязательное требование- чтобы на компьютере это можно было разжать, используя доступные в интернете стандартные архиваторы, а не писать свой распаковщик. Я точно не буду применять архиватор в нестандартный архив.
И еще крайне желательно, чтобы задача не требовала больших объемов памяти (временных буферов) во время работы. При этом скорость работы практически не важна.


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

Ни и если кто-то может рассказать про личный опыт, что за архиватор применяли на МК, буду безмерно счастлив.

конкретно буду реализовывать на STM32F4, если это важно
Go to the top of the page
 
+Quote Post
3 страниц V  < 1 2 3  
Start new topic
Ответов (30 - 44)
Ruslan1
сообщение Nov 25 2016, 11:42
Сообщение #31


Гуру
******

Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025



Цитата(AlexandrY @ Nov 25 2016, 13:24) *
Что-то очень сомнительно. При таком колическтве файлов время доступа к файлу на создание-запись должно быть в пределах десятков секунд.
С такими тормозами я не представляю чем дивайс еще может заниматься.

Ну так они не внавал миллионами лежат, а по дневным дирректориям, в каждой 1440 файликов. В момент копирования нового файла "в архив" тормозов сильных нет, всего-то 1237-й файл в известную дирректорию добавить.
Тормоза только после включения и ежесуточно, когда система проверяет все архивные фолдеры на предмет "а кто тут старее чем указанное в конфиге время жизни для этого типа файлов?" и удаляет старые. Вот это да, закат солнца вручную. (кстати, мой контейнер и этому горю поможет). Но это одна из задач многозадачки, так что не критично -остальное бегает в параллель.

А что сомнительно? я не вижу слабых мест при использовании FAT в виде иерархической структуры: большого числа файлов, распиханного по дирректориям.
Вот в Линуксе с его единой таблицей inode есть потенциальные грабли насчет количества файлов. Но там скрипты подтирают- принятый файл сразу после затягивания в базу данных добавляется в архив и удаляется. Как-то слетел скрипт - так inode на FTP была забита за неделю sm.gif
Go to the top of the page
 
+Quote Post
Ruslan1
сообщение Nov 25 2016, 12:45
Сообщение #32


Гуру
******

Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025



Цитата(ViKo @ Nov 25 2016, 13:20) *
Понятно. Если это резервный архив, то почему не делать один файл на час или день? А на компе своей утилиткой выделять ежеминутные данные, когда это в исключительном случае потребуется. Зачем эта 100% идентичность? Тем более, все равно объединяете в один файл. Вам, конечно, виднее.
Еще и на количестве записей на диск сэкономите.

Я с Вами полностью согласен, так нужно делать, когда это возможно. Но сильно не хочется свою утилитку делать (не только из-за лени). А еще больше "попонтоваться" хочется: "ну что, конкуренты коллеги, у меня zip, а у вас?" sm.gif
Go to the top of the page
 
+Quote Post
mantech
сообщение Nov 25 2016, 13:36
Сообщение #33


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(Ruslan1 @ Nov 25 2016, 13:55) *
Вы, вероятно, не сталкивались с подобным, у меня сейчас ситуация следующая: за 100 дней накапливается почти полтора миллиона файлов, занимающие 4 гигабайта (если кластер 32к) на устройстве хранения, при этом собственно файлы имеют общий объем 24 мегабайта.


Для подобных задач уже надо использовать пром. компьютер с "настоящей" осью, в которой уже все упаковщики работают "из коробки", а если инфа еще и важная, то есть смысл и raid прикрутить или в базы данных скидывать...
Go to the top of the page
 
+Quote Post
Ruslan1
сообщение Nov 25 2016, 20:24
Сообщение #34


Гуру
******

Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025



Цитата(gerber @ Nov 25 2016, 12:34) *
Ну и зря rolleyes.gif , если вспомнить, как устроен и пишется оптический диск, то станет понятно, что для непрерывного добавления файлов это самое оно и есть.

Перепроверил: у ISO большой заголовок на диск, и он хранится в теле этого iso файла. Плюс минимальный размер сектора - 2 килобайта, и каждый файл в своем секторе. В результате стоимость входа 50 килобайт, плюс по 2 килобайта на файл.
В-общем, это как переход от одной операционки к другой, выигрыша по занимаемому месту нет никакого так как нужно хранить файловые таблицы и файлы квантуются сектором 2К.

Пока что zip видится лучшим контейнером. попробую накропать что-то за вечерок... CRC32 не нравится, да и промежуточный буфер(даже файл) нужен для хранения этих хвостовых central directory header, но нет в мире совершенства....
Go to the top of the page
 
+Quote Post
Ruslan1
сообщение Nov 27 2016, 23:13
Сообщение #35


Гуру
******

Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025



В-общем, реализовал tar с дописыванием в архив новых файлов по нужде. Имею желание в будущем добавить gzip и получить tgz.

сам по себе zip - тупик, если нужно даже сжать много файлов. Как контейнер он лучше чем tar, а дальше сплошные минусы и по сложности подготовки(нужно много данных хранить даже просто для организации контейнера,) и в будущем сжатия большого не даст. А делать zip для контейнера и потом еще раз сжимать этот зип как один файл- это мазохизм, уж лучше стандартный путь, через тар. Ну и с таром дописывание- это норма, а не изврат как с зипом.

Кстати, с Таром тоже хватило эротики- описание только на первый взгляд понятное, пришлось и в исходники за деталями залезть, а они не самые простые. Первые(простые)- не годятся, так как формат поменяли по дороге, по этой же причине в интернете разброд и шатание, могу найти противоречащие друг другу описания.
Более того- разные программы дают разный файл, и по хедеру и по длине, например ТоталКомандер и 7-zip, но не отказываются раскодировать файлы друг друга- видна повышенная толерантность и пофигизм к содержимому неосновных полей хедера и финальному маркеру sm.gif (7Zip- лучше, я не нашел отклонений от описания в полученном с его помощью файле).

следующий виток- gzip, но тут вроде есть готовое, хочу попробовать mini_gzip
Go to the top of the page
 
+Quote Post
firew0rker
сообщение Dec 7 2016, 03:29
Сообщение #36


Местный
***

Группа: Свой
Сообщений: 206
Регистрация: 11-07-12
Из: Новосибирск
Пользователь №: 72 716



Я применила для такой задачи (сбор и ежесуточное архивирование данных) х86-совместимый пром.компьютер под Linux.
Для задачи попроще (файл был один) на STM32F103 применила архивaтор XZ Embedded
Go to the top of the page
 
+Quote Post
Alechek
сообщение Dec 7 2016, 05:15
Сообщение #37


Профессионал
*****

Группа: Свой
Сообщений: 1 241
Регистрация: 15-11-05
Из: Челябинск
Пользователь №: 10 882



Цитата(firew0rker @ Dec 7 2016, 08:29) *
Для задачи попроще (файл был один) на STM32F103 применила архивaтор XZ Embedded

Цитата
XZ Embedded is a relatively small decompressor for the .xz file format.

Go to the top of the page
 
+Quote Post
firew0rker
сообщение Dec 7 2016, 06:27
Сообщение #38


Местный
***

Группа: Свой
Сообщений: 206
Регистрация: 11-07-12
Из: Новосибирск
Пользователь №: 72 716



Так мне и надо было распаковать 1 файл на МК.
Если надо упаковать, есть библиотеки:
1. miniz
2. liblzf
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Dec 7 2016, 06:55
Сообщение #39


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(firew0rker @ Dec 7 2016, 08:27) *
Если надо упаковать, есть библиотеки:
1. miniz
2. liblzf


Похоже ничего нового в этом мире нет.
Перепевки все тех же алгоритмов предложеных в начале темы.
Но по условиям темы вы должны еще показать достаточно распространенный разархиватор на PC для указанных форматов. wink.gif
Go to the top of the page
 
+Quote Post
firew0rker
сообщение Dec 7 2016, 08:43
Сообщение #40


Местный
***

Группа: Свой
Сообщений: 206
Регистрация: 11-07-12
Из: Новосибирск
Пользователь №: 72 716



Цитата(AlexandrY @ Dec 7 2016, 13:55) *
Показать достаточно распространенный разархиватор на PC для указанных форматов. wink.gif


miniz пишет ZIP файлы.

При компиляции релиза liblzf получается (рас/у)паковщик в виде бинарника lzf которым элементарно просто пользоваться.

Может быть использовать не архиватор, а файловую систему со сжатием, например NTFS?
Исходники ntfs-3g бесплатны, открыты. А за деньги можно приобрести NTFS Embedded

Сообщение отредактировал firew0rker - Dec 7 2016, 09:01
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Dec 7 2016, 09:32
Сообщение #41


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(firew0rker @ Dec 7 2016, 10:43) *
miniz пишет ZIP файлы.

При компиляции релиза liblzf получается (рас/у)паковщик в виде бинарника lzf которым элементарно просто пользоваться.


Да можно много барахла найти по всяким свалкам исходников, никто не спорит.
Но во первых вы даже видимо не смотрели сколько памяти требует этот miniz, а во вторых видимо думает, что в STM32 есть такая же файловая система как в линуксе.
Go to the top of the page
 
+Quote Post
firew0rker
сообщение Dec 7 2016, 13:04
Сообщение #42


Местный
***

Группа: Свой
Сообщений: 206
Регистрация: 11-07-12
Из: Новосибирск
Пользователь №: 72 716



Цитата(AlexandrY @ Dec 7 2016, 16:32) *
Да можно много барахла найти по всяким свалкам исходников, никто не спорит.
Но во первых вы даже видимо не смотрели сколько памяти требует этот miniz, а во вторых видимо думает, что в STM32 есть такая же файловая система как в линуксе.


Не только барахла, много ценного тоже нарыть можно.
На STM32 можно работать и с файловой системой как в Линуксе, и с самим Линуксом!
Go to the top of the page
 
+Quote Post
Ruslan1
сообщение Dec 7 2016, 19:58
Сообщение #43


Гуру
******

Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025



Спасибо, но на линукс ради архиватора переходить не стану в данном устройстве.
У меня этот архиватор- задача опциональная, так что революцию в архитектуре не планирую, причин нет. Вот tar был необходим, это да, но он красиво лег и на то что уже есть.
Я поскреб по сусекам- наскреб у себя около полмегабайта РАМа, который смогу архиватору "во временное пользование" выделять, думаю это сильно расширит горизонты. Но вот нерезиновое ПЗУ экономить все равно нужно.

И, к слову, называль Линуксом uClinux - ну, у меня лично язык не поворачивается. Все ж таки MMU нужно, чтоб Линуксом назваться. И я с uClinux наигнался в его Блекфиновской инкарнации, и драйверы свои писал в него к моему железу тогдашнему, и оно даже работало. Как-то работало. Очень "как-то". И то был Блэкфин, а не свистелка STM32.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jan 3 2017, 16:50
Сообщение #44


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Ruslan1 @ Dec 7 2016, 22:58) *
У меня этот архиватор- задача опциональная, так что революцию в архитектуре не планирую, причин нет. Вот tar был необходим, это да, но он красиво лег и на то что уже есть.

Вопрос к ТС-у:
Как я понял Вы остановились на tar? И уже имплементировали его?
У меня сейчас в чём-то сходная задача: нужно в прошивку устройства добавить содержимое некоего HTTP-сервера. И я тоже искал контейнер, чтобы объединить все файлы в один файл, из которого уже можно находить нужные отдельные файлики внутри firmware. Вопрос о сжатии пока не стоит.
Я посмотрел на tar, но мне показалось, что у него большой оверхед на всякие заголовки и т.п.
И я остановился на cpio. Вы его рассматривали? https://habrahabr.ru/post/130092/
Утилитка для него есть и под винду.
Go to the top of the page
 
+Quote Post
Ruslan1
сообщение Jan 3 2017, 19:30
Сообщение #45


Гуру
******

Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025



Цитата(jcxz @ Jan 3 2017, 18:50) *
Как я понял Вы остановились на tar? И уже имплементировали его?
...
Я посмотрел на tar, но мне показалось, что у него большой оверхед на всякие заголовки и т.п.
И я остановился на cpio. Вы его рассматривали?

Да, сейчас я использую tar.
Нет, я не рассматривал cpio, так как не думал о нем как о "стандартном" упаковщике.
Очень может быть, что cpio лучше. По оверхеду он явно лучше, но может есть какие-то хитрости.
Go to the top of the page
 
+Quote Post

3 страниц V  < 1 2 3
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 00:42
Рейтинг@Mail.ru


Страница сгенерированна за 0.01722 секунд с 7
ELECTRONIX ©2004-2016