Задача типовая для небольшой инфраструктуры: Linux-сервер надо бэкапить на машину с Windows, причём так, чтобы каждый день появлялся полный на вид снимок, а место росло только на объём изменений. Такой инкрементальный бэкап rsync делает через --link-dest: неизменённые файлы в новом снимке становятся жёсткими ссылками на файлы предыдущего. Сложность начинается на приёмнике: Windows не хранит Unix-права, а NTFS и Linux по-разному обходятся с ссылками. Ниже — рабочая схема «Linux → Windows через WSL», где приёмником служит отдельный диск с EXT4, плюс то, что в исходной версии этой статьи было ошибкой или умолчанием: ограничения wsl --mount, судьба CentOS 6 и обязательная проверка восстановления.

Материал переписан 13 ноября 2026 года: конфигурация и команды сохранены, факты о EOL и о монтировании дисков проверены по первоисточникам.
TL;DR: что это и как проверить за десять минут
- Схема. Источник — Linux-сервер (например, CentOS), приёмник — Windows 11 с WSL2 и отдельным диском в EXT4. Копирование инициирует Windows (pull-модель).
- Инкрементность.
rsync -a --link-dest=<прошлый снимок>: изменившиеся файлы копируются, остальные — жёсткие ссылки. Каталог каждого дня выглядит полным. - Права и ссылки. Хранить снимки на EXT4: NTFS не хранит UID/GID, а без них восстановление системы теряет смысл.
- Монтирование. Диск подключается
wsl --mountс правами администратора; флешки и SD-карты не поддерживаются, диск загрузки Windows — тоже. - Проверка. Раз в месяц — восстановление файла и импорт дампа базы на тестовой машине; без этого бэкап считается непроверенным.
Быстрая проверка окружения (Windows-часть — в PowerShell, Linux-часть — в WSL):
wsl --status # WSL установлен и работает
Get-CimInstance Win32_DiskDrive | Select-Object DeviceID,Model,Size
rsync --version | head -2
lsblk -f # диск бэкапа виден и размечен
df -h /mnt/backup # точка монтирования существует
Ожидаемо: WSL отвечает версией, диск бэкапа виден отдельным устройством, /mnt/backup смонтирован. Если wsl --status отвечает ошибкой доступа — WSL не установлен, и это первое, что надо исправить.
Проблема, которую это решает
Бэкап «рядом с данными» не защищает от главного сценария: сервер потерян целиком — вместе с диском, на котором лежали копии. Второй сценарий — шифровальщик: если приёмник смонтирован на сервере постоянно, шифровальщик дойдёт и до копий. Отсюда два требования, которые и определяют архитектуру: копии должны быть на другой машине и инициатором должен быть приёмник — тогда у скомпрометированного сервера нет учётных данных к хранилищу.
Дальше начинается вторая проблема — совместимость. rsync сохраняет владельцев, права, символьные ссылки и время; Windows-файловая система этого не умеет. Копирование на общую папку SMB даёт потерю прав и нестабильность с жёсткими ссылками, а без ссылок инкрементальность превращается в «полная копия каждый день», и диск кончается за месяц. Поэтому в схеме ниже приёмник — не «папка на Windows», а Linux-диск, подключённый внутрь WSL: для rsync это обычная POSIX-файловая система, и --link-dest работает так же, как на сервере.
Третья проблема — тихая деградация. Бэкап, который «уже год работает», обычно не проверяли ни разу: снимки есть, а восстановить нечего. В схеме ниже проверка восстановления — не пожелание, а шаг регламента.
Полезно заранее посчитать арифметику хранения, иначе место кончится внезапно. Первый снимок занимает полный объём данных, каждый следующий — только изменения плюс накладные расходы на метаданные и новые inode. На сервере с 500 ГБ данных и 2 % дневных изменений полный снимок даст 500 ГБ, а каждый последующий — около 10 ГБ; тридцать снимков выйдут примерно в 800 ГБ вместо 15 ТБ при полном копировании. Если считать лень, есть надёжное правило: держать глубину хранения так, чтобы прогнозируемый рост за период хранения не превышал 60 % свободного места.
Что такое схема «rsync + —link-dest на Windows»
Три части: источник, транспорт и приёмник. Источник — Linux-сервер с rsync и SSH. Транспорт — SSH, по которому приёмник забирает данные. Приёмник — Windows-машина, внутри которой работает WSL с отдельным диском; на этом диске лежат каталоги-снимки и вспомогательные данные (дампы баз, архивы конфигов).
flowchart LR
SRC["Linux-сервер: rsync + SSH"] --> NET["SSH-туннель"]
NET --> WSL["WSL2 на Windows: rsync"]
WSL --> SNAP[("Диск бэкапа: снимки по датам")]
SNAP --> LAST["симлинк last"]
WSL --> DB[("Дампы MySQL")]
WSL --> CONF[("Архив конфигов")]
LAST --> SNAP| Часть | Что делает | Где живёт |
|---|---|---|
rsync на источнике |
отдаёт данные по SSH-протоколу | Linux-сервер |
| SSH-ключ | вход без пароля с приёмника на источник | ~/.ssh внутри WSL |
| WSL2 (Ubuntu) | даёт POSIX-среду на Windows | Windows 11 |
| Диск бэкапа | хранит снимки; EXT4 — если нужны права и ссылки | физический диск или VHDX |
Каталог backup.RSYNC/<дата> |
снимок одного дня, выглядит полным | диск бэкапа |
Симлинк last |
указывает на последний снимок для --link-dest |
рядом со снимками |
| Дампы баз | результат mysqldump по SSH |
<диск>/backup/mysql |
Ключевая деталь — жёсткие ссылки. rsync сравнивает файл с тем, что лежит в каталоге --link-dest, и если файл не изменился (по размеру и времени, а с -c — по контрольной сумме), создаёт жёсткую ссылку вместо копии. Файл существует в двух каталогах под одним inode, место занимает один раз. Удаление старого снимка освобождает только те блоки, на которые больше нет ссылок.
Возможности
Снимки и экономия места
| Что | На какой вопрос отвечает |
|---|---|
--link-dest |
«Можно ли видеть полный снимок каждого дня, не занимая место под каждый?» |
--delete |
«Что будет с файлами, удалёнными на сервере?» — исчезнут в новом снимке, но останутся в старых |
| Ротация удалением каталогов | «Как освободить место?» — удалить старый снимок целиком |
--dry-run (-n) |
«Что изменится, если я запущу это сейчас?» |
Передача и доступ
| Что | На какой вопрос отвечает |
|---|---|
| SSH-ключ без пароля | «Как ходить на сервер из скрипта по расписанию?» |
| Pull-модель | «Кто инициирует копирование?» — приёмник, у сервера нет доступа к копиям |
--exclude-from |
«Как не тащить /proc, /dev, кэши и мусор?» |
--rsync-path |
«Что делать, если на источнике старый rsync?» |
Данные, кроме файлов
| Что | На какой вопрос отвечает |
|---|---|
mysqldump --single-transaction |
«Как получить консистентный дамп без остановки базы?» |
| Сохранение предыдущих дампов | «Где взять базу на позавчера?» |
| Архив конфигов | «Как быстро поднять сервис с теми же настройками?» |
| Журнал выполнения | «Как понять, что ночной бэкап прошёл?» |
Как это устроено внутри
Один запуск — это последовательность из шести шагов, и каждый может сломать весь бэкап, если его пропустить.
flowchart TD
A["Старт скрипта"] --> B{"точка монтирования есть?"}
B -- нет --> X["выход с ошибкой и уведомление"]
B -- да --> C{"симлинк last есть?"}
C -- нет --> D["полный снимок без link-dest"]
C -- да --> E["rsync с --link-dest"]
D --> F["обновить last на новый снимок"]
E --> F
F --> G["дампы баз и архив конфигов"]
G --> H["журнал и уведомление"]
H --> I["проверка восстановления по регламенту"]- Проверка точки монтирования. Скрипт убеждается, что
/mnt/backupсуществует и это именно диск бэкапа, а не пустой каталог на системном разделе. Пропуск этой проверки — классическая причина «бэкап писался в/, диск забит, сервер встал». - Подготовка каталогов. Создаются
backup.RSYNC,backup/mysql,backup/mysql.old, если их ещё нет. - Первый запуск. Если симлинка
lastнет, копирование идёт без--link-dest: первый снимок всегда полный. Это надо обрабатывать явно, иначе--link-destна несуществующий путь даст ошибку. - Основное копирование.
rsync -aR --delete --link-dest=... --exclude-from=... -e ssh host:/ "$CURRENT". Ключ-Rсохраняет структуру путей от корня, поэтому в снимке появляетсяvar/www/..., а не «всё в одну папку». - Обновление
last. Старый симлинк удаляется, новый указывает на свежий снимок. Только после успешногоrsync— иначе следующий запуск будет ссылаться на битый каталог. - Данные и отчёт. Дампы баз, архив конфигов, запись в журнал и уведомление. Отчёт обязателен: молчащий бэкап неотличим от сломанного.
Минимальная рабочая основа скрипта выглядит так (сокращённо, без ветки дампов):
#!/bin/bash
set -euo pipefail # любая ошибка останавливает скрипт
SRC="root@server.example.org"
MOUNT="/mnt/backup"
SNAP="$MOUNT/backup.RSYNC"
TODAY="$SNAP/$(date +%Y-%m-%d)"
LAST="$SNAP/last"
mountpoint -q "$MOUNT" || { echo "диск бэкапа не смонтирован"; exit 1; }
mkdir -p "$SNAP"
if [ -L "$LAST" ]; then
rsync -aR --delete --numeric-ids --link-dest="$LAST" \
--exclude-from=/etc/backup-exclude.txt -e ssh "$SRC:/" "$TODAY/"
else
rsync -aR --delete --numeric-ids \
--exclude-from=/etc/backup-exclude.txt -e ssh "$SRC:/" "$TODAY/"
fi
ln -sfn "$TODAY" "$LAST"
echo "ok: $(date -Is) $(du -sh "$TODAY" | cut -f1)" >> /var/log/backup.log
Файл исключений — обязательная часть, а не «настройка по вкусу»:
/proc/*
/sys/*
/dev/*
/run/*
/mnt/*
/media/*
/tmp/*
/var/cache/*
/var/lib/mysql/*
--numeric-ids здесь важен: без него rsync сопоставляет владельцев по именам, а на приёмнике таких пользователей может не быть — в снимке окажется чужой UID.
Замеры и цифры
Все числа сняты 13 ноября 2026 года и проверяемы: состояние дистрибутивов — через API endoflife.date, ограничения WSL — по документации Microsoft, поведение жёстких ссылок — локальным тестом на Windows 11 (сборка 10.0.26300).
| Показатель | Значение | Как проверено |
|---|---|---|
| CentOS 6: дата окончания поддержки | 30.11.2020 | endoflife.date/api/centos.json |
| CentOS 7: дата окончания поддержки | 30.06.2024 | там же |
wsl --mount: права |
требуются администраторские | документация Microsoft |
wsl --mount: неподдерживаемые устройства |
USB-флешки, кардридеры, SD, диск загрузки Windows | там же |
wsl --mount: охват |
подключается весь диск, даже если указан раздел | там же |
| Жёсткие ссылки на NTFS | работают: два имени, один файл, удаление одного сохраняет данные | fsutil hardlink list, локальный тест |
| restic (актуальная версия) | 0.19.1, 05.07.2026 | GitHub releases |
| borg (актуальная версия) | 1.4.5, 18.07.2026 | GitHub releases |

Границы замера: скорость копирования, коэффициент дедупликации и размер снимков здесь не измерялись — для этого нужен реальный сервер, диск и ночной прогон. Приведённые числа описывают состояние инструментов и ограничения платформы, а не производительность вашей схемы. Отдельно отмечу: на машине, где готовился материал, WSL не установлен (wsl --status отвечает «The file cannot be accessed by the system»), поэтому поведение wsl --mount проверено по документации, а не запуском.
Сильные стороны продукта
Речь о сильных сторонах самой схемы «rsync + —link-dest + WSL».
- Снимок каждого дня выглядит полным. Восстановить отдельный файл можно, просто открыв каталог нужной даты, — не нужен ни репозиторий, ни распаковка.
- Место растёт на объём изменений. Неизменённые файлы — жёсткие ссылки; на файловом сервере, где меняется 1–2 % данных в день, экономия на порядок.
- Права и владельцы сохраняются. На EXT4 внутри WSL
rsync -aработает как на Linux: UID/GID, режимы, симлинки. - Pull-модель уменьшает ущерб от компрометации. У сервера нет ключа к приёмнику: снести копии с него нельзя.
- Транспорт — обычный SSH. Не нужен ни агент, ни открытый порт на Windows, ни SMB-шара.
- Восстановление не требует специального софта. Любая Linux-машина с
rsyncзаберёт данные обратно; читать снимки можно и через\\wsl$из Проводника. - Схема расширяется. Дампы баз, архивы конфигов и журнал — те же несколько строк в скрипте, без отдельного продукта.
Установка
| Компонент | Требование | Комментарий |
|---|---|---|
| Windows | 10 версии 2004+ или Windows 11 | wsl --mount требует WSL2 |
| WSL | WSL2 с дистрибутивом Linux | wsl --install ставит Ubuntu |
| Диск бэкапа | отдельный физический диск или VHDX | не системный, не флешка |
rsync в WSL |
из репозитория дистрибутива | sudo apt install rsync |
rsync на источнике |
любая рабочая версия | CentOS 6 несёт старую — см. грабли |
| Права | администратор Windows | только для wsl --mount |
Порядок: поставить WSL, обновить его, установить пакеты, подготовить диск, настроить ключ.
wsl --install
wsl --update
wsl --status
sudo apt update && sudo apt install -y rsync openssh-client
ssh-keygen -t ed25519 -f ~/.ssh/id_backup -N ""
ssh-copy-id -i ~/.ssh/id_backup.pub root@server.example.org
ssh -i ~/.ssh/id_backup root@server.example.org hostname
Подготовка диска: снять букву в «Управлении дисками», найти номер устройства и подключить его внутрь WSL.
Get-CimInstance Win32_DiskDrive | Select-Object DeviceID,Model,Size
wsl --mount \\.\PHYSICALDRIVE2 --bare
sudo lsblk
sudo mkfs.ext4 /dev/sdc1 -L backup
sudo mkdir -p /mnt/backup
sudo mount -t ext4 /dev/sdc1 /mnt/backup
Настройка
Дальше — шесть решений, которые надо принять явно: где хранить снимки, что исключать, как часто запускать, сколько хранить, кто получает отчёт и как проверяется восстановление.
flowchart TD
S["Настройка схемы"] --> FS{"файловая система приёмника"}
FS -- EXT4 --> P["права и ссылки сохраняются"]
FS -- NTFS --> M["опция metadata в WSL"]
P --> EX["файл исключений"]
M --> EX
EX --> SCH["расписание и автомонтирование"]
SCH --> RET["глубина хранения снимков"]
RET --> CHK{"восстановление проверено?"}
CHK -- нет --> CHK
CHK -- да --> OK["схема принята в эксплуатацию"]| Параметр | Значение | Почему так |
|---|---|---|
| Файловая система приёмника | EXT4 (или NTFS с metadata) |
без POSIX-метаданных восстановление системы неполно |
--numeric-ids |
включён | не зависит от совпадения имён пользователей |
| Исключения | /proc, /sys, /dev, /run, кэши, каталог базы |
экономия и отсутствие «мусора» в снимке |
| Глубина хранения | 7–30 снимков | зависит от скорости роста изменений |
| Расписание | ежедневно ночью, Задача Windows или cron в WSL | человек не должен помнить о запуске |
| Проверка | раз в месяц восстановление файла + импорт дампа | иначе бэкап непроверенный |
Автоматизация монтирования: wsl --mount требует прав администратора, поэтому диск подключается задачей Планировщика при старте системы, а монтирование раздела — строкой в /etc/fstab с nofail.
$action = New-ScheduledTaskAction -Execute "cmd.exe" `
-Argument '/c wsl.exe --mount \\.\PHYSICALDRIVE2 --partition 1 --type ext4'
$trigger = New-ScheduledTaskTrigger -AtStartup
$principal = New-ScheduledTaskPrincipal -UserId "SYSTEM" -LogonType ServiceAccount -RunLevel Highest
Register-ScheduledTask -TaskName "WSL-Mount-BackupDisk" -Action $action -Trigger $trigger -Principal $principal -Force
Номер PHYSICALDRIVE может измениться после перестановки дисков — тогда задачу придётся править. Надёжнее искать диск по модели в отдельном скрипте и передавать найденный DeviceID.
Подводные камни
1. CentOS 6 не получает обновлений с 30 ноября 2020 года. Схема бэкапа не делает систему безопаснее: она лишь позволяет её восстановить. Хост на EOL-дистрибутиве — это временное состояние, и планировать миграцию надо параллельно с бэкапом.
2. wsl --mount не работает с флешками и кардридерами. Документация Microsoft прямо перечисляет: USB-накопители, кардридеры и SD-карты не поддерживаются; диск, с которого загружена Windows, тоже подключить нельзя. Для бэкапа нужен отдельный SATA/NVMe-диск или VHDX.
3. wsl --mount подключает диск целиком. Даже если указан --partition, в WSL попадает весь диск: нельзя отдать один раздел и оставить остальные Windows.
4. Права администратора обязательны. Задача, запущенная от обычного пользователя, молча не смонтирует диск — и бэкап упадёт на первом же шаге. Проверяйте RunLevel Highest.
5. Первый запуск без last. Если не обработать отсутствие симлинка, --link-dest укажет в пустоту. Ветка «первый снимок без link-dest» — не украшение, а необходимость.
6. --delete пугает напрасно. Он удаляет файлы только в новом снимке: старые снимки не меняются, потому что там свои копии и ссылки. Опасность другая — --delete при неверно указанном источнике (например, пустой каталог вместо /).
7. --numeric-ids забывают. Без него владельцы сопоставляются по именам: если на приёмнике нет пользователя www-data, файлы получат чужой UID, и восстановление прав станет ручной работой.
8. rsync на источнике может быть старым. CentOS 6 несёт давнюю версию, и часть современных ключей ей неизвестна. Проверяйте rsync --version на сервере, а не на приёмнике; при расхождении версий помогает --rsync-path с явным путём к свежему бинарнику.
9. echo 3 > /proc/sys/vm/drop_caches в скрипте бэкапа — плохая идея. Это сбрасывает кэш страниц всей системы: на боевом сервере это удар по производительности ради нулевой пользы для копирования. В исходной версии статьи шаг был «как в оригинальном скрипте» — из рабочей схемы его лучше убрать.
10. Потоковый zip в stdout ненадёжен. Конструкция вида ssh host "zip -r -0 - /path" > file.zip на части сборок Info-ZIP не работает: архиватор не пишет архив в стандартный вывод в таком режиме. Для конфигов надёжнее tar: ssh host "tar czf - /etc /usr/local/nginx" > conf.tgz.
11. PURGE BINARY LOGS в бэкап-скрипте — это изменение сервера. Очистка binlog меняет состояние источника и может сломать репликацию. Ей место в отдельном регламенте обслуживания, а не в скрипте копирования.
12. Жёсткие ссылки живут в пределах одной файловой системы. --link-dest работает, только если прошлый и новый снимок лежат на одном смонтированном разделе. Перенос каталога снимков на другой диск превращает инкремент в полное копирование.
13. Удаление файлов внутри старого снимка «руками» рвёт цепочку. Снимки не независимы: удаление одного файла в старом каталоге может испортить вид других дат. Удалять нужно снимок целиком.
14. Бэкап без проверки восстановления — это надежда, а не бэкап. Раз в месяц: восстановить произвольный файл, импортировать дамп базы на тестовую машину, сверить размер и число файлов.
Чек-лист внедрения
- [ ] Диск бэкапа — отдельный (не системный, не флешка), размечен в EXT4 или NTFS с
metadata. - [ ] WSL2 установлен и обновлён;
wsl --statusотвечает без ошибок. - [ ]
wsl --mountвыполняется задачей с правами администратора, раздел монтируется поfstabсnofail. - [ ] SSH-ключ с приёмника на источник работает без пароля, ключ без парольной фразы (для расписания).
- [ ] Скрипт проверяет
mountpointперед копированием и выходит с ошибкой, если диск не смонтирован. - [ ] Файл исключений покрывает виртуальные ФС, кэши и каталог базы.
- [ ] Обработан первый запуск (без
--link-dest) и обновление симлинкаlast. - [ ] Настроено расписание и уведомление о результате; журнал пишется в файл.
- [ ] Определена глубина хранения и порядок удаления старых снимков целиком.
- [ ] Проведена учебная проверка восстановления: файл и дамп базы.
FAQ
Почему не копировать просто на сетевую папку Windows?
Потому что SMB не гарантирует жёсткие ссылки и не хранит Unix-права. В лучшем случае вы получите полные копии каждый день, в худшем — ошибку remote host doesn't support hard links и молча неполный снимок.
Можно ли оставить NTFS и не форматировать диск?
Да, если смонтировать его в WSL с опцией metadata: тогда UID/GID и права хранятся в альтернативном потоке NTFS. Проверено: NTFS жёсткие ссылки поддерживает — два имени указывают на один файл, удаление одного данные сохраняет. Минус — на очень большом числе файлов NTFS медленнее EXT4.
Что будет, если диск не смонтировался?
Если в скрипте нет проверки mountpoint, копирование пойдёт в каталог на системном разделе — диск Windows заполнится, а бэкап окажется не там. Поэтому проверка точки монтирования стоит первой строкой.
Сколько места занимают снимки?
Первый — полный объём данных. Каждый следующий — только изменения: на файловом сервере это обычно единицы процентов. Точную цифру даёт только замер на ваших данных: du -sh по каждому каталогу даты.
Обязателен ли WSL, или можно обойтись Windows-инструментами?
Для схемы с --link-dest и Unix-правами — да, нужен POSIX-слой. Если WSL не подходит, современная альтернатива — restic или borg: они делают дедуплицированные зашифрованные репозитории и работают на Windows нативно, но структура «полный снимок на каждую дату» там другая.
Как понять, что бэкап прошёл, если я не смотрю в консоль?
По журналу и уведомлению: скрипт должен писать строку с датой, размером снимка и кодом выхода, а при ошибке — отправлять письмо. Отсутствие строки за ночь — тоже сигнал, и его должен кто-то проверять.
Итог
Схема «Linux → Windows» через WSL с диском в EXT4 остаётся рабочим решением для небольшой инфраструктуры: снимки выглядят полными, место растёт на изменения, права сохраняются, а инициатива копирования — на стороне приёмника. Требования к дисциплине при этом высокие: проверка монтирования, файл исключений, обработка первого запуска, контроль результата и регулярная проверка восстановления.
Главное, что стоит держать в голове: бэкап EOL-системы — это отсрочка, а не решение. CentOS 6 без обновлений с 2020 года; копии сохранят данные, но не устранят причину, по которой сервер надо переводить на поддерживаемый дистрибутив.
Цитата: Резервная копия становится бэкапом только в тот момент, когда из неё что-то успешно восстановили; до этого это просто занятое место.
Связанные материалы
- Документация Microsoft: подключение диска в WSL 2 —
wsl --mount,--bare,--vhdи полный список ограничений. - Описание rsync (man) —
--link-dest,--numeric-ids,--deleteи правила исключений. - Даты окончания поддержки CentOS — таблица EOL по веткам, использованная в замерах.
- restic — дедуплицированные зашифрованные репозитории как современная альтернатива снимкам.
- BorgBackup — второй вариант дедуплицирующего бэкапа с проверкой целостности.
- Рубрика «Системное администрирование» — остальные материалы по эксплуатации серверов.
LLM Summary
- Тема: инкрементальный бэкап с Linux-сервера на Windows-машину через WSL2 и
rsync --link-dest. - Что делает: создаёт ежедневный снимок, который выглядит полным, но занимает место только на изменения; хранит права и владельцев за счёт EXT4.
- Форма: pull-модель — Windows/WSL инициирует копирование по SSH с сервера; у источника нет доступа к хранилищу копий.
- Устройство: WSL2 + отдельный диск (
wsl --mount), каталогиbackup.RSYNC/<дата>, симлинкlastкак источник--link-dest, дампы MySQL и архивы конфигов рядом. - Ключевые команды:
rsync -aR --delete --numeric-ids --link-dest=<last> -e ssh host:/ <снимок>/,mountpoint -q,wsl --mount \\.\PHYSICALDRIVE2 --bare,wsl.exe --mount <Disk> --partition 1 --type ext4. - Проверенные ограничения:
wsl --mountтребует прав администратора, не поддерживает USB/флешки/SD и диск загрузки Windows, подключает диск целиком. - Состояние платформы: CentOS 6 — EOL 30.11.2020, CentOS 7 — 30.06.2024 (endoflife.date, 13.11.2026).
- Замеры: NTFS-жёсткие ссылки проверены локально на Windows 11 (два имени — один файл); скорость и дедупликация не измерялись — нужен реальный прогон.
- Грабли: отсутствие проверки точки монтирования, забытый
--numeric-ids, первый запуск безlast, удаление файлов внутри старых снимков,drop_cachesиPURGE BINARY LOGSв скрипте бэкапа,zipв stdout. - Альтернативы: restic 0.19.1 и borg 1.4.5 — дедупликация и шифрование вместо «полных на вид» снимков.
- Ссылки: документация Microsoft по
wsl --mount, man rsync, endoflife.date/centos, restic.net.
Промт для агента (установка и настройка)
Источник шагов — документация Microsoft по подключению диска в WSL 2 (wsl2-mount-disk), справочная страница man rsync и файл исключений из этой статьи; отдельных файлов AGENTS.md или README у задачи нет — это инфраструктурная схема, а не проект с репозиторием.
Задача: настроить инкрементальный бэкап Linux-сервера на Windows-машину через WSL2 с rsync --link-dest.
1. Проверить источник: rsync --version, ssh-доступ, свободное место, не EOL ли дистрибутив (endoflife.date).
2. Установить WSL2 и дистрибутив: wsl --install; wsl --update; wsl --status.
3. Поставить пакеты в WSL: sudo apt update && sudo apt install -y rsync openssh-client.
4. Сгенерировать ключ без пароля и скопировать его на сервер: ssh-keygen -t ed25519, ssh-copy-id.
5. Подготовить отдельный диск: снять букву в «Управлении дисками», найти DeviceID через Get-CimInstance Win32_DiskDrive.
6. Подключить диск в WSL с правами администратора: wsl --mount \\.\PHYSICALDRIVE<N> --bare; проверить sudo lsblk.
7. Разметить и смонтировать: mkfs.ext4 -L backup, mount -t ext4 /dev/sdX1 /mnt/backup, запись в /etc/fstab с nofail.
8. Создать структуру: каталог снимков, каталоги дампов баз и конфигов.
9. Написать файл исключений: /proc, /sys, /dev, /run, /mnt, /media, /tmp, кэши, каталог базы.
10. Написать скрипт: проверка mountpoint, ветка первого запуска без --link-dest, rsync с -aR --numeric-ids --link-dest, обновление симлинка last, журнал.
11. Добавить сбор данных: mysqldump --single-transaction в отдельный каталог, tar для конфигов (не zip в stdout).
12. Настроить расписание: задача Планировщика для wsl --mount при старте, запуск скрипта ночью, уведомление при ошибке.
13. Проверить вручную: запуск с --dry-run, затем боевой прогон, контроль размера снимка и записи в журнале.
14. Провести учебное восстановление: вернуть один файл и импортировать дамп базы на тестовую машину.
15. Зафиксировать регламент: глубина хранения, кто читает журнал, как часто проверяется восстановление.