# Практическая работа. Резервирование файловых систем.
**Цель работы**
* Научиться делать резервные копии файловых систем.
## I. Резервирование каталога с помощью создания LVM-снапшота
##### 1.1 Устанавливаем соответствующий пакет утилит для работы с LVM.
`apt install lvm2`

> Перед установкой следует обновить репозитории пакетного менеджера последовательным выполнением команд `apt update` и `apt upgrade`.
##### 1.2 Выделяем дополнительный раздел для хранения копии - sdb на 5 ГиБ
`fdisk -l`

> Команда `fdisk` с опцией `-l` выводит таблицу разделов устройств, указанных в файле `/proc/partitions`.
##### 1.3 Эмулируем разные разделы диска делением исходного на две части.
`cfdisk /dev/sdb`

> Команда `cfdisk` позволяет "нарезать" дополнительные разделы на диске.
##### 1.4 Отмечаем физические разделы для создания на них LVM-томов.
`pvcreate /dev/sdb1 /dev/sdb2`


> Команда `pvcreate` позволяет "отметить" том как физический диск/раздел, который может быть включенным в Volume Group.
##### 1.5 Проверяем результат создания физических томов.
`pvdisplay`

> Команда `pvdisplay` выводит подробную информацию о физических томах.
##### 1.6 Объединяем тома в группу томов.
`vgcreate snap_test /dev/sdb{1,2}`
> Команда `vgcreate` создает группу томов из существующих физических.

##### 1.7 Проверяем результат.
`vgdisplay`

> Команда `vgdisplay` выводит информацию о физических объединениях томов в виде групп томов (VG).
##### 1.8 Создаем два логических тома.
`lvcreate -L 500 -n lvol0 snap_test`
`lvcreate -L 1G -n lvol1 snap_test`

> Команда `lvcreate` создает логический том определенного размера.
##### 1.9 Проверяем результат.
`lvdisplay`

> Команда `lvdisplay` выводит информацию о логических томах (LV).
##### 1.10 Создаем файловую систему на базе логического тома.
`mkfs.ext4 /dev/snap_test/lvol0`

> Команда `mkfs.ext4` определяет тип файловой системы, которая будет использована на логическом томе.
##### 1.11 Создаем директорию в исходной ФС и монтируем к ней получившийся логический том.
`mkdir -p /mnt/volume1`
`mount /dev/snap_test/lvol0 /mnt/volume1`

> Команда `mkdir` создает директорию '/alku', а команда `mount` монтирует логический том к разделу на основном диске.
##### 1.12 Копируем для проверки директорию /usr/bin в логический раздел.
`cp -av /usr/bin/* /mnt/volume1/`

> Команда `cp` с опциями `-av` копирует все файлы и каталоги с сохранением структуры исходных файлов и выводит в консоль имена всех файлов.
##### 1.13 Проверяем размер копируемой директории.
`du -s /usr/bin/`

> Команда `du` с опцией `-s` выводит информацию об объеме дискового пространства, занятого файлами и директориями.
##### 1.14 Создаем снимок логического тома, который содержит /usr/bin исходной ФС.
`lvcreate -s -L 20M -n vol_snap_test /dev/snap_test/lvol0`

> Команда `lvcreate` с опциями `-s -L 20M -n vol_snap_test` создает логический том указанного размера и на основе группы томов. Полный синтаксис команды выглядит следующим образом `lvcreate [опции] <имя группы томов>`.
Помимо размера тома можно дополнительно указать и другие параметры:
-L - размер создаваемого тома (дефолтно, в байтах, но можно указать единицу измерения - k,K,m,M,g,G,t,T,p,P)
-n - имя для нового логического тома (дефолтно, lvol#, где # - номер LV)
-s - создать снапшот для использования логического раздела в качестве бэкапа
##### 1.15 Очищаем директорию, снимок которой был сделан.
`rm -rf /mnt/volume1/*`

> Команда `rm` с опциями `-rf` рекурсивно удалит без подтверждения и кода ошибочного завершения все файлы в директории.
##### 1.16 Используем объединение снимка с логическим томом для восстановления данных.
`lvconvert --merge /dev/snap/vol_snap_test`
> Команда `lvconvert` с опцией `--merge` объединяет моментальный снимок с исходным томом. Если исходный том и том моментального снимка не открыты, слияние начнется немедленно. В противном случае слияние начнется при первой активации источника или моментального снимка.

##### 1.17 Слияние снимка произойдет после повторной активации логического тома в исходной ФС и появлении изменений между ним и его снимком, поэтому нужно "перезагрузить" раздел, отмаунтив его и деактивировав.
`umount /mnt/volume1/`

`lvchange -a n /dev/snap_test/lvol0`
`lvchange -a y /dev/snap_test/lvol0`

> Команда `umount` снимает точку монтирования с директории 'alku', тем самым разделив файловую систему основного диска от логического тома.
Команда `lvchange` с опциями `-a n` меняет атрибуты логического тома, а именно отключает/включает доступность логического тома для использования.
##### 1.18 Монтируем логический том обратно к ФС и проверяем, восстановился ли раздел до своего исходного состояния, с которого делался снимок.
`mount /dev/snap_test/lvpl0 /mnt/volume1/`
`du -s /mnt/volume1`

##### 1.19 "Открепляем" и деактивируем том из-за окончания работы с ним.
`umount /mnt/volume1/`
`lvchange -a n /dev/snap_test/lvol0`

## II. Резервирование файловой системы с помощью rsync.
##### 2.1 Создаем полнотелую копию ФС, исключая файлы, генерируемые самой ОС и каталог назначения, чтобы избежать бесконечного зацикливания. Директория назначения резервной копии может быть любой.
`rsync -aAXv / --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/media/*","/lost+found/"} /tmp/backup1`

> Команда `rsync` копирует только различия между исходными файлами и существующими файлами в пункте назначения. Основные ключи, используемые rsync:
-a - выполнение копирования, используя рекурсию и сохраняя все файлы, кроме "жестких" ссылок, т.е. связанные файлы будут передаваться как отдельные.
-A - rsync обновит списки управления доступом назначения так, чтобы они совпадали с исходными списками управления доступом.
Для правильной работы этой опции исходная и конечная системы должны иметь совместимые записи ACL
-X - rsync обновит удаленные расширенные атрибуты так, чтобы они совпадали с локальными. Для систем, поддерживающих пространства имен с расширенными атрибутами, копирование, выполняемое
суперпользователем, копирует все пространства имен, кроме system.*
Обычный пользователь копирует только пространство имен user.*
-v - rsync увеличивает объем информации, которую демон регистрирует на этапе запуска.
--exclude - исключает из копирования файлы или каталоги.
##### 2.2 Восстановление резервной копии подразумевает копирование резервного архива в исходную ФС.
`rsync -aAXv /tmp/backup1 --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/media/*","/lost+found/"} /`
