Вопрос или проблема
Я чувствую, что rsync работает неправильно для меня, и я не уверен, что именно я делаю не так.
Вот ситуация. У меня есть две локальные директории: /home и /home2. Я пытаюсь понять rsync, поэтому использую эти локальные директории, прежде чем делать коммиты на серверах. Директории /home2 и /home были созданы в какой-то момент в прошлом, но в них много одних и тех же файлов — некоторые новее других в этих двух директориях.
У меня есть только скрытые файлы в обеих директориях для пользователя.
## Только скрытые файлы
[root@prod-srvr2 home2] $ ll /home2/newusr
total 0
## Список всех скрытых файлов в /home2/newusr
[root@prod-srvr2 home2] $ ls -lad /home2/newusr/.*
drwx------. 3 newusr newusr 114 Oct 14 08:23 /home2/newusr/.
drwxr-xr-x. 17 root root 234 Oct 4 15:20 /home2/newusr/..
-rw------- 1 newusr newusr 87 Oct 3 19:00 /home2/newusr/.bash_history
-rw-r--r--. 1 newusr newusr 18 Mar 30 2022 /home2/newusr/.bash_logout
-rw-r--r--. 1 newusr newusr 141 Mar 30 2022 /home2/newusr/.bash_profile
-rw-r--r--. 1 newusr newusr 376 Mar 30 2022 /home2/newusr/.bashrc
drwx------. 2 newusr newusr 29 Jan 15 2024 /home2/newusr/.ssh
-rw------- 1 newusr newusr 219 Oct 14 08:23 /home2/newusr/.Xauthority
## Список всех скрытых файлов в /home/newusr
[root@prod-srvr2 home2] $ ls -lad /home/newusr/.*
drwx------ 4 newusr newusr 6144 Oct 28 09:56 /home/newusr/.
drwxr-xr-x 18 root root 6144 Oct 4 15:20 /home/newusr/..
-rw------- 1 newusr newusr 97 Oct 25 19:00 /home/newusr/.bash_history
-rw-r--r-- 1 newusr newusr 18 Mar 30 2022 /home/newusr/.bash_logout
-rw-r--r-- 1 newusr newusr 141 Mar 30 2022 /home/newusr/.bash_profile
-rw-r--r-- 1 newusr newusr 376 Mar 30 2022 /home/newusr/.bashrc
drwx------ 3 newusr newusr 6144 Jun 4 20:47 /home/newusr/.dbus
drwx------ 2 newusr newusr 6144 Jan 15 2024 /home/newusr/.ssh
-rw------- 1 newusr newusr 290 Oct 28 09:56 /home/newusr/.Xauthority
## rsync с проверкой контрольной суммы в режиме "сухой" - ** Неверно - файлы в /home новее и больше
[root@prod-srvr2 home2] $ rsync -Hvnaczh /home2/newusr/ /home/newusr
sending incremental file list
./
.Xauthority
.bash_history
отправлено 336 байт получено 26 байт 724.00 байт/сек
общий размер 1.57K ускорение 4.35 (РЕЖИМ СУХОЙ)
## Проверка размера и даты/времени в режиме "сухой" - ** Неверно - файлы в /home новее и больше
[root@prod-srvr2 home2] $ rsync -Hvnazh /home2/newusr/ /home/newusr
sending incremental file list
./
.Xauthority
.bash_history
отправлено 240 байт получено 26 байт 532.00 байт/сек
общий размер 1.57K ускорение 5.91 (РЕЖИМ СУХОЙ)
Таким образом, очевидно, что я не понимаю, что делаю, и что означают параметры или существует какая-то другая проблема. Также почему количество переданных байтов отличается в каждом вызове rsync?
Спасибо за любую помощь, которую вы можете мне оказать.
Ответ или решение
rsync: Как правильно использовать параметры и диагностировать проблемы с синхронизацией файлов
Понимание работы утилиты rsync
– это важный аспект для успешного взаимодействия с файлами на локальных и удаленных системах. В вашем случае наблюдаются проблемы с синхронизацией между каталогами /home
и /home2
, и хотя утилита кажется вам некорректно функционирующей, скорее всего, это связано с ошибочным использованием её параметров. Давайте разберем вашу ситуацию в деталях.
Описание проблемы
Вы выполнили команды rsync
с различными параметрами, и результаты показали, что некоторые файлы из /home/newusr
(файлы, которые, как вы отметили, более новые или более объемные) не передаются. При этом размеры передаваемых данных варьируются от одной команды к другой.
Возможные причины
-
Некорректное использование опций:
- Вы используете параметр
-c
, который заставляетrsync
вычислять контрольные суммы для всех файлов. Это может существенно замедлить процесс и приведет к тому, что файлы не будут синхронизированы, если контрольные суммы совпадают, даже если размеры и даты отличаются. - Опция
-n
приводит к выполнению "сухого" запуска (dry run
), что полезно для предварительной проверки, но не является окончательной проверкой.
- Вы используете параметр
-
Различные параметры:
- В вашем примере два раза выполнен
rsync
, но с изменением параметров: в одном случае используется-c
, в другом — нет. Разные параметры могут приводить к разной обработке файлов, что и объясняет разницу в передаче данных.
- В вашем примере два раза выполнен
-
Проблемы с правами:
- Убедитесь, что у вас достаточно прав на чтение файлов в
/home/newusr
и на запись в/home2/newusr
. Если прав недостаточно, это может вызывать проблемы с синхронизацией.
- Убедитесь, что у вас достаточно прав на чтение файлов в
-
Конфликтующие изменения:
- Если на файлы в
/home/newusr
были внесены изменения после последнего выполненияrsync
, это также может помешать правильной синхронизации.
- Если на файлы в
Рекомендации для решения проблемы
-
Команда без контрольных сумм:
Попробуйте выполнитьrsync
без параметра-c
, чтобы проверить, не будут ли переданы файлы только на основе времени и размера:rsync -Havnazh /home2/newusr/ /home/newusr
-
Тестирование с различными параметрами:
Запуститеrsync
с параметром-u
, который синхронизирует только более новые файлы:rsync -Havzu /home2/newusr/ /home/newusr
-
Проверка прав:
Убедитесь, что вывод командыls -la
показывает, что у вас есть все необходимые права доступа. Если необходимо, используйтеchmod
илиchown
, чтобы изменить права. -
Логирование:
Включите детальное логирование, используя параметр-vv
, чтобы увидеть более подробный вывод о том, что делаетrsync
:rsync -Havv /home2/newusr/ /home/newusr
-
Сравнение с утилитами:
Вы также можете использовать другие утилиты для сравнения файлов, такие какdiff
, чтобы явно увидеть различия между директориями:diff -r /home2/newusr/ /home/newusr/
Заключение
Убедитесь, что у вас есть четкое понимание параметров, которые вы используете с rsync
. Ошибки в параметрах могут привести к неправильной синхронизации файлов, даже если программа сама по себе работает корректно. Сравните результаты с различными параметрами, проверьте права и используйте логирование для получения более подробной информации о процессе. Это не только улучшит ваши навыки работы с rsync
, но и позволит избежать проблем в будущем.