[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Удаление старых инкрементов rdiff-backup на большом архиве



Доброго времени суток.

	У кого есть опыт работы с объемными архивами в rdiff-backup?

Мой вылез за пределы 27 млн. инод - это всего 51 инкремент
(ежедневный бэкап за последних 50 дней). Объем архива пока сказать
не могу, он еще вычисляется.

	При попытке выполнить

rdiff-backup --remove-older-than 30D --force /backups/server

rdiff-backup съедает всю доступную память и сервер уходит в своп
(на сервере 2GB RAM). Пробовал смотреть на максимальной детализации
отладки - видно, что удаляются файлы, но память "капает" в неизвестном
направлении.

	Пробовал смотреть исходники rdiff-backup в районе remove-older-than

# /usr/share/pyshared/rdiff_backup/manage.py

def delete_earlier_than_local(baserp, time):
        """Like delete_earlier_than, but run on local connection for speed"""
        assert baserp.conn is Globals.local_connection
        def yield_files(rp):
                if rp.isdir():
                        for filename in rp.listdir():
                                for sub_rp in yield_files(rp.append(filename)):
                                        yield sub_rp
                yield rp

        for rp in yield_files(baserp):
                if ((rp.isincfile() and rp.getinctime() < time) or
                        (rp.isdir() and not rp.listdir())):
                        Log("Deleting increment file %s" % rp.path, 5)
                        rp.delete()

	Насколько я знаю python, оно проходит по инкрементам и строит список
всех элементов в архиве, затем сравнивает метку времени и удаляет устаревшее.

	Если предположить, что средняя длина пути 256 символов (грубо округляя
до 256 байт, то на полную итерацию этим алгоритмом потребуется

256 * 27000000 / 1024 / 1024 / 1024 ~= 6.43 GB

	Встречал ли кто патчи, чтобы очищать ненужные элементы? Или инкременты
можно почистить другим способом?

-- 
WBR, Andrey Tataranovich


Reply to: