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

Как уменьшить использование ресурсов при копировании большого файла?

Мне нужно переместить большой файл (поврежденная таблица MySQL ~ 40 ГБ) на отдельный сервер, чтобы восстановить его. (При попытке восстановления на моем рабочем сервере он быстро убил сервер).

Для этого я хочу выполнить синхронизацию файлов .frm, .MYI и .MYD с моего рабочего сервера на облачный сервер.

Я копирую файлы из / var / lib / mysql / {database} / в / home / {myuser}, поэтому мне не нужно включать root-доступ для команды rsync и быть на 100% уверенным, что файл базы данных не используется (не следует записывать или читать из нее, но, очевидно, я не хочу выключать свою производственную базу данных, чтобы в этом убедиться).

Первый файл, который я попытался скопировать, был размером около 10 ГБ. Я перехожу с одной части своего рабочего сервера на другую, то есть на тот же массив дисков.

К сожалению, команда копирования "cp filename newfilename" потребовала столько ресурсов, что остановила сервер.

Как я могу использовать меньше ресурсов при копировании файла в другой каталог? (Неважно, сколько времени это займет).

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

Может ли кто-нибудь предложить лучший способ сделать это? У меня быстро заканчивается место на диске, поэтому мне нужно как можно скорее отремонтировать и заархивировать эту таблицу.

Два варианта помимо ограничения полосы пропускания rsync:

  • ionice -c 3 cp foo bar
  • buffer -u 150 -m 16m -s 100m -p 75 -i foo -o bar

ionice будет взаимодействовать с планировщиком ввода-вывода. buffer это кольцевой буфер, предназначенный для повышения эффективности символьных устройств, но -u 150 будет делать паузу в 150 микросекунд между записями, которых, согласно руководству, может быть достаточно, чтобы дать диску возможность дышать.

Обе ionice и buffer доступны в стандартной сборке Ubuntu. iotop удобно, если в вашем ядре настроен CONFIG_TASK_DELAY_ACCT, но мой ящик Ubuntu этого не сделал, что серьезно ограничивает удобство использования команды. я уже знаю который команда топит мой жесткий диск, я просто хочу дать ему передышку.

Кроме того, пока копирование выполняется, посмотрите на вывод iostat -x 1 (обычно в пакете sysstat) и убедитесь, что поле% занято для вашего устройства составляет 90% или меньше во время копирования. Если он находится на уровне 99-100%, то вы испытываете недостаток в других процессах для ввода-вывода.

используйте rsync с параметром --bwlimit = KBPS (ограничение пропускной способности ввода-вывода; КБайт в секунду). поэкспериментируйте с меньшим файлом и попытайтесь найти оптимальное сочетание скорости передачи и использования системы. Монитор во второй оболочке с "vmstat 1"

Ты пробовала nice -n10 с префиксом к команде?

10 значение по умолчанию. Диапазон идет от -20 (высший приоритет) на 19 (самый низкий).

Одна альтернатива:

scp -l ${KBPS} ${src} ${dest}

Но я не думаю, что это сработает, если $ {src} - растущий файл ... не могли бы вы предложить способ копирования и ожидания закрытия исходного кода ...