Использование rsync для резервного копирования

13

В настоящее время я создаю резервную копию содержимого внешнего жесткого диска A путем (1) удаления всего на целевом внешнем жестком диске B и (2) копирования всего из A в B (в Finder). Внешний жесткий диск содержит только «основные данные» (папки, изображения, видео, документы и т. Д.), Ничего необычного / странного.

Но со всеми удивительными бесплатными инструментами, которые существуют, я не смог найти подходящего для резервного копирования (предложения приняты).

Я хочу автоматизировать это. После нескольких поисков, кажется, я могу использовать rsync. Затем я хочу автоматизировать это, используя, rsyncчтобы избежать копирования файлов, которые уже находятся на целевом жестком диске (конечно, если изменение было внесено, я хочу обновить файл / папку; то же самое с удаленными файлами / папками или новыми файлами / папки; идея в том, чтобы имитировать то, что я обычно делаю вручную с Finder).

Я дошел до этого

rsync -av --progress --delete /Volumes/A/ /Volumes/B

Теперь журнал полон файлов, имя которых начинается с .или ._или даже ._.. Они необходимы?

Вопрос

Как я могу копировать только те файлы, которые имеют значение, оставляя все те, которые не имеют значения. Например, если у меня есть, photo.pngя ожидал бы скопировать photo.png, а не ._photo.pngмного файлов.

Что --excludeили --exclude-fromможно безопасно использовать на Mac? Хорошим правилом может быть «просто скопировать все, что показывает Finder», и это то, что я скопировал бы, если бы вручную прошел через все папки.

 Дополнительный вопрос

Есть -av --progress --deleteдостаточно? Я совершаю преступление или рискую какими-то данными? Какие варианты вы бы использовали.

Пожалуйста, верните ваш ответ с некоторыми аргументами, я был бы признателен.

Я ищу способ автоматизации, rsyncкоторый кажется довольно мощным и бесплатным в использовании.

Manuel
источник
Комментарии не для расширенного обсуждения; этот разговор был перенесен в чат .
bmike
Что касается стратегии, описанной в 1-м абзаце, что произойдет, если после (1) - удаления всего в B - возникнет серьезная проблема с A? Вы можете потерять доступ к данным на А и предыдущей резервной копии. Если в вашем хранилище резервных копий достаточно места, как насчет удаления резервной копии только после успешного завершения новой резервной копии?
Рикардо
1
Ссылка @ bmike на разговор, перенесенный в чат, не работает.
Мерчако

Ответы:

17

Для максимальной безопасности скопируйте все

Самый безопасный вариант - скопировать все , включая невидимые файлы метаданных.

Файлы, как правило, существуют по причине и по мере изменения программного обеспечения, так же как и существование, цель и содержание этих файлов метаданных. Копирование всего уменьшит нагрузку на обслуживание и обеспечит легкость в том, что ничего не теряется.

Файл журнала, созданный пользователем, rsyncбудет технически связан с самой природой rsyncинструмента командной строки. Подумайте о том, чтобы предоставить пользователю проверенный, фильтрованный метаданные и, возможно, даже цветной кодированный вывод. Вы можете сделать это с помощью широкого спектра инструментов и языков сценариев. Если вам нужна помощь в этом подходе, задайте дополнительные вопросы здесь, в разделе «Спроси иначе» и « StackOverflow» .

Удалить последние и скопировать ресурсы OS X

Что касается rsyncфлагов, взгляните на вопрос Самый быстрый и безопасный способ скопировать массивные данные с одного внешнего диска на другой . В этом вопросе используются несколько дополнительных флагов:

sudo rsync -vaE --progress --delete-after /Volumes/SourceName /Volumes/DestinationName

В этой ситуации Eбудет обеспечено копирование вилок ресурсов и других специфических свойств Mac.

Возможно, вы захотите --delete-afterизбежать удаления до завершения копирования; обратите внимание, что этот подход может потребовать, чтобы целевой диск был вдвое больше исходного.

