비트코인이나 비트코인SV(BSV) 노드를 직접 운영할 때, 싱크 진행 상황을 확인하기 위해 du -sh
같은 명령어를 사용하는 경우가 많다. 이때 종종 du: cannot access './blocks/index/xxxxx.ldb': No such file or directory
와 같은 오류 메시지가 반복적으로 출력된다. 겉으로 보기에는 디스크 손상이나 파일 시스템 문제처럼 보일 수 있으나, 실제로는 노드 소프트웨어 특성에 의한 정상적인 현상이다. 이 글에서는 이 현상의 본질적 이유를 깊이 있게 설명하고자 한다.
블록체인 노드의 동기화 과정
비트코인 계열 노드는 블록체인 네트워크에 참여할 때 먼저 ‘헤더 동기화’를 수행한 뒤, 전체 블록 데이터를 다운로드하고, 마지막으로 블록 내 트랜잭션을 인덱싱하는 과정을 거친다. 이 과정은 블록체인의 무결성을 검증하고, 추후 요청되는 데이터에 빠르게 응답할 수 있도록 준비하는 단계다.
특히 blocks/index/
디렉토리는 이 과정 중 생성되는 LevelDB 기반 인덱스 파일(.ldb 파일들)을 저장하는 영역이다. 이 파일들은 트랜잭션 검색, 블록 검증 등을 빠르게 하기 위한 데이터베이스 역할을 수행한다.
LevelDB와 파일 생성/삭제
비트코인 노드는 내부 인덱스를 관리하기 위해 LevelDB라는 경량 데이터베이스를 사용한다. LevelDB는 쓰기 최적화를 위해 데이터를 작은 파일로 나누어 저장하고, 일정 주기로 “Compaction(압축)”이라는 과정을 통해 여러 파일을 병합한다. 이 과정 중 다음과 같은 일이 발생한다.
- 새로운
.ldb
파일 생성 - 기존
.ldb
파일 삭제 - 파일 이름 변경 및 재배치
Compaction은 동기화가 활발히 진행될 때 빈번하게 일어나며, 이로 인해 디스크 상에서 파일이 생성되었다가 삭제되거나, 이름이 바뀌는 상황이 지속적으로 반복된다.
du
명령어와 타이밍 이슈
du
는 디스크 사용량을 계산할 때 디렉토리를 순회하며 파일 크기를 읽는다. 그러나 비트코인 노드가 동시에 파일을 변경하고 있다면, du
가 어떤 파일을 읽으려고 하는 순간 그 파일이 이미 삭제되었을 수 있다. 이 경우 du
는 ‘No such file or directory’ 에러를 출력한다.
이는 파일 시스템이나 디스크 자체의 문제가 아니라, 단순히 읽으려던 파일이 존재하지 않게 되어 생기는 일시적 현상이다. 파일이 생성되고 삭제되는 매우 짧은 순간에 du
가 접근을 시도했기 때문에 발생한다.
에러가 발생해도 괜찮은 이유
du
명령어가 에러를 뿜더라도 비트코인 노드에는 아무런 문제가 없다. 노드는 설계상 이러한 파일 생성/삭제 과정을 정상적으로 처리하고 있으며, 이는 데이터 무결성이나 블록체인 검증에는 전혀 영향을 미치지 않는다.
오히려 싱크 과정이 활발히 이루어지고 있다는 신호로 볼 수도 있다. 실시간으로 인덱스 파일들이 생성되고 삭제되는 것은 노드가 정상적으로 데이터를 동기화하고 있음을 나타낸다.
정확한 디스크 사용량을 알고 싶을 때
만약 에러 없이 정확한 디스크 사용량을 측정하고 싶다면 다음과 같은 방법을 사용할 수 있다.
du
대신df -h
명령어를 이용해 전체 파일 시스템 사용량을 본다.- 노드 동기화가 잠시 멈춘 타이밍을 노려
du
를 실행한다. - 노드를 정지시킨 후(
bitcoin-cli stop
) 디스크를 체크한다.
이는 디스크 I/O 충돌을 피하고 안정적인 수치를 얻을 수 있게 해준다.
결론
비트코인 노드를 싱크하는 동안 du: cannot access
오류가 발생하는 것은 LevelDB의 컴팩션과 실시간 파일 관리 때문이며, 시스템 문제나 데이터 손상이 아니다. 노드가 정상적으로 작동하고 있다는 증거로 이해할 수 있으며, 특별한 조치를 취할 필요는 없다. 동기화가 완료되면 이 오류는 자연스럽게 사라진다.
답글 남기기