도커 저장해 다른 서버로 옮길 때 특정 파일이 기가바이트 단위로 측정되는 경우
[howto] 1 min read
🐞 문제 상황
도커 이미지 내의 특정 파일(/A) 크기가 4GB로 불어있음.
🖥️ 환경 및 전송 과정
- 빌드: 서버 A에서 도커 이미지 빌드.
- 압축/저장:
docker save [이미지]\(\rightarrow\)gzip으로 압축. - 전송:
rsync -az를 사용해 압축 파일을 서버 B로 전송. - 로드: 서버 B에서
gunzip < $tarball_abspath | docker load명령어로 이미지 로드.
💡 해결 과정
- 4.0G 중 nonzero byte가 있는지 확인:
cmp -l /dev/zero /A | head -n 1 - 압축/전송 과정 중 파일 손상으로 추정.
- 원본 서버에서 이미지를 다시
docker save및gzip하여 전송 작업을 반복. - 해결 X
- 원본 서버에서 이미지를 다시
- 첫 32kb 이후에 바이트 없음.
tail -c +32769 /A | cmp -l - /dev/zero | head -n 1
- 또한, 원본 도커 이미지와 nonzero byte 개수 같음.
cmp -l /A /dev/zero | wc -l을 양 도커에서 비교
- (미완) 그러면 inode 문제인데. 왜 이렇게 됐지?
- bitmap 파일의 NULL TERMINATOR를 덮어씌우는 식으로 실수