cpio VS tar - 수백 개의 디렉터리를 하나의 파일로 압축하기 위한 최고의 보관 솔루션은 무엇입니까

cpio VS tar - 수백 개의 디렉터리를 하나의 파일로 압축하기 위한 최고의 보관 솔루션은 무엇입니까

아래에는 수백 개의 디렉터리가 있으며 /var/Recording각 디렉터리에는 파일, 하드 링크 및 소프트 링크를 포함한 하위 디렉터리가 있습니다.

/var/Recordingzip 파일을 생성하기 위해 아래의 모든 디렉토리를 압축하고 싶습니다 .

어떤 명령이 최상의 압축을 제공합니까? tar또는 cpio(특히 하드 링크 파일과 소프트 링크 파일이 있다는 점을 고려하면).

tar또한 /command 의 올바른 구문은 무엇입니까 cpio?

  drwxr-x--- 2 root root 4096 Nov 22 18:57 458ca4e8-0edf-4204-9f9b-9c3dc02953c5.1034
  drwxr-x--- 2 root root 4096 Nov 22 18:57 458ca4e8-0edf-4204-9f9b-9c3dc02953c5.1033
  drwxr-x--- 2 root root 4096 Nov 22 18:57 458ca4e8-0edf-4204-9f9b-9c3dc02953c5.1038
  drwxr-x--- 2 root root 4096 Nov 22 18:57 458ca4e8-0edf-4204-9f9b-9c3dc02953c5.1037
  drwxr-x--- 2 root root 4096 Nov 22 18:57 458ca4e8-0edf-4204-9f9b-9c3dc02953c5.1036
  drwxr-x--- 2 root root 4096 Nov 22 18:57 458ca4e8-0edf-4204-9f9b-9c3dc02953c5.1041
  drwxr-x--- 2 root root 4096 Nov 22 18:57 458ca4e8-0edf-4204-9f9b-9c3dc02953c5.1040
  drwxr-x--- 2 root root 4096 Nov 22 18:57 458ca4e8-0edf-4204-9f9b-9c3dc02953c5.1039
  drwxr-x--- 2 root root 4096 Nov 22 18:57 458ca4e8-0edf-4204-9f9b-9c3dc02953c5.1044
  drwxr-x--- 2 root root 4096 Nov 22 18:57 458ca4e8-0edf-4204-9f9b-9c3dc02953c5.1043
  drwxr-x--- 2 root root 4096 Nov 22 18:57 458ca4e8-0edf-4204-9f9b-9c3dc02953c5.1042
  drwxr-x--- 2 root root 4096 Nov 22 18:57 458ca4e8-0edf-4204-9f9b-9c3dc02953c5.1047
  drwxr-x--- 2 root root 4096 Nov 22 18:57 458ca4e8-0edf-4204-9f9b-9c3dc02953c5.1046
  drwxr-x--- 2 root root 4096 Nov 22 18:57 458ca4e8-0edf-4204-9f9b-9c3dc02953c5.1045
  drwxr-x--- 2 root root 4096 Nov 22 18:57 458ca4e8-0edf-4204-9f9b-9c3dc02953c5.1049
  drwxr-x--- 2 root root 4096 Nov 22 18:57 458ca4e8-0edf-4204-9f9b-9c3dc02953c5.1048
  .
  .
  .
  .
  .

답변1

cpio(UNIX에 포함된 두 유틸리티 중 이전 유틸리티)는 옵션 -p(예: 파일 시스템에서 파일 시스템으로 복사) 에 대한 하드 링크 지원을 제공하는 데만 사용되지만 newc출력 형식( cpio기본적으로 사용되는 형식 아님)도 출력 하드 링크에 지원됩니다. 파일에서. (GNU) tar특별한 옵션 없이 하드링크가 지원됩니다. 비교자료를 확인하실 수 있습니다여기.

따라서 하나의 큰 하드 링크 파일과 100개의 작은 파일을 사용하여 테스트를 실행하면 다음과 같습니다.

$ mkdir tmp
$ dd if=/dev/urandom of=tmp/blabla bs=1k count=1024
1024+0 records in
1024+0 records out
1048576 bytes (1,0 MB) copied, 0,0764345 s, 13,7 MB/s
$ ln tmp/blabla tmp/hardlink
$ tar cvf tmp.tar tmp
$ find tmp -print0 | cpio -0o > out.cpio
4104 blocks
$ find tmp -print0 | cpio -0o --format=newc > outnewc.cpio
2074 blocks
$ xz -9k out.tar outnewc.cpio
$ bzip2 -9k out.tar outnewc.cpio
$ ls -l out*
-rw-rw-r-- 1 anthon users 2101248 Nov 23 12:30 out.cpio
-rw-rw-r-- 1 anthon users 1061888 Nov 23 12:30 outnewc.cpio
-rw-rw-r-- 1 anthon users 1055935 Nov 23 12:30 outnewc.cpio.bz2
-rw-rw-r-- 1 anthon users 1050652 Nov 23 12:30 outnewc.cpio.xz
-rw-rw-r-- 1 anthon users 1157120 Nov 23 12:30 out.tar
-rw-rw-r-- 1 anthon users 1055402 Nov 23 12:30 out.tar.bz2
-rw-rw-r-- 1 anthon users 1050928 Nov 23 12:30 out.tar.xz

outnewc.cpio압축되지 않은 버전( 및 cpio out.tar)은 cpio에 이점을 제공하고 이를 압축하면 더 나은 결과를 제공한다는 것을 알 수 있습니다 xz -9(보통 둘 다보다 훨씬 나쁨).bzip2 -9gzip이 압축은 출력 차이를 xz최소화합니다 .tarcpio. 그러나 압축은 데이터와 아카이브에 있는 데이터의 순서에 따라 크게 달라지므로 실제 데이터(샘플)에서 실제로 테스트해야 합니다.

압축을 병렬화하고 싶다면 내 기사를 확인해 보세요.여기

관련 정보