%20%EB%A7%88%EC%9A%B4%ED%8A%B8%EB%90%9C%20%EB%B3%BC%EB%A5%A8%3A%20%ED%95%98%EB%93%9C%20%EB%A7%81%ED%81%AC%EB%8A%94%20%EB%B3%B4%EC%A1%B4%EB%90%98%EB%8A%94%20%EA%B2%83%EC%B2%98%EB%9F%BC%20%EB%B3%B4%EC%9D%B4%EC%A7%80%EB%A7%8C%20%EA%B3%B5%EA%B0%84%EC%9D%80%20%EC%A0%84%EC%B2%B4%20%ED%8C%8C%EC%9D%BC%EB%A1%9C%20%EA%B3%84%EC%82%B0%EB%90%A9%EB%8B%88%EB%8B%A4..png)
서버에서 Hetzner 스토리지박스로 rsnapshot/rsync를 사용하여 공간 효율적인 순환 백업 구성표를 설정하려고 합니다. 대상의 하드 링크가 보고되는 디스크 사용량에 어떤 영향을 미치는지 이해하는 데 어려움을 겪고 있습니다. 간단히 말해서, 하드 링크가 백업 대상에 있는 것처럼 보이더라도 디스크 사용량에는 고려되지 않고 대신 전체 파일로 계산됩니다.
rsnapshot의 대상 폴더는 로컬 파일 시스템에 있어야 하므로 다음 두 부분으로 구성된 워크플로를 설정했습니다.
- 다음을 사용하여 로컬 스냅샷을 생성합니다.RSnapshot, 원본 서버의 로컬 폴더
- SSH를 통해 로컬 스냅샷을 rsync합니다.재동기화목적지로
이는 잘 작동하고 빠르게 작동하는 것 같지만 한 가지 우려되는 점은 대상( 을 사용하여 du -sh
)에 보고된 디스크 사용량이 모든 스냅샷의 크기를 누적하는 것 같다는 것입니다.하드 링크를 사용하여 제대로 복사된 것처럼 보이지만. 참고: Hetzner 스토리지박스는 대화형 SSH 로그인을 허용하지 않기 때문에 이 백업 대상을 CIFS를 사용하여 마운트된 볼륨으로 검사하고 있습니다.
예를 들어, 이 rsnaphsot + rsync 콤보를 3회 수행하면 대상 폴더에 daily.0
, daily.1
및 daily.2
폴더가 포함됩니다. 하드 링크에 대한 스냅샷 폴더의 임의 파일을 검사할 때 예상된 결과를 얻었습니다.
find /mnt/user.your-storagebox.de/rsync-backup/ -name "output.file" -print0 | xargs -0 ls -li
:351317 -rw-rw---- 3 root root 8650 Dec 15 11:25 /mnt/user.your-storagebox.de/rsync-backup/daily.0/home/user/output.file 351317 -rw-rw---- 3 root root 8650 Dec 15 11:25 /mnt/user.your-storagebox.de/rsync-backup/daily.1/home/user/output.file 351317 -rw-rw---- 3 root root 8650 Dec 15 11:25 /mnt/user.your-storagebox.de/rsync-backup/daily.2/home/user/output.file
동일한 inode가 있는 3개의 파일과 3개의 링크 수를 반환합니다(예상대로).
find /mnt/user.your-storagebox.de/rsync-backup/ -samefile /mnt/user.your-storagebox.de/rsync-backup/daily.0/home/user/output.file
/mnt/user.your-storagebox.de/rsync-backup/daily.0/var/tomcat/vhosts/output.file /mnt/user.your-storagebox.de/rsync-backup/daily.2/var/tomcat/vhosts/output.file /mnt/user.your-storagebox.de/rsync-backup/daily.1/var/tomcat/vhosts/output.file
(예상대로) 3개의 파일을 반환합니다.
이는 해당 스냅샷이 대상에 하드 링크로 제대로 복사되었음을 의미하는 것 같습니다.
그러나... 대상 위치에서 디스크 사용량을 확인할 때: du -sh /mnt/user.your-storagebox.de/rsync-backup
12G 값이 반환됩니다. 원래 소스 폴더는 약 4G이므로 이는 예상치 못한 일입니다. 분명히 하드 링크에도 불구하고 디스크 사용량은 누적 계산됩니까?
OTOH, 를 통해 대상 폴더를 검사할 때 rsnapshot du
다음과 같은 출력이 나타납니다.하다하드 링크를 고려하는 것 같습니다.
4.3G /mnt/user.your-storagebox.de/rsync-backup/daily.0/
41K /mnt/user.your-storagebox.de/rsync-backup/daily.1/
41K /mnt/user.your-storagebox.de/rsync-backup/daily.2/
4.3G total
이는 혼란스럽습니다. 스냅샷이 하드 링크와 함께 복사되고 최소한의 공간을 차지해야 하거나(inode를 검사할 때 그런 것처럼 보임), 그렇지 않고 예상보다 훨씬 더 많은 공간을 차지하고 있습니다(에서 제안한 대로). 출력 du -sh
).
내 주요 관심사는 이 마운트된 볼륨에 보고된 디스크 사용량이 올바른지 아니면 그렇지 않은지입니다. 마운트된 볼륨을 사용할 때 du -sh
주의해야 할 사항이 있나요?
답변1
내 버전 du
(Debian, du (GNU coreutils) 8.30
)은 하드링크가 있는 파일을 처리하고 여러 인스턴스를 한 번만 계산합니다. 당신의 것은 그렇지 않은 것 같습니다. 비교적 쉽게 확인할 수 있지만
시나리오 준비
mkdir zzz # Scenario workspace
tar cf zzz/etc.1 /etc # Ignore "tar: Removing leading `/' from member names"
시험 #1. 두 개의 파일이 복사되었지만 하드링크되지 않았습니다.
cp zzz/etc.1 zzz/etc.2 # Create copy
du -s zzz/etc.1 # 2580 KB, in my instance
du -s zzz/etc.2 # As you would expect, the same value
du -s zzz # 5164 KB, because the files are "different"
재판 #2. 두 개의 파일이 함께 하드링크됨
rm zzz/etc.2
ln zzz/etc.1 zzz/etc.2 # Create hardlink
du -s zzz/etc.1 # Unchanged from above, of course, 2850 KB
du -s zzz/etc.2 # As you would expect, still the same value
du -s zzz # For me, this is still the same value, 2580 KB
인스턴스가 동일한 하드링크 파일의 여러 인스턴스를 처리할 수 없는 경우 평가판 #2는 평가판 #1에서 와 마찬가지로 du
두 가지의 합계를 반환합니다 .etc.1
etc.2
du
이 정보를 사용하면 버전이 오해의 소지가 있는지 또는 파일이 실제로 예상보다 더 많은 디스크 공간을 사용하고 있는지 확인할 수 있습니다 . (다른 측정 항목을 고려하면 전자라고 확신합니다.)