Чи безпечно використовувати rsync, коли джерело оновлюється?


19

Чи безпечно користуватися, rsyncколи вихідна файлова система змонтована та записується, припускаючи, що вона може бути дуже модифікована під час роботи rsync? Я припускаю, що в умовах перегонів я не можу отримати останні модифікації, але чи є ризик корупції?


1
Вас турбує узгодженість (між файлами, такими як файл даних та якийсь пов'язаний файл метаданих, журнал чи якийсь подібний), або пошкодження (у межах одного файлу) у разі змін?
CVn

Добре, я не вважав узгодженість файлів. Я гадаю, що rsyncнасправді з цим нічого не можна зробити, лише знімок може, але мене більше хвилює корупція у файлі.
brianmearns

Відповіді:


20

Використання rsyncдосить безпечно для файлових систем, встановлених для читання та запису. Після rsyncзапуску він створює список файлів, а потім починає копіювати ці файли. Цей список файлів не оновлюється під час запуску. Потім фактичні дані копіюються.

Це означає, що коли файл зміниться після rsync створення списку файлів, він буде копіювати новий вміст. Однак, коли новий файл додається після rsyncстворення списку файлів, цей новий файл не копіюється. Якщо після видаленняrsync списку файлів буде видалено файл, rsync попередить, що він не може скопіювати цей файл. Майте на увазі, що rsyncце не знімок, це означає, що важко сказати, в який момент часу rsyncскопійовано дані.

Знімки з файлової системи або диспетчера томів (наприклад, за допомогою ZFS або LVM) створюються миттєво і є послідовним знімком файлової системи у чітко визначений момент часу, який потім можна скопіювати на інший хост. rsyncне пропонує такої консистенції.

РЕДАКТУВАТИ: Як інші вказували в коментарях, є ймовірність, що rsyncможе фактично пошкодити ваш файл. Коли rsync починає читати файл, і програма одночасно пише цей файл, у вас може виникнути пошкоджений файл.


2
Додано примітку до видалених файлів. Ймовірно, я дав би це ще один підсумок, якби я міг зробити знімок знімків та пропозиції rsync менеджера томів. Єдине, що мені здається, що ця відповідь відсутня - це поведінка rsync, коли файли джерела змінюються посеред копіювання. Я сумніваюся, що це справляється з цим добре, хоча.
CVn

Домовились. Якщо ви хочете, щоб певні файли відповідали, вам потрібна підтримка операційної системи?
Thorbjørn Ravn Andersen

1
Ця відповідь застосовується за умови, що програма на стороні джерела спочатку записує у тимчасовий файл, а потім переміщує його на місце. Якщо програма відкриває існуючий файл для запису в той час, коли rsync читає цей файл, rsync може скопіювати пошкоджену суміш старої та нової версій.
Жил "ТАК - перестань бути злим"

@Gilles Дякуємо, що вказали на це. Я оновив свою відповідь. Це пов'язано з rsync чи це трапляється з будь-якою програмою, яка читає, коли інша програма записує в той самий файл?
Марко

1
@Marco Це станеться з будь-якою програмою, якщо тільки обидва не використовують якийсь протокол блокування (у Unix немає обов'язкових блокувань, лише дорадчі блоки, тобто блокування, які працюють лише у тому випадку, якщо всі ними користуються). Ось чому звичайний протокол модифікації файлу, якщо паралельна модифікація викликає занепокоєння, - це написати тимчасовий файл, а потім перемістити його на місце.
Жил "ТАК - перестань бути злим"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.