Возможные исключения

Ответ на связанный вопрос: Как я могу опустить FCPX Render Files из резервной копии Time Machine? предоставил полезную ссылку на файлы и папки OS X, которые можно исключить из большинства резервных копий . Эта ссылка содержит практический список шаблонов файлов, папок и путей, которые вы можете исключить.

Включить точечные файлы

Есть веские причины для резервного копирования файлов, начиная с точек, .*соответствующих файлов.

Некоторое программное обеспечение хранит предпочтения, настройки и другую полезную информацию в папках вверху папки пользователя в папках с невидимыми точками. Запуск ls -la ~/покажет эти папки и файлы.

Если какой-либо пользователь использует или имеет программное обеспечение, которое, в свою очередь, использует программное обеспечение для контроля версий, обязательно создайте резервную копию файлов точек. Такие программы, как subversion и git, хранят важную информацию в своих точечных папках. Эти скрытые папки могут быть разбросаны по вашей файловой системе, где бы ни находился проект.

Центр внимания и доступ к диску

Центр внимания - поисковая служба OS X. Spotlight использует этот mdworkerпроцесс для индексации и обновления каталога поиска. Если вас беспокоит возможное повреждение диска или медленное копирование, отключениеmdworker во время работы rsyncможет помочь. Лично я оставляю Spotlight включенным во время работы с большими rsyncпередачами.

Грэм Милн
источник
3
Самый безопасный вариант - скопировать все, включая невидимые файлы метаданных. Но та же самая ссылка из Carbon Copy Cloner говорит, что есть определенные файлы, которые создаются автоматически, поэтому он может даже повредить их, если вы скопировали их rsync.
Мануэль
1
Вы можете добавить полный пример для будущих читателей. Я нашел два источника, один и два (плюс третий, который вы связали); Я оставляю их здесь для дальнейшего использования.
Мануэль
1
«Есть веские причины для резервного копирования файлов, начинающихся с точек»: да! Эти файлы скрыты (от Finder для чайников), но в большинстве случаев это очень важные файлы.
дан
1
EИ --delete-afterключевые моменты , которые делают из этого ответа выигрышный.
дан
1
@danielAzuelos В -Eболее новых версиях есть то, -Xчто я рекомендую в некоторых местах, какой из них правильный? Или они оба? Я хотел бы получить актуальную, псевдо-полную версию, охватывающую большинство общих проблем. Будет ли копирование файлов Spotlight проще и быстрее, чем их создание? Как я могу остановить Spotlight, чтобы он не мешал? Как насчет caffeinateпроцесса? Или, может быть, если это просто резервный список, который не может быть проиндексирован Spotlight, тем более беспокойство и т. Д. На многие из этих вопросов наверняка был дан ответ.
Мануэль
5

Если вы используете rsyncверсию 3.0.6 для Carbon Copy Cloner или 3.1.2 для Homebrew, вы можете воспользоваться репликами Carbon Copy Cloner:

rsync -A -X -H -p --fileflags --force-change -l -N -rtx --protect-decmpfs --numeric-ids -go --delete-during --backup --backup-dir=</PATH/TO/STICK/BACKUP_when_using_delete> --protect-args <SRC>/ <DEST>

ylluminate
источник
--protect-decmpfsбольше не доступно с 3.1.3, см. github.com/Homebrew/homebrew-core/pull/23415 .
user74686
4

Я бы посоветовал не обрезать метаданные во время резервного копирования, особенно точечные файлы, например ._$filename, однако, если вы действительно хотите исключить точечные файлы из вашей rsyncкоманды, добавьте --exclude '.*'к нему.

