История изменений
Исправление Pinkbyte, (текущая версия) :
ЯННП, как линки-то помогут?
Допустим у тебя есть каталог data1. Рядом с ним лежит симлинк вида data -> data1. Приложение смотрит в симлинк data.
Делаем копию каталога data1 в data2, используя hardlink. На выходе - второй каталог с точно таким же содержимым, но который почти ничего не весит(накладные расходы на иноды по 4кб на каждый файл)!
Делаем rsync в data2 - лишние файлы(отсутствующие на сервере откуда идет rsync) удаляются(но только из data2, в data1 они по-прежнему лежат), новые файлы добавляются. ВАЖНО: файлы, которые не добавляются/удаляются, а изменяются будут изменены как в data1, так и в data2(потому что хардлинк по суть своей - это тупо ссылка на теже данные под другим именем). Если необходимо этого избежать - нужна ФС со снапшотами(или LVM) и рефлинки(вместо хардлинков) - там такая ситуация разруливается автоматически на уровне ФС(при попытке записи в рефлинк делается копия файла, старый файл остается неизменным). Если речь идет только о добавлении/удалении файлов - то продолжаем дальше.
Когда rsync заканчивается - меняем местами data1 и data2 (или переключаем симлинк, смотря что проще тебе заскриптовать).
Когда требуется новая синхронизация - повторить.
Копий может быть несколько, в случае файловой системы с CoW и рефлинками - все копии займут столько места, сколько там уникальных данных, а не n*примерный размер одной копии.
Исправление Pinkbyte, :
ЯННП, как линки-то помогут?
Допустим у тебя есть каталог data1. Рядом с ним лежит симлинк вида data -> data1. Приложение смотрит в симлинк data.
Делаем копию каталога data1 в data2, используя hardlink. На выходе - второй каталог с точно таким же содержимым, но который почти ничего не весит(накладные расходы на иноды по 4кб на каждый файл)!
Делаем rsync в data2 - лишние файлы(отсутствующие на сервере откуда идет rsync) удаляются(но только из data2, в data1 они по-прежнему лежат), новые файлы добавляются. ВАЖНО: файлы, которые не добавляются/удаляются, а изменяются будут изменены как в data1, так и в data2(потому что хардлинк по суть своей - это тупо ссылка на теже данные под другим именем). Если необходимо этого избежать - нужна ФС со снапшотами(или LVM) и рефлинки(вместо хардлинков) - там такая ситуация разруливается автоматически на уровне ФС(при попытке записи в рефлинк делается копия файла, старый файл остается неизменным). Если речь идет только о добавлении/удалении файлов - то продолжаем дальше.
Когда rsync заканчивается - меняем местами data1 и data2 (или переключаем симлинк, смотря что проще тебе заскриптовать).
Когда требуется новая синхронизация - повторить.
Исходная версия Pinkbyte, :
ЯННП, как линки-то помогут?
Допустим у тебя есть каталог data1. Рядом с ним лежит симлинк вида data -> data1. Приложение смотрит в симлинк data.
Делаем копию каталога data1 в data2, используя hardlink. На выходе - второй каталог с точно таким же содержимым, но который почти ничего не весит(накладные расходы на иноды по 4кб на каждый файл)!
Делаем rsync в data2 - лишние файлы(отсутствующие на сервере откуда идет rsync) удаляются(но только из data2, в data1 они по-прежнему лежат), новые файлы добавляются. ВАЖНО: файлы, которые не добавляются/удаляются, а изменяются будут изменены как в data1, так и в data2(потому что хардлинк по суть своей - это тупо ссылка на теже данные под другим именем). Если необходимо этого избежать - нужна ФС со снапшотами(или LVM) и рефлинки - там такая ситуация разруливается автоматически на уровне ФС. Если речь идет только о добавлении/удалении файлов - то продолжаем дальше.
Когда rsync заканчивается - меняем местами data1 и data2 (или переключаем симлинк, смотря что проще тебе заскриптовать).
Когда требуется новая синхронизация - повторить.