Приручаем rsync в Mac OS X

Большая часть пользователей компьютеров Apple пользуются встроенным в Mac OS X решением для резервного копирования своих данных — Time Machine (TM). Я, однако, принадлежу к меньшинству, которое не пользуется «машиной времени».

Дело в том, что мне нужен бэкап по сети, а по сети Time Machine умеет копировать данные либо на Time Capsule, либо на общую папку, расшаренную на компьютере под управлением Mac OS X Leopard (и выше). Time Capsule я покупать не собираюсь, потому что она мне не внушает доверия, а другого мака в доме нет. Существуют различные хаки, при помощи которых можно заставить TM записывать резервные копии в любую сетевую папку, но у всех этих хаков есть побочные эффекты, бороться с которыми как-то не хочется. Поэтому — rsync, rsync и ещё раз rsync. Однако Apple не была бы Apple, если бы в духе заботы о пользователе не разложила на этом пути грабли, с которыми мы сейчас и будем бороться.

Грабли заключаются в том, что в комплекте с Mac OS X поставляется очень странная версия rsync.

rsync  version 2.6.9  protocol version 29  
Capabilities:  
    64-bit files, socketpairs, hard links, symlinks, batchfiles, 
    inplace, IPv6, 64-bit system inums, 64-bit internal inums

Во-первых, она очень древняя (текущая версия — 3.0.7 — отличается усовершенствованным алгоритмом сравнения файлов и работает быстрее). Во-вторых, эппловский rsync собран с поддержкой метаданных файловой системы HFS+ и поддерживает специальный ключ -E для сохранения этих самых метаданных... но при этом на другом конце должна быть такая же «модифицированная» версия rsync. То есть «получателем» резервной копии опять же может выступать только компьютер с Mac OS X (Tiger или выше).

Не беда, эта проблема по большей части решается. Для начала мы скомпилируем на маке последнюю версию rsync (у вас должен быть установлен Xcode).

Загружаем исходные тексты:

cd ~/Desktop  
curl -O http://rsync.samba.org/ftp/rsync/src/rsync-3.0.7.tar.gz  
tar -xzvf rsync-3.0.7.tar.gz  
rm rsync-3.0.6.tar.gz  
curl -O http://rsync.samba.org/ftp/rsync/src/rsync-patches-3.0.7.tar.gz  
tar -xzvf rsync-patches-3.0.7.tar.gz  
rm rsync-patches-3.0.7.tar.gz  
cd rsync-3.0.7  

Применяем релевантные патчи:

patch -p1 <patches/fileflags.diff  
patch -p1 <patches/crtimes.diff  

Теперь собираем:

./prepare-source
./configure
make  
sudo make install  

Проверяем, что у нас получилось:

melchior:~ pavel$ /usr/local/bin/rsync --version  
rsync  version 3.0.7  protocol version 30  
Copyright (C) 1996-2009 by Andrew Tridgell, Wayne Davison, and others.  
Web site: http://rsync.samba.org/  
Capabilities:  
    64-bit files, 64-bit inums, 64-bit timestamps, 64-bit long ints,
    socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace,
    append, ACLs, xattrs, no iconv, symtimes, file-flags

Теперь необходимо скомпилировать rsync на Linux-машине, которая будет использоваться для бэкапа, с применением патча fileflags, но БЕЗ патча crtimes! В Ubuntu 9.10 для этого надо сначала установить «средства производства»:

sudo apt-get install build-essential  
sudo apt-get build-dep rsync  

Делаем тестовый прогон:

/usr/local/bin/rsync -aHAXxzv --protect-args --fake-super --rsync-path="/usr/local/bin/rsync" ~/Documents/ pavel@192.168.1.5:/home/pavel/backup

Осталась только одна проблема: при попытке сделать бэкап на ext3-раздел, rsync ругнётся на то, что расширенные атрибуты файлов не помещаются в отведённое под них пространство. Для решения этой проблемы я отформатировал диск, на который производится бэкап, в XFS.

Основной недостаток данного метода заключается в том, что он не сохраняет атрибуты времени создания и модификации файла. Впрочем, для меня это некритично, потому что мне удалённый бэкап нужен не для создания загрузочной копии системного диска, а для обеспечения сохранности дорогих моему сердцу документов.

rsync хорош и тем, что можно написать скрипт и регулярно запускать его cron'ом. В этом случае резервное копирование будет осуществляться без вашего вмешательства. Но это уже тема для отдельной записи... ♦

Если вам понравился этот текст, не забудьте подписаться на обновления моего блога.

Плюсануть
Поделиться
Показать комментарии