В моей локальной сети есть компьютер Debian, служащий резервным сервером для остальных. Он имеет четыре жестких диска, объединенных в программный RAID 5 md, на этом LVM и на этом btrfs. Резервное копирование выполняется с помощью rsync, а для большой файловой системы требуется более часа. Долгое время я думал, что мало что смогу с этим поделать.
Недавно, однако, я заметил, что активность HDD сильно отличалась на обоих концах передачи. В то время как отправляющая сторона, использующая Gentoo и в основном использующая ext4, почти не имела дискового ввода-вывода, принимающая сторона была постоянно занята. Поскольку большая часть данных не меняется между передачами, я считаю, что чтение метаданных должно составлять основную часть данных. Но я был бы очень удивлен, если чтение inode-ов в btrfs - это такая большая работа, чем делать то же самое в ext4.
iotop
на принимающей стороне было подтверждено чтение диска со скоростью около 1–4 МБ / с, тогда как на стороне-отправителе был только случайный пакет 0,5 МБ / с.
У меня вопрос, может кто-нибудь объяснить, что здесь происходит? Желательно с некоторыми указаниями, как обойти проблему, если это возможно.
Возможно, есть какой-то флаг настройки btrfs, который я мог бы использовать, или что-то подобное. Мне нужна FS с возможностью создания моментальных снимков на сервере резервного копирования, и моя попытка использовать FreeBSD и ZFS быстро привела к несовместимой FS, поэтому в данный момент я вижу небольшую альтернативу btrfs. Поэтому ответы, говорящие мне об использовании ext4 или zfs, могут получать голоса, но без галочки.
Используемые параметры Rsync, в соответствии с запросом cjm :
--rsync-path='rsync --fake-super'
--archive # -rlptgoD
--hard-links # detect and preserve these
--acls
--xattrs
--sparse
--noatime # based on patch from samba #7249c1
--delete
--delete-delay
--fuzzy
--human-readable # size suffixes, base 1000
--stats
А также набор -f
правил, чтобы пропустить некоторые файлы.
Опции монтирования btrfs сообщаются mount
как
rw,nosuid,noexec,noatime,nospace_cache
В частности, это включает noatime
флаг, поэтому не должно быть никакой записи, если только в некоторых файлах не было различий. Я добавил эту информацию в ответ на ответ по Kyle Jones .
dtrace
или systemtap
узнать, на что тратится время.