[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