최근에 내 500GB SSD의 파일 크기가 33P 바이트라는 파일 보고서를 받았습니다.여기. 이 작업이 완료되면 ls
공간 cp
이 부족하다는 메시지가 표시됩니다.
VFS에 대한 나의 제한된 지식과 이해로 인해 (SATA) 드라이버가 디스크와 통신하고 inode에 도달할 때까지 VFS를 통해 이동한다고 믿습니다(섹션 8.6의 inode 설명을 기반으로 가정).여기) 그런 다음 커널은 어떻게든 이를 사용자 공간으로 전달합니다.
ls
마지막으로 크기를 알 수 있는 방법도 알고 싶지만 cp
파일이 어떻게 잘못된 크기를 보고하는지, 나중에 이런 일이 다시 발생하면 어디서 답변을 찾을 수 있는지도 알고 싶습니다.
답변1
strace -v -e trace=lstat ls -l file
[...]
lstat("tw.txt", {[...] st_size=1103, [...]
답변2
파일 크기는 파일의 일부로 저장됩니다.메타데이터, 파일 유형(디렉토리/일반/심볼릭 링크/...), 타임스탬프, 권한 등도 포함됩니다. 애플리케이션은 다음을 사용하여 이 메타데이터를 검색합니다.stat
시스템 호출. 메타데이터는 파일의 inode에 저장됩니다.
파일이 SATA 디스크에 저장된 경우 SATA 드라이버가 관련되지만 파일 시스템보다 훨씬 낮은 수준입니다. SATA 수준에 대해 생각하는 것은 무슨 일이 일어나고 있는지 이해하는 데 도움이 되지 않습니다. 오히려 그 반대입니다.
파일이 디스크보다 클 수 있습니다. 파일을 압축할 수 있습니다. 대부분의 파일 시스템은 매우 간단한 형태의 압축만 지원합니다.스파스 파일, 널 바이트의 큰 덩어리가 디스크에 저장되지 않는 경우. 보고된 디스크 사용량에는 du
생략된 블록이 포함되지 않지만 보고된 파일 크기에는 ls
포함됩니다.
~처럼이런 Q. 웸블리귀하가 찾은 크기(36028797019011568)가 완벽하게 합리적인 크기(47600)에서 약간 벗어났다는 점을 댓글에서 지적해 주세요. 따라서 이 크기는 합법적인 스파스 파일이 아닐 가능성이 높지만 디스크의 데이터 손상 징후일 가능성이 높습니다.다른 일을 하기 전에 먼저 실행하세요.기억력 테스트. RAM은 수정되지 않은 단일 비트 오류의 가장 큰 소스입니다. 이 오류로 인해 데이터가 더 많이 손상될 수 있다는 점에 유의하세요.