Чи безпечно використовувати жорсткий диск під час роботи rsync?


27

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


1
Зауважте, що "використовувати" може бути так само просто, як відкрити браузер, нічого не роблячи. Браузери, як правило, записують багато випадкових матеріалів у свої каталоги даних. У гіршому випадку ви отримуєте непослідовну резервну копію, тобто під час відновлення ви не зможете відновити вкладки, ваші закладки можуть бути відсутніми (оскільки база даних пошкоджена) або щось у такому порядку.
Jonas Schäfer

Якщо у вас є стільки даних для резервного копіювання, ви можете розглянути можливість розділення резервної копії на менші шматки (суб-дерева). Тоді потрібно зберегти лише статичну частину лише тієї частини, яка зараз виконується, і ви зможете побачити, яка саме частина, слідкуючи за ходом роботи вашого сценарію (з журналом тощо). Оскільки це не одна велика резервна копія, деякі частини можуть бути мало синхронізовані з іншими, але якщо ви працюєте з однією великою резервною копією в живій системі, це все одно відбудеться.
Джо

Відповіді:


34

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

Що, як правило, не безпечно - це писати всередині вихідного каталогу під час роботи rsync. "Записує" - це все, що змінює вміст вихідного каталогу або будь-якого його підкаталогу, тому включає оновлення файлів, видалення, створення тощо.

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

Однак існує простий спосіб цього: як тільки він закінчиться, запустіть rsync знову, з тими ж параметрами. (Якщо у вас є якийсь фанк-фактор видалення; якщо це зробити, то будьте трохи обережнішими.) Це призведе до повторного сканування джерела та перенесення будь-яких відмінностей, які не були зібрані під час початкового запуску.

Другий запуск повинен перенести лише відмінності, що відбулися під час попереднього запуску rsync, і як такий завершиться набагато швидше. Таким чином, ви можете сміливо користуватися комп’ютером нормально під час першого запуску, але слід максимально уникати будь-яких змін джерела під час другого запуску. Якщо ви можете, настійно подумайте про повторне перезавантаження вихідної файлової системи лише для читання перед початком другого запуску rsync. (Щось подібне mount -o ro,remount /media/sourceповинно робити.)


7
Можна навіть зробити третій запуск після другого пробігу: це може зайняти ще менше часу ... ;-)
gerlos

5
@gerlos Здається, що з'являється візерунок. Це звучить майже так, як можна просто продовжувати виконувати команду rsync в кінці кожного сеансу використання, і протягом декількох днів це буде виконано за короткий час.
Monty Harder

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

1
@gerlos Як осторонь, тому я маю запис, як @reboot root find / -print &>/dev/nullу моєму системному crontab, для заповнення кешу. (Фактичний запис є складнішим для обліку декількох спеціальних випадків у моїй конкретній системі.) Він використовує деяку оперативну пам’ять та деякий час настінного годинника на початку після запуску, щоб покращити сканування дерева каталогів досить трохи IME.
CVn

1
@ MichaelKjörling: заперечна ідея кешувати ієрархію. Але, можливо, вам слід замість цього запустити updatedb(будувати базу даних locate) або slocate -u(те саме, якщо у вас є розміщення)? Таким чином, ви все ще кешуєте ієрархію, але ви також збираєте бази даних locate або slocate, що дозволяє вам використовувати ці команди для швидкого пошуку багатьох файлів?
Олів'є Дулак

22

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

У вашому випадку rsyncбуде складено список файлів, а потім запустіть резервну копію. Тому будь-який файл, який ви додасте до вихідного жорсткого диска після запуску резервної копії, не буде скопійовано.

Що я роблю, це взагалі не використовувати пристрій під час створення резервної копії. Це більш безпечний спосіб отримати швидку та послідовну резервну копію.


14
Зазвичай я даю їй запуститись, а потім виконую другий запуск, rsyncякий закінчиться через кілька секунд, оскільки копіюються лише ті файли, які я змінив під час виконання. Все буде в кешах, тому в цей період простіше утриматися від модифікацій.
Мартін Удінг

15

Безпечно читати дані з вихідних областей під час rsyncроботи, але якщо ви оновлюєте що-небудь, копія, яка rsyncстворює / оновлює, ймовірно, буде непослідовною:

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

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

  3. За деяких обставин rsyncпобачите неузгодженість і попередить вас. Якщо ви вилучите файл або підкаталог з каталогу, який вже був відсканований, але його вміст не було відскановано, ви отримаєте повідомлення про помилку про відсутність об'єкта. У подібних обставинах іноді (якщо розмір та / або мітка часу змінився) також можна попередити про файли, що змінюються в середині сканування.

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

Якщо ви використовуєте LVM для частини своєї системи зберігання даних, ви можете скористатися тимчасовим знімком, щоб зробити резервну копію в часі. Для цього потрібно, щоб у групі гучності було достатньо місця, щоб створити об'єм знімка, достатньо великий, щоб утримати всі зміни, які відбудуться протягом тривалості необхідного знімка. Перегляньте документацію LVM (або один із багатьох прикладів в Інтернеті: шукайте "резервну копію знімків LVM" або подібну інформацію) для отримання більш детальної інформації.

Навіть без LVM деякі файлові системи підтримують самі знімки - тому ви, можливо, також захочете вивчити цей варіант.

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


Мені найкраще подобається ваша відповідь, тому що ви детально описуєте, що станеться, якщо файли будуть змінені. Ви не тільки надаєте альтернативу, але й вирішуєте невідповідності, які вона може спричинити (відсутність оновлення, попередження про відсутній файл тощо). У моїй ситуації використання rsync для посадки довгого резервного копіювання, а потім оновлення його через кілька днів - не велика справа, і це також схоже на ситуацію з ОП. Це не здається, що він / вона вимагає резервного копіювання на рівні підприємства вперше, а просто хоче використовувати комп’ютер у середній час. Я кажу просто запустіть rsync вдруге, щоб спіймати оновлені файли.
ibennetch

11
  • Джерело HDD може читати що завгодно під час rsync.

  • Джерело HDD може записувати будь-який вміст, не пов'язаний із вмістом rsync.

  • Призначення жорсткий диск може читати що завгодно під час rsync.

  • Місцевий жорсткий диск може записувати що завгодно під час rsync з умовою мати достатньо місця для синхронізованого вмісту.

Звичайно, у будь-якому випадку відбудеться зниження продуктивності.


0

Усі нинішні відповіді говорять про безпеку даних з точки зору послідовності та припускаючи досконале обладнання.

Ще одна річ, яку слід врахувати, - це сама безпека обладнання. Якщо у вас немає резервних копій жорстких дисків, які можуть бути на межі виходу з ладу (ви, можливо, ще не знаєте), і ви робите початкову комплексну резервну копію, не використовуйте її. Навіть не монтуйте його, якщо дані критичні. Ви можете використовувати такий інструмент, як ddклонувати диск як блоковий пристрій. Що ви не хочете, щоб шукати дискову голівку та, можливо, писати під час спроби зробити резервну копію. Плюс ddповинен бути швидшим для початкової резервної копії, оскільки він просто копіює біти для того, щоб (якщо диск в основному не повний, я вважаю, що rsync виграє і в початковому випадку).

Для наступних додаткових резервних копій rsync є прекрасним вибором, і я погоджуюся з іншими відповідями на 100%.


1
Якщо медіа є маргінальними або навіть потенційно маргінальними, ddце не найкращий вибір. Використовувати ddrescueзамість цього; він частково відводить часткові збої. Але це не було врахуванням у первісному питанні.
CVn

@ MichaelKjörling Це хороший момент.
Зак
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.