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

Ситуация:
Я хочу скопировать каталог рекурсивно на внешний жесткий диск. В каталоге содержится много файлов (не менее 100 000).

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

На данный момент я использую ionice -c3 nice nice cp -r который, по крайней мере, снижает потери производительности для всех других запущенных задач. Но это не касается проблемы тепла.

Какие-либо предложения?

Использование других команд, кроме cp таких как rsync было бы нормально (если это применимо из командной строки), но до сих пор я не мог найти какую-либо команду или параметр, который позволяет мне ждать x секунд между каждой копией файла.


Дополнительная информация: Внешний жесткий диск является конечным пунктом назначения данных, а не способом передачи данных на другой компьютер.

  • Создание подкаталогов и организация файлов по дате
  • Экспортировать путь с пробелом в имени каталога
  • стоп трубы () открытие stdin
  • Почему разные пользовательские интерфейсы отображают разные размеры одного и того же файла?
  • Как приложение выбирается над другими, чтобы открыть определенный тип файла в Linux
  • Почему размер inode исправлен?
  • Как просмотреть размер двоичных файлов с помощью команды linux?
  • Когда был создан файл
  • 3 Solutions collect form web for “Копирование большого количества файлов рекурсивно приводит к проблемам с нагревом на моем внешнем жестком диске”

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

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

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

       while ps -p $! >/dev/null; do kill -SIGCONT $!; sleep 20m; kill -s SIGSTOP $!; sleep 3m; done 

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

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

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

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

    EDIT: woops, пересмотренный ответ Terdon намного лучше.

     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") 
    Linux и Unix - лучшая ОС в мире.