한 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
하드 링크는 기본적으로 존중되지 않습니다.교훈을 얻으세요:rsync
switch 로 실행하면 더 작은 파일을 효율적으로 처리하기 위해 switch 를--hard-links
사용할 수도 있습니다--sparse
.du
기본적으로 하드 링크된 파일의 크기는 포함되지 않습니다.교훈을 얻으세요:스위치를 실행하여du -l
다음을 포함한 모든 파일의 크기를 계산합니다. 단단한 연결을 가진 사람들. 표시된 치수와 유사합니다ls
.
이 두 가지 측면을 이해하지 못하면 파일이 올바르게 동기화되는지 알 수 없습니다.