Вопрос или проблема
Я пытаюсь синхронизировать каталог с локальной файловой системы ext4 на три файловые системы FreeBSD ufs, используя rsync
. Вот моя настройка:
- Локальная машина на GNU/Linux, файловая система ext4, смонтированная в
/mnt
- Удалённая машина на FreeBSD 14.1 с тремя файловыми системами ufs, смонтированными под
/media/m1
,/media/m2
,/media/m3
Сначала я синхронизируюсь с локальной на первый удалённый диск с помощью:
sudo rsync -auv --delete -A -X --exclude=lost+found --rsync-path="sudo /usr/local/bin/rsync" --numeric-ids /mnt/ username@hostname:/media/m1/backup
Обратите внимание, что rsync
запускается с привилегиями root как на локальной, так и на удаленной машине. Также на машине FreeBSD файловые системы смонтированы с опцией acls
:
sudo mount -o acls -t ufs ...
поэтому опция rsync
-A
должна работать правильно.
После однократного запуска rsync (ошибок не сообщалось) я запустил его второй раз и ожидал, что изменений не будет. Однако во время второго запуска две папки были записаны так, как будто они были изменены снова:
sending incremental file list
backup/folder/subfolder1/
backup/folder/subfolder2/
Неважно, сколько раз я запускаю команду, эти две подпапки всегда перечислены. Похоже, что rsync
пытается установить некоторые атрибуты на папки, но ему это не удаётся.
Интересно, что когда я пытаюсь синхронизировать папки между смонтированными файловыми системами ufs на удалённой машине, например, с помощью
sudo rsync -auv --delete -A -X --numeric-ids /media/m1/backup/ /media/m2/backup
я получаю такое же поведение: во время первого запуска все файлы из оригинальной папки перечислены; во время последующих запусков одни и те же два каталога сообщаются снова и снова:
sending incremental file list
backup/folder/subfolder1/
backup/folder/subfolder2/
Как будто rsync
пытается что-то изменить, неудачно, не сообщая об ошибке, и пытается снова и снова. В итоге: мои резервные копии отличаются от оригинала.
У вас есть объяснение этого поведения или какие-то подсказки, на что мне следует обратить внимание, чтобы решить эту проблему?
Ответ или решение
Конечно, я постараюсь помочь вам разобраться в проблеме с использованием rsync для синхронизации файловых систем. Ваша ситуация включает в себя использование rsync для синхронизации данных с локальной машины Linux на три файловые системы UFS на удаленной машине FreeBSD. Проблема заключается в том, что две папки постоянно отмечаются как измененные после каждой синхронизации.
Возможные причины проблемы
-
Атрибуты файлов и папок: Опция
-A
в rsync используется для передачи ACL (Access Control Lists), которые могут управлять разрешениями на доступ к файлам и папкам. Несмотря на то, что обе ваши системы поддерживают ACL, может быть несовместимость или проблема в их реализации на разных системах, что приводит к невозможности корректного копирования или применения ACL. -
Атрибуты расширенной метыданных (xattrs): Опция
-X
передает расширенные атрибуты файлов. Проблема может возникать, если UFS на FreeBSD не поддерживает все атрибуты, которые пытается передать rsync. -
Различия в файловых системах: EXT4 и UFS имеют разные характеристики и поведение, что может привести к небольшим отличиям в том, как метаданные файлов интерпретируются или сохраняются после переноса файлов между системами.
Рекомендации по решению проблемы
-
Проверка и удаление несущественных метаданных: Попробуйте отключить флаги
-A
и-X
и выполните синхронизацию только с основными параметрами переноса. Если проблема исчезнет, она связана с ACL или расширенными атрибутами. В этом случае возможно стоит вручную или отдельно переносить ACL, либо исключить их перенос, если это не критично. -
Логирование и диагностика: Используйте дополнительные флаги rsync, такие как
-i
(для подробного вывода изменений) и-vv
(для увеличения уровня детализации), чтобы точно увидеть, что rsync пытается изменить при каждой синхронизации. -
Проверка и корректировка монтирования в FreeBSD: Попробуйте изменить способ монтирования файловых систем на FreeBSD для учета различий ACL или включения или исключения определенных опций, влияющих на метаданные.
-
Тестирование без удаленного сервера: Если возможно, протестируйте синхронизацию в пределах одной операционной системы или между системами с идентичными файловыми системами, чтобы увидеть, возникает ли проблема.
-
Обновление и проверка rsync: Убедитесь, что у вас установлены последние стабильные версии rsync на обеих системах, чтобы избежать ошибок, которые могли быть исправлены в новых версиях.
Заключение
Чтобы устранить разницу между оригиналом и резервной копией, следует внимательно проанализировать метаданные папок, особенности работы с ACL и обеспечением совместимости между файловыми системами. Ваша задача как ИТ-специалиста — выявить источник проблемы и по возможности адаптировать конфигурацию для гарантии полной синхронизации данных.
Если вы выполните перечисленные шаги и симптомы сохранятся, рекомендуется обратиться к специализированным форумам FreeBSD и Linux, где вы сможете получить советы от более широкого сообщества.