Использование Rsync для резервного копирования на внешний диск
Я покупаю внешний жесткий диск для резервного копирования компьютеров в моем доме (наконец-то!!). Я надеюсь использовать Rsync. Я видел пример, который делает (или, кажется, делает) именно то, что я хочу. Что-то вроде этого:
rsync -aE --delete /path/to/what/I/want/to/backup /Volumes/FW200/Backups
Однако, глядя на документацию и примеры по rsync и т. Д., Все стало выглядеть намного сложнее. Сеть и демоны и жаргон, о мой!
Я предполагаю, что ничего из этого не нужно, пока я просто перевожу с компьютера на внешний диск, подключенный через FireWire. Я ошибаюсь, предполагая это? Неужели все будет сложнее, чем эта безобидная команда?
11 ответов
Rsync отлично работает на локальных дисках. Однако, если он обнаруживает локальные пути, он автоматически переходит в режим --whole-file, который не копирует diff-файлы, а просто копирует исходный файл поверх конечного файла. Rsync по-прежнему будет игнорировать файлы, которые не изменились вообще. Когда пропускная способность между источником и местом назначения высока (например, два локальных диска), это намного быстрее, чем чтение обоих файлов, а затем копирование только измененных битов.
Я использую rsync со следующими флагами, легко запоминающимися как 'glop' и 'trunc' и 'v'.
rsync -gloptrunc $srcdir $dstdir
Краткое руководство:
- g - сохранить информацию о собственности группы
- l - скопировать символические ссылки как символические ссылки
- o - сохранить информацию о владельце
- p - сохранить права
- t - сохранить временные метки
- r - просмотр по каталогам
- u - обновить, пропустить новые файлы
- [n] - нет, не делай этого, вместо этого сделай пробный прогон
- c - контрольная сумма, попытка контрольных сумм для файловых блоков, когда это возможно (*)
примечание: в локальных файловых системах это переопределяется, и вместо этого копируются все файлы. - v - многословный
Я всегда запускаю вышеупомянутое, чтобы убедиться, что оно работает, затем убираю флаг 'n', чтобы, как только я был доволен результатами.
Ключевые особенности вышеуказанных комбинаций:
- Я запускаю его в обоих направлениях между двумя (или более) серверами, таким образом синхронизируя в обоих направлениях. Вы обновляете то, что считаете мастером в то время.
- Это позволяет либо быть мастером со значительным предупреждением о том, что если вы хотите удалить что-то, вы должны удалить его на обоих, чтобы убедиться, что оно действительно пропало, иначе оно вернется.
Я использую это для синхронизации двух машин или синхронизации с подкаталогами (например, резервное копирование на USB-накопитель).
Как говорилось ранее в одной из других публикаций, "контрольная сумма" может быть фактически отключена, если вы работаете с локальными дисками.
В некоторых редких случаях мне приходилось добавлять дополнительные параметры для учета изменений в учетных записях входа на удаленных компьютерах, смены портов и даже указания места нахождения "rsync" на удаленном хосте... но они не имеют прямого отношения к вашему вопрос.
Ничего из этого не требуется, вы можете использовать rsync без каких-либо демонов или любого другого вида конфигурации JUST FINE!
Просто используйте команду rsync, и все готово.
Вы не упомянули свою операционную систему. Исходя из предположения, что это ОС *nix, ваша команда хороша.
Однако, если один или оба диска отформатированы в NTFS, доступ к ним осуществляется из *nix или даже из Windows с использованием Mobaxterm/cygwin, то инкрементная функциональность rsync не будет работать с rsync -a (archive flag)
Если диск (и) NTFS задействованы, вы можете использовать:
rsync -rvh --size-only --delete /path/to/what/I/want/to/backup /Volumes/FW200/Backups
Загрузите клиент Mobaxterm ssh, чтобы иметь функциональность rsync в Windows.
Вот больше информации об использовании rsync с дисками NTFS
Пример, который вы использовали, выглядит так, будто он отлично работает для резервных копий.
Однако при использовании rsync вы, возможно, захотите учесть одну опцию --link-dest. Это позволяет вам хранить несколько резервных копий, но использовать жесткие ссылки для любых неизмененных файлов, эффективно превращая все резервные копии в пространство инкрементного. Пример использования будет:
rsync -aE --link-dest=/mnt/external_disk/backup_20090612 dir_to_backup \
/mnt/external_disk/backup_20090613
Предполагается, что у вас есть резервная копия с датой на 12 июня, а вы хотите создать новую 13 июня. Возможно, вы захотите пропустить опцию -v, если не хотите распечатывать каждый файл.
Судя по пути в вашей команде rsync, я был бы прав, думая, что вы используете Mac OS X?
Лично я бы выбрал Time Machine (если вы используете Leopard) или Carbon Copy Cloner ( http://www.bombich.com/software/ccc.html), который использует rsync.
Гораздо проще, чем пытаться исправить свой собственный сценарий. Одним из преимуществ является то, что Time Machine и CCC предоставят вам дополнительные резервные копии.
Ваша команда, как написано, должна работать, однако вы можете захотеть взглянуть на программу под названием rsnapshot, которая построена поверх rsync и содержит несколько версий файлов, чтобы вы могли вернуться и посмотреть на вещи, как они были на прошлой неделе или в прошлом месяце. Конфигурация довольно проста, и она действительно хороша для оптимизации пространства, поэтому, если у вас нет большого оттока, она не займет намного больше места, чем одна резервная копия.
Это действительно зависит от того, используете ли вы базы данных или нет. Rsync сделает снимок каждого файла и проигнорирует любые промежуточные записи. Если вы хотите выполнить резервное копирование базы данных, вы должны посмотреть на настройку фильтра игнорирования и запуск инструментов дампа БД до rsync.
Попробуйте сделать резервную копию. http://www.dirvish.org/
Он использует жесткие ссылки от rsync в так называемых хранилищах. Вы можете сохранить столько старых дампов, сколько может занять USB-диск. Или настроить его в автоматическом режиме.
Как только вы поймете идею dirvish, его будет удобнее использовать, чем rsync со всеми его опциями.
Я попытался использовать rsync для резервного копирования, но в итоге получился беспорядок. rsync лучше подходит для "синхронизации", чем для резервного копирования. И это идет навсегда, чтобы сравнить большие файлы.
Я немного исследовал и попробовал несколько (в основном, тестирование каждого из apt-cache search backup в ubuntu).
Наконец, я получил " backup2l - инструмент для резервного копирования и восстановления без обслуживания", это легко. Мне нравится, как он управляет планированием и ротацией (по уровням). Я запускаю его всякий раз, когда мой внешний USB-накопитель подключен из командной строки, но вы также можете автоматизировать его.
Я не использую rsync с локальными дисками, но Rsync отлично подходит для синхронизации, клонирования, резервного копирования и восстановления данных между сетевыми системами Linux. Фантастический инструмент с поддержкой сети Linux, на изучение которого стоит потратить время. Узнайте, как использовать rsync с жесткими ссылками (--link-dest=), и жизнь наладится.
Однако я обнаружил, что rsync не так полезен для локальных дисков.
По моему опыту, во имя скорости Rsync автоматически изменяет многие рабочие параметры, когда rsync считает, что обнаружил два локальных диска. Что еще хуже. То, что считается "локальным" с точки зрения rsync, иногда может быть не таким уж локальным. В одном из примеров rsync видит подключенный сетевой ресурс SMB как локальный диск. Можно поспорить и быть правым, объяснив, что в этом случае для rsync как экземпляра программы все диски являются "локальными", но это упускает суть.
Дело в том, что сценарии, которые работают должным образом при использовании между локальным и удаленным дисками, не работают должным образом, когда используется один и тот же сценарий, когда rsnyc видит пути к данным как два локальных диска. Кажется, что многие параметры rsync изменены или не работают должным образом при работе со всеми локальными дисками. Обновление файлов может замедляться до обхода, если один из "локальных" дисков является сетевым SMB-ресурсом или большим медленным USB-накопителем.
Например, с опцией "cwrsync -av /local/files/ /mountSMBshare/files" и без опции -c (контрольная сумма), где необходимость передачи должна определяться размером и датой файла со всеми локальными дисками, я вижу целые файлы, скопированные между источником и место назначения, когда файлы даже не изменились. Это бесполезное поведение, когда один "диск" является более медленным сетевым ресурсом SMB, а другой - медленным USB-накопителем NTFS. Было бы намного лучше использовать ssh на общем сервере SMB, но это не всегда возможно, и многие ненавистные элементы Windows являются частью повседневной коммерческой жизни.
Я бы предпочел, чтобы работа rsync была согласованной, независимо от "местоположения" дисков, и просто предоставляла пользователю возможность вызывать "локальную" операцию, когда преимущество в скорости считалось доступным и полезным. По моему скромному мнению, это будет более последовательная операция, которая сделает rsync более простым в использовании и более функциональным.
Я нахожу решение для компьютера под управлением Windows: http://www.itefix.no/i2/node/10650
Чтобы скопировать раздел D:\ на внешний диск K:\
rsync -aE --delete --progress /cygdrive/d/* /cygdrive/k