====== Архивация ======
===== tar =====
Утилита для архивации файлов/каталогов.\\
Никогда не перемещает и не удаляет какие бы то ни было файлы, только архивные копии.\\
Права на файлы передаются создающему архив.
* **-c** - создание нового архива.
* **-r** - добавление в существующий.
* **-x** - извлечение из архива.
* **-v** - подробный вывод.
* **-f** - имя нового файла
* **-z** - перенаправить вывод в команду **gzip**, для сжатия.
* **--one-file-system** - исключает файлы из любой ФС кроме текущей, например псевдо-файловые системы.
* **--exclude=path** - исключает указанный путь из архивации.
* **- (дефис, после аргументов)** - выводит содержимое стандартным выводом.
**Архивирование** текущей директории. Указание точки вместо звездочки, добавит даже **скрытые файлы**.
tar -cvf myarhive.tar *
# Текущая директория за исключением указанных папок, бекап тек директории
tar -czvf backups/previous_version.tar.gz --exclude={log,backups} *
# или так
tar -czvf old_instance.tar.gz --exclude="*/log" --exclude="*/backups" *
# Просмотр содержимого архива
tar -tvf my_arhive.tar.gz
**Архивирование и сжатие** указанных файлов.
# Архивирование указанных файлов и папок из указанной директории
# добавит в архив только "folder1 folder2 file1" из папки "folder_store"
tar -czf my_arch.tar.gz -C folder_store folder1 folder2 file1
# По шаблону
tar -czvf myarhive.tar.gz /home/user/*.mp4
**Перенаправление потока.** Можно сразу отправить архив по сети, без промежуточного сохранения.
# tar czvf - ~/sourcedir/ | ssh user@host "cat > ~/myarhive.tar.gz"
**Архивация всей системы.** Исключая временные разделы и папку **/home/andy/**, включая **/var/** и **/usr/**.
# tar czvf - --one-file-system / /usr /var --exclude=/home/andy/ | ssh user@host "cat > ~/arh.tar.gz"
**Поиск и архивация.** Для поиска используем команду [[main:linux:общие_средства:поиск|find]].
# find /var/dir/ -iname "*.mp4" -exec tar -rvf arh.tar {} \;
**Разархивировать в указанное место**
# tar -xzvf name-arh.tar.gz -C /.../exist-folder
==== Разделение архивов на части ====
С помощью команды **split** можно разделять файлы (архивы) на части, не более указанного размера.\\
Аргумент **-b** позволяет указать размер.\\
**Разбиение** архива на части.
# split -b 1G myarhive.tar.gz "myarhive.tar.gz.part"
**Соединить** архив обратно.
# cat myarhive.tar.gz.part* > myarhive.tar.gz
===== Zip/Unzip =====
:!: Извлечение одного файла если он есть в архиве
(unzip -l ${archiveName}.zip | grep -q *-cyclonedx-distrib.json && unzip ${archiveName}.zip *-cyclonedx-distrib.json -d ../sboms/) || [ \\\$? -eq 1 ]
===== dd =====
Создание (побайтовых) образов разделов.\\
* **if** - исходный раздел.
* **of** - файл/расположение назначения.
* **bs** - указание кол-ва байтов, копирования за один раз.
**Создаем архив диска**
# dd if=/dev/sda of=~/sdadisk.img
**Восстановление из образа**
# dd if=~/sdadisk.img of=/dev/sda
**Форматирование раздела** метод с перезаписыванием (if=/dev/random - случайными символами)
# dd if=/dev/zero of=/dev/sda1
===== ddrescue =====
Как и **dd**, это утилита для побайтового копирования дисков/разделов, но в отличии от первой, достаточно успешно копирует данные с поврежденных дисков.\\
Копировать лучше с не примонтированного диска или в режиме **ro**. Запросто может добить диск (уничтожить данные), при допущении ошибок в работе с утилитой.\\
# ddrescue [options] infile outfile [mapfile=logfile]
* **-f** - перезапись диска **outfile**
* **-n** - пропускает попытки чтения самых трудных частей
* **-r n** - кол-во повторных попыток чтения поврежденных частей (особо не рекомендуется)
* **-i bytes** - откуда начать чтение **infile**
* **-v** - подробный вывод
**Восстановление всего диска**
# ddrescue -fn /dev/sdb /dev/sdc ~/disk.log
**Произошла ошибка** на байте 12350000, переподключили диск, ребутнули и продолжили
# ddrescue -fn -i 12350000 /dev/sdb /dev/sdc ~/disk.log