Вопрос или проблема
У меня есть старый жесткий диск, и в принципе я клонирую его на новый жесткий диск с помощью Grsync или Timeshift. Поскольку старый жесткий диск с большей вероятностью может выйти из строя, я хотел бы использовать новый в качестве основного диска, а старый — только в качестве резервного, где все изменения синхронизируются.
Сначала задавал вопрос об этом в репозитории Vorta GUI, так как в конечном итоге я хотел бы использовать только один интерфейс для всех задач резервного копирования. Поскольку этот инструмент (пока что) не имеет этой функциональности, я хотел бы использовать другой инструмент с открытым исходным кодом GUI. Дальнейшие отличия от связанных вопросов и то, что предлагают некоторые доступные инструменты, которые я пробовал, описаны ниже:
- Syncthing: По странным причинам он не поддерживает резервное копирование на локальные носители (синхронизация локальных жестких дисков или папок); мой второй жесткий диск локальный
- Unison: Я хотел бы, чтобы синхронизация была всегда включена и автоматическая, без необходимости в триггерах
- Графические интерфейсы Rsync: У них, похоже, такая же проблема, как и у Unison (рекомендуется здесь): Я хотел бы иметь демон мониторинга директорий / Монитор файловой системы, который будет обнаруживать изменения на большом HDD, который я использую, по мере их внесения, а затем в какой-то момент (немедленно или через определенные интервалы) автоматически синхронизировать эти изменения со вторым жестким диском автоматически. С такими инструментами, как Grsync (включена опция “Удалить на месте назначения”) или BackInTime (не поддерживается), это может быть выполнено только вручную. Я хотел бы, чтобы файлы были точно такими же, чтобы я мог смонтировать и использовать полностью зашифрованный диск так же, как и старый, если новый выйдет из строя (например, права доступа к файлам и все остальное должны оставаться прежними). Это должно быть эффективно и, например, не сканировать весь диск на предмет изменений заново каждый раз.
Для меня это кажется самым интуитивно понятным способом, которым настольные пользователи могли бы резервировать свои полные жесткие диски без версионирования, поэтому я был удивлен, что это не очень легко осуществимо с большинством существующих инструментов GUI. Что еще хуже, другие вопросы (связанные, но не одинаковые!) такие как этот похоже, касаются только командных решений для нишевых приложений для технарей и даже без конкретной команды rsync, которую можно использовать, или информации о том, как это реализовать. Я использую Debian с KDE.
Вот что лучшее, что я придумал до сих пор, и я внесу изменения, если найду лучший способ:
-
Вариант #1: Преобразование диска в RAID1 – Три проблемы с этим заключаются в следующем:
- Если вы что-то удалите на исходном диске, оно также будет удалено на втором, но для случаев использования на настольных ПК лучше, если вы сможете восстановить директорию или файл на некоторое время до следующего резервного копирования (это полезно для серверов, где это может избежать простоев, но не очень хорошо для личных резервных копий)
- Существует довольно высокая вероятность, что вы потеряете свои данные, поэтому это следует делать только если вы резервировали свои данные на еще одном третьем диске
- Существуют некоторые пошаговые руководства для этого (где трудно увидеть, какие из них актуальны и соответствуют вашим требованиям), но нет GUI
-
Вариант #2: Использование Grsync. Это, похоже, единственный продвинутый интерфейс для rsync, который все еще разрабатывается, поскольку BackInTime и LuckyBackup больше не активно разрабатываются. Я не проверял, может ли интерфейс Timeshift делать то, что я пытаюсь, и, вероятно, есть некоторые менее развитые интерфейсы для rsync, которые могут делать то же самое.
-
Сначала выберите исходную и целевую директории и добавьте дополнительный слэш / после исходной директории, как только вы это сделали. Убедитесь, что они настроены правильно, потому что файлы в целевой директории (второй строке) будут удалены.
-
Затем эти параметры включаются для синхронизации указанной директории, которая является целым диском (изменения по сравнению с настройками по умолчанию; пожалуйста, исправьте любые, которые неверны):
- “Удалить на месте назначения”
- “Сохранить владельца”
- “Сохранить группу”
- “Сохранить временную метку”
- “Сохранить права доступа”
- “Подробный” отключен, так что он не создает большие журналы, а “Показать прогресс” включен
- “Копировать символические ссылки как символические ссылки” на вкладке Дополнительно, четвертая сверху слева (если вы используете ярлыки для файлов, это гарантирует, что они также будут там в резервных директориях)
- “Копировать жесткие ссылки как таковые” (не включая эти два параметра, это может привести к тому, что резервная копия будет больше, чем исходная директория и, возможно, завершится раньше)
- Возможно: В поле дополнительных параметров вы можете добавить
--exclude-from='/path/exclude-file.txt'
и добавить некоторые файлы для исключения в текстовый файл, такие как те, которые застревают при копировании, или файл drive1.txt ниже. Лучше изменить права доступа к файлу так, чтобы только пользователь root мог его изменять. - На вкладке Дополнительные параметры отметьте “Как пользователь root”, чтобы он также мог удалять и копировать защищенные файломи root файлы.
- Возможно: “Сравнивать только размер файла” может сделать это быстрее, но я этого не тестировал; отключение “Показать прогресс” также может быть полезным
- Предупреждение: имена дисков могут изменяться всякий раз, когда вы перезагружаете. Например, диск sda может стать sdb после следующей перезагрузки. Поэтому вы можете случайно синхронизировать свой старый диск с вашим новым диском. Вы можете использовать
sudo smartctl -a
, чтобы выяснить, какой диск какой. Чтобы избежать этой проблемы, вы можете создать файл на диске 1 после каждого резервного копирования или исключить этот файл в резервной копии. Вероятно, существуют лучшие способы гарантировать, что это не произойдет, но вы можете добавить это в “Выполнить эту команду после rsync” в дополнительных параметрах:touch /drive1/drive1.txt
(замените /drive1/ на путь к исходной директории). Также рекомендуется отметить “Пропустить более новые”, чтобы если это произойдет, или если вы случайно изменили какой-либо файл на целевом диске (диск2), никаких файлов не было перезаписано (в отличие от перезаписанных файлов, вы можете восстановить удаленные файлы с помощью различных инструментов, таких как ext4magic).
-
Затем просто нужно вручную регулярно запускать программу с сохраненным профилем и нажимать кнопку воспроизведения, чтобы обновить резервную копию синхронизации. Сохраните профиль, перейдя в Сессия->Экспорт, чтобы вы могли всегда использовать один и тот же профиль резервного копирования.
Проблемы с этим решением заключаются в следующем:
- Не может делать запланированные или автоматические резервные копии. Я бы подал запрос на эту функцию (ссылка здесь), но, похоже, у него даже нет современного репозитория git (первое, что нужно сделать, – это Grsync или инструмент подобный ему, программировать на GitHub или Gitlab).
- Я бы предположил, что демон типа наблюдателя за файлами, который записывает, какие файлы вы изменили, по мере их изменения, сделал бы его гораздо более подходящим для больших дисков, и я не думаю, что rsync/Grsync имеет такую функциональность. То же самое касается случаев, когда вы просто перемещаете файлы, где он может удалить их на месте назначения, чтобы скопировать их в другой раз, а не просто переместить папку или файлы туда.
-
Ответ или решение
Синхронизация двух локальных жестких дисков на Linux может быть выполнена разными способами, однако, учитывая ваши требования к автоматизации и сохранению полной идентичности файлов, стоит рассмотреть несколько эффективных подходов. Ваши основные требования — непрерывная автоматическая синхронизация, возможность восстановления потерянных данных, сохранение прав доступа и возможность использования программного обеспечения с графическим интерфейсом.
Опция 1: Использование системы RAID 1
Недостатки:
- Система RAID 1 синхронизирует данные между двумя дисками, однако при удалении файла на одном диске тот будет удалён и на другом. Это является проблемой для резервного копирования, поскольку не предоставляет возможности восстановить данные после удаления.
- Такой подход требует наличия дополнительного запасного диска для предотвращения потерь данных при сбоях на одном из основных.
- Отсутствие графического интерфейса для настройки может усложнить процесс для менее опытных пользователей.
Опция 2: Использование Grsync или аналогичных GUI для rsync
Шаги для настройки Grsync:
-
Настройка профиля:
- Укажите исходный и целевой каталоги, обязательно добавив слэш (/) после исходного каталога. Будьте внимательны при настройках, так как файлы на целевом диске будут удалены в процессе синхронизации.
-
Настройка параметров синхронизации:
- Включите опцию "Удалить на месте назначения" (Delete on destination) — это важно для поддержания идентичности файлов.
- Сохраните права владельца, группы, временные метки и разрешения (Preserve owner, Preserve group, Preserve timestamp, Preserve permissions).
- Отключите "Подробный вывод" (Verbose), чтобы сократить размер логов, но активируйте "Показать процесс" (Show progress).
- Включите параметры для работы с символическими (Copy symlinks as symlinks) и жесткими ссылками (Copy hard links as such).
-
Добавление исключений:
- В поле дополнительных опций можно добавить файлы для исключения с помощью команды
--exclude-from='/path/exclude-file.txt'
.
- В поле дополнительных опций можно добавить файлы для исключения с помощью команды
-
Запуск Grsync:
- Регулярно запускайте программу через сохраненный профиль. Вы можете использовать "Session -> Export" для сохранения текущих настроек.
Ограничения Grsync:
- Это решение требует ручного запуска программы, так как Grsync не поддерживает автоматические или запланированные задачи непосредственно.
- Для автоматизации процесса можно использовать cron для планирования запуска скрипта, который будет запускать Grsync по расписанию.
Опция 3: Использование Inotify для автоматизации
Использование inotify:
- Установите пакет inotify-tools.
- Создайте bash-скрипт, который будет следить за изменениями в исходном каталоге:
#!/bin/bash while inotifywait -r -e modify,create,delete,move /path/to/source; do rsync -av --delete /path/to/source/ /path/to/target/ done
- Запустите этот скрипт в фоновом режиме для постоянного наблюдения.
Данный скрипт будет автоматически синхронизировать изменения на исходном диске с целевым диском без необходимости ручного запуска.
Заключение
Для достижения ваших целей наиболее эффективным решением будет комбинация Grsync с использованием inotify для автоматизации процессов. Это позволит вам иметь актуальную и полную копию ваших данных с минимальными усилиями. Не забудьте также о регулярном мониторинге здоровья жестких дисков с помощью утилит, таких как smartctl, чтобы предотвратить возможные потери данных.