Знімок `cp -al`, жорсткі посилання якого редагуються до нового файлу


11

Я намагаюся регулярно робити знімки масивної папки.

Я прочитав тут: http://www.mikerubel.org/computers/rsync_snapshots/#Incremental,
який cp -alробить знімок папки шляхом простого копіювання жорстких посилань.

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

Як я можу цього досягти?

ps Я спробував rsync -a --delete --link-dest=../backup.1 source_directory/ backup.0/, але це однакова проблема.

Відповіді:


7

Ось так працюють жорсткі посилання. Але існують способи:

Приходить на думку кілька варіантів:

  • Використовуйте файлову систему з підтримкою файлів, що копіюються при записі, наприклад btrfs. Звичайно, якщо ви використовуєте btrfs, ви просто використовуєте його рідні знімки ... Якщо ваша файлова система підтримує його, ви можете використовувати cp --reflink=always. На жаль, ext4 це не підтримує.
  • Діліться лише жорсткими посиланнями на своїх знімках, а не з оригіналом. Тобто, перший раз, коли ви бачите задану версію файлу, скопіюйте його на знімок. Але наступного разу зв’яжіть це з тим, що було зроблено в попередньому знімку. (Не впевнений, яку програму я робив для цього - десять років тому - але пошук виявляє дирвіш, obnam, резервне копіювання і rsnapshot)
  • Залежно від того, як змінюються ваші файли, ви можете гарантувати, що для їх зміни використовується темп запису / перейменування, то це порушить жорстке посилання - тому версія на знімку залишиться незайманою. Це менш безпечно, оскільки помилки можуть пошкодити ваш знімок.
  • Зробіть знімки LVM всієї файлової системи.

Звичайно, є й інший варіант - використовувати належну систему резервного копіювання. Більшість із них може керувати лише резервними копіями змінених файлів.


Що ви рекомендуєте як створити резервну копію масивної папки?
Hermann Ingjaldsson

Я думав використовувати rsync на сервері, який має cronjob робити cp -al регулярно для знімків .. поряд з rsync-ing далі ще більше копій. Як це звучить?
Hermann Ingjaldsson

@HermannIngjaldsson добре, це залежить від того, як ви робите резервні копії. Особисто я просто додавав би це до мого налаштування Bacula, але я б не рекомендував цього, якщо у вас є купа машин для резервного копіювання, або ви вже знаєте Bacula. Отже, я думаю, я б запропонував вам спробувати спершу.
дероберт

rsnapshotдобре
розробник

4

Те, що ви шукаєте, - це форма копіювання під час запису , де кілька файлів, що мають однаковий вміст, використовують однаковий простір на диску, поки один з них не буде змінено. Жорсткі посилання реалізовують функцію копіювання під час запису лише у тому випадку, якщо програма, яка пише, видаляє файл та створює новий файл з тим самим іменем (що зазвичай робиться шляхом створення нового файлу під іншим іменем, а потім переміщення його на місце). Програма, яку ви використовуєте, очевидно, не робить цього: це перезапис існуючого файлу.

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

Fl-cow модифікує програми для систематичного використання стратегії заміни на файли з декількома жорсткими посиланнями.

Крім того, ви можете зберігати свої файли у файловій системі, яка виконує копіювання під час запису чи дедуплікації, або має функцію знімка, і не турбуватися про жорсткі посилання: Btrfs або Zfs . Залежно від вашої схеми розділення, можливим є використання знімків LVM.

Моя рекомендація - використовувати належний інструмент знімка. Зробити надійні резервні копії напрочуд складно. Ви, мабуть, хочете, як rsnapshot .


2

Далі йде сценарій рубіну, про який я писав, що перетворює "cp -al" і rsync в хороший сценарій, який можна запустити вручну або через cron. Місце призначення може бути місцевим або віддаленим (через ssh):

Тіммашина гетто

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

Джерело:

  • / дім / флакрат

Місце призначення:

  • / дані / резервне копіювання / щодня
    • / понеділок
    • / вівторок
    • / середа
    • / четвер
    • ...

Жорсткі посилання створюються за допомогою запуску "cp -al" проти вчорашнього резервного копіювання. Скажіть, це вранці у вівторок, коли ви запускаєте його:

cd /data/backup/daily

rm -rf tuesday

cp -al monday tuesday

rsync -a --delete /home/flakrat /data/backup/daily/tuesday/


0

rdiff-резервне копіювання, здається, робить те, що ви хочете, перевірте це.

Використовуючи rsync, спочатку потрібно зробити повну резервну копію, не використовуючи жорсткі посилання. Наступна резервна копія може вказувати на попередню резервну копію та жорстке посилання на неї. Таким чином ваші резервні копії важко не пов'язані з вашими робочими файлами (тими, які ви змінюєте). Приклад. Якщо в попередньому резервному режимі було таке резервне копіювання папки.01, мій сценарій резервного копіювання спочатку збільшить папки, перейменувавши їх на одну, тому backup.01 стає backup.02. Тоді сценарій створює нову порожню папку під назвою backup.01. Тоді це буде rscync нову резервну копію в нову папку та жорстке посилання на backup.02, так що лише нові файли займуть будь-який простір у резервній копії. Команда rsync виглядатиме приблизно так: rsync -rlt sourcepath backuppath / backup.01 --link-dest = backuppath / backup.02

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

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