rsync -av --exclude '.*' --progress --delete /Volumes/A/ /Volumes/B
user3439894
источник
Это хорошо. Я не был уверен, будет ли проблематично удалить все точечные файлы (кстати, есть ли разница между '.*'и '/.*'?). Я не думаю, что Finder копирует их все, может быть, только некоторые из них связаны. В этом случае я бы предпочел исключить только те, которые не нужны (например, .DS_Store). И да, те, которые могут быть важными, но которые я не хочу иметь в своем журнале, я могу фильтровать с помощью регулярных выражений.
Мануэль
1
То, что копирует Finder, недокументировано, и это является источником всех проблем при создании политики резервного копирования. Вы должны сохранить копию всех файлов, если вы хотите создать резервную копию, которая может быть использована точно вместо Aдиска.
дан
@danielAzuelos В противном случае основной жесткий диск A умрет, тогда я куплю третий жесткий диск C, скопирую его с жесткого диска B на жесткий диск C и, возможно, начну использовать один из B или C. Я снова говорю, что это не тот тип резервного копирования, который нужно использовать, как то, что делает SuperDuper. Просто мои фотографии лучше в двух местах, а не в одном.
Мануэль
4

Я не совсем доволен текущими ответами, но я попытаюсь осветить здесь немного возможностей, которые я видел в Интернете, пытаясь найти хорошую настройку rsync.

И, кстати, если кто-то заинтересован в Time Machine, как копии, есть rsnapshot. И есть также Unison для двухсторонней синхронизации. Кроме того, на самом деле есть несколько графических интерфейсов, таких как Backup Utility и arRsync ; не совсем то, что я искал, но они могли бы сделать работу за кого-то.

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

Вот неструктурированный список мыслей, которые вы можете принять во внимание

  • Если вы хотите убедиться, что ваш ноутбук не идет спать, вы можете захотеть caffeinateпроцесс caffeinate -s rsync -av .... Взято отсюда .

  • Если вы делаете локальные копии, как в моем случае, или даже если интернет-соединение не слишком медленное, вы не должны использовать -zoption (сжатие) и использовать -W(передавать весь файл, а не дельта-переносы; это значение по умолчанию, когда локально) и, вероятно, использовать --inplaceдля быстрого перевода. Взято отсюда .

  • Вы можете использовать --delete-afterлюбой файл, который будет сначала передан, а затем перемещен в место назначения (и удалил исходный), и это безопаснее, чем удаление перед передачей или во время передачи.

  • Вы можете остановить передачу, нажав ctrl + C, и она остановится чисто. Взято отсюда . Это был один из моих страхов в SuperDuper !, если вам нужно остановить перевод, вы получите сообщение «Вы оставите жесткий диск в неизвестном состоянии…».

  • В последних версиях есть --info=progress2что добавляет еще больше деталей -v.

  • Есть -P(что равно --partialи --progress), что оставит промежуточные файлы там, чтобы вы могли продолжать работу при перезапуске процесса (если по какой-то причине вы не можете завершить синхронизацию сразу).

  • Кто-то может быть заинтересован в остановке Spotlight или TimeMachine перед копированием и включении их после передачи. И даже отключить Spotlight для внешнего диска.

  • Другие варианты , используемые во всех этих ссылках , включают -x(или --one-file-system), -E( --executability), -H( --hard-links), -X( --xattrs), -A( --acls), и --sparse, --hfs-compression, --protect-decmpfs. Вы можете посмотреть на них.

Для меня базовая команда выглядит так (я мог бы использовать больше опций, но этого достаточно для примера):

caffeinate -s rsync -av --delete-after --progress --stats --exclude-from 'excludefile.txt' \
  "/Volumes/SrcHDD/" "/Volumes/DstHDD" # note the trailing slash / after the source

Теперь в моем случае я мог бы просто включить, {*.jpg,*.png,*.mp4,*.txt,*.pdf,…}и никто бы не сказал «вам также нужны системные файлы», но, поскольку я не хочу искать, чтобы получить все возможные типы файлов, из которых у меня есть файлы, я предпочитаю исключать. И есть вещи, которые не только могут быть, но и кажутся удобными для исключения.

