rsync та символічні посилання


69

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

  1. rsync-aПрапор 's включає -lпрапор (тобто "копіювати посилання як символьні посилання"). Чи це просто означає, що воно скопіює посилання або те, що воно перейде за посиланням і скопіює все, що знаходиться в каталозі посилання? Я хочу цього уникнути, оскільки у мене є посилання на каталоги, наповнені медіа-файлами, які б передбачали копіювання сотень гігабайт, які мені не потрібно робити резервну копію.
  2. Побоюючись (але не певно), що rsync -aскопіював би всі ці медіа-файли, я замість цього додав --no-linksпрапор. Здається, це не поведінка, яку я хочу. Він просто ігнорує копіювання будь-якого посилання, що є проблематичним, оскільки у мене є посилання, які я хочу скопіювати (наприклад, посилання на загальні файли заголовків з різних каталогів проектів).
  3. Припустимо, що №1 вище (без --no-linksпрапора) - це те, що я дійсно хочу, і воно просто копіює посилання, не копіюючи пов'язані файли, чи будуть посилання розриватися, коли вони створюються резервними копіями? Наприклад , я , можливо , rsyncджерело каталогу /home/me/projects/miscв /media/extdrive/backup/home/me/projects/misc. У цьому випадку я припускаю, що rsyncвін недостатньо розумний, і він не намагається виправити вміст символьних посилань для відносних змін каталогів. Це правильно? Це нормально, неважливо, чи посилання розбиваються в резервних каталогах до тих пір, поки вони будуть виправлені та працюють, якщо настане такий час, коли їх потрібно буде відновити.

3
Прапор -L - це, мабуть, те, що ви хочете. З сторінки man rsync на Centos Linux: "-L, --copy-посилання перетворять симпосилання в референтний файл / dir." Я рекомендую протестувати це за допомогою деяких зразків каталогів та посилань, щоб переконатися, що ви не перезаписуєте будь-які дані, які не збираєтесь робити. Відредаговано, щоб включити попередження про можливі втрати даних. ;)
Мік Т

Відповіді:


90
  1. "Копіювати символьні посилання як символьні посилання" означає саме те, що він говорить: Якщо rsync бачить символьне посилання у вихідному каталозі, він створить ідентичне символьне посилання в пункті призначення. Більше нічого.

    (Кілька рядків на сторінці керівництва, інший варіант, --copy-linksописує протилежну поведінку (завжди копіюючи дані), яку ви назвали небажаною.)

    Дивіться також розділ "Символічні посилання":

    Якщо --linksвказано, символічні посилання відтворюються з однаковою ціллю в пункті призначення.

  2. Це не та поведінка, яку ви хочете, тому що ви неправильно трактуєте те, що --linksробить, і тому просите про неправильну поведінку (див. Відповідь №1).

  3. За замовчуванням він точно копіює призначення .

    Тобто, якщо посилання вказувало на абсолютний шлях (наприклад /home/me/projects), воно продовжуватиме вказувати на той самий шлях; він не зламається , він просто продовжить вказувати на файл у вашому домашньому каталозі, а не на резервну копію.

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

    На жаль, не існує жодного варіанту перекладу абсолютних посилань на їх нову базу (лише варіант їх повного розбиття). Щоб уникнути проблем, слід змінити існуючі посилання на відносні (що, як правило, хороша ідея для посилань всередині $ HOME).


2
гмм, так у чому різниця між --copy-linksі --links?
Олександр Міллс

--copy-links= -L, і --links= -l. Дивіться опис документації у моїй відповіді тут: superuser.com/a/1388910/425838
Габріель Степлес

12

@grawity має чудову відповідь, але ось скріншот деякої відповідної інформації з документації. Ось точні формулювання -lта -Lваріанти, наприклад, які, здається, є найбільш релевантними.

введіть тут опис зображення

Джерело: https://linux.die.net/man/1/rsync або man rsyncсторінки керівництва в Linux.

Зауважте також, що опція -a( --archive) також включає в себе -lопцію, яка є приголомшливою, оскільки мені дуже подобається використовувати -lпараметр, щоб зберегти свої посилання від джерела як посилання на пункт призначення. З чоловічої сторінки:

-a, --archive               archive mode; equals -rlptgoD (no -H,-A,-X)

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

... виконуючи сухі прогони, записуючи stderr та stdout у (окремі) файли, показуючи статистику, використовуючи файл включаючи шлях та виключаючи файл тощо, дивіться мою повну відповідь тут у 2-му розділі під назвою " 2. Командний рядок rsync інструмент (Linux, Windows з Cygwin) ": https://superuser.com/a/1464264/425838

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