rsync 및 du [duplicate] 사용 후 디렉토리 크기가 다릅니다.

rsync 및 du [duplicate] 사용 후 디렉토리 크기가 다릅니다.

한 Synology NAS 볼륨(ext4)에서 다른 볼륨(btrfs)으로 일부 특수 디렉터리(일반 마이그레이션 도구에서는 지원되지 않음)를 마이그레이션했습니다. 동기화가 잘 되었는지 확인해 보니 크기가 크게 차이가 나는 것을 발견했습니다.

블록 크기 차이가 있다는 것을 알고 있지만 du동일한 볼륨에서 잘못된 데이터 크기를 제공합니다.

전체 디렉터리의 전체 크기가 1TB가 넘으므로 다음 명령을 더 작은 하위 디렉터리로 축소했습니다.

다른 크기:

sudo du -sm /volume[12]/@synologydrive/@sync/repo/1/2
11418   /volume1/@synologydrive/@sync/repo/1/2
11122   /volume2/@synologydrive/@sync/repo/1/2

그러나 모든 하위 디렉터리에 대해 올바른 크기(바이트를 사용할 때 다소간)를 얻습니다. n하위 디렉터리를 선택하세요.

sudo du -sm /volume[12]/@synologydrive/@sync/repo/1/2/n
295     /volume1/@synologydrive/@sync/repo/1/2/n
295     /volume2/@synologydrive/@sync/repo/1/2/n

sudo du -sb /volume[12]/@synologydrive/@sync/repo/1/2/n
308387853       /volume1/@synologydrive/@sync/repo/1/2/n
308391693       /volume2/@synologydrive/@sync/repo/1/2/n

*그러나 다음을 사용할 때 완전히 다른 크기를 얻습니다. (예: 위의 동일한 볼륨 비교 명령과 볼륨 2의 이 명령에서도):

sudo du -sm /volume[12]/@synologydrive/@sync/repo/1/2/* | grep n$
295     /volume1/@synologydrive/@sync/repo/1/2/n
200     /volume2/@synologydrive/@sync/repo/1/2/n

sudo du -sb /volume[12]/@synologydrive/@sync/repo/1/2/* | grep n$
308387853       /volume1/@synologydrive/@sync/repo/1/2/n
209533219       /volume2/@synologydrive/@sync/repo/1/2/n

또한 디렉토리 아래의 모든 파일 크기를 계산하여 n동일한 크기를 얻었습니다.

ls -lA /volume1/@synologydrive/@sync/repo/1/2/n | tr -s ' ' | cut -f5 -d" " | awk '{s+=$1} END {print s}'
308387597
ls -lA /volume2/@synologydrive/@sync/repo/1/2/n | tr -s ' ' | cut -f5 -d" " | awk '{s+=$1} END {print s}'
308387597

따라서 디렉터리는 올바르게 "동기화"된 것으로 나타나며(동일한 파일 수, 동일한 크기) 서로 다른 두 파일 시스템 간의 차이점을 해결하려고 합니다. 그러나 du새 롤 1에서는 훨씬 더 큰 치수를 제공합니다(더 정확하게 말하면 기존 롤 2에서는 훨씬 더 작습니다).

이에 대한 설명이 있나요?

노트:

  • volume1새로운 btrfs 대상 볼륨입니다(데이터를 복사한 위치).
  • volume2이전 ext4 소스 볼륨(데이터를 복사한 볼륨)입니다.
  • 데이터 복제 용도sudo rsync -a --progress --delete /volume2/@synologydrive /volume1

답변1

OP 아래 댓글의 @them 덕분에 근본 원인을 찾았습니다. 원본 소스 볼륨에는 하드 링크된 여러 디렉터리/파일이 포함되어 있으며, 이 디렉터리/파일은 모두 새로운 독립(고정) 디렉터리/파일로 새 볼륨에 복사됩니다.

실제로 이 질문을 이해하는 데 도움이 된 두 가지 사항이 있습니다.

  • rsync하드 링크는 기본적으로 존중되지 않습니다.교훈을 얻으세요:rsyncswitch 로 실행하면 더 작은 파일을 효율적으로 처리하기 위해 switch 를 --hard-links사용할 수도 있습니다 --sparse.

  • du기본적으로 하드 링크된 파일의 크기는 포함되지 않습니다.교훈을 얻으세요:스위치를 실행하여 du -l다음을 포함한 모든 파일의 크기를 계산합니다. 단단한 연결을 가진 사람들. 표시된 치수와 유사합니다 ls.

이 두 가지 측면을 이해하지 못하면 파일이 올바르게 동기화되는지 알 수 없습니다.

관련 정보