LINUX.ORG.RU

История изменений

Исправление 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 (или переключаем симлинк, смотря что проще тебе заскриптовать).

Когда требуется новая синхронизация - повторить.