[sisyphus] использование rsync

fmfm =?iso-8859-1?q?fmfm_=CE=C1_delin=2Eru?=
Пн Дек 27 12:10:38 MSK 2004


Dmitry V. Levin пишет:

>>У меня синхронизация репозитория настроена примерно так.
>>
>>Имеются вспомогательный каталог для синхронизации и каталог рабочий.
>>В "установившемся" состоянии в рабочем каталоге лежат реальные
>>файлы, а в дополнительном - symlinks на них.
>>
>>Раньше, при синхронизации, rsync удалял устаревшие ссылки и загружал новые
>>файлы. После этого у новых файлов проверялись md5sum и gpg sign.
>>Если все OK, то файлы перемещались в "рабочий" репозиторий, замещаясь
>>ссылками на них. Если нет, то перемещались в "карантин".
>>
>>Дополнительно, из рабочего каталога во временную "корзину" уходили
>>файлы с удаленными ссылками. Это же "ядро" хорошо работает и с
>>off-line синхронизацией от CD срезов Sysiphus.
>>    
>>
>
>Немного другую схему, реализующую описанную выше задачу, можно посмотреть
>на следующем примере:
>
>1. создаём модель:
>$ mkdir src dst backup
>$ touch src/same src/new dst/old
>$ cp -a src/same dst/
>$ echo src >src/changed
>$ echo dest >dst/changed
>
>2. готовим каталог для синхронизации:
>$ cp -al dst new
>
>3. закачиваем:
>$ rsync -rt src/ new/ --partial --delete-after --backup --backup-dir=$PWD/backup
>
>4. анализируем результат:
>$ find backup -type f
>backup/changed
>backup/old
>$ find new -type f -links 1
>new/changed
>new/new
>$ find new -type f -not -links 1
>new/same
>
>  
>

Прошу прощения за длительный off-line

Когда то этот код у меня работал с hardlink. Потом выяснилось, что это
решение не может считаться универсальным и вот почему.

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

Еще одна причина "неуниверсальности" hardlinks в следующем. С symlinks 
становится удобной
загрузка вручную. Т.е. можно в mc удалить устаревшие ссылки и копировать 
новые
пакеты в "загрузочной" области. Текущий промежуточный результат в mc виден
"невооруженным" глазом. Когда все сделано, выполняется загрузочный сценарий
(или наоборот, rollback).

Изоляция областей - предпосылка для модульности кода. Например, код для 
off-line
импорта со сменных CD процентов на 70 использует код для on-line 
синхронизации
по сети. Как дополнение. Чтобы добавить возможность синхронизации на wget
мне потребовалось дописать и протестировать только одну функцию (и добавить
пункт в меню).

Таким образом, неизменяемое --resolv-dst-symlinks=off в rsync это потеря 
функциональности.

Владимир





Подробная информация о списке рассылки Sisyphus