<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://8j0rn.dagbok.ru/history/DeepSeek/rsync.backup?feed=atom</id>
	<title>DeepSeek/rsync.backup - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://8j0rn.dagbok.ru/history/DeepSeek/rsync.backup?feed=atom"/>
	<link rel="alternate" type="text/html" href="https://8j0rn.dagbok.ru/history/DeepSeek/rsync.backup"/>
	<updated>2026-10-26T19:45:19Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://8j0rn.dagbok.ru/index.php?title=DeepSeek/rsync.backup&amp;diff=318&amp;oldid=prev</id>
		<title>8j0rn: Новая страница: «== 1. как сделать лучше если надо папку с linux сервера бэкапить на другой компьютер и хранить 5 последних бэкапов, посоветуй вариант==  Для надежного бэкапа папки с Linux-сервера на другой компьютер с хранением 5 последних версий лучше всего использовать **Rsync в...»</title>
		<link rel="alternate" type="text/html" href="https://8j0rn.dagbok.ru/index.php?title=DeepSeek/rsync.backup&amp;diff=318&amp;oldid=prev"/>
		<updated>2025-08-12T21:26:34Z</updated>

		<summary type="html">&lt;p&gt;Новая страница: «== 1. как сделать лучше если надо папку с linux сервера бэкапить на другой компьютер и хранить 5 последних бэкапов, посоветуй вариант==  Для надежного бэкапа папки с Linux-сервера на другой компьютер с хранением 5 последних версий лучше всего использовать **Rsync в...»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== 1. как сделать лучше если надо папку с linux сервера бэкапить на другой компьютер и хранить 5 последних бэкапов, посоветуй вариант==&lt;br /&gt;
&lt;br /&gt;
Для надежного бэкапа папки с Linux-сервера на другой компьютер с хранением 5 последних версий лучше всего использовать **Rsync в связке с `--link-dest`** или специализированные инструменты вроде **BorgBackup/Rsnapshot**. Вот оптимальные решения:&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
### **1. Вариант 1: Rsync + `--link-dest` (просто и эффективно)**  &lt;br /&gt;
**Как работает:**  &lt;br /&gt;
- Каждый бэкап — это полная копия, но неизмененные файлы заменяются жесткими ссылками (экономия места).  &lt;br /&gt;
- Хранится только 5 последних снимков.  &lt;br /&gt;
&lt;br /&gt;
#### **Шаги:**  &lt;br /&gt;
**① Настройка SSH-доступа между серверами**  &lt;br /&gt;
На **целевом компьютере** (куда бэкапируем):  &lt;br /&gt;
```bash&lt;br /&gt;
ssh-keygen -t ed25519  &lt;br /&gt;
ssh-copy-id user@backup-server  # Копируем ключ для авторизации без пароля&lt;br /&gt;
```  &lt;br /&gt;
&lt;br /&gt;
**② Скрипт для бэкапа (`/usr/local/bin/backup.sh`)**  &lt;br /&gt;
```bash&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
SOURCE_DIR=&amp;quot;/path/to/source&amp;quot;          # Папка для бэкапа&lt;br /&gt;
BACKUP_DIR=&amp;quot;/backups&amp;quot;                # Папка на удаленном компьютере&lt;br /&gt;
REMOTE=&amp;quot;user@backup-server&amp;quot;          # Адрес целевого ПК&lt;br /&gt;
MAX_BACKUPS=5                        # Сколько версий хранить&lt;br /&gt;
&lt;br /&gt;
# Создаем новую папку с датой&lt;br /&gt;
DATE=$(date +%Y-%m-%d_%H-%M-%S)&lt;br /&gt;
NEW_BACKUP=&amp;quot;$BACKUP_DIR/$DATE&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Последний бэкап для --link-dest&lt;br /&gt;
LATEST=$(ssh $REMOTE &amp;quot;ls -td $BACKUP_DIR/*/ | head -1&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Rsync с инкрементным копированием&lt;br /&gt;
rsync -az --delete --link-dest=&amp;quot;$LATEST&amp;quot; \&lt;br /&gt;
    &amp;quot;$SOURCE_DIR/&amp;quot; &amp;quot;$REMOTE:$NEW_BACKUP/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Удаляем старые бэкапы (оставляем 5 последних)&lt;br /&gt;
ssh $REMOTE &amp;quot;ls -td $BACKUP_DIR/*/ | tail -n +$(($MAX_BACKUPS + 1)) | xargs rm -rf&amp;quot;&lt;br /&gt;
```  &lt;br /&gt;
&lt;br /&gt;
**③ Добавляем скрипт в cron (ежедневный бэкап)**  &lt;br /&gt;
```bash&lt;br /&gt;
chmod +x /usr/local/bin/backup.sh&lt;br /&gt;
crontab -e&lt;br /&gt;
```  &lt;br /&gt;
Добавить строку:  &lt;br /&gt;
```bash&lt;br /&gt;
0 3 * * * /usr/local/bin/backup.sh  # Каждый день в 3:00&lt;br /&gt;
```  &lt;br /&gt;
&lt;br /&gt;
**Плюсы:**  &lt;br /&gt;
- Минимум зависимостей (только `rsync` и `ssh`).  &lt;br /&gt;
- Жесткие ссылки экономят место.  &lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
### **2. Вариант 2: Rsnapshot (готовое решение)**  &lt;br /&gt;
**Установка:**  &lt;br /&gt;
```bash&lt;br /&gt;
sudo apt install rsnapshot  # Debian/Ubuntu&lt;br /&gt;
```  &lt;br /&gt;
&lt;br /&gt;
**Настройка (`/etc/rsnapshot.conf`):**  &lt;br /&gt;
```ini&lt;br /&gt;
config_version   1.2&lt;br /&gt;
snapshot_root   /backups/&lt;br /&gt;
cmd_rsync       /usr/bin/rsync&lt;br /&gt;
retain  daily   5           # Храним 5 последних бэкапов&lt;br /&gt;
backup  /path/to/source/    user@backup-server::backup/&lt;br /&gt;
```  &lt;br /&gt;
&lt;br /&gt;
**Запуск:**  &lt;br /&gt;
```bash&lt;br /&gt;
rsnapshot daily  # Тест&lt;br /&gt;
crontab -e&lt;br /&gt;
```  &lt;br /&gt;
Добавить:  &lt;br /&gt;
```bash&lt;br /&gt;
0 3 * * * /usr/bin/rsnapshot daily&lt;br /&gt;
```  &lt;br /&gt;
&lt;br /&gt;
**Плюсы:**  &lt;br /&gt;
- Готовые настройки ротации бэкапов.  &lt;br /&gt;
- Поддержка SSH (`backup user@server:/path/ /backup/`).  &lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
### **3. Вариант 3: BorgBackup (с шифрованием и дедупликацией)**  &lt;br /&gt;
**Установка:**  &lt;br /&gt;
```bash&lt;br /&gt;
sudo apt install borgbackup  # Debian/Ubuntu&lt;br /&gt;
```  &lt;br /&gt;
&lt;br /&gt;
**Инициализация репозитория:**  &lt;br /&gt;
```bash&lt;br /&gt;
borg init --encryption=repokey user@backup-server:/backups/repo&lt;br /&gt;
```  &lt;br /&gt;
&lt;br /&gt;
**Скрипт для бэкапа:**  &lt;br /&gt;
```bash&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
SOURCE=&amp;quot;/path/to/source&amp;quot;&lt;br /&gt;
REPO=&amp;quot;user@backup-server:/backups/repo&amp;quot;&lt;br /&gt;
borg create --stats --progress &amp;quot;$REPO::$(date +%Y-%m-%d_%H-%M-%S)&amp;quot; &amp;quot;$SOURCE&amp;quot;&lt;br /&gt;
borg prune --keep-last 5 &amp;quot;$REPO&amp;quot;  # Оставляем 5 последних&lt;br /&gt;
```  &lt;br /&gt;
&lt;br /&gt;
**Плюсы:**  &lt;br /&gt;
- Шифрование данных.  &lt;br /&gt;
- Дедупликация (экономия места).  &lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
### **4. Вариант 4: Tar + SSH (если rsync недоступен)**  &lt;br /&gt;
**Скрипт:**  &lt;br /&gt;
```bash&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
SOURCE=&amp;quot;/path/to/source&amp;quot;&lt;br /&gt;
BACKUP=&amp;quot;user@backup-server:/backups/&amp;quot;&lt;br /&gt;
TAR_FILE=&amp;quot;backup_$(date +%Y-%m-%d).tar.gz&amp;quot;&lt;br /&gt;
&lt;br /&gt;
tar -czf - &amp;quot;$SOURCE&amp;quot; | ssh &amp;quot;$BACKUP&amp;quot; &amp;quot;cat &amp;gt; $TAR_FILE&amp;quot;&lt;br /&gt;
ssh &amp;quot;$BACKUP&amp;quot; &amp;quot;ls -t /backups/backup_* | tail -n +6 | xargs rm -f&amp;quot;  # Удаляем старые&lt;br /&gt;
```  &lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
### **Сравнение методов**  &lt;br /&gt;
| **Критерий**       | Rsync + `--link-dest` | Rsnapshot | BorgBackup | Tar + SSH |  &lt;br /&gt;
|--------------------|----------------------|-----------|------------|-----------|  &lt;br /&gt;
| Простота          | ★★★★                | ★★★★     | ★★         | ★★★★★    |  &lt;br /&gt;
| Экономия места    | ★★★★ (жесткие ссылки)| ★★★★     | ★★★★★ (дедупликация) | ★★       |  &lt;br /&gt;
| Шифрование       | Нет                  | Нет       | Да         | Нет       |  &lt;br /&gt;
| Скорость         | Быстро               | Быстро    | Средняя    | Медленно  |  &lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
### **Что выбрать?**  &lt;br /&gt;
- **Для простоты** → `Rsync + --link-dest` или `Rsnapshot`.  &lt;br /&gt;
- **Для безопасности** → `BorgBackup` (шифрование).  &lt;br /&gt;
- **Для минимализма** → `Tar + SSH`.  &lt;br /&gt;
&lt;br /&gt;
**Рекомендация:**  &lt;br /&gt;
```bash&lt;br /&gt;
# Оптимальный вариант (баланс простоты и функциональности)&lt;br /&gt;
sudo apt install rsnapshot&lt;br /&gt;
nano /etc/rsnapshot.conf  # Настраиваем пути&lt;br /&gt;
rsnapshot daily&lt;br /&gt;
```  &lt;br /&gt;
&lt;br /&gt;
Все методы поддерживают **автоматическую ротацию** (хранение только 5 бэкапов). Для мониторинга добавьте проверку логов:  &lt;br /&gt;
```bash&lt;br /&gt;
grep -i error /var/log/syslog  # Или journalctl -u cron&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
== 2. А можно еще добавить контроль свободного места?==&lt;br /&gt;
Отличное дополнение! Контроль свободного места перед бэкапом критически важен, чтобы избежать сбоев. Вот как добавить эту проверку в каждый из вариантов:&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
### **1. Для Rsync + `--link-dest` (вариант из первого решения)**&lt;br /&gt;
Дополним скрипт проверкой:&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
SOURCE_DIR=&amp;quot;/path/to/source&amp;quot;&lt;br /&gt;
BACKUP_DIR=&amp;quot;/backups&amp;quot;&lt;br /&gt;
REMOTE=&amp;quot;user@backup-server&amp;quot;&lt;br /&gt;
MAX_BACKUPS=5&lt;br /&gt;
MIN_SPACE_GB=10  # Минимум 10 ГБ свободного места&lt;br /&gt;
&lt;br /&gt;
# Проверка свободного места на удаленном сервере&lt;br /&gt;
FREE_SPACE=$(ssh $REMOTE &amp;quot;df -BG --output=avail $BACKUP_DIR | tail -1 | tr -d &amp;#039;G&amp;#039;&amp;quot;)&lt;br /&gt;
if [ &amp;quot;$FREE_SPACE&amp;quot; -lt &amp;quot;$MIN_SPACE_GB&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка: На сервере $REMOTE осталось только ${FREE_SPACE}GB. Требуется минимум ${MIN_SPACE_GB}GB.&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Остальная часть скрипта (rsync + ротация)&lt;br /&gt;
DATE=$(date +%Y-%m-%d_%H-%M-%S)&lt;br /&gt;
NEW_BACKUP=&amp;quot;$BACKUP_DIR/$DATE&amp;quot;&lt;br /&gt;
LATEST=$(ssh $REMOTE &amp;quot;ls -td $BACKUP_DIR/*/ | head -1&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
rsync -az --delete --link-dest=&amp;quot;$LATEST&amp;quot; &amp;quot;$SOURCE_DIR/&amp;quot; &amp;quot;$REMOTE:$NEW_BACKUP/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Удаляем старые бэкапы&lt;br /&gt;
ssh $REMOTE &amp;quot;ls -td $BACKUP_DIR/*/ | tail -n +$(($MAX_BACKUPS + 1)) | xargs rm -rf&amp;quot;&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
### **2. Для Rsnapshot**&lt;br /&gt;
Добавим проверку в `rsnapshot.conf` через `pre-exec`:&lt;br /&gt;
&lt;br /&gt;
```ini&lt;br /&gt;
# В /etc/rsnapshot.conf&lt;br /&gt;
config_version   1.2&lt;br /&gt;
snapshot_root   /backups/&lt;br /&gt;
cmd_rsync       /usr/bin/rsync&lt;br /&gt;
retain  daily   5&lt;br /&gt;
&lt;br /&gt;
# Проверка места перед выполнением&lt;br /&gt;
pre_exec    bash -c &amp;#039;if [ $(df -BG --output=avail /backups/ | tail -1 | tr -d &amp;quot;G&amp;quot;) -lt 10 ]; then exit 1; fi&amp;#039;&lt;br /&gt;
&lt;br /&gt;
backup  /path/to/source/    user@backup-server::backup/&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
### **3. Для BorgBackup**&lt;br /&gt;
Добавим проверку в скрипт:&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
SOURCE=&amp;quot;/path/to/source&amp;quot;&lt;br /&gt;
REPO=&amp;quot;user@backup-server:/backups/repo&amp;quot;&lt;br /&gt;
MIN_SPACE_GB=10&lt;br /&gt;
&lt;br /&gt;
# Проверка места&lt;br /&gt;
FREE_SPACE=$(ssh user@backup-server &amp;quot;df -BG --output=avail /backups | tail -1 | tr -d &amp;#039;G&amp;#039;&amp;quot;)&lt;br /&gt;
if [ &amp;quot;$FREE_SPACE&amp;quot; -lt &amp;quot;$MIN_SPACE_GB&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка: Недостаточно места на сервере. Свободно: ${FREE_SPACE}GB, требуется: ${MIN_SPACE_GB}GB.&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Создание бэкапа&lt;br /&gt;
borg create --stats --progress &amp;quot;$REPO::$(date +%Y-%m-%d_%H-%M-%S)&amp;quot; &amp;quot;$SOURCE&amp;quot;&lt;br /&gt;
borg prune --keep-last 5 &amp;quot;$REPO&amp;quot;&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
### **4. Для Tar + SSH**&lt;br /&gt;
Модифицируем скрипт:&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
SOURCE=&amp;quot;/path/to/source&amp;quot;&lt;br /&gt;
BACKUP=&amp;quot;user@backup-server:/backups/&amp;quot;&lt;br /&gt;
TAR_FILE=&amp;quot;backup_$(date +%Y-%m-%d).tar.gz&amp;quot;&lt;br /&gt;
MIN_SPACE_GB=5  # Минимум 5 ГБ&lt;br /&gt;
&lt;br /&gt;
# Проверка места&lt;br /&gt;
FREE_SPACE=$(ssh &amp;quot;$BACKUP&amp;quot; &amp;quot;df -BG --output=avail /backups | tail -1 | tr -d &amp;#039;G&amp;#039;&amp;quot;)&lt;br /&gt;
if [ &amp;quot;$FREE_SPACE&amp;quot; -lt &amp;quot;$MIN_SPACE_GB&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;Ошибка: Недостаточно места. Свободно: ${FREE_SPACE}GB, требуется: ${MIN_SPACE_GB}GB.&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Создание бэкапа&lt;br /&gt;
tar -czf - &amp;quot;$SOURCE&amp;quot; | ssh &amp;quot;$BACKUP&amp;quot; &amp;quot;cat &amp;gt; /backups/$TAR_FILE&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Удаление старых (оставляем 5 последних)&lt;br /&gt;
ssh &amp;quot;$BACKUP&amp;quot; &amp;quot;ls -t /backups/backup_* | tail -n +6 | xargs rm -f&amp;quot;&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
### **Дополнительные улучшения**&lt;br /&gt;
1. **Уведомления об ошибках** (если место кончилось):&lt;br /&gt;
   ```bash&lt;br /&gt;
   # Добавить в начало скрипта (после проверки места)&lt;br /&gt;
   if [ &amp;quot;$FREE_SPACE&amp;quot; -lt &amp;quot;$MIN_SPACE_GB&amp;quot; ]; then&lt;br /&gt;
       echo &amp;quot;Ошибка: Недостаточно места на сервере&amp;quot; | mail -s &amp;quot;Ошибка бэкапа&amp;quot; admin@example.com&lt;br /&gt;
       exit 1&lt;br /&gt;
   fi&lt;br /&gt;
   ```&lt;br /&gt;
   Требуется установленный `mailutils`.&lt;br /&gt;
&lt;br /&gt;
2. **Автоматическая очистка при нехватке места**:&lt;br /&gt;
   ```bash&lt;br /&gt;
   # Удалить самый старый бэкап, если места нет&lt;br /&gt;
   while [ &amp;quot;$FREE_SPACE&amp;quot; -lt &amp;quot;$MIN_SPACE_GB&amp;quot; ]; do&lt;br /&gt;
       OLDEST=$(ssh $REMOTE &amp;quot;ls -td $BACKUP_DIR/*/ | tail -1&amp;quot;)&lt;br /&gt;
       ssh $REMOTE &amp;quot;rm -rf $OLDEST&amp;quot;&lt;br /&gt;
       FREE_SPACE=$(ssh $REMOTE &amp;quot;df -BG --output=avail $BACKUP_DIR | tail -1 | tr -d &amp;#039;G&amp;#039;&amp;quot;)&lt;br /&gt;
   done&lt;br /&gt;
   ```&lt;br /&gt;
&lt;br /&gt;
3. **Проверка места перед каждым бэкапом** в cron:&lt;br /&gt;
   ```bash&lt;br /&gt;
   0 3 * * * /usr/local/bin/check_space.sh &amp;amp;&amp;amp; /usr/local/bin/backup.sh&lt;br /&gt;
   ```&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
### **Как проверить свободное место вручную**&lt;br /&gt;
На целевом сервере:&lt;br /&gt;
```bash&lt;br /&gt;
df -h /backups  # Общий вывод&lt;br /&gt;
df -BG --output=avail /backups | tail -1 | tr -d &amp;#039;G&amp;#039;  # Только число (в гигабайтах)&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
### **Итог**&lt;br /&gt;
Теперь ваши бэкапы будут:&lt;br /&gt;
1. Проверять свободное место перед запуском.&lt;br /&gt;
2. Прерываться с ошибкой (или очищать старые данные), если места недостаточно.&lt;br /&gt;
3. Гарантированно хранить только 5 последних версий.&lt;br /&gt;
&lt;br /&gt;
Для самых надежных сетапов рекомендуем **BorgBackup + проверку места** — это сочетание безопасности и контроля ресурсов.&lt;/div&gt;</summary>
		<author><name>8j0rn</name></author>
	</entry>
</feed>