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

Как ограничить ввод-вывод диска во время резервного копирования?

У меня есть cron, который ночью выполняет простой tar zcf.

На сервере есть:

Как видно на экране мониторинга хост:

http://clip2net.com/s/57YRKP

Почти все время использования tar дисковый ввод-вывод достигает> 90% и заставляет все остальные приложения (mysql, apache) сильно замедляться.

2 вопроса:

Спасибо!

Ожидается, что во время резервного копирования будет наблюдаться большое количество операций ввода-вывода, потому что они обычно создаются для больших файловых деревьев с большими файлами. Ты можешь использовать ionice для определения приоритетов заданий ввода-вывода в Linux с помощью классов и уровней. IIRC, класс 2, уровень 7 - это самый низкий уровень нехватки, который делает его практически невидимым для других нагрузок ввода-вывода и пользователей. Видеть man ionice для использования и деталей.

Помимо довольно общего подхода с ionice есть хорошая цель сопоставления устройств (ioband), которая позволяет точно контролировать пропускную способность блочного устройства (DM). К сожалению, это не часть стандартного ядра.

Кроме того, вы, вероятно, можете ускорить tar с помощью

  1. Считывание имен файлов в кеш диска: find /source/path -printf ""
  2. Чтение инодов в кеш диска: find /source/path -perm 777 -printf ""
  3. Заставить tar читать и записывать большие блоки с диска и на диск, например, используя канал с mbuffer или буфером (минимум 100 MiB RAM): tar ... | mbuffer -m 256M -P 100 -p 1 ...

Я бы рекомендовал отказаться от tar и перейти на rsync (как упоминалось Dogsbody). Я использую BackupPC для резервного копирования файлов в своих системах Windows и Linux, он поддерживает использование tar, а также rsync и автоматически заботится о жестких ссылках, а также предоставляет приятный веб-интерфейс.

http://backuppc.sourceforge.net/

Как ответили другие, да, это нормально, и ionice это хороший общий способ не позволить этому повлиять на вашу систему.

Несколько раз я видел людей tar дела обстоят лучше, когда им это не нужно. Если какой-либо процент данных, которые вы копируете, не изменился с момента последней копии, я предлагаю указать rsync попытка.

Это уменьшит ввод-вывод за счет копирования только файлов, которые были изменены с момента последней копии. вы не сможете уменьшить количество операций ввода-вывода более чем наполовину, так как все данные все равно нужно будет прочитать, но вы значительно уменьшите объем записываемых данных (что в зависимости от вашего оборудования также может быть более медленным).

Если вы хотите создавать отдельные копии / резервные копии каждый раз, когда он запускается, наиболее мощным вариантом является –link-dest, который позволяет жестко связать неизмененные файлы с предыдущей резервной копией. Это экономит ОГРОМНОЕ количество места на сервере резервного копирования. например Я создаю резервную копию машины (Фред), у Фреда есть жесткий диск объемом 20 ГБ, и я создаю резервную копию / копирую весь диск, за исключением / proc и / dev. Теперь у меня на сервере резервного копирования есть каталог размером 20 ГБ. На следующий день я снова делаю резервную копию Фреда и –link-dest на вчерашнюю резервную копию. Rsync сравнивает удаленные файлы с локальной копией и, если точно так же, не будет беспокоить их перенос, но жестко свяжет новый файл с вчерашним файлом. Любые измененные файлы копируются заново (или частично копируются с использованием вчерашней резервной копии, если это возможно). Если со вчерашнего дня было изменено только 100 МБ файлов, у меня теперь есть два каталога, оба по 20 ГБ файлов, но занимающие только 20,1 ГБ места на сервере резервного копирования!

Я надеюсь, что это поможет и все еще отвечает на ваш вопрос.