Как эффективно скопировать только измененные файлы с диска на внешний USB-накопитель?

Как эффективно скопировать только измененные файлы с диска на внешний USB-накопитель?

У меня есть каталог, который называется my_projects_linuxвнутри файловой системы Ubuntu, который содержит всю мою работу за многие годы. Каталог содержит файлы, подкаталоги и так далее.

В целях резервного копирования я время от времени копирую этот каталог и все его содержимое на внешний жесткий диск.

Таким образом, содержимое моего внешнего диска выглядит следующим образом:

/mounted_drive/my_projects_linux
/mounted_drive/my_projects_windows  # the same idea to backup Windows work

Следовательно, я ищу команду, которая:

  1. Будет работать как

    cp /home/my_projects_linux /mounted_drive/my_projects_linux
    

    Он должен заменить старые файлы, подкаталоги, файлы внутри подкаталогов и т. д. на внешнем диске новым содержимым с моего ПК.

  2. Быть быстрым. Он должен копировать только измененные файлы или те, которые были созданы заново. Учитывая, что размер my_projects_linux>50 ГБ, копирование всего занимает больше часа, что слишком медленно. В реальности часто с момента последнего резервного копирования меняется всего несколько МБ, поэтому теоретически копию можно сделать гораздо быстрее.

Как это сделать?

Я погуглил, что cp с -uфлагом может соответствовать моим потребностям. Будет ли это работать (например, будет ли он правильно обрабатывать подкаталоги подкаталогов)?

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

решение1

Вы как бы описываете то, rsyncдля чего это было разработано. От man rsync:

   Rsync  finds  files  that  need to be transferred using a "quick
   check" algorithm (by default) that looks  for  files  that  have
   changed  in  size  or in last-modified time.  Any changes in the
   other preserved attributes (as requested by options) are made on
   the  destination  file  directly  when the quick check indicates
   that the file’s data does not need to be updated.

Также много болтовни о нетворкинге, но и локально тоже приятно.
По сути, все, что вам нужно, это:

rsync -rtv /home/my_projects_linux /mounted_drive/my_projects_linux

Доступно множество опций, но -rtvони будут синхронизированы.рэккурсивно, сохраняятimecodes то же самое, будучивerbose о том, что он делает.

решение2

Отвечая на ваш второй вопрос, более изощренный способ резервного копирования — это rdiff-backup.

rdiff-backup создает резервную копию одного каталога в другом, возможно, по сети. Целевой каталог в конечном итоге оказывается копией исходного каталога, но дополнительные обратные diff-файлы хранятся в специальном подкаталоге этого целевого каталога, так что вы все равно можете восстановить файлы, утерянные некоторое время назад. Идея состоит в том, чтобы объединить лучшие возможности зеркала и инкрементального резервного копирования. rdiff-backup также сохраняет подкаталоги, жесткие ссылки, файлы dev, разрешения, владельца uid/gid, время изменения, расширенные атрибуты, списки контроля доступа и вилки ресурсов.

А если вы действительно хотите перейти на облачные технологии: я использую CrashPlan с платной подпиской. Тогда вамникогдабольше не придется думать о ручном резервном копировании.

решение3

Я знаю, что на этот вопрос уже есть принятый ответ. Однако я хотел добавить кроссплатформенное решение GUI, поскольку я вижу, что вы также используете Windows. Я использую для тех же целейFreefilesync. Это также зубная нить.

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

Также есть ppa, хотя на данный момент он не включает последнюю версию для 14.04. Для установки через ppa:

sudo apt-add-repository ppa:freefilesync/ffs
sudo apt-get update

Связанный контент