tar/gz를 사용하여 디렉터리를 여러 위치에 보관하고 추가 복사본을 생략합니다.

tar/gz를 사용하여 디렉터리를 여러 위치에 보관하고 추가 복사본을 생략합니다.

외부 USB 장치에 로컬 데이터의 tar/gzip 아카이브를 생성한 다음 해당 아카이브를 두 번째 USB 장치에 복사하는 간단한 백업 스크립트가 있습니다.

예를 들어:

usb1="/mnt/usbone"
usb2="/mnt/usbtwo"
source="/home/user"

tar cfz ${usb1}/source.tar.gz ${source}
cp -ar ${usb1}/source.tar.gz ${usb2}

tar이는 아카이브를 생성한 후 복사하는 것이 아니라 두 드라이브 모두에 ​​복사본을 생성하도록 최적화된 것 같습니다 . 결과 아카이브는 매우 작습니다(<1GB). 나는 이것이 안전한 백업 방법이 아니라는 것을 알고 있습니다.


편집: Archemar의 솔루션을 빠르게 테스트하고 방법을 비교했습니다. 좋은 측정을 위해 원래 방법도 테스트했습니다 rsync. 결과 time(bash 시간이 아닌 /usr/bin/time)와 테스트에 사용한 스크립트를 확인하세요.

소스는 으로 생성됩니다 dd if=/dev/urandom bs=1M count=1024 of=/tmp/random.blob. 호스트는 microSD 카드를 통해 실행되는 Raspberry Pi 3B이고 설치 대상은 USB 2.0 플래시 드라이브( ${a}및 USB 2.0 플래시 드라이브 ${b})입니다.

a.sh(tar 및 cp):

tar cfz ${a}/r1.tar.gz ${s}
cp -ar ${a}/r1.tar.gz ${b}/r1.tar.gz

b.sh(타르 및 티):

tar cfz - ${s} | tee ${a}/r2.tar.gz > ${b}/r2.tar.gz

c.sh(tar 및 rsync):

tar cfz ${a}/r3.tar.gz ${s}
rsync -aW ${a}/r3.tar.gz ${b}/r3.tar.gz

결과:

# /usr/bin/time -v bash a.sh 
        Command being timed: "bash a.sh"
        User time (seconds): 218.71
        System time (seconds): 28.33
        Percent of CPU this job got: 68%
        Elapsed (wall clock) time (h:mm:ss or m:ss): 6:03.13
        Average shared text size (kbytes): 0
        Average unshared data size (kbytes): 0
        Average stack size (kbytes): 0
        Average total size (kbytes): 0
        Maximum resident set size (kbytes): 2480
        Average resident set size (kbytes): 0
        Major (requiring I/O) page faults: 41
        Minor (reclaiming a frame) page faults: 1250
        Voluntary context switches: 45519
        Involuntary context switches: 25576
        Swaps: 0
        File system inputs: 3668157
        File system outputs: 4197336
        Socket messages sent: 0
        Socket messages received: 0
        Signals delivered: 0
        Page size (bytes): 4096
        Exit status: 0

        
# /usr/bin/time -v bash b.sh 
        Command being timed: "bash b.sh"
        User time (seconds): 221.64
        System time (seconds): 28.62
        Percent of CPU this job got: 85%
        Elapsed (wall clock) time (h:mm:ss or m:ss): 4:53.98
        Average shared text size (kbytes): 0
        Average unshared data size (kbytes): 0
        Average stack size (kbytes): 0
        Average total size (kbytes): 0
        Maximum resident set size (kbytes): 2536
        Average resident set size (kbytes): 0
        Major (requiring I/O) page faults: 31
        Minor (reclaiming a frame) page faults: 1162
        Voluntary context switches: 68310
        Involuntary context switches: 35582
        Swaps: 0
        File system inputs: 2101321
        File system outputs: 4197832
        Socket messages sent: 0
        Socket messages received: 0
        Signals delivered: 0
        Page size (bytes): 4096
        Exit status: 0

        
# /usr/bin/time -v bash c.sh 
        Command being timed: "bash c.sh"
        User time (seconds): 235.24
        System time (seconds): 35.01
        Percent of CPU this job got: 74%
        Elapsed (wall clock) time (h:mm:ss or m:ss): 6:04.03
        Average shared text size (kbytes): 0
        Average unshared data size (kbytes): 0
        Average stack size (kbytes): 0
        Average total size (kbytes): 0
        Maximum resident set size (kbytes): 2652
        Average resident set size (kbytes): 0
        Major (requiring I/O) page faults: 40
        Minor (reclaiming a frame) page faults: 2310
        Voluntary context switches: 65402
        Involuntary context switches: 45179
        Swaps: 0
        File system inputs: 4200957
        File system outputs: 4197496
        Socket messages sent: 0
        Socket messages received: 0
        Signals delivered: 0
        Page size (bytes): 4096
        Exit status: 0

놀랍게도 결과는 그다지 명확하지 않았습니다. File system inputs: 2101321그러나 tar/tee 방식을 사용하는 것이 훨씬 저렴하므로 SD 카드의 수명 동안 좋을 것으로 예상됩니다.

답변1

tee다음 명령을 사용할 수 있습니다.

usb1="/mnt/usbone"
usb2="/mnt/usbtwo"
source="/home/user"

tar -cz -f - "${source}" | tee "${usb2}/source.tar.gz" > "${usb1}/source.tar.gz"

어디

  • -f -tarstdout을 백업 파일로 사용하도록 지시합니다 .
  • tee "${usb2}/source.tar.gz" 표준 입력을 지정된 파일 및 표준 출력에 복사합니다.
  • > "${usb1}/source.tar.gz"표준 출력을 tee파일로 리디렉션합니다.

관련 정보