У нас идёт цикл об информационной суверенности: как не зависеть от зарубежных сервисов в важных компьютерных делах. Сейчас говорим о защите важных файлов. Эта операция из нескольких этапов:
- Настройка автоматического копирования на компьютере ← вы здесь.
- Запуск собственного удалённого файлового сервера ← на следующей неделе.
- Настройка автоматического копирования на свой сервер.
В чём задача
Задача — сделать так, чтобы важные файлы на нашем компьютере копировались в безопасное место без нашего участия. Например, можно иметь безопасную флешку, на которую при подключении будут записываться свежие версии важных файлов.
Важно, чтобы это происходило автоматически, то есть без вашего участия. Если флешка вставлена, на неё всё копируется само. Если не вставлена, ничего не происходит.
Решение будет состоять из двух частей:
- Нечто, что будет копировать файл без нашего участия.
- Нечто, что будет запускать копирование в нужный момент.
Что делаем
Сначала напишем скрипт, который делает бэкапы, а потом настроим всё так, чтобы он запускался автоматически. Звучит сложно, но на деле всё займёт 5 минут.
Скрипт мы сделаем с помощью системной утилиты rsync на Linux или Mac OS. На Windows используем утилиту nnBackup.
Автоматику будем запускать с помощью crontab — планировщика задач для Linux и Mac OS. На Windows используем либо встроенный планировщик задач, либо nnCron — клон crontab.
Большинство автоматизаций делается на скриптах и выполняется в терминале (командной строке). Достаточно разобраться с этим один раз, чтобы оценить всю мощь и глубину такого подхода. Помните, во всех фильмах про хакеров они что-то пишут, бегут строчки кода и всё работает? Будем делать то же самое.
Настраиваем резервное копирование в Mac OS и Linux
Чтобы скопировать данные из одного места в другое, во всех дистрибутивах Linux, UNIX и Mac OS используют команду rsync. Она почти всегда идёт в комплекте с системой и решает только одну задачу — что-то куда-то копирует, при этом сам процесс можно настроить довольно гибко.
Общий вид команды такой:
rsync -как_копируем что_копируем куда_копируем
Что_копируем
— это путь к папкам, где лежат наши данные. Их мы будем копировать
Куда_копируем
— это путь к папке, где будет храниться бэкап. Если второй папки нет, программа сама её создаст. Если папка на другом устройстве, а самого устройства в системе нет, rsync может завершить работу.
-как_копируем
— её параметры копирования. Их очень много; если нужен полный список, наберите rsync --help. Сейчас нас интересует только два параметра — архив и вывод на экран. Для справки — вот полный перечень:
-v, --verbose | выводить на экран всё, что программа делает |
-q, --quiet | тихонько работать, если нет ошибок |
-c, --checksum | пропускать ненужные файлы, смотря на контрольную сумму, а не на дату |
-a, --archive | сделать архив; то же самое, как если использовать ключи -rlptgoD (no -H,-A,-X) |
--no-OPTION | не использовать какие-то опции (например, --no-D) |
-r, --recursive | обработать все вложенные папки и подпапки |
-R, --relative | использовать относительные пути к файлам |
-b, --backup | сделать бэкап-файл |
-u, --update | пропустить файлы, если в папке назначения они более свежие |
--inplace | обновить файлы в папке назначения |
-d, --dirs | обработать просто папку, без вложенных папок |
-p, --perms | сохранять разрешения |
-E, --executability | сохранять флаг возможности выполнения файла |
--chmod=CHMOD | поменять права доступа к файлам или папкам |
-X, --xattrs | сохранять внешние атрибуты файла |
-o, --owner | сохранять владельца (только для суперпользователя) |
-g, --group | сохранять группу |
--devices | сохранять файлы устройств (только для суперпользователя) |
--specials | сохранять специальные файлы |
-D | то же самое, что --devices --specials |
-t, --times | сохранять время изменения файлов |
-O, --omit-dir-times | не смотреть на папки при использовании --times |
--super | экран помощи |
--fake-super | сохранять или восстанавливать особые атрибуты, используя xattrs |
-n, --dry-run | запустить вхолостую, без изменений в файлах, просто чтобы убедиться, что ошибок не будет |
-W, --whole-file | копировать файлы целиком |
-e, --rsh=COMMAND | указать программу выполнения на удалённом компьютере |
--rsync-path=PROGRAM | путь к команде rsync на удалённом компьютере |
--existing | пропустить создание новых файлов на получателе |
--ignore-existing | не обновлять уже существующие файлы на получателе |
--remove-source-files | удалить синхронизированные файлы у отправителя (не влияет на папки) |
--del | то же самое, что --delete-during |
--delete | удалить посторонние файлы из папки получателя |
--delete-before | удалить всё у получателя перед передачей данных (используется по умолчанию) |
--delete-during | удалять файлы во время передачи |
--delete-delay | сначала найти все удаляемые файлы, а потом удалить все сразу |
--delete-after | получатель удаляет необходимые файлы после получения нужных файлов, а не до этого |
--delete-excluded | если в конечной папке есть файлы, которые попали под исключения, и их надо удалить — всё равно удалить их |
--ignore-errors | удалять файлы, даже если есть ошибки ввода-вывода |
--force | даже если папка не пустая, всё равно удалять её |
--max-delete=NUM | не удалять более стольких-то (NUM) файлов |
--max-size=SIZE | не трогать файлы больше размера SIZE |
--min-size=SIZE | не трогать файлы меньше размера SIZE |
--partial | если файл передался не полностью, всё равно сохранить его |
--partial-dir=DIR | если файл передался не полностью, положить его в папку DIR |
--delay-updates | обработать обновлённые файлы в последнюю очередь |
-m, --prune-empty-dirs | выбросить пустые папки из списка файлов на копирование |
-I, --ignore-times | не пропускать файлы, если они совпадают по времени и размеру |
--size-only | если файлы одинаковые по размеру, пропустить |
--modify-window=NUM | сравнить время изменения файлов с уменьшенной точностью (чтобы файл, изменённый через секунду, например, не считался новым) |
-T, --temp-dir=DIR | create temporary files in directory DIR |
-y, --fuzzy | если конечного файла нет, найти похожие |
--compare-dest=DIR | ещё сравнить полученные файлы относительно каталога DIR |
--copy-dest=DIR | …и приложить копии неизменённых файлов |
-z, --compress | сжимать данные при передаче |
-C, --cvs-exclude | игнорировать файлы по типу CVS |
-f, --filter=RULE | добавить правило RULE для фильтрации файлов |
-F | то же, что --filter='dir-merge /.rsync-filter' |
--exclude=PATTERN | исключить из копирования файлы, которые совпадают с паттерном PATTERN |
--exclude-from=FILE | взять из FILE паттерны, по которым исключить файлы из копирования |
--include=PATTERN | не исключать из копирования файлы, которые совпадают с паттерном PATTERN |
--include-from=FILE | взять из FILE параметры включения файлов в задачу копирования |
--files-from=FILE | забрать список исходных файлов для копирования из FILE |
--port=PORT | дополнительный порт для обмена данными с удалённым компьютером |
--sockopts=OPTIONS | особые параметры связи с сервером по TCP |
--stats | вывести статистику по передаче файлов |
-8, --8-bit-output | оставить нетронутыми восьмибитные символы во время вывода на экран |
-h, --human-readable | вывести всё в формате, понятном человеку |
--progress | показывать прогресс передачи |
-P | то же самое, что --partial --progress |
-i, --itemize-changes | вывести отчёт об изменениях в копированных файлах |
--log-file=FILE | записать в FILE лог событий копирования |
--password-file=FILE | взять пароль демона из FILE |
--list-only | не копировать файлы, а просто перечислить |
--bwlimit=KBPS | ограничить пропускную способность канала передачи данных, если копируем через интернет |
--protocol=NUM | использовать более древний протокол для совместимости со старым софтом и железом |
--iconv=CONVERT_SPEC | запросить преобразование названий файлов в зависимости от языка |
-4, --ipv4 | использовать протокол TCP IPv4 |
-6, --ipv6 | использовать протокол TCP IPv6 |
--version | показать версию программы |
(-h) --help | показать помощь |
Чтобы команда знала, что нам нужно не просто скопировать, а сделать бэкап, используется ключ -a. Без него компьютер будет просто копировать файлы каждый раз, даже если в резервной копии они уже есть, и тратить на это каждый раз много времени. А с ключом -a команда поймёт, что это бэкап, и не будет туда добавлять те файлы, которые там уже есть. А если в бэкапе будет лежать старая версия, а у нас уже новая, то она просто заменит старую на новую, чтобы у нас всегда были актуальные данные.
Вывод на экран — необязательный параметр, который не влияет на экран, но сейчас нам он пригодится. Его смысл в том, что так компьютер будет выводить название каждого файла, который он копирует в данный момент, — так мы увидим, что всё работает как нужно.
Ещё есть ключ --delete — он означает, что если в исходной папке какой-то файл уже удалён, то и в бэкапе его тоже нужно удалить. Если вам в резервных копиях нужна точная копия какой-то папки — добавляйте этот параметр при запуске.
Например, если нам нужно на флешке сделать бэкап папки с фотографиями, то пишем такую команду:
rsync -av /Users/mike/Pictures /Volumes/WIN10_64/Pictures
Вот что она означает:
rsync
— название нашей команды;-av
— добавляем архивный ключ и вывод процесса на экран;/Users/mike/Pictures
— здесь лежат фотографии;/Volumes/WIN10_64/Pictures
— на флешке с названием WIN10_64 появится папка Pictures, в которой будет лежать бэкап.
Если бы нам понадобилось сделать не архивный бэкап (со всеми старыми файлами), а точную копию папки с фото, то добавился бы ключ --delele:
rsync -av --delete /Users/mike/Pictures /Volumes/WIN10_64/Pictures
Что за пути к файлам? В наших примерах используются адреса файлов, которые применяются в Linux и Mac OS. В них отсчёт идёт не от физического диска, как в Windows, а от корневой папки системы. В папке есть подпапка Users, где живут данные разных пользователей системы. В папке Users лежит папка mike — это папка пользователя Миши. Внутри этой папки уже лежат все его документы.
В Windows это выглядело бы, например, так: C:/Users/mike/Pictures
.
Резервное копирование в Windows
Для Windows нет родной команды rsync, поэтому разработчику Николаю Немцову пришлось сделать её аналог — nnBackup. Она устанавливается как обычная программа, и потом тоже запускается из командной строки. Чтобы с ней было проще работать, ставим её в свою папку в корень диска C:
Единственное, что отличается в работе, — порядок аргументов и ключи запуска. Чтобы получить тот же результат, что и в предыдущем примере, нужно в командной строке написать такое:
nnbackup.exe sync -i C:\Users\Mike\Pictures\ -o
F:\Pictures\ -v -da
Теперь посмотрим, что внутри:
Устанавливаем nnBackup на диск C:
А что, если мне нужно создать бэкап нескольких папок?
Чтобы сделать копии нескольких папок, нужно выполнить несколько команд подряд — сначала для одной папки, потом для другой и так далее. Компьютер сделает всё по очереди.
rsync -av --delete /Users/mike/Pictures /Volumes/WIN10_64/Pictures
rsync -av --delete /Users/mike/Misic /Volumes/WIN10_64/Music
Как будет работать автоматизация
Мы научились создавать бэкапы, но пока всё делается вручную. Это не дело — нужно, чтобы компьютер следил за этим сам.
Самый простой способ автоматизировать бэкапы — настроить выполнение команд по времени, например каждые 10 минут. Работает это так:
- Когда проходят очередные 10 минут, компьютер запускает нашу команду на создание бэкапа.
- Если флешка вставлена — всё отлично, бекап делается, данные в безопасности.
- Если флешка не вставлена — компьютер попытается выполнить нашу команду, не найдёт флешки и просто закончит выполнение команды.
- В итоге достаточно будет вставить флешку, и через 10 минут у вас начнёт создаваться актуальная резервная копия всех важных данных.
Интервал в 10 минут мы выбрали сами — можно поставить и раз в минуту, и раз в день, всё зависит от того, насколько часто у вас обновляются за день нужные данные.
Настраиваем расписание в Mac OS и Linux
За запуск команд по расписанию в Mac OS и Linux отвечает команда crontab. У неё много параметров и возможностей, но сейчас нас интересует только одно — как с её помощью запускать нашу команду для бэкапа раз в 10 минут.
Для этого делаем так.
- В терминале пишем команду
crontab -e
и нажимаем Enter. - Появляется окно редактора, где нужно нажать сначала s, а потом вставить такую строчку:
*/10 * * * * rsync -av --delete /Users/mike/Pictures /Volumes/WIN10_64/Pictures
- Нажимаем сначала Esc, а потом по очереди :wq (двоеточие, потом w, потом q) — это сохранит нашу команду и закроет редактор.
- Проверяем, что всё записалось командой
crontab -l
— мы должны увидеть свою команду.
За запуск каждые 10 минут отвечает начало команды — */10 * * * *
. Остальные звёздочки отвечают за часы, дни, недели и месяцы, а косая черта — за постоянное повторение каждые сколько-то минут.
Теперь 6 раз в час наша команда будет запускаться и следить за актуальностью резервной копии. Если нужно несколько команд, то просто добавьте новые строчки и сохраните всё таким же образом.
Настраиваем расписание в Windows
Самый простой способ сделать что-то по расписанию в Windows — использовать «Планировщик заданий». Это встроенная программа с неудобным интерфейсом, но базовые вещи в ней можно настроить.
Главный минус «Планировщика» в том, что большинство служебных задач в нём сделать сложно — нужно заполнить много полей, настроек и постоянно следить за тем, от имени какого пользователя это делается.
Для запуска планировщика выберите Пуск → Средства администрирования → Планировщик заданий.
Мы пойдём другим путём — используем программу nnCron Lite. Это аналог crontab для Windows того же Николая Немцова. Скачиваем программу и устанавливаем её в папку C:\cron, чтобы было проще запускать.
Теперь нужно сказать программе, что и как запускать. Для этого в ней есть специальный текстовый файлик cron.tab — его нужно отредактировать.
Заходите в папку с программой C:\cron, находите там файл cron.tab, открываете в Блокноте. Логика наполнения такая же, как в MacOS: сначала звёздочками указываем периодичность запуска, а потом пишем команду, которую нужно выполнить. В нашем случае это будет так:
*/10 * * * * nnbackup.exe sync -i C:\Users\Mike\Pictures\ -o F:\Pictures\ -v -da
Что дальше
Резервное копирование по времени — просто, но неоптимально. Намного круче запускать создание бэкапов именно в тот момент, когда мы вставляем флешку в компьютер. Как это сделать, расскажем в будущих статьях. Подписывайтесь на нас везде, где ещё можно :-)