Отслеживание грязных блоков на блочном устройстве - PullRequest
3 голосов
/ 03 января 2011

Я ищу способ отслеживать, какие блоки на блочном устройстве модифицируются после определенного момента времени.В конечном итоге я хочу использовать это для синхронизации двух 2 ТБ дисков, один из которых подключается только через Интернет (подключается через USB) один раз в месяц.Не зная, какие блоки были изменены, мне приходится каждый раз проходить целые 2 ТБ.

Я использую новейшую ОС GNU / Linux и имею опыт работы с C и Python.Я надеюсь избежать написания кода уровня ядра, поскольку у меня нет никакого опыта в этой области вообще.Моя текущая теория заключается в том, что где-то должны быть некоторые хуки, где мой код может вызываться при выполнении очистки диска.

Есть идеи?

Ответы [ 3 ]

3 голосов
/ 06 января 2011

Для этого должна быть возможность использовать Linux MD, при условии, что вы будете осторожны, чтобы избежать ошибки в слое блока .Каждый месяц или около того вы добавляете USB-диск в качестве нового члена двухдискового RAID-набора, в котором по умолчанию отсутствует один, и позволяете ему выполнять синхронизацию измененных блоков.Растровое изображение с намерением записи кажется полезным для этого, поэтому не забудьте иметь его рядом.

# Creation
mdadm -C /dev/md0 -l 1 -n 2 -e 1.0 -b internal  /dev/sda  missing

# Addition of slave disk
mdadm /dev/md0 -a /dev/thatusbthing

См. Также более подробное описание этой настройки , с дополнительным обсуждением параметров /потенциальные ловушки.

Приложение:

rsync был разработан для передачи файлов по (сравнительно медленной) сети.Это означает, что обе стороны будут сканировать свое устройство локально, вычислять эту скользящую контрольную сумму, а затем передавать измененные фрагменты.Список изменений, конечно, зависит от расчета контрольных сумм.(Чтение со скоростью 30+ МБ / с с диска происходит быстрее, чем безоговорочная передача, скажем, со скоростью 10 МБ / с по сети 100 Мбит.)поскольку с помощью этого растрового изображения он уже знает, какие блоки были изменены с момента последней синхронизации дисков.

2 голосов
/ 18 октября 2011

Вы можете использовать drbd.Это похоже на большие расходы, но вы можете использовать два устройства на одной машине.Второе устройство (которое на usb) должно быть удалено большую часть времени и установлено в состояние «вторичный».После того, как вы подключите его, он должен синхронизироваться очень быстро.Это связано с тем, что drbd отслеживает локальные изменения.

Да, есть недостаток: вы должны использовать специальный формат, а не просто необработанное устройство, и устройство будет меньше, потому что для локально-точечного отображения требуется этот битизмененные сектора.

1 голос
/ 06 января 2011

Без использования каких-либо метаданных файловой системы, я считаю, что единственный способ определить изменения - это сравнить блочные устройства. Вы можете применить алгоритм дельта-передачи rsync с rsync --inplace -B 4K /dev/sdX /dev/sdY. Отрегулируйте размер блока в соответствии с вашими блочными устройствами. Это должно потребовать 4 ТБ операций чтения, но не потребует, чтобы блочные устройства были в одной системе. Вы можете включить сжатие при передаче среди множества других опций .

...