В моей локальной сети есть компьютер 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
узнать, на что тратится время.Ответы:
Один из возможных ответов заключается в том, что удаленная файловая система по умолчанию монтируется с опцией «atime». Время доступа записывает для всего, что удаленный доступ к rsync в сочетании со штрафом на запись, который вы испытываете с RAID 5 (вычислительная четность означает чтение всех дисков RAID до того, как вы запишете на один из них), может объяснить увеличение ввода-вывода на удаленной стороне.
Если я прав, вы можете ускорить процесс, установив удаленную файловую систему с опцией «noatime».
источник
rw,nosuid,noexec,noatime,nospace_cache
.Я подозреваю, что параметры --fake-super. Это говорит rsync хранить всю информацию метаданных в расширенных атрибутах каждого файла. Я подозреваю, что доступ к этим атрибутам идет медленно. Попробуйте выполнить тестовый запуск с rsync для рута без --fake-super. Вы не можете повторно использовать одну и ту же резервную копию, так как атрибуты не будут совпадать.
источник
--xattrs
/-X
был чрезвычайно медленным до того, как вышестоящий коммит (все еще не выпущенный) был выбран в rsync Debian 3.1.2-2:https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=799143#20
https://bugzilla.samba.org/show_bug.cgi?id=5324
источник