cp -a에 대한 더 빠른 대안

cp -a에 대한 더 빠른 대안

/home을 내가 사용하고 있는 다른 디스크로 간단히 전송하는 경우 cp -a이 방법은 매우 느린 방법인 것 같습니다. 작업을 수행하는 보다 효율적인 방법을 알고 싶습니다. /home을 논리 볼륨으로 마운트했지만 대상 디스크가 LVM 시스템이 아닙니다.

답변1

버퍼링을 사용하여 tar, pax, 을 시도해 보세요 .cpio

(cd /home && bsdtar cf - .) |
  pv -trab -B 500M |
  (cd /dest && bsdtar xpSf -)

bsdtar대신 에 (from )과 달리 tar적어도 일부 Linux 배포판에서는 tarGNU tar가 확장 속성이나 ACL 또는 Linux 속성 보존을 처리하지 않기 때문에 권장합니다 .bsdtarlibarchive

pv최대 500M의 데이터를 버퍼링하므로 두 파일 시스템 모두에서 읽기 및 쓰기 속도의 변동을 더 잘 수용할 수 있습니다(실제로는 디스크가 다른 파일 시스템보다 느릴 수 있으며 OS의 쓰기 저장 메커니즘이 이와 같이 작동함) 알겠습니다. , 아마도 그다지 큰 차이는 아닐 것입니다). 이전 버전 (평균 속도 보고서) 에서는 pv지원되지 않으므로 해당 버전에서만 사용할 수 있습니다.-apv -B 200M

cp어떤 경우 에도 이는 다음에 의해 제한되지 않습니다.읽다그리고쓰다차례로. 여기서는 두 개가 tar동시에 작동하므로 하나는 하나의 FS에서 읽을 수 있고 다른 하나는 다른 FS가 쓰기를 마칠 때까지 기다리느라 바쁩니다.

ext4의 경우 최소한 소스 크기만큼 큰 파티션에 복사하는 경우 다음도 참조하세요.clone2fsntfsclone, 할당된 블록만 순차적으로 복사되므로 회전 저장소가 아마도 가장 효율적일 것입니다.

부분 클론이를 여러 다른 파일 시스템에 일반화합니다.

이제 파일 시스템을 복제할 때 고려해야 할 몇 가지 사항이 있습니다.

복제는 모든 디렉터리, 파일 및 해당 내용을 비롯한 모든 것을 복사합니다. 지금그 밖의 모든 것파일 시스템에 따라 다릅니다. 기존 Unix 파일 시스템의 공통 특성만 고려하더라도 다음 사항도 고려해야 합니다.

  • 링크: 심볼릭 링크와 하드 링크. 때때로 우리는 절대 심볼릭 링크나 복제하려는 파일 시스템/디렉터리를 가리키는 심볼릭 링크를 처리하는 방법을 고려해야 합니다.
  • 마지막 수정, 액세스 및 변경 시간: 파일 시스템 API(cp, tar, rsync...)를 사용하여 처음 두 개만 복사할 수 있습니다.
  • 희소성: 3GB의 디스크 공간만 차지하는 VM 디스크 이미지인 2TB 희소 파일이 있고 나머지는 희박하며 간단한 복사본이 대상 드라이브를 채울 것입니다.

그런 다음 대부분의 Linux 파일 시스템에 대해 생각한다면 다음을 ext4고려해야 합니다.

  • ACL 및 기타 확장 속성(예: 에 사용되는 속성 SELinux)
  • 변경할 수 없거나 추가 전용 플래그와 같은 Linux 속성

모든 도구가 이들 모두를 지원하는 것은 아닙니다. 또는 지원하는 경우 이를 명시적으로 활성화해야 합니다(예: ... 에 대한 --sparse옵션 ). 다른 파일 시스템에 복사할 때 동일한 기능 세트를 지원하지 않는 경우를 고려해야 합니다. .--aclsrsynctar

UUID, 루트에 예약된 공간, fsck 빈도, 로깅 동작, 디렉터리 형식 등과 같은 파일 시스템 자체의 속성을 고려해야 할 수도 있습니다.

그리고 파일을 복사하여 실제로 데이터를 복사할 수 없는 더 복잡한 파일 시스템이 있습니다. 예를 들어 하위 볼륨의 스냅샷을 찍어 분기할 수 있는 경우... 데이터를 복사하기 위한 전용 도구가 있습니다 zfs.btrfs

모든 것이 복사되었는지 확인하려면 일반적으로 블록 장치(또는 가능하면 적어도 할당된 블록)의 바이트 단위 복사본이 가장 안전합니다. 그러나 UUID 충돌 문제에 유의하세요. 이는 더 큰 항목으로 복사하고 있음을 의미합니다(복사하기 전에 소스 스냅샷 복사본의 크기를 조정할 수 있음).

답변2

예를 들어 rsync를 권장합니다.

rsync -av --progress --stats dest orig

또는 압축을 통해 전송합니다.

rsync -avz --progress --stats dest orig

관련 정보