파일 시스템 제공
Linux의 VFS는 프로그램이 공통 파일 API로 여러 파일 시스템을 다룰 수 있게 하는 커널 계층이다. ext4 같은 디스크 파일 시스템, NFS 같은 네트워크 파일 시스템, procfs 같은 가상 파일 시스템의 저장 방식과 동작은 서로 다르다.
경로와 실제 저장 장치를 연결하기
util-linux 도구가 있는 Linux에서 현재 디렉터리를 확인한다.
findmnt -T .
df -h .
df -i .
findmnt는 현재 경로가 속한 마운트와 파일 시스템을 보여 준다. df -h는 공간, df -i는 inode 사용량을 확인한다. 많은 작은 파일 때문에 inode가 부족하면 바이트 단위 여유 공간이 있어도 파일 생성에 실패할 수 있다. 파일 시스템에 따라 inode 보고 방식은 다르다.
컨테이너 안의 경로가 호스트 볼륨인지 컨테이너 쓰기 계층인지도 확인해야 한다. 같은 /data라는 경로라도 마운트 방식이 다르면 컨테이너를 교체했을 때 보존되는 데이터가 달라진다.
파일 이름, inode, 열린 파일
디렉터리는 이름을 파일 객체에 연결한다. 여러 하드 링크가 같은 inode를 가리킬 수 있고, 파일 이름이 삭제돼도 프로세스가 파일을 열고 있으면 관련 저장 공간이 바로 회수되지 않을 수 있다.
또한 write가 성공했다는 사실만으로 전원 장애에도 데이터가 보존된다고 보장할 수 없다. 캐시와 영속 저장 장치 사이에 단계가 있으며, fsync와 파일 시스템·스토리지의 동작을 함께 고려해야 한다. 저널링이 있다는 이유로 백업이 불필요해지는 것도 아니다.
LiveSync의 CouchDB 데이터 보존은 컨테이너 수명과 저장 공간 수명을 구분해야 하는 사례다.