로컬로 또는 네트워크를 통해 특정 수의 파일을 복사한 다음 휴식을 취하는 파일 복사 명령이 있습니까?

로컬로 또는 네트워크를 통해 특정 수의 파일을 복사한 다음 휴식을 취하는 파일 복사 명령이 있습니까?

예를 들어, 할 수 있는 것

cp -R folder1 /Volume/Data

또는

some_cp folder1 [email protected]/some/path/folder1

그리고 15GB의 파일을 복사한 다음 20~30초 동안 잠을 자나요? 따라서 명령이 15GB를 복사할 때마다 20초, 30초 또는 지정된 시간 동안 휴면 상태가 되어 하드 드라이브가 휴식을 취하고 너무 많은 스트레스를 받지 않을 수 있습니다.

데이터의 양 외에 또 다른 가능성은 3분마다 파일을 복사한 후 1분간 휴식을 취하는 것입니다.

답변1

쉘 스크립트

모든 것이 복사될 때까지 반복되는 bash 쉘스크립트를 만들었습니다. 대용량 파일이 있는 경우에는 이전 반복에서 복사한 것을 활용하는 것이 중요하며, 복사 과정의 진행 상황을 '보는' 것이 좋습니다.

#!/bin/bash

########################################################################

function usage {

 echo "
Usage:   $0 source-dir/ target-dir  # copies content of source-dir
         $0 source-dir  target-dir  # copies source-dir (with subdirs)
"
 exit
}
########################################################################

# main

########################################################################

if [ $# -ne 2 ]
then
 usage
fi
if ! test -d "$1"
then
 echo "$1 is not a directory"
 if test -f "$1"
 then
  echo "but $1 is a file :-)"
 else
  echo "and $1 is not a file :-("
  usage
 fi
fi
if ! test -d "${2##*:}"  # allowing network directories
then
 echo "$2 is not a directory :-("
 usage
else
 echo "$2 is a directory :-)"
fi

cont=true
while $cont
do
 echo "copying ..."
 timeout --foreground 25 rsync --info=progress2 --partial -Ha "$1" "$2"  
 if [ "$?" != "0" ]
 then
  cont=true
  echo "flushing the buffers ..."
  sync
  echo "sleeping for 5 seconds ..."
  sleep 5
 else
  cont=false
 fi
done
echo "final flushing of buffers ..."
sync
echo "Dome :-)"

용법

쉘스크립트를 실행 가능하게 만들고 인수 없이 실행하면 다음과 같은 도움말 메시지가 표시됩니다.

Usage:   ./rsyncer-w-pause source-dir/ target-dir  # copies content of source-dir
         ./rsyncer-w-pause source-dir  target-dir  # copies source-dir (with subdirs)

느린 USB 펜 드라이브에서 Linux 배포판이 포함된 일부 iso 파일을 하드 드라이브로 복사하여 쉘스크립트를 테스트했습니다. 이렇게 하면 여러 번의 반복이 수행되고 iso 파일 중간에 복사가 중단되지만 복사된 부분은 다음 반복에서 사용할 수 있습니다. 그래서 대용량 파일도 복사가 가능한지 확인해 봤습니다.

실제 복사에 사용하려면 복사 시간도(25초에서) 늘리고, 슬립 시간도(5초에서) 늘려야 할 것 같습니다. 특정 작업에 가장 적합한 시간 간격을 사용하십시오.

명령줄 옵션 및 매개변수에 대한 참고 사항

timeout이 명령은 파일을 복사하는 동안에도 제어하는 ​​명령의 실행을 중지합니다.

   --foreground

          when not running timeout directly from a shell prompt,

          allow COMMAND to read from the TTY and get TTY signals; in  this
          mode, children of COMMAND will not be timed out

이 명령은 rsync강력한 복사 명령입니다. man rsync가능한 옵션에 대한 전체 설명은 을 참조하십시오 .

   --info=FLAGS
          This option lets you have fine-grained control over the informa‐
          tion output you want to see.  An individual  flag  name  may  be
          followed  by a level number, with 0 meaning to silence that out‐
          put, 1 being  the  default  output  level,  and  higher  numbers
          increasing  the  output  of  that  flag  (for those that support
          higher levels).  Use --info=help to see all the  available  flag
          names,  what they output, and what flag names are added for each
          increase in the verbose level.  Some examples:

              rsync -a --info=progress2 src/ dest/
              rsync -avv --info=stats2,misc1,flist0 src/ dest/

   --partial
          By default, rsync will delete any partially transferred file  if
          the  transfer  is  interrupted. In some circumstances it is more
          desirable to keep partially transferred files. Using the  --par‐
          tial  option  tells  rsync to keep the partial file which should
          make a subsequent transfer of the rest of the file much faster.

--hard-links이 옵션 이 마음에 들 수도 있고 마음에 들지 않을 수도 있습니다 .

   -H, --hard-links
          This tells rsync to look for hard-linked files in the source and
          link together the corresponding files on the destination.  With‐
          out  this option, hard-linked files in the source are treated as
          though they were separate files.

   -a, --archive
          This  is equivalent to -rlptgoD. It is a quick way of saying you
          want recursion and want to preserve almost everything  (with  -H
          being  a  notable  omission).   The  only exception to the above
          equivalence is when --files-from is specified, in which case  -r
          is not implied.

          Note that -a does not preserve hardlinks, because finding multi‐
          ply-linked files is expensive.  You must separately specify -H.

마지막으로 매개변수(소스 및 대상)에 대한 설명을 읽고,

          rsync -avz foo:src/bar /data/tmp

   This would recursively transfer all files from the directory src/bar on
   the  machine foo into the /data/tmp/bar directory on the local machine.
   The files are transferred in "archive" mode, which  ensures  that  sym‐
   bolic  links,  devices,  attributes,  permissions, ownerships, etc. are
   preserved in the transfer.  Additionally, compression will be  used  to
   reduce the size of data portions of the transfer.

          rsync -avz foo:src/bar/ /data/tmp

   A  trailing slash on the source changes this behavior to avoid creating
   an additional directory level at the destination.  You can think  of  a
   trailing / on a source as meaning "copy the contents of this directory"
   as opposed to "copy the directory by  name",  but  in  both  cases  the
   attributes  of the containing directory are transferred to the contain‐
   ing directory on the destination.  In other words, each of the  follow‐
   ing  commands copies the files in the same way, including their setting
   of the attributes of /dest/foo:

          rsync -av /src/foo /dest
          rsync -av /src/foo/ /dest/foo

답변2

pid복제 프로세스에 대한 정보를 얻고 이를 일시 중지한 다음 재개할 수 있습니다.

rsync언제든지 사용하고 중지 할 수도 있으며 , 다시 시작하면 남은 파일 복사가 시작됩니다.

rsync하지만 rsync 프로세스를 사용하고 일시 중지하는 것이 좋습니다 .

rsyncpid가 1234라고 가정합니다 .

to pause:    
kill -s STOP 1234

to continue:
kill -s CONT 1234

관련 정보