상태:
디렉토리를 외부 하드 드라이브에 재귀적으로 복사하고 싶습니다. 이 디렉터리에는 많은 수의 파일(최소 100,000개)이 포함되어 있습니다.
질문:
외장 하드 드라이브는 내 작업만큼 많이 사용하면(몇 시간 사용) 상당히 뜨거워지는 경향이 있습니다. 이는 기대 수명에 좋지 않습니다. 그래서 시간이 문제가 되지 않기 때문에 복사 과정에서 파일 복사 사이에 잠시 휴식을 취하여 드라이브의 온도를 약간 식힐 수 있었으면 합니다.
현재 나는 ionice -c3 nice nice cp -r
다른 모든 실행 작업의 성능 저하를 최소한 줄이기 위해 이를 사용하고 있습니다. 하지만 냉각 문제는 해결되지 않습니다.
어떤 제안이 있으십니까?
다른 명령을 사용하는 것도 cp
가능 rsync
하지만(명령줄에 적용 가능한 경우) 지금까지 각 파일 복사 사이에 x초를 기다릴 수 있는 명령이나 옵션을 찾을 수 없습니다.
추가 정보: 외장 하드 드라이브는 데이터를 다른 컴퓨터로 전송하는 수단이 아니라 데이터의 최종 목적지입니다.
답변1
특별히 우아하지는 않지만 복사 명령을 실행한 다음 20분마다 3분 동안 일시 중지하는 루프를 실행할 수 있습니다.
백그라운드에서 복사 명령을 시작합니다.
cp -r /path/to/dir /path/to/external/drive &
이 루프를 실행하면 중지/다시 시작됩니다.
while ps -p $! >/dev/null; do kill -SIGCONT $!; sleep 20m; kill -s SIGSTOP $!; sleep 3m; done
답변2
rsync
처리량을 제한하는 옵션이 있습니다(예:
--bwlimit=1
1KB/초). 숫자를 곱하려면 접미사 KM 또는 G를 사용하세요. 기본값은 K입니다. 매뉴얼 페이지에서는 소켓에 대해 설명하지만 로컬 복사본에도 적용됩니다.
sudo smartctl -a /dev/sdx
SD 드라이브에서 실행 해 볼 수 있습니다.엑스모든 디스크와 버스가 SMART를 구현하는 것은 아니지만 과열로 인한 징후가 있는지 확인하십시오.
hdparm -M 128
디스크에서 다음을 수행해 볼 수 있습니다 (이 명령의 버전은 매뉴얼 페이지 확인).음향 관리이렇게 하면 머리 움직임이 느려져 소음과 열이 줄어듭니다.
답변3
나는 방법을 생각했다. 안타깝게도 복원되지 않으므로 컴퓨터를 켜두어도 괜찮다고 가정합니다. 테스트되지도 않았습니다.
편집: 이런, 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")