2016-09-02 6 views
2

Я пытаюсь написать утилиту резервного копирования, которая должна обрабатывать грубые 2 террабайта данных во многих папках.просмотр дерева каталогов whitout inotify

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

Я испортил фанатизацию, только чтобы понять, что он работает только с редактированием файлов. И я против использования inotify, если можно, так как мне придется редактировать максимальные часы, которые я не хочу делать. У меня было бы большое влияние на производительность, я полагаю.

Я предпочел бы просто установить один файл, который будет рекурсивно работать со всеми файлами под ним. Есть ли у кого есть опыт работы с этим, кто знает, какой хороший метод? Должен ли я пойти на inotify и просто взять удар производительности? Или есть другой подход, который я могу взять?

+0

Это пахнет проблемой XY. Что именно ты пытаешься сделать? Я подозреваю, что вы пытаетесь написать программу, которая будет синхронизировать два диска, так что редактирование файлов на одном диске появляется на другом. Если это ваша цель, подумайте об использовании RAID вместо этого; это более эффективно и надежно. –

+0

@ColonelThirtyTwo можно было бы легко сохранить 2TB в синхронизации между двумя машинами, имеющими подключение к Интернету – Michael

ответ

2

Я не думаю, что есть способ рекурсивно следить за изменениями в дереве каталогов. С другой стороны, с помощью inotify вам не нужно создавать один файловый дескриптор для каждого каталога, который вы смотрите. Вы можете создать один Inotify объект, а затем добавить много каталогов к нему с inotify_add_watch

int inotify_add_watch(int fd, const char *pathname, uint32_t mask); 
+0

, не так ли, чтобы добавить много накладных расходов? не нужно ли рекурсивно сканировать все дерево, которое я хочу посмотреть при запуске? – blipman17

+0

Я предполагаю, что смогу полностью сканировать его и записать все каталоги в файл. затем загрузите этот единственный файл при запуске программы. – blipman17

+0

Вы должны сканировать один раз, чтобы вы могли смотреть все каталоги, которые вы находите. С этого момента, когда вы получаете событие для создания или удаления каталогов, вы должны соответственно вызвать 'inotify_add_watch' /' inotify_rm_watch'. – redneb

0

Я написал приложение для резервного копирования опроса для крошечного RAMDrive; У меня есть тонна опыта восстановления исправленных нескольких вопросов. Я вообще не поклонник опроса, но я использовал windows и std.file libs ancienct: Windows 10 делает свои версии 5 основных версий; поэтому не беспокойтесь о переносимости.

Я планировал 2 режима: активный и спящий, который предотвратил бы бесчисленные движения дисков один раз, прежде чем они перейдут на более длительное время, что позволит им остановиться. Я только начал думать об обнаружении и ремонте, а решение средней репликации ZFS кажется наивным, потому что WinRAR позволяет вам делать это только с помощью архивов.

Я купил новый компьютер месяц назад, и я все еще пытаюсь сделать резервные копии своих файлов. Остерегайтесь использования phobos, т. Е. Std.anything. std.file 'копирует время создания, которое неверно для восстановленных файлов; после копирования вам нужно прочитать время создания старого файла и вызвать функцию OS самостоятельно и установить время создания; все эти метаданные поступают с системным вызовом Windows, поэтому это хорошее место для начала исследования данных в системных вызовах Linux.

Теперь, вероятно, самое подходящее время для повторного посещения Python и попробуйте: https://docs.python.org/3/library/pathlib.html Спойлер: он сломан в 3.5.2.

Смежные вопросы