Я нашел несколько ссылок, возьми что хочешь:

  1. https://bombich.com/kb/ccc4/some-files-and-folders-are-automatically-excluded-from-backup-task

  2. https://gist.github.com/tvwerkhoven/4541989

  3. https://github.com/necolas/dotfiles

  4. https://gist.github.com/shkm/5531679

  5. http://www.hackurmac.com/2014/08/backing-up-and-restoring-your-hackintosh.html

  6. https://github.com/jedda/Counterpart

  7. http://alanwsmith.com/rsync-exclude-list-for-mac-osx

И оттуда вы, вероятно, можете получить то, что безопасно или разумно игнорировать. Вот полный список (я только что удалил дубликаты)

.HFS+ Private Directory Data*
/.journal
/.journal_info_block
.AppleDouble
.AppleDB
/lost+found

.metadata_never_index
.metadata_never_index_unless_rootfs
/.com.apple.timemachine.donotpresent
.VolumeIcon.icns
/System/Library/CoreServices/.disk_label*
/TheVolumeSettingsFolder

.DocumentRevisions-V100*
.Spotlight-V100
/.fseventsd
/.hotfiles.btree
/private/var/db/systemstats

/private/var/db/dyld/dyld_*
/System/Library/Caches/com.apple.bootstamps/*
/System/Library/Caches/com.apple.corestorage/*
/System/Library/Caches/com.apple.kext.caches/*

/.com.apple.NetBootX

/Volumes/*
/dev/*
/automount/*
/Network/*
/.vol/*
/net

/private/var/folders/zz/*
/private/var/vm/*
/private/tmp/*
/cores/*

.Trash
.Trashes

/Backups.backupdb
/.MobileBackups
/.MobileBackups.trash
/.MobileBackups.trash

Library/Mobile Documents.*
.webtmp

/Library/Caches/CrashPlan
/PGPWDE01
/PGPWDE02
/.bzvol
/Library/Application Support/Comodo/AntiVirus/Quarantine
/private/var/spool/qmaster
$Recycle.Bin
Saved Application State
Library/Preferences/ByHost/com.apple.loginwindow*

.AppleDesktop
.com.apple.timemachine.supported
Network Trash Folder
/Library/Caches/*
/private/var/spool/postfix/*
$RECYCLE.BIN
/stuff/*
/afs/*
/private/var/run/*
/Previous Systems.localized
/tmp/*
.dbfseventsd
.DS_Store
.PKInstallSandboxManager
.SymAV*
.symSchedScanLockxz
.TemporaryItems
Desktop DB
Desktop DF
hiberfil.sys
pagefile.sys
Recycled
RECYCLER
System Volume Information
Temporary Items
Thumbs.db
AUTORUN.INF
Autorun.inf
autorun.inf
Manuel
источник
3

Я использовал rsync для резервного копирования на нескольких работах, и я использую его дома.

Я очень рекомендую это, но с некоторыми модификациями. Как инструмент для резервного копирования, это здорово, но как инструмент для архивирования он выглядит немного плоским. Да, он копирует все, но вы не получаете версии всего, вы всегда получаете только последние версии.

Я использовал это руководство http://www.mikerubel.org/computers/rsync_snapshots/ как трамплин точки. Прочитайте всю страницу. Он отлично объясняет параметры и показывает, как можно создавать инкрементные резервные копии. И что удивительно, этой статье уже более 10 лет, но она все еще применима сегодня. Должен любить Unix.

sevis127
источник
1
Спасибо. В любом случае я хотел бы рассмотреть особые соображения, которые можно принять в Mac OS X. Я не хотел просто руководства rsync. В любом случае, хорошая связь, он охватывает много , rsyncно есть на сегодняшний день инструмент , чтобы сделать именно это: rsnapshot.
Мануэль