Защита важных файлов: автоматический бэкап за пять минут
medium

Защита важных файлов: автоматический бэкап за пять минут

Первый шаг в информационной суверенности

У нас идёт цикл об информационной суверенности: как не зависеть от зарубежных сервисов в важных компьютерных делах. Сейчас говорим о защите важных файлов. Эта операция из нескольких этапов: 

  1. Настройка автоматического копирования на компьютере ← вы здесь.
  2. Запуск собственного удалённого файлового сервера ← на следующей неделе.
  3. Настройка автоматического копирования на свой сервер. 

В чём задача

Задача — сделать так, чтобы важные файлы на нашем компьютере копировались в безопасное место без нашего участия. Например, можно иметь безопасную флешку, на которую при подключении будут записываться свежие версии важных файлов. 

Важно, чтобы это происходило автоматически, то есть без вашего участия. Если флешка вставлена, на неё всё копируется само. Если не вставлена, ничего не происходит. 

Решение будет состоять из двух частей: 

  1. Нечто, что будет копировать файл без нашего участия.
  2. Нечто, что будет запускать копирование в нужный момент. 

Что делаем

Сначала напишем скрипт, который делает бэкапы, а потом настроим всё так, чтобы он запускался автоматически. Звучит сложно, но на деле всё займёт 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=DIRcreate 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

Запускаем команду в терминале. Благодаря ключу -v виден весь процесс создания резервной копии
Открываем две папки и смотрим содержимое. Всё совпадает, значит, команда работает как нужно

Резервное копирование в Windows

Для Windows нет родной команды rsync, поэтому разработчику Николаю Немцову пришлось сделать её аналог — nnBackup. Она устанавливается как обычная программа, и потом тоже запускается из командной строки. Чтобы с ней было проще работать, ставим её в свою папку в корень диска C:

Единственное, что отличается в работе, — порядок аргументов и ключи запуска. Чтобы получить тот же результат, что и в предыдущем примере, нужно в командной строке написать такое:

nnbackup.exe sync -i C:\Users\Mike\Pictures\ -o
F:\Pictures\ -v -da

Теперь посмотрим, что внутри:

Устанавливаем nnBackup на диск C:

Запуск программы через командную строку Windows

А что, если мне нужно создать бэкап нескольких папок?

Чтобы сделать копии нескольких папок, нужно выполнить несколько команд подряд — сначала для одной папки, потом для другой и так далее. Компьютер сделает всё по очереди.

rsync -av --delete /Users/mike/Pictures /Volumes/WIN10_64/Pictures

rsync -av --delete /Users/mike/Misic /Volumes/WIN10_64/Music

Как будет работать автоматизация

Мы научились создавать бэкапы, но пока всё делается вручную. Это не дело — нужно, чтобы компьютер следил за этим сам.

Самый простой способ автоматизировать бэкапы — настроить выполнение команд по времени, например каждые 10 минут. Работает это так:

  1. Когда проходят очередные 10 минут, компьютер запускает нашу команду на создание бэкапа.
  2. Если флешка вставлена — всё отлично, бекап делается, данные в безопасности.
  3. Если флешка не вставлена — компьютер попытается выполнить нашу команду, не найдёт флешки и просто закончит выполнение команды.
  4. В итоге достаточно будет вставить флешку, и через 10 минут у вас начнёт создаваться актуальная резервная копия всех важных данных.

Интервал в 10 минут мы выбрали сами — можно поставить и раз в минуту, и раз в день, всё зависит от того, насколько часто у вас обновляются за день нужные данные.

Настраиваем расписание в Mac OS и Linux

За запуск команд по расписанию в Mac OS и Linux отвечает команда crontab. У неё много параметров и возможностей, но сейчас нас интересует только одно — как с её помощью запускать нашу команду для бэкапа раз в 10 минут.

Для этого делаем так.

  1. В терминале пишем команду crontab -e и нажимаем Enter. 
  2. Появляется окно редактора, где нужно нажать сначала s, а потом вставить такую строчку:

*/10 * * * * rsync -av --delete /Users/mike/Pictures /Volumes/WIN10_64/Pictures
  1. Нажимаем сначала Esc, а потом по очереди :wq (двоеточие, потом w, потом q) — это сохранит нашу команду и закроет редактор.
  2. Проверяем, что всё записалось командой crontab -l — мы должны увидеть свою команду.

За запуск каждые 10 минут отвечает начало команды — */10 * * * *. Остальные звёздочки отвечают за часы, дни, недели и месяцы, а косая черта — за постоянное повторение каждые сколько-то минут. 

Теперь 6 раз в час наша команда будет запускаться и следить за актуальностью резервной копии. Если нужно несколько команд, то просто добавьте новые строчки и сохраните всё таким же образом.

Сохраняем и выходим из редактора
Убеждаемся, что наша команда на месте и расписание действует
Чтобы всё работало без сбоев, в Системных настройках нужно выбрать раздел «Защита и безопасность» → «Доступ к диску». В нём нажать на плюсик, потом ⇧+⌘+G, вставить /usr/sbin/cron и нажать Enter. В списке появится cron, а это значит, что он может выполнять любые задачи с файлами в любой момент

Настраиваем расписание в 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

Правой кнопкой мыши щёлкаем на файле cron.tab и выбираем Блокнот
Содержимое нашего файла в Windows. Сохраняйте, закрывайте

Что дальше

Резервное копирование по времени — просто, но неоптимально. Намного круче запускать создание бэкапов именно в тот момент, когда мы вставляем флешку в компьютер. Как это сделать, расскажем в будущих статьях. Подписывайтесь на нас везде, где ещё можно :-)

Художник:

Алексей Сухов

Корректор:

Ирина Михеева

Вёрстка:

Кирилл Климентьев

Соцсети:

Алина Грызлова

Получите ИТ-профессию
В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.
Вам может быть интересно
medium
[anycomment]
Exit mobile version