Почему не сжимаются файлы архиватором?
Времена архиваторов постепенно заканчиваются и с каждым годом, пользователи всё реже сжимают информацию.
Это не удивительно, когда были винчестеры, рассчитанные всего на несколько мегабайт, без сжатия даже обычных текстов, было не обойтись, но сегодня купить дополнительную память можно без особых затрат.
По привычке или из-за своих переживаний о лишнем занимаемом месте на диске, некоторые всё же продолжают сжимать данные, но это не всегда работает. Почему не сжимаются файлы архиватором? Дело в том, что некоторые данные вообще не имеет смысла пытаться сжимать, так как это невозможно.
Какие файлы не сжимаются архиваторами?
Начнем с того, что сжатию не поддаются данные, которые ранее уже проводились через архиватор. Программа полностью сократила возможный объем памяти, заменив все повторяющиеся данные, поэтому повторное архивирование не помогает.
Сработать такой метод может только в том случае, если второе сжатие производится с более свежего софта.
Что касается музыки и видео файлов, то их вообще можно не сжимать. Видеозаписи по умолчанию сжимаются кодеками-архиваторами, поэтому их добавление в архив не поможет сократить объем занимаемой памяти.
Аудиофайлы можно добавить в архив для сжатия, но максимум, что вам удастся «выкроить» это 5-7% памяти, согласитесь, из-за этого можно вообще не терять время на архивацию.
Графические элементы (картинки), также лучше не архивировать, а сжимать, путем редактирования. К примеру, вы можете изменить количество цветов, ведь не всегда требуется передача нескольких тысяч цветовых схем, иногда вполне достаточно 256 цветовой палитры.
Также, отлично экономит место уменьшение размера изображений и изменение формата. Всем известно, что PNG файлы занимают намного больше места, чем привычный формат Jpg.
Программы и различные базы данных можно попытаться сжать, но если вы получили их с официальных источников, то это вряд ли удастся. Дело в том, что они заранее оптимизируются, для ускоренного скачивания.
Но если архиваторы не так нужны сегодня, почему их разработчики продолжают выпускать обновления и даже продают программные продукты? Объяснить это не сложно, за счет архиваторов, можно удобно группировать данные, например, чтобы не передавать их через интернет по одному.
Также, путем архивации информации, можно увеличить её защиту, ведь даже в стандартном наборе
Почему архив не сжимает файлы
Часто в повседневной жизни возникает необходимость в сжатии файлов для удобства их хранения, записи на носители и оперативного обмена через социальные сети, электронной почте , файлообменники и другие сервисы в глобальной сети Интернет. Однако не все файлы одинаково хорошо поддаются сжатию. Лучше всего сжимаются файлы текстового формата (txt, doc). Файлы архивов (rar, zip, 7z, lha, tar, gz, jar и т.п.), видео (avi, mpeg, wmv, flv), музыки (mp3, wma, aac) и изображений (jpeg, jpg, gif, png) незначительно уменьшаются в размере, поскольку изначально являются файлами сжатых форматов. Сюда же относятся и файлы Microsoft Office с расширениями docx, xlsx.
Сжатием (уменьшением размера) файлов занимаются специализированные программы-архиваторы, наиболее известные из которых WinRAR, 7zip и WinZip. О том, как максимально сжать файл в архиваторе WinRAR мы и поговорим.
Для начала упаковки файлов в архив необходимо, чтобы на вашем компьютере был установлен архиватор WinRAR . Для начала операции сжатия (архивации) необходимо выделить файлы, которые вы собираетесь сжимать. Затем щелкнув правой кнопкой мыши по выделенной области, вызываем контекстное меню, в котором выбираем строку «Добавить в архив…».
В появившемся рабочем окне «Имя и параметры архива» на вкладке «Общие» задаем имя будущего архива, а также выбираем формат и метод сжатия. Из форматов советуем выбирать общедоступный формат ZIP, поскольку некоторые операционные системы с трудом читают формат RAR. В выпадающем меню «Метод сжатия» выбираем соответственно «Максимальный». Нажимаем кнопку ОК.
Но лучшего эффекта стоит ожидать от «Максимального» метода сжатия вместе установленной галочкой «Создать непрерывных архив».
Плюс непрерывной архивации — это увеличенная степень сжатия.
-
Минусы:
- добавление одного файла в этот архив будет происходить медленнее относительного обычного архива;
- извлечения одного или нескольких файлов тоже будет происходить медленнее;
- если в непрерывном архиве какой-либо файл окажется повреждённым, то не удастся извлечь часть файлов.
-
Исходя из плюсов и минусов, непрерывные архивы рекомендуется использовать в трёх случаях:
- архив будет редко обновлять или вообще не планируется обновлять,;
- архив будет использоваться для распаковки его целиком,
- и третий случай, когда степень сжатия важнее скорости архивации и распаковки.
Для того чтобы установить свои собственные значения параметров сжатия для формата RAR, перейдите на вкладку «Дополнительно» и нажмите на кнопку «Параметры сжатия» в группе «Параметры NTFS». В новом диалоговом окне вы можете выбрать особые параметры для сжатия текста, аудио и полноцветной графики, выбрать основной алгоритм сжатия и т.д.
Для добавления нового файла в уже имеющийся архив с максимальным сжатием необходимо открыть этот архив и выбрать в меню «Команды» строку «Добавить файл в архив»; ещё проще можно перетащить нужный файл в окно программы. После этого автоматически откроется новое диалоговое окно «Имя и параметры архива». Вам осталось установить для нового файла метод сжатия «Максимальный» и нажать на кнопку ОК.
Думаю прочтение статьи пошло Вам на пользу. Теперь вопросы о максимальном сжатии в WinRar ушли в прошлое, а если и возникнут или забудутся, то в восстановлении компьютерных знаний поможет наш сайт h-y-c.ru !
Рекомендуем к просмотру:
- Как пользоваться фильтром поиска на сайте компании “Этажи”?
- Как организовать конференцию в Zoom?
- Как пользоваться Zoom на компьютере?
- Проверка скорости интернета: что нужно знать
- Как изменять голос в Дискорд?
- Как сменить обложку профиля в Одноклассниках?
- Как удалить посты в Инстаграме с компьютера?
- Устранение ошибки при запуске Office 2010 на XP
- Как обновить Internet Explorer 8 до 11 версии для Windows 7?
- Как заархивировать запись в ВК?
- Как развернуть экран на компьютере?
Почему архиваторы не эффективно сжимают одинаковые файлы?
При добавление их в архив tar:
[user@comp test_compress]$ tar -cf all.tar 1 2
и последующего сжатия (пробовал gzip, xz и bzip2) размер не уменьшается (ожидал увидеть 1.8, но не как не 3.5, ведь фалы одинаковые)
[user@comp test_compress]$ du -sh all* 3,6G all.tar 3,6G all.tar.bz2 3,5G all.tar.gz 3,5G all.tar.xz
В чем причина, и как можно эффективного сжимать близкие по содержимому большие файлы?
- Вопрос задан 21 нояб. 2022
- 613 просмотров
19 комментариев
Средний 19 комментариев
Вместо полного бэкапа делать инкрементный и не надеяться на сообразительность архиваторов, которые реально не предусматривают повторения данных через пару гиг потока.
Valentin Barbolin @dronmaxman
Если так?
tar -zcf all.tar.gz 1 2
мимоходом хочу обратить внимание, что pg_dump -F c сжат сам по себе.
mayton2019 @mayton2019
Melkij, это похоже правильный ответ. Я сделаю +1. Положи в ответы.
van000 @van000 Автор вопроса
Adamos, это все понятно и если бы стояла остро проблема нехватки места, можно было бы пересмотреть стратегию организации рез. копирования. Но места предостаточно и сама база не очень большая, поэтому смысла делать инкрементный бэкап не вижу.
Меня больше интересуют инструменты которые могут проиндексировать большие фалы и эффективно их сжать. Сейчас попробовал git-lfs на одинаковых файлах но хорошо справился, но на немного отличающихся уже нет.
Вот мне и интересно, может кто-то уже задавался этим вопросом, и имеется опыт.
van000, этот вопрос называется «дедупликация данных». Если интересно — гуглите.
Есть даже файловые системы, которые этим занимаются, и архиватор не потребуется.
van000, самое эффективная дедупликация больших бекапов с небольшим отличием — инкрементальный бекап 🙂
инкремент аккурат и вычисляет разницу между двумя версиями данных и формирует четкий дифф, при этом качественно разбирая структуру данных.
chupasaurus @chupasaurus
Adamos, Потребуются возвратно-поступательные упражнения с этими ФС.
chupasaurus, ну, у ТС как раз бодро стоит вопрос.
chupasaurus @chupasaurus
места предостаточно и сама база не очень большая
не сказал бы
van000, в данном случае большая ошибка считать, что архиватор реально вычисляет повторения. На самом деле нет.
Архиватор, с некоторой долей условности, смотрит в ближайшем потоке данные, определяет, какие из них «повторяются», и заменяет данные на словарь плюс ссылки на этот словарь. При «хороших» данных такая замена становится заметно короче исходных данных, при не очень хороших — ну хоть не больше. Но чтобы это работало на двух гигабайтных файлов, архиватор должен положить весь этот огромный гигабайтный файл в словарь, чего он делать, конечно же, не будет.
shurshur, ну почему же, надо просто использовать архиваторы, которые позволяют указать размеры словарей. Тот же 7Z позволяет (судя по гуишной оболочке) задать размер словаря в 1.5Гб
freeExec, и уронить VPS-ку, на которой вы захотите распаковать этот архив? 😉
Adamos, и что? важно же сжатие, за это надо платить памятью.
freeExec, особенно если ее физически нет.
mayton2019 @mayton2019
В чем причина, и как можно эффективного сжимать близкие по содержимому большие файлы?
Несколько лет назад я интересовался таким подходом. Взять два бэкапа БД и выявив различия в блоках сделать — некое сжатие на основе дедупликации.
Пробовал утилиты наподобие bsdiff
bsdiff: usage: bsdiff oldfile newfile patchfile
но они работают очень медленно т.к. расчитаны не на бэкапы баз а на изготовление бинарных патчей к
приложениям. Например там поправить 2 байтика в exe-шнике размером 50 Мб — это как раз самое то.
Попробуйте может вам способ подойдет. Но мне кажется что bsdiff не знает с чем имеет дело и поэтому
работает на уровне байтов хотя для бэкапов Postgres можно было искать различия на уровне 4-К страничек
или что-то в этом роде.
Опять-же такая природа может быть характерна для PG датафайлов но никак не для сжатых дампов. После
сжатия подобная блочная структура будет уничтожена.
Поэтому в идеале нужно делать копию дата-файлов. Потом блочый bsdiff. И только потом сжатие дельты
и сжатие первой копии.
freeExec, я в жизни неоднократно забивал/подбивал гвозди или выкручивал шурупы пассатижами, но это же слегка неправильный способ использования инструмента, да?
А в задаче автора эти гигантские словари ещё и не помогут, так как вряд ли эти полтора гига будут одинаковыми каждый день до байтика. А если даже да, то проще уж тогда считать md5 архива и вместо очередного бэкапа класть текстовый readme.txt «сегодня ничего не поменялось».
И вообще, тут правильно говорят, что инкрементальные бэкапы будут намного более эффективными для задачи автора, я уж не говорю о том, что они могут добавить практической пользы сами по себе.
Почему архив не сжимает файлы
на школьную страницу. на школьную страницу.
Как работает архиватор
Как работает трансформатор знают все: «У-у-у-у-у. ».
Многие считают, что архиватор работает аналогичным образом.
Это не совсем так.
Работа архиватора состоит из нескольких последовательных шагов. Сначала он просматривает байт за байтом входной файл. Для текущей позиции в файле он ищет самый длинный повтор в предыдущей части файла:
. работает трансформатор . архиватор работает . ===== ===== ▲ | └─────────────┘ отступить на 79 байт назад и скопировать оттуда 5 байтов
Строчки могут перекрываться, например так:
. abcabcabc . ========= ▲ | └──┘ отступить на 3 байта назад и скопировать оттуда 6 байтов
. fffffffffffffffffffff . == ▲| └┘ отступить на 1 байт назад и скопировать оттуда 21 байт
- На сколько байтов надо отступить назад (смещение).
- Сколько байтов скопировать (длина).
Смещение: 87, 125, 22, 355, 2314, . Длина: 3, 5, 1, 1, 12, .
Длины обычно невелики, а вот смещения могут оказаться очень большими, до нескольких миллионов. Для эффективного кодирования этих чисел архиваторы идут на всевозможные ухищрения, в результате которых коды смещений оказываются чаще всего небольшими числами.
Два потока чисел, полученных на первом шаге передаются на второй шаг, где их сжимают либо с помощью арифметического кодирования, либо с помощью кода Хаффмена.
Это коды переменной длины, то есть для кодирования каждого символа используется разное количество битов: часто встречающиеся символы кодируются короткой цепочкой битов, редко встречающиеся — более длинной.
Один из самых известных примеров такого кода — азбука Морзе.
- «Война и мир.fb2» — роман Льва Толстого «Война и мир» длиной 5 564 044 байт,
- EXCEL.EXE — исполняемый файл из MS Office длиной 18 352 488 байт.
Архиватор | Война и мир.fb2 | Excel.exe |
---|---|---|
ARJ | 1 586 779 | 9 819 278 |
RAR | 913 989 | 7 921 519 |
ZIP | 1 547 000 | 9 800 479 |
7Z | 1 104 753 | 6 898 313 |
Таким образом, коэффициент сжатия — от 3 до 6.
Большинство архиваторов имеют GUI — графическую оболочку, в которой все необходимые действия и параметры вы можете задать в диалоге. При этом не надо помнить всевозможные команды и ключи архиватора, а их обычно — несколько десятков.
С другой стороны, если вы каждый день используете архиватор для выполнения одних и тех же действий например, для хранения (на всякий случай) результатов сегодняшней работы, то работа в диалоге становится утомительной и опасной, — можно забыть указать что-то нужное или просто не в том месте поставить галочку. В этом случае лучше один раз набрать в bat-файле необходимую команду со всеми ключами и для вызова архиватора просто запускать этот bat-файл.
Ещё одна интересная возможность, которая, правда, реализована не во всех архиваторах — сплошной (solid) архив. Обычно при упаковке в один архив нескольких файлов каждый из них сжимается независимо от остальных. В результате, если одна и таже цепочка символов встречается в разных файлах, мы не получаем никакого выигрыша при сжатии. При сплошном сжатии все файлы «мысленно» сливаются в один файл и лишь потом сжимаются. В некоторых случаях, например при сжатии большого количества небольших похожих текстов, это может дать очень существенный выигрыш. Правда следует понимать, что в таком случае для извлечения из архива одного-единственного файла, придется архив распаковывать с самого начала.
Помимо обычного сжатия, архиваторы обладают многими очень полезными функциями, например, шифрование. Команда
RAR a -p12345 -r arch *.txt
в архив с именем arch.rar положит все файлы с расширением txt из текущего каталога и его подкаталогов. Архив будет зашифрован с паролем «12345». Для извлечения файлов из архива даем команду
RAR x -p12345 arch
Не зная пароля архив не распаковать. Если вы забыли или не точно помните одну-две буквы, можно попытаться подобрать пароль простым перебором. Но не следует надеяться подобрать «полностью забытый» пароль — устанете ждать.
Если вы не хотите в открытую набирать пароль на клавиатуре, можно дать команду
RAR a -p -r arch *.txt
не указывая никакого пароля. В этом случае архиватор предложит ввести его с клавиатуры в «секретном» режиме, то есть не отображая вводимые символы на экране.
В некоторых случаях без паролей вообще никак не обойтись. Многие почтовые системы (mail.ru, gmail.com и др.) не хотят пересылать exe-файлы (а также dll, скрипты и некоторые другие), — боятся вирусов. Более того, если вы попытаетесь переслать exe-файл через mail.ru, то отправка писем с этого адреса будет блокирована на несколько дней, правда приниматься письма всё равно будут.
Можно попытаться обмануть почтовую систему и упаковать пересылаемые файлы в архив. Но почтовые системы и эту хитрость знают и файл всё равно не пропустят. Единственная возможность — упаковать файлы в архив с паролем. На этом почтовая система сдается и файл пропускает. Пароль (чтобы не забыть) лучше указать тут же, в теле письма. И не надо выдумывать пароли типа:
kjas&8873s_+-kNN. mohi^gwFJ$rc3)kNBaImnd?KM$3&fdyHhf99(24)(
хотя это вполне нормально сработает. Лучше ограничиться паролем
12345
Не ищите приключений на свою голову!
Очень полезной возможностью архиваторов является работа с архивным битом. Дело в том, что операционная система для каждого файла хранит не только его имя, длину, но и дату и время последнего изменения файла, дату и время последнего обращения к файлу и некоторые другие параметры. Среди них — архивный бит. При создании файла, при его копировании, перемещении, при любом изменении этот бит устанавливается в 1. Поэтому почти у всех файлов на вашем компьютере он равен 1. Однако архиватор имеет возможность обнулять этот бит для тех файлов, которые были упакованы в архив. Команда
RAR a -r -ac -ao arch *.txt
упакует в архив только файлы у которых архивный бит равен 1 (ключ -ao) и затем сбросит этот бит в 0 (ключ -ac). В результате в архив будут упакованы лишь файлы, которые были созданы или изменены после предыдущей архивации. Если, например, в вашем рабочем каталоге 100 тысяч файлов, общий размер архива может составить несколько гигабайт. Если же в архив упаковывать лишь файлы, которые изменились с момента предыдущей архивации, ежедневный архив получится совсем небольшим.
Можно сделать так, чтобы имя получаемого архива зависело от даты и времени. Комадна
RAR a -r -ac -ao -agYYYY_MM_DD_HH_MM_SS arch *.txt
создает архив с именем
arch2013_10_24_09_02_45.rar
(24 октября 2013 г. время 9 часов 02 минуты 45 секунд). В этом архиве будут лежать файлы из текущего каталога и его подкаталогов (ключ -r) с расширением txt, но не все, а лишь те, которые изменились с момента предыдущей архивации.
Многие архиваторы умеют создавать многотомные архивы. Эта возможность появилась в древности потому, что архивы часто хранились на дискетах, объём которых был фиксирован (360К, 1.2М или 1.44М байт), и архивы перестали помещаться на дискету. Поэтому архивный файл резался архиватором на части заданного размера, каждую из которых можно было хранить на одной дискете.
В настоящее время эта возможность используется при пересылке больших файлов по почте. Многие почтовые системы не хотят пересылать большие файлы (10М байт и более). В этом случае вы можете упаковать его в многотомный архив. Команда
RAR a arch -v6M MyFilm.avi
создат файлы
arch.part01.rar arch.part02.rar .
размером по 6М байт каждый (кроме последнего).
Сжимать с помощью архиватора фотографию — не очень хорошая идея. Возьмем, например, BMP-файл с фотоаппарата размером 4288*2848 точек. Его размер — 36М байт. В результате сжатия архиватором RAR получим файл размера 12М байт. То есть размер уменьшился в 3 раза. Если же мы сохраним тот же файл в формате JPEG, размер файла можно уменьшить в несколько десятков раз. Правда, этот формат — с потерями. Подробнее про него можно узнать здесь .