+0 000-000-00-00

Резервное копирование - решение проблемы с русскими названиями файлов

Задача: Делать бэкапы файлов в ubuntu  и иметь возможность открывать их без проблем в windows.

Как известно, есть проблема с совместимостью названий файлов в linux и windows. Linux использует utf-8, windows - не пойми что (cp-1251 и utf-16). В итоге файлы, распакованные в другой системе имеют несовместимость в названиях, если они имеют кириллицу (или другие знаки из расширенной ASCII).

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

Но вот bingo! Нашел замечательный архиватор Bandizip - в нем можно выбирать кодировку для названий файлов! Архиватор поддерживает

  1. Packing and Unpacking :
    Zip(z01), ZipX(zx01), TAR, TGZ, 7Z(7z.001), and EXE(e01)
  2. Unpacking Only:
    RAR(part1.rar, r01), ACE, ALZ, APK, ARJ, BH, BZ, BZ2, CAB, EGG, GZ, J2J, JAR, IMG, IPA, ISO, LHA, LZH, LZMA, PMA, TBZ, TBZ2, TGZ, TLZ, TXZ, UDF, WAR, WIM, XZ, and Z

К сожалению, не распаковывает файлы, созданные lzip и .

Для сохранения прав на файлы (нужно для восстановления файлов в linux) есть только одна возможность - сначала собрать файлы в tar, а потом запаковать.

Возможные варианты

1. 7z

Упаковывает не быстро, степень сжатия хорошая. Команда для создания бэкапа (пример) с использованием нескольких ядер

 
1
tar -c /path/to/files | 7z a  -m0=lzma2 -mmt=n -si /path/to/Backup/backup.tar.7z

Упаковывает методом lzma2 с поддержкой multithread. Степень компрессии для смеси текстовых + pdf файлов  - около 2,5

Ядра процессора загружает примерно равномерно на 90-100%. Пробовал -mmt=4 -  загружает все ядра в среднем на 80% (4 ядра из 6). Без указания -m0=lzma2 сжимает лучше. Где-то прочитал рекомендации, что метод PPMd лучше сжимает текстовые файлы - неправда, я получил архив раза в 2 больше, причем PPMd сжимает только одним ядром.

Обязательно обратите внимание на параметр -si - ввод tar потока в архив

Еще одна особенность 7z - он не может удалять существующие архивы. Только добавляет в них (a) или обновляет (u). В случае tar добавляет еще 1 tar в архив.

Ключей для предварительного удаления файлов в параметрах нет, поэтому нужно предварительно давать команду на удаление существующих файлов.

2. Многопотоковые архиваторы. Очень хорошо описаны здесь, привожу цитату полностью 

Well, the keyword was parallel. After looking for all compression tools that were also parallel I found the following:

PXZ - Parallel XZ is a compression utility that takes advantage of running LZMA compression of different parts of an input file on multiple cores and processors simultaneously. Its primary goal is to utilize all resources to speed up compression time with minimal possible influence on compression ratio.

sudo apt-get install pxz

PLZIP - Lzip is a lossless data compressor based on the LZMA algorithm, with very safe integrity checking and a user interface similar to the one of gzip or bzip2. Lzip decompresses almost as fast as gzip and compresses better than bzip2, which makes it well suited for software distribution and data archiving.

Plzip is a massively parallel (multi-threaded) version of lzip using the lzip file format; the files produced by plzip are fully compatible with lzip.

Plzip is intended for faster compression/decompression of big files on multiprocessor machines, which makes it specially well suited for distribution of big software files and large scale data archiving. On files big enough, plzip can use hundreds of processors.

sudo apt-get install plzip

PIGZ - pigz, which stands for Parallel Implementation of GZip, is a fully functional replacement for gzip that takes advantage of multiple processors and multiple cores when compressing data.

sudo apt-get install pigz

PBZIP2 - pbzip2 is a parallel implementation of the bzip2 block-sorting file compressor that uses pthreads and achieves near-linear speedup on SMP machines. The output of this version is fully compatible with bzip2 v1.0.2 (ie: anything compressed with pbzip2 can be decompressed with bzip2).

sudo apt-get install pbzip2

LRZIP - A multithreaded compression program that can achieve very high compression ratios and speed when used with large files. It uses the combined compression algorithms of zpaq and lzma for maximum compression, lzo for maximum speed, and the long range redundancy reduction of rzip. It is designed to scale with increases with RAM size, improving compression further. A choice of either size or speed optimizations allows for either better compression than even lzma can provide, or better speed than gzip, but with bzip2 sized compression levels.

sudo apt-get install lrzip

A small Compression Benchmark (Using the test Oli created):

ORIGINAL FILE SIZE - 100 MB
PBZIP2 - 101 MB (1% Bigger)
PXZ - 101 MB (1% Bigger)
PLZIP - 102 MB (1% Bigger)
LRZIP - 101 MB (1% Bigger)
PIGZ - 101 MB (1% Bigger)

A small Compression Benchmark (Using a Text file):

ORIGINAL FILE SIZE - 70 KB Text File
PBZIP2 - 16.1 KB (23%)
PXZ - 15.4 KB (22%)
PLZIP - 15.5 KB (22.1%)
LRZIP - 15.3 KB (21.8%)

PIGZ - 17.4 KB (24.8%)

Начнем по порядку.

1) pxz

1
tar -c /path/to/files | pxz -{1-9}  > /path/to/Backup/backup.tar.xz

Цифра в скобках указывает на степень сжатия. Количество ядер процессора, выделяемых архиватору, указать нельзя, использует все. Сжимает лучше всех при степени сжатия -9, но медленно. Лучше больше -7 не ставить, тогда жмет довольно быстро (около 40с), но хуже 7z. Тестовую папку сжал со степенью сжатия -6 с 408 до 177 МБ (2,2)

Недостатки: При степенях сжатия 7-9 жрет память безбожно! Грузит процессор по полной. Если использовать однопоточный xz - очень долго жмет.

Достоинства - хорошая степень сжатия и совместимость с Bandizip.

2) plzip

tar -c /path/to/files | plzip -n4 - > /path/to/Backup/backup.tar.lzip

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

Пришлось отказаться из-за несовместимости с Windows архиваторами

3) pigz - у него степень сжатия как у gzip

1
tar -c /path/to/files | pigz -{1-9} -p4 > /path/to/Backup/backup.tar.gz

Очень быстр, степень сжатия около 1,3, можно выбирать количество процессов.

Более -9 не рекомендую, т.к. при -11 время повышается раз в 10 или более, а степень сжатия увеличивается всего на несколько процентов.

4) pbzip2

1
tar -c /path/to/files | pbzip2 -f -p4 > /path/to/Backup/backup.tar.bz

Достоинства - очень быстр. Использует алгоритм bzip2, поэтому открыть его можно будет практически на любой машине. Можно указать количество ядер (параметр -p), максимальное количество используемой памяти. (я для примера привел параметр -f для перезаписи выходного файла, если он уже существует)

Недостатки: малая степень сжатия, нельзя указать степень сжатия.  Степень сжатия - около 1,4. Время - около 20с

5) lrzip

Достоинства: Очень быстрый и очень хорошо сжимает. Можно выбирать степень компрессии, методы компрессии (gz, bzip, lzma)

Недостатки: несовместимость с Windows

Для него есть утилита lrztar, которая сначала делате файл tar в текущей директории и потом пакует его lrzip. Очень удобно

1
lrztar -p4 -f -o/path/to/file/backup.tar.lz /path/to/directory

Компрессия 3,9, но времени занимает много - около 70 секунд. ядра использует как-то по-очереди, наверное поэтому и долго.

6) lbzip2

Практически то же самое, что и pbzip2. Команда немного отличается, выбор количества ядер параметром -n4

Что в итоге

Выбирал между 7z и pxz. В итоге решил остановиться на pxz со степенью сжатия -6 (default) - при таком параметре и памяти не много потребляет, и сжимает гораздо лучше и быстрее, чем 7z со степенью сжатия 5 (normal). И не надо предварительно удалять старые файлы - они автоматически перезаписываются.

Для запаковки файлов с картинками использую tar без сжатия.

Возможности tar

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

Подробное описание всех ключей и параметров tar можно найти здесь.

Инкрементная копия может быть выполнена командой tar с опцией --newer (-N):

Например,
#tar --create --newer '8 Sep 1995' --file /dev/ftape /usr/src --verbose

К сожалению, tar не может обнаружить изменение Inode информации файла, например, изменение прав доступа или переименование файла. Проблема решается путем использования команды find и сравнения текущего состояния файловой системы со списками файлов, которые резервировались раньше. Скрипты и программы для автоматизации такого процесса можно найти на ftp-серверах, посвященных Linux.

Поэтому, для добавления в архив только измененных копий использую скрипт backup_last15.sh:

1
2
3
#!/bin/bash
#запаковка новых файлов за последние 15 дней<br>find /home/server/Doc_files/ -type f -mtime -15  > df_new_files.txt<br>find /home/server/AllUsers/ -type f -mtime -15  > new_files.txt<br>tar caf DF_last15.tar.xz -T df_new_files.txt<br>tar caf AU_last15.tar.xz -T new_files.txt<br><br>

Данный скрипт сначала находит все файлы в указанной папке, которые моложе 15 дней и пишет их список в текстовый файл. Потом сжимает эти файлы tar, метод компрессии выбирается автоматически по расширению файла архива (в данном примере - xz)

    Опубликовано

    Menu