# Практическая работа. Система резервного копирования *Timeshift*.
###### tags: `лабы по Debian 11`
### Цель работы
* научиться выполнять backup ФС с помощью утилиты timeshift
### Немного теории
#### Timeshift - программа для автоматического периодического создания копий системы (снимков/snapshots).
Timeshift предназначен прежде всего для создания снимков системных файлов и настроек. Пользовательские данные по умолчанию не архивируются поэтому в случае сбоя системы, восстанавливаются системные файлы, а данные пользователей остаются в актуальном состоянии (конечно, если они не были повреждены).
Резервные копии не могут быть восстановлены на уровне отдельных файлов, восстановление всегда происходит в полном объеме настроек Timeshift.
Timeshift поддерживает 2 алгоритма резервного копирования - RSYNC и BTRFS.
#### Особенности режима RSYNC:
> `timeshift --create --rsync` или `timeshift --create`, т.к. дефолтно стоит режим RSYNC.
* снимки создаются путём копирования системных файлов при помощи rsync и создания жёстких ссылок на неизмененные файлы из предыдущего снимка;
* все файлы копируются при создании первого снимка. Последующие снимки являются инкрементальными. Неизменные файлы будут связаны с предыдущим снимком, если он доступен;
* создание первого снимка может занять до 10 минут;
* системный раздел может быть отформатирован в любой файловой системе. Резервный раздел может быть отформатирован в любой файловой системе Linux, поддерживающей жесткие ссылки. Сохранение снимков на несистемный или внешний диск позволяет восстановить систему, даже если системный диск повреждён;
* можно задать исключения для файлов и каталогов для экономии дискового пространства;
* систему необходимо перезагрузить после восстановления снимка.
#### Особенности режима BTRFS:
> `timeshift --create --btrfs`
* снимки создаются с использованием встроенных средств файловой системы BTRFS;
* снимки создаются и восстанавливаются мгновенно (создание снимков — это атомарная транзакция на уровне файловой системы);
* снимки восстанавливаются путём замены системных подразделов. Поскольку файлы никогда не копируются, не удаляются и не перезаписываются, риск потери данных отсутствует. Существующая система сохраняется как новый снимок после восстановления;
* снимки сохраняются на том же диске, с которого они созданы (системном диске). Хранение на других дисках не поддерживается. Если системный диск выйдет из строя, снимки, хранящиеся на нём, будут потеряны вместе с системой;
* нет возможности исключать файлы и каталоги;
* размер снимков BTRFS изначально равен нулю. При изменении системных файлов, данные записываются в новые блоки данных, которые занимают дисковое пространство (копирование при записи). Файлы в снимке продолжают указывать на исходные блоки данных;
* ОС должна быть установлена на раздел BTRFS с разбивкой на подразделы @ и @home. Другие виды разделов не поддерживаются;
* снимки можно восстановить без немедленной перезагрузки запущенной системы.
#### Функции программы / синтаксис
```
timeshift --create [options] # создать снимок
timeshift --restore [options] # восстановить систему
timeshift --delete [options] # удалить снимок
timeshift --list [options] # вывести список снимков
```
```
Создание снимков:
--create - создать снимок
--commets "string" - добавить комментарий к создаваемому снимку
--tags {O,B,H,D,W,M} - указать уровень снимка
O - дефолтное значение
B - при загрузке системы
H - ежечасно
D - ежедневно
W - еженедельно
M - ежемесячно
```
```
Восстановление:
--restore - восстановить систему со снимка
--clone - клонировать текущую систему
--snapshot "name" - восстановить систему с указанного снимка
--grub "device" - установить загрузчик GRUB2 на выбранное устройство
--skip-grub - пропустить установку GRUB2
```
```
Удаление:
--delete - удалить снимок
--delete-all - удалить все снимки
```
---
## Резервирование файловой системы с помощью timeshift.
#### 1. Устанавливаем утилиту timeshift
`apt install timeshift`

> Перед установкой следует обновить репозитории пакетного менеджера последовательным выполнением команд `sudo apt update` и `sudo apt upgrade`.
#### 2. Инициализируем создание снапшота файловой системы, расположенной на /dev/sda1
`timeshift --create --comments "First Backup" --tags D`

#### 3. Запускаем режим восстановления для отката системы до сделанного снапшота.
`timeshift --restore`

#### 4. Выбираем единственную запись снапшота.
`Enter snapshot number (a=Abort, p=Previous, n=Next): 0`

#### 5. Переустанавливаем загрузчик на дефолтный раздел /dev/sda и ожидаем окончания работы программы.
`Re-install GRUB2 bootloader? (reccomended) (y/n): y`



---
## Создание бэкапа c помощью timeshift и хранение на сетевом диске с помощью NFS.
### I) Установка и настройка NFS на сервере.
#### 1. Устанавливаем пакеты nfs-common и nfs-kernel-server.
`apt install nfs-kernel-server nfs-common -y`

#### 2. Запускаем службу nfs-server и включаем её в автозагрузку.
`systemctl start nfs-server`
`systemctl enable nfs-server`

#### 3. Создаем каталог /srv/nfs/share/.
`mkdir -p /srv/nfs/share/`

#### 4. Открываем файл /etc/exports и дописываем строчку.
`nano /etc/exports`
`/srv/nfs/share/ 192.168.65.0/24(rw,no_root_squash)`

#### 5. Перезапускаем службу nfs-server.
`systemctl restart nfs-server`

---
### II) Установка и настройка NFS на клиенте.
#### 1. Устанавливаем пакет nfs-common.
`apt install nfs-common`

#### 2. Создаем каталог /mnt/nfs/share/.
`mkdir -p /srv/nfs/share/`

#### 3. Открываем файл `/etc/fstab` для автомонтирования раздела при загрузке системы.
`nano /etc/fstab`
`192.168.65.143:/srv/nfs/share/ /mnt/nfs/share/ nfs rw 0 1`

#### 4. Монтируем раздел к основной файловой системе.
`mount -a`

---
### III) Создание бэкапа системы клиента и копирование бэкапа на сетевой диск.
#### 1. Установка утилиты timeshift.
`apt install timeshift -y`

#### 2. Создание снимка с помощью timeshift.
`timeshift --create --rsync --comments "New Backup" --tags D`

#### 3. Копирование бэкапа на сетевой диск.
`cp -av /timeshift/ /mnt/nfs/share/`

#### 4. Удаление бэкапа для проверки работоспособности хранения снимка на сетевом диске.
`rm -rf /timeshift/`

---
### IV) Копирование снимка с сервера на клиент и восстановление системы с помощью timeshift.
#### 1. Копирование снимка с сетевого диска.
`cp -av /mnt/nfs/share/ /`

#### 2. Восстановление системы с помощью timeshift.
`timeshift --restore`



Вывод: в двнной практической работе в научились делать резервные копии файловых систем и реализовывать хранение на удаленном хранилище.