Я запутался в работе rsync. Вот что я сделал и ожидал.
Я создал две папки с именами «sbck» и «dbck».
Сценарий 1:
Я создал файл с именем a.txt
и создал его копию с помощью cp -rp a.txt aa.txt
. Я поместил оба файла в sbck
папку. Далее я сделал rsync -rvch sbck/ dbck/
. Это переместило оба файла в dbck.
Вопрос: Поскольку и a.txt, и aa.txt одинаковы, почему rsync разрешает эту копию? Разве это не должно быть просто что-то одно из обоих?
Сценарий 2:
Я создал файл с именем a.txt
и создал его копию с помощью cp -rp a.txt aa.txt
. Я поместил оба файла в sbck
папку. Далее я сделал cp -rp sbck/a.txt dbck/
. Позже я сделал rsync -rvch sbck/ dbck/
. Это переместило aa.txt
в dbck.
Вопрос: Поскольку и a.txt, и aa.txt одинаковы, и я уже переместил a.txt в dbck. почему rsync позволяет копировать aa.txt в dbck? Как именно -c помогает мне в этом сценарии?
решение1
Я думаю, вы не понимаете, что -c
делает. rsync
не делает дедупликацию файлов, с -c
опцией или без нее. Все, -c
что делает, это меняет способ, rsync
решает, нужно ли обновлять файл в месте назначения.
Предположим , sbck/a.txt
и dbck/a.txt
, и вы запускаете rsync -rvh sbck/ dbck/
(примечание: нет -c
опции). Что rsync
делает, так это сравнивает размер и время модификации этих двух файлов, и если они совпадают, то он предполагает, что содержимое файлов также совпадает, и не будет беспокоиться о копировании sbck/a.txt
в dbck/a.txt
.
Теперь предположим, что вы запустили rsync -rvch sbck/ dbck/
(с -c
этим временем). На этот раз rsync
вычислит контрольные суммы sbck/a.txt
и dbck/a.txt
и использует их (вместо их размера и времени мод) для определения того, являются ли файлы одинаковыми и, следовательно, новое содержимое sbck/a.txt
не нужно копировать в dbck/a.txt
. Он не сравнивает контрольную сумму sbck/a.txt
с контрольной суммой любого другого файла в исходном или целевом дереве.