<Предыдущая | Содержание: | Следующая>
Синхронизация файлов и каталогов
Общая стратегия создания резервной копии системы предполагает синхронизацию одного или нескольких каталогов с другим каталогом (или каталогами), расположенными либо в локальной системе (обычно на каком-либо съемном запоминающем устройстве), либо в удаленной системе. Например, мы можем иметь локальную копию разрабатываемого веб-сайта и время от времени синхронизировать ее с «действующей» копией на удаленном веб-сервере.
В Unix-подобном мире предпочтительным инструментом для этой задачи является Rsync. Эта программа может синхронизировать как локальные, так и удаленные каталоги, используя протокол удаленного обновления rsync, который позволяет Rsync чтобы быстро обнаружить различия между двумя каталогами и выполнить минимальный объем копирования, необходимый для их синхронизации. Это делает Rsync очень быстрый и экономичный в использовании по сравнению с другими видами программ копирования.
rsync вызывается следующим образом:
Rsync варианты источник пункт назначения
в котором источник и назначение являются одним из следующих:
● Локальный файл или каталог.
● Удаленный файл или каталог в виде [пользователь@]хост:путь
● Удаленный сервер rsync, указанный с URI rsync://[пользователь@]хост[:порт]/путь
Обратите внимание: либо источником, либо местом назначения должен быть локальный файл. Удаленное копирование не поддерживается.
Давай попробуем Rsync в некоторых локальных файлах. Для начала давайте очистим нашу Foo каталог:
[я @ linuxbox ~] $ rm -rf foo/*
[я @ linuxbox ~] $ rm -rf foo/*
Далее мы синхронизируем детская площадка каталог с соответствующей копией в Foo:
[я @ linuxbox ~] $ rsync -av игровая площадка foo
[я @ linuxbox ~] $ rsync -av игровая площадка foo
Мы включили оба -a опция (для архивирования - вызывает рекурсию и сохранение атрибутов файла) и -v опция (подробный вывод), чтобы сделать зеркало детская площадка каталог в Foo. Пока команда выполняется, мы будем видеть список копируемых файлов и каталогов. В конце мы увидим сводное сообщение следующего содержания:
отправлено 135759 байт получено 57870 байт 387258.00 байт/сек общий размер 3230 ускорение 0.02
отправлено 135759 байт получено 57870 байт 387258.00 байт/сек общий размер 3230 ускорение 0.02
с указанием объема выполненного копирования. Если мы запустим команду еще раз, мы увидим другой результат:
[я @ linuxbox ~] $ rsync -av игровая площадка foo
создание списка файлов... готово
отправлено 22635 байт получено 20 байт 45310.00 байт/сек общий размер 3230 ускорение 0.14
[я @ linuxbox ~] $ rsync -av игровая площадка foo
создание списка файлов... готово
отправлено 22635 байт получено 20 байт 45310.00 байт/сек общий размер 3230 ускорение 0.14
Обратите внимание, что списка файлов не было. Это потому что Rsync обнаружил, что различий между ~/детская площадка и ~/foo/детская площадка, и поэтому ему не нужно было ничего копировать. Если мы изменим файл в детская площадка и запустить Rsync еще раз:
[я @ linuxbox ~] $ сенсорная игровая площадка/dir-099/file-Z [я @ linuxbox ~] $ rsync -av игровая площадка foo создание списка файлов... готово
игровая площадка / dir-099 / file-Z
отправлено 22685 байт получено 42 байт 45454.00 байт/сек общий размер 3230 ускорение 0.14
[я @ linuxbox ~] $ сенсорная игровая площадка/dir-099/file-Z [я @ linuxbox ~] $ rsync -av игровая площадка foo создание списка файлов... готово
игровая площадка / dir-099 / file-Z
отправлено 22685 байт получено 42 байт 45454.00 байт/сек общий размер 3230 ускорение 0.14
Мы видим, что Rsync обнаружил изменение и скопировал только обновленный файл.
В качестве практического примера давайте рассмотрим воображаемый внешний жесткий диск, который мы использовали ранее с деготь. Если мы подключим диск к нашей системе и он снова смонтируется по адресу /медиа/БигДиск, мы можем выполнить полезное резервное копирование системы, сначала создав каталог с именем /резервное копирование на внешнем диске, а затем с помощью Rsync чтобы скопировать самое важное из нашей системы на внешний диск:
[я @ linuxbox ~] $ mkdir /media/BigDisk/резервная копия
[я @ linuxbox ~] $ sudo rsync -av --delete /etc /home /usr/local
/медиа/БигДиск/резервное копирование
[я @ linuxbox ~] $ mkdir /media/BigDisk/резервная копия
[я @ linuxbox ~] $ sudo rsync -av --delete /etc /home /usr/local
/медиа/БигДиск/резервное копирование
В этом примере мы скопировали / и т.д., / Главнаякачества / USR / местные каталоги из нашей системы на наше воображаемое запоминающее устройство. Мы включили --удалять возможность удаления файлов, которые могли существовать на устройстве резервного копирования и больше не существовали на исходном устройстве (это не имеет значения при первом резервном копировании, но будет полезно при последующих копиях). Повторяем процедуру подключения внешнего диска и запуска этого Rsync Команда будет полезным (хотя и не идеальным) способом резервного копирования небольшой системы. Конечно, псевдоним и здесь будет полезен. Мы могли бы создать псевдоним и добавить его в нашу
.bashrc для обеспечения этой функции:
alias backup='sudo rsync -av --delete /etc /home /usr/local
/медиа/БигДиск/резервное копирование'
alias backup='sudo rsync -av --delete /etc /home /usr/local
/медиа/БигДиск/резервное копирование'
Теперь все, что нам нужно сделать, это подключить внешний диск и запустить резервная копия команду выполнить работу.