Рекурсивное копирование большого количества файлов приводит к перегреву моего внешнего жесткого диска

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

  • Необходимо использовать # процессоров на хосте, а не # доступных процессоров в cgroups cpuset для оценки пропускной способности процессора:

    (количество процессоров на хосте) * (cpu.cfs_period_us) * (.25), поэтому 40 * 100000 * .25 = 1000000

  • Мой прогон stress-ng внутри контейнера использовал контроллеры cpu и cpuset cgroup / lxc / foo, в то время как запуск stress-ng за пределами контейнер использовал cgroup /system/sshd.service

Чтобы лучше смоделировать мое реальное приложение, я должен был указать, какие контроллеры использовать, используя cgexec :

$ cgexec -g cpuset:/lxc/foo -g cpu:/lxc/foo ./stress-ng --cpu-load 100 -c 48 --times --timeout 10s --metrics-brief  
stress-ng: info: [6252] dispatching hogs: 48 cpu  
stress-ng: info: [6252] successful run completed in 10.36s  
stress-ng: info: [6252] stressor      bogo ops real time  usr time  sys time   bogo ops/s   bogo ops/s  
stress-ng: info: [6252]                          (secs)    (secs)    (secs)   (real time) (usr+sys time)  
stress-ng: info: [6252] cpu              11152     10.09    102.83      0.12      1105.60       108.32  
stress-ng: info: [6252] for a 10.36s run time:  
stress-ng: info: [6252]     414.46s available CPU time  
stress-ng: info: [6252]     102.85s user time   ( 24.82%)  
stress-ng: info: [6252]       0.12s system time (  0.03%)  
stress-ng: info: [6252]     102.97s total time  ( 24.84%)  
2
12.07.2017, 17:30
3 ответа

rsync имеет возможность ограничивать пропускную способность; например - bwlimit = 1 составляет 1 кибибайт в секунду. Используйте суффикс K M или G для умножения числа, по умолчанию K. На странице руководства говорится о сокетах, но это применимо и к локальным копиям.

Вы можете попробовать запустить sudo smartctl -a / dev / sdx на вашем диске sd x , чтобы увидеть, есть ли какие-либо признаки перегрева, хотя не все диски и шины реализуют SMART.

Вы можете попробовать hdparm -M 128 (проверьте свою версию этой команды на странице руководства)на вашем диске, чтобы выполнить акустическое управление , которое должно замедлить движение головы, чтобы уменьшить шум, но также и нагрев.

2
27.01.2020, 21:54

Не особо элегантно, но вы можете запустить команду копирования, а затем запустить цикл, который приостанавливает ее, скажем, на 3 минуты каждые 20 минут:

  1. Запустите команду копирования в background

     cp -r / path / to / dir / path / to / external / drive & 
     
  2. Запустите этот цикл, который остановит / перезапустит его:

     while ps -p $! > / dev / null; сделать 
    kill -SIGCONT $ !; 
    сна 20м; 
    kill -s SIGSTOP $ !; 
    сон 3м; 
    готово 
     
4
27.01.2020, 21:54

Я придумал один способ. К сожалению, он не возобновляется, поэтому предполагается, что вы не против оставить свой компьютер включенным. Тоже не проверял.

РЕДАКТИРОВАТЬ: ох, исправленный ответ Тердона намного лучше.

SRC=src # source directory
DEST=dest # target directory
LOCKFILE=/var/tmp/copy.lock

BATCH_LEN=5m # 5 minutes
BATCH_DELAY=5m

touch "$LOCKFILE"

(cd "$SRC" && tar -cf - .) |
(cd "$TMP" && while [ -e "$LOCKFILE" ]; do
    dd bs=4K & (sleep $BATCH_LEN; kill %1 >/dev/null)
    sleep $BATCH_DELAY
 done) |
(cd "$DEST" && tar -xpf - ; rm "$LOCKFILE")
0
27.01.2020, 21:54

Теги

Похожие вопросы