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

organizatsiya rezervnogo kopirovaniya s unix na windows cover

Материал переписан 13 ноября 2026 года: конфигурация и команды сохранены, факты о EOL и о монтировании дисков проверены по первоисточникам.

TL;DR: что это и как проверить за десять минут

  1. Схема. Источник — Linux-сервер (например, CentOS), приёмник — Windows 11 с WSL2 и отдельным диском в EXT4. Копирование инициирует Windows (pull-модель).
  2. Инкрементность. rsync -a --link-dest=<прошлый снимок>: изменившиеся файлы копируются, остальные — жёсткие ссылки. Каталог каждого дня выглядит полным.
  3. Права и ссылки. Хранить снимки на EXT4: NTFS не хранит UID/GID, а без них восстановление системы теряет смысл.
  4. Монтирование. Диск подключается wsl --mount с правами администратора; флешки и SD-карты не поддерживаются, диск загрузки Windows — тоже.
  5. Проверка. Раз в месяц — восстановление файла и импорт дампа базы на тестовой машине; без этого бэкап считается непроверенным.

Быстрая проверка окружения (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 % свободного места.

Три части: источник, транспорт и приёмник. Источник — 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["проверка восстановления по регламенту"]
  1. Проверка точки монтирования. Скрипт убеждается, что /mnt/backup существует и это именно диск бэкапа, а не пустой каталог на системном разделе. Пропуск этой проверки — классическая причина «бэкап писался в /, диск забит, сервер встал».
  2. Подготовка каталогов. Создаются backup.RSYNC, backup/mysql, backup/mysql.old, если их ещё нет.
  3. Первый запуск. Если симлинка last нет, копирование идёт без --link-dest: первый снимок всегда полный. Это надо обрабатывать явно, иначе --link-dest на несуществующий путь даст ошибку.
  4. Основное копирование. rsync -aR --delete --link-dest=... --exclude-from=... -e ssh host:/ "$CURRENT". Ключ -R сохраняет структуру путей от корня, поэтому в снимке появляется var/www/..., а не «всё в одну папку».
  5. Обновление last. Старый симлинк удаляется, новый указывает на свежий снимок. Только после успешного rsync — иначе следующий запуск будет ссылаться на битый каталог.
  6. Данные и отчёт. Дампы баз, архив конфигов, запись в журнал и уведомление. Отчёт обязателен: молчащий бэкап неотличим от сломанного.

Минимальная рабочая основа скрипта выглядит так (сокращённо, без ветки дампов):

#!/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
Ключевые числа: состояние CentOS, ограничения wsl —mount и версии альтернатив

Границы замера: скорость копирования, коэффициент дедупликации и размер снимков здесь не измерялись — для этого нужен реальный сервер, диск и ночной прогон. Приведённые числа описывают состояние инструментов и ограничения платформы, а не производительность вашей схемы. Отдельно отмечу: на машине, где готовился материал, WSL не установлен (wsl --status отвечает «The file cannot be accessed by the system»), поэтому поведение wsl --mount проверено по документации, а не запуском.

Сильные стороны продукта

Речь о сильных сторонах самой схемы «rsync + —link-dest + WSL».

  1. Снимок каждого дня выглядит полным. Восстановить отдельный файл можно, просто открыв каталог нужной даты, — не нужен ни репозиторий, ни распаковка.
  2. Место растёт на объём изменений. Неизменённые файлы — жёсткие ссылки; на файловом сервере, где меняется 1–2 % данных в день, экономия на порядок.
  3. Права и владельцы сохраняются. На EXT4 внутри WSL rsync -a работает как на Linux: UID/GID, режимы, симлинки.
  4. Pull-модель уменьшает ущерб от компрометации. У сервера нет ключа к приёмнику: снести копии с него нельзя.
  5. Транспорт — обычный SSH. Не нужен ни агент, ни открытый порт на Windows, ни SMB-шара.
  6. Восстановление не требует специального софта. Любая Linux-машина с rsync заберёт данные обратно; читать снимки можно и через \\wsl$ из Проводника.
  7. Схема расширяется. Дампы баз, архивы конфигов и журнал — те же несколько строк в скрипте, без отдельного продукта.

Установка

Компонент Требование Комментарий
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 года; копии сохранят данные, но не устранят причину, по которой сервер надо переводить на поддерживаемый дистрибутив.

Цитата: Резервная копия становится бэкапом только в тот момент, когда из неё что-то успешно восстановили; до этого это просто занятое место.

Связанные материалы

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. Зафиксировать регламент: глубина хранения, кто читает журнал, как часто проверяется восстановление.