Bug 15359 - неэффективная работа с дисковым пространством
Summary: неэффективная работа с дисковым пространством
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: sisyphus-mirror (show other bugs)
Version: unstable
Hardware: all Linux
: P2 enhancement
Assignee: Nobody's working on this, feel free to take it
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2008-04-15 14:19 MSD by Artem Zolochevskiy
Modified: 2008-04-21 13:40 MSD (History)
1 user (show)

See Also:


Attachments
config (1.31 KB, text/plain)
2008-04-18 22:50 MSD, Artem Zolochevskiy
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
Description Artem Zolochevskiy 2008-04-15 14:19:35 MSD
Я понимаю, что это всё можно и наконфигурить самому, указав в качестве LIST 
просто ALTLinux и КУЧУ exclud-ов, но всё же, это не очень удобно (из-за 
количесва exclud-ов)

указывая LIST: Sisyphus 4.0/branch итд теряем некоторое место на там, что 
отсутствуют хардлинки (между Sisyphus и 4.0/branch)

Как фичреквест ставлю. Можно просто указать эту особенность в доку, а можно и 
подумать над более эффективным способом зеркалирования. (что-то вроде проверки 
на такие пересечения значений LIST?)
Comment 1 Andrey Rahmatullin 2008-04-15 14:21:08 MSD
О чём баг-то?
Comment 2 Artem Zolochevskiy 2008-04-15 14:42:27 MSD
(In reply to comment #1)
> О чём баг-то?

Хм... как бы это более понятно... А наверное никак. Так и повторю:

указывая LIST: Sisyphus 4.0/branch итд теряем некоторое место на том, что 
отсутствуют хардлинки (между Sisyphus и 4.0/branch)

Так понятнее?
Comment 3 Andrey Rahmatullin 2008-04-15 14:59:21 MSD
А, понятно.
Ну, хм, не представляю, как это решать.
Comment 4 Vladimir V. Kamarzin 2008-04-15 15:04:12 MSD
Бага вполне понятна. Мы ещё и трафик теряем, т.к. хардлинки не передаются когда
мы по-отдельности миррорим 4.0 бранч и сизиф.

Есть вариант заexclude-ить всё, и include-ить только то что нужно. Подумаю над
реализацией такого режима работы.
Comment 5 Artem Zolochevskiy 2008-04-15 15:10:00 MSD
(In reply to comment #4)
> Есть вариант заexclude-ить всё, и include-ить только то что нужно. Подумаю 
над
> реализацией такого режима работы.

Вот вот. Уже теплеет. :-)
В самописном скрипте синхронизации я так и делал. и плясял от конрня - 
ALTLinux/

Сейчас же начал использовать sisyphus-mirror и выходу из положения так.
LIST ALTLinux
и оооогромный exclude


Comment 6 Mikhail Gusarov 2008-04-15 15:32:07 MSD
FYI: Я начал было писать другую утилитку для мирроринга, пересоздающую 
репозитории по типу dists/pool у debian и качающую каждый файл ровно один раз, 
вне зависимости от количества его в разных репозиториях, но пока она даже не 
дышит.
Comment 7 Vladimir V. Kamarzin 2008-04-15 16:32:03 MSD
Кажется достаточно добавить --link-dest=. в опции rsync.
Comment 8 Vladimir V. Kamarzin 2008-04-15 16:44:49 MSD
Поправка: --link-dest=$DESTROOT
Comment 9 Vladimir V. Kamarzin 2008-04-16 14:04:20 MSD
Просьба протестировать версию из
http://git.altlinux.org/people/vvk/packages/sisyphus-mirror.git
Comment 10 Vladimir V. Kamarzin 2008-04-16 18:54:00 MSD
В общем проверил уже сам, решение с --link-dest работает отлично. Указывать
--link-dest=$DESTROOT нельзя, т.к. rsync в таком случае ничего сканировать не
будет. Как я понял, нельзя в --link-dest указывать вышележащую директорию.

Поэтому я сделал вот что: теперь автоматическим образом формируется множество
--link-dest, куда передаются все имеющиеся директории в $DESTROOT.

Т.о. мы получаем экономию на хардлинках как будьто бы зеркалили весь ALTLinux.

На всякий случай уточню - самостоятельно --link-dest прописывать не надо.

Есть одна особенность: уже имеющиеся файлы rsync не будет заменять на хардлинки,
но можно сделать так:
$ pwd
/var/ftp/ALTLinux
mv 4.0/branch .
sisyphus-mirror -i -l 4.0/branch
rm -rf branch
Comment 11 Michael Shigorin 2008-04-16 20:51:14 MSD
(In reply to comment #3)
> А, понятно.
> Ну, хм, не представляю, как это решать.

(In reply to comment #10)
> В общем проверил уже сам, решение с --link-dest работает отлично. Указывать
> --link-dest=$DESTROOT нельзя, т.к. rsync в таком случае ничего сканировать не
> будет. Как я понял, нельзя в --link-dest указывать вышележащую директорию.
> 
> Поэтому я сделал вот что: теперь автоматическим образом формируется множество
> --link-dest, куда передаются все имеющиеся директории в $DESTROOT.
> 
> Т.о. мы получаем экономию на хардлинках как будьто бы зеркалили весь ALTLinux.
> 
> На всякий случай уточню - самостоятельно --link-dest прописывать не надо.
> 
> Есть одна особенность: уже имеющиеся файлы rsync не будет заменять на хардлинки,
> но можно сделать так:
> $ pwd
> /var/ftp/ALTLinux
> mv 4.0/branch .
> sisyphus-mirror -i -l 4.0/branch
> rm -rf branch

Comment 12 Vladimir V. Kamarzin 2008-04-18 13:59:22 MSD
Fixed in 0.5-alt1
Comment 13 Artem Zolochevskiy 2008-04-18 18:57:16 MSD
нет. решение не работает. попробовал сегодня.

имеем:
ls -i /EXPORT/ftp/pub/ALTLinux/Sisyphus/files/noarch/RPMS/alt-docs-genextras-0.3-alt4.noarch.rpm /EXPORT/ftp/pub/ALTLinux/4.0/Desktop/4.0.3/files/noarch/RPMS/alt-docs-genextras-0.3-alt4.noarch.rpm
1982526 /EXPORT/ftp/pub/ALTLinux/4.0/Desktop/4.0.3/files/noarch/RPMS/alt-docs-genextras-0.3-alt4.noarch.rpm
1982526 /EXPORT/ftp/pub/ALTLinux/Sisyphus/files/noarch/RPMS/alt-docs-genextras-0.3-alt4.noarch.rpm

стираю
rm /EXPORT/ftp/pub/ALTLinux/Sisyphus/files/noarch/RPMS/alt-docs-genextras-0.3-alt4.noarch.rpm

запуcкаю sisyphus-mirror (на удалённой стороне всё хардлинки)
имею в итоге

ls -i /EXPORT/ftp/pub/ALTLinux/Sisyphus/files/noarch/RPMS/alt-docs-genextras-0.3-alt4.noarch.rpm /EXPORT/ftp/pub/ALTLinux/4.0/Desktop/4.0.3/files/noarch/RPMS/alt-docs-genextras-0.3-alt4.noarch.rpm
1982526 /EXPORT/ftp/pub/ALTLinux/4.0/Desktop/4.0.3/files/noarch/RPMS/alt-docs-genextras-0.3-alt4.noarch.rpm
 
991233 /EXPORT/ftp/pub/ALTLinux/Sisyphus/files/noarch/RPMS/alt-docs-genextras-0.3-alt4.noarch.rpm

пробовалость все версией из git
c4953dffc92cf4e6373d0c5d178551d595d695a6

Comment 14 Vladimir V. Kamarzin 2008-04-18 21:36:29 MSD
УМВР.
$ ls -i ./Sisyphus/files/noarch/RPMS/alt-docs-genextras-0.3-alt4.noarch.rpm 
./4.0/branch/files/noarch/RPMS/alt-docs-genextras-0.3-alt4.noarch.rpm
199622704 ./4.0/branch/files/noarch/RPMS/alt-docs-genextras-0.3-alt4.noarch.rpm
199622704 ./Sisyphus/files/noarch/RPMS/alt-docs-genextras-0.3-alt4.noarch.rpm

У вас похоже local misconfiguration. Нужно посмотреть конфиг, может быть вывод
запуска под bash -x.
Comment 15 Artem Zolochevskiy 2008-04-18 22:50:04 MSD
Created attachment 2578 [details]
config

config
Comment 16 Artem Zolochevskiy 2008-04-18 22:51:46 MSD
(In reply to comment #14)
> УМВР.
> $ ls -i ./Sisyphus/files/noarch/RPMS/alt-docs-genextras-0.3-alt4.noarch.rpm 
> ./4.0/branch/files/noarch/RPMS/alt-docs-genextras-0.3-alt4.noarch.rpm
> 
199622704 ./4.0/branch/files/noarch/RPMS/alt-docs-genextras-0.3-alt4.noarch.rpm
> 199622704 ./Sisyphus/files/noarch/RPMS/alt-docs-genextras-0.3-alt4.noarch.rpm
> 
> У вас похоже local misconfiguration. Нужно посмотреть конфиг, может быть 
вывод
> запуска под bash -x.

попробуйте 
_убить_ ./Sisyphus/files/noarch/RPMS/alt-docs-genextras-0.3-alt4.noarch.rpm и 
запустить sisyphus-mirror и посмотреть на итог
Comment 17 Artem Zolochevskiy 2008-04-18 22:56:30 MSD
> попробуйте 
> _убить_ ./Sisyphus/files/noarch/RPMS/alt-docs-genextras-0.3-alt4.noarch.rpm и 
> запустить sisyphus-mirror и посмотреть на итог
> 

Хотя это плохой пример. этот пакет как раз обновился. но думаю идея ясна:
* имеем локальные Sisyphus/file1 и 4.0/branch/file1 (иноды одинаковые.)
* убиваем Sisyphus/file1
* запускаем sisyphus-mirror
* если sisyphus-mirror достаточно интеллектуален, то Sisyphus/file1 создастся в 
первозданном виде (с той же инодой, что и 4.0/branch/file1), если нет, то я 
неверно переоткрыл багу. у меня с моим конфигом Sisyphus/file1 создался как 
отдельный файл.
Comment 18 Vladimir V. Kamarzin 2008-04-18 23:32:09 MSD
Угу, таким образом действительно воспроизводится.
Comment 19 Vladimir V. Kamarzin 2008-04-21 10:53:04 MSD
Всё ясно, rsync ищет файлы по пути link-dest +
путь/от/корня/синхронизируемой/директории:

lstat64("/var/ftp/ALTLinux/4.0/files/noarch/RPMS/update-kernel-0.3-alt4.noarch.rpm",
0xbfd06cc8) = -1 ENOENT (No such file or directory)
lstat64("/var/ftp/ALTLinux/archive/files/noarch/RPMS/update-kernel-0.3-alt4.noarch.rpm",
0xbfd06cc8) = -1 ENOENT (No such file or directory)

В общем нужно несколько переписать алгоритм вычисления списка для --link-dest.
Comment 20 Vladimir V. Kamarzin 2008-04-21 13:40:17 MSD
Для репозиториев, структура которых отличается от Sisyphus, --link-dest
вычисляться не будет. В эту категорию попадают updates и backports.

Для поддержки --link-dest для не-sisyphus-like репозиториев нужно значительно
переделать основной алгоритм синхронизации.

А так, fixed in 0.6-alt1.