Назад | Перейти на главную страницу

Определение изменения на уровне дискового блока

У меня проблема :)

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

В идеале существует инструмент, который запускает сканирование диска или файла и создает «отпечатки пальцев» для каждого блока, а затем может сравнивать эти отпечатки на более позднем этапе, чтобы получить количество измененных блоков с момента последнего сканирования.

У кого-нибудь есть идеи? Кто-нибудь может предложить какие-либо инструменты, утилиты командной строки?

ОБНОВИТЬ

Нашел следующий проект:

https://github.com/OctopusDeploy/Octodiff

который является реализацией C # инструмента rdiff, который сам основан на алгоритме rsync и, по сути, соответствует тому, на что я надеялся.

Теперь мне нужен инструмент, который выводит статистику измененных данных без записи дельта-файла.

@ batistuta09 упомянул Starwind https://www.starwindsoftware.com/starwind-virtual-san-free который на самом деле является виртуальным SAN и является бесплатным. Он изначально устанавливается на Hyper-V и имеет устройство журналируемой файловой системы под названием LSFS. https://www.starwindsoftware.com/vm-centric-storage-lsfs это ориентировано на виртуальную машину.

Приятно то, что он непрерывно генерирует новые файлы (или фрагменты) размером AFAIK от 128 МБ до 512 МБ, когда на него записываются новые данные. Этого может быть достаточно, чтобы вы могли легко увидеть, сколько «новых» данных создается за определенный период времени. Результат может быть не очень точным, но, вероятно, будет достаточно хорошим для вашей конкретной задачи, а установка и настройка действительно просты.

В Windows Server 2016 должна быть доступна функция отслеживания блоков Microsoft, аналогичная механизму VMware CBT. Вы можете получить доступ к этой функции с помощью некоторых общедоступных API (например, Veeam использует vSphere CBT). Думаю, это может помочь вам отслеживать блоки данных, которые были изменены. Мы также запускаем Hyper-V с помощью Veeam и используем Starwind vSAN, который хорошо работает с VSS. Я знаю, что Nimble также поддерживает VSS / CBT.

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

1) Вы можете использовать файловую систему журналирования и фиксировать записи журнала, поскольку они дают не идеальное, но очень близкое приближение того, сколько изменений было внесено в конкретный временной интервал. Затем вы можете использовать математику для определения изменений уровня блока с приличным уровнем точности.

Многие журналируемые файловые системы позволяют вам размещать сам журнал на совершенно другом участке хранилища, чем данные, поэтому вы могли бы сделать это (например, с XFS) на большом участке хранилища, а затем проанализировать журнал во временных отрезках с помощью отдельный инструмент или наблюдатель.

Я не говорю о множестве возможностей этого подхода ... нет предела.

2) Если вам требуется действительно точная карта временного среза (1) по сравнению с временным срезом (2) на уровне блока с точки зрения измененного / не измененного, я мог бы подумать об использовании DRBD и двух отдельных ведомых устройств только для чтения (или программного RAID 1 , что было бы проще и возможно на Windows Server, но более физически ограничено) .. тот, который вводится во время (a), а затем отключается. Затем подключите второй за один раз (b), а затем отключите его, а затем выполните статическое сравнение, используя любой инструмент, который вы хотите ... вам просто нужно прочитать каждый блок из обоих источников и выполнить XOR. Если результат больше нуля, он изменился.

Я предлагаю использовать такую ​​технологию виртуальных машин, как CBT в vSphere или KVM с использованием файла резервной копии и оверлея для хранения.

Затем вы можете использовать CBT или изучить оверлейное изображение qcow2, чтобы определить, какие блоки были изменены.

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

Одним из вариантов может быть использование ZFS и его функции моментальных снимков. Сделайте снимок в момент времени X и проверьте, какое пространство используется для моментального снимка во время Y. Это покажет размер различий между временами X и Y.

Описано использование пространства для моментальных снимков ZFS. в документации Oracle ZFS.

Вы можете включить теневые копии на всех томах, которые хотите отслеживать, затем вы можете проверить используемое пространство хранения теневых копий с помощью:

vssadmin список shadowstorage

Разница в значениях между двумя запусками команды должна дать вам хорошую оценку размера накопленных изменений.