Я пытаюсь создать программное обеспечение, которое создает резервные копии всего моего жесткого диска.
Мне удалось написать код для чтения необработанных данных из секторов жесткого диска. Тем не менее, я хочу иметь дополнительные резервные копии. Для этого мне нужно знать изменения, внесенные в настройки ОС, изменения файлов, все.
Мой вопрос —
С помощью FileSystemWatcher а также Inotify, смогу ли я узнать все изменения, внесенные в каждый сектор жесткого диска? (Настройки ОС и т. Д.)
Я пишу это в C ++ для Linux и Windows.
(Видел этот вопрос на Переполнение стека что дало мне некоторое представление)
Inotify для обнаружения изменений во время работы вашей программы, я предполагаю, что FilySystemWatches похожа.
Одним из способов решения этой проблемы является наличие контрольной суммы для каждого сектора или нескольких секторов, и при создании резервной копии вы сравниваете контрольные суммы со списком, который у вас есть, и только с резервными блоками, которые были изменены.
MS Windows FileSystemWatcher механизм более ограничен, чем Linux Inotify, но оба, вероятно, сделают то, что вам нужно. Механизм Linux предоставляет (необязательно) уведомление о чтениях файлов, что приводит к обновлению «метки времени доступа».
Однако слабым местом с точки зрения вашего приложения является то, что все изменения файлов, сделанные от загрузки системы до загрузки вашей программы (и выгрузки до завершения работы), не будут отслеживаться. Вашему приложению может потребоваться просмотреть временные метки изменения файлов для определения измененных файлов в зависимости от уровня мониторинга, на который вы ориентируетесь.
Обе архитектуры поддерживают временную метку для каждого отслеживания файла, когда к файлу последний раз обращались. Если это обновление является триггером для уведомления о резервном копировании, механизм Windows, в котором отсутствует такое уведомление, вызовет несоответствующее поведение на платформах. Механизм Windows также может отбрасывать уведомления из-за ограничений размера буфера. Вот настоящая жемчужина из документация:
Обратите внимание, что FileSystemWatcher не поднимает ошибка событие, когда событие пропущено или размер буфера превышен из-за зависимостей с операционной системой Windows. Чтобы избежать пропущенных событий, следуйте этим рекомендациям:
Увеличение размера буфера с InternalBufferSize свойство может предотвратить пропущенные события изменения файловой системы.
Избегайте просмотра файлов с длинными именами. Подумайте о переименовании, используя более короткие имена.
Сделайте ваш код обработки событий как можно короче.
По крайней мере, вы можете контролировать два из трех из этих ….