Является ли rsync самым быстрым и надежным способом проверки идентичности каталогов?

Вам нужно убедиться, что новая библиотека действительно заменяет библиотеку вашей системы. В системе Debian amd64 это будет что-то вроде /usr/lib/x86_64-linux-gnu/libinput.so.10 .6.2; вы должны скопировать свою новую библиотеку туда:

./configure && make && sudo cp -P src/.libs/libinput.so* /usr/lib/x86_64-linux-gnu/

Более эффективным подходом будет использование модификации пакета libinput вашего дистрибутива; например, в Debian:

apt-get source libinput
cd libinput-1.1.3

Измените evdev-mt-touchpad-gestures. c соответствующим образом, затем

dch -n "Reduce two-finger scroll timeout."
dch -r ignored
dpkg-buildpackage -us -uc
sudo dpkg -i ../libinput10*deb

(У вас должны быть установлены devscripts и dpkg-dev.)

Вы можете сделать что-то подобное в дистрибутивах на базе RPM.

5
22.01.2019, 14:13
2 ответа

Скорость и надежность часто являются противоположными требованиями. diff (или cmp ) будет сравнивать файлы побитно, что даст наиболее надежный ответ. (Используйте diff -q , если вы только хотите узнать, совпадают ли файлы.)

Чтобы сделать это быстрее, вам придется отказаться от полного чтения файлов и рассчитывать на временные метки; или пропустить передаваемые данные, что, вероятно, не является большой проблемой для одной системы, поскольку дисковый ввод-вывод, вероятно, будет фактором, ограничивающим скорость.

Если файлы находились в разных системах, и у вас есть md5sum или аналогичный, вы можете сделать что-то вроде

cd /somewhere ; find . -type f | xargs -d '\n' md5sum > /tmp/checksums

на обоих концах, а затем сравнить выходные файлы. Таким образом, вам нужно будет передавать только хеши, а не все данные. (или sha512sum , если вы хотите более сильную проверку). rsync -c также очевидно внутренне использует MD5 .


Выбор между простой проверкой временных меток и чтением всех данных также зависит от предполагаемого источника ошибок. Проверка метаданных покажет, завершился ли процесс копирования перед копированием всего, но не будет проверять фактические скопированные данные. Чтобы обнаружить скрытое повреждение данных, данные абсолютно должны быть прочитаны полностью и либо сравнивать полные данные, либо просто контрольные суммы. С помощью rsync rsync -i -c выведет список файлов, контрольные суммы которых не совпадают, и скопирует их снова.

3
27.01.2020, 20:34

Если вы используете diff, он всегда читает содержимое файла, чтобы выявить любые различия между его содержимым.

По умолчанию Rsync не читает содержимое файлов, если имя файла, время изменения и размер файла совпадают. Если они одинаковы, он предполагает, что содержимое файла одинаково, и не утруждает себя их чтением. Это на несколько порядков ускорит работу с уже одинаковыми (или почти одинаковыми) каталогами.

В большинстве случаев такое поведение не является проблемой, так как очень редко файл может быть изменен как до, так и после синхронизации, оба в одном и том же 1-секундном окне, чтобы иметь одинаковое время изменения, и сохраняют одинаковый размер файла. И даже если бы это действительно произошло, вряд ли это имело бы большое значение.

Вы можете заставить rsync всегда читать содержимое файла независимо от времени модификации (или размера) с помощью параметра командной строки - ignore-times .

7
27.01.2020, 20:34

Теги

Похожие вопросы