The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Синхронизация содержимого каталогов на баш"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Shell скрипты)
Изначальное сообщение [ Отслеживать ]

"Синхронизация содержимого каталогов на баш"  +/
Сообщение от PavelR (??) on 23-Дек-10, 16:51 

Подскажите, как в скрипте на bash реализовать следующее:

Есть два дерева файлов.

В совпадающих подкаталогах дерева могут быть файлы, являющиеся друг другу хардлинками.

Необходимо, чтобы целевое дерево стало идентичным исходному ( были созданы недостающие каталоги, удалены лишние каталоги и их содержимое. Если в совпадающих подкаталогах есть файлы с совпадающими именами, то необходимо сравнить inode файлов, если они не равны, удалить несовпавший файл и сделать хардлинк.

В результате выполнения процедуры должны получить идентичные деревья каталогов,
аналогичные тому, что получается в результате

cp -lR /data/source/* "/data/target"

После чего на них натравится rsync с ключом --delete.

Задумка состоит в том, чтобы не удалять "лишние" (устаревшие) бэкапные копии, а готовить из них новую структуру каталогов для проведения rsync "завтра", экономя на операциях создания / удаления при _огромном_ количестве сравнительно редкоменяющихся файлов.

----------

В качестве альтернативы, можно рассмотреть вариант проведения этой операции на Perl.

---

//В конечном счете планируется реализовать "внятную" систему бэкапа, которая возьмет в себя лучшие фичи систем Dirvish и Bontmia, и сможет rsync-ом бэкапить lvm-тома как девайсы, lvm-тома как файловые системы, просто файловые системы, БД MySQL (методами mysqldump/lvm-snapshot-as-device/lvm-snapshot-as-files) / Postgresql.
В сочетании с разными плюшками хранилищ с дедупликацией - может получиться очень даже и прилично =)
Всем заинтересованным в системе бэкапа предлагаю поучаствовать. Две+ головы - однозначно лучше.

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Синхронизация содержимого каталогов на баш"  +/
Сообщение от ACCA (ok) on 25-Дек-10, 05:24 
> Задумка состоит в том, чтобы не удалять "лишние" (устаревшие) бэкапные копии, а
> готовить из них новую структуру каталогов для проведения rsync "завтра", экономя

1. Копируешь snapshot:


cp -al <previous snapshot> <new snapshot>

2. Проходишься по новой копии:

rsync -aEAX –delete-excluded –delete –chmod=Fa-w,D+w <current directory> <new snapshot>

Вообще там ещё пару телодвижений нужно сделать, чтобы было как в BackInTime: http://unspecified.wordpress.com/2010/05/19/how-backintime-w.../

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Синхронизация содержимого каталогов на баш"  +/
Сообщение от PavelR (??) on 25-Дек-10, 09:02 
>[оверквотинг удален]
>
 
> cp -al <previous snapshot> <new snapshot>
>

> 2. Проходишься по новой копии:
>
 
> rsync -aEAX –delete-excluded –delete –chmod=Fa-w,D+w <current directory>
> <new snapshot>
>

> Вообще там ещё пару телодвижений нужно сделать, чтобы было как в BackInTime:
> http://unspecified.wordpress.com/2010/05/19/how-backintime-w.../

ну копировать не надо, он уже будет существовать, этот каталог.

Блин, а rsync для этих целей я заюзать и не догадался.... Совсем не в ту сторону смотрел :-)
А решение-то на поверхности... Вот жеж...

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "Синхронизация содержимого каталогов на баш"  +/
Сообщение от ACCA (ok) on 26-Дек-10, 05:31 
> ну копировать не надо, он уже будет существовать, этот каталог.

Это не копирование, это создание хардлинков. Если будет существовать - нужно удалить. Ещё раз про алгоритм:

- создать хардлинки (cp -al)
- удалить линк на старую копию и сделать новую копию для новых файлов (rsync)

Подозреваю, что --link-dest есть не во всякой версии rsync.

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

4. "Синхронизация содержимого каталогов на баш"  +/
Сообщение от PavelR (??) on 26-Дек-10, 07:42 
>> ну копировать не надо, он уже будет существовать, этот каталог.
> Это не копирование, это создание хардлинков. Если будет существовать - нужно удалить.

Сам же пишешь "1. Копируешь snapshot: cp -al". Я прекрасно понимаю, что каталоги создаются, а файлы хардлинкуются.  Использую "терминологию исходного сообщения".
--
Ну когда-нибудь кто-нибудь начнет внимательно читать, то что пишут в задаваемый вопрос, и пытаться это хоть чуть-чуть обдумать ????

> Задумка состоит в том, чтобы не удалять "лишние" (устаревшие) бэкапные копии, а
> готовить из них новую структуру каталогов для проведения rsync "завтра", экономя
> время/операции записи

Так что я в курсе про
> - создать хардлинки (cp -al)
> - удалить линк на старую копию и сделать новую копию для новых
> файлов (rsync)
> Подозреваю, что --link-dest есть не во всякой версии rsync.

Надо будет проверить, и хотя мне один фиг надо будет делать собственный пакет с собственным rsync из-за --read-devices или как он там называется, для синхронизации содержимого блочного устройства в файл, но в любом случае, хочется достичь максимальной переносимости/работоспособности в любых окружениях.

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру