ls를 사용하여 파일을 즉시 복사하는 것이 표시되지 않는 이유는 무엇입니까?

ls를 사용하여 파일을 즉시 복사하는 것이 표시되지 않는 이유는 무엇입니까?

메모리 버퍼링 때문인가요? 이렇게 하고 cp /network/large_file . &계속 ls -lh진행 상황을 모니터링했는데 약 400MB가 될 때까지 파일이 나타나지 않았습니다. Linux 2.6 커널, Bash 4, 4GB 스왑 공간, 16GB RAM.

답변1

이는 기본 파일 시스템, HDD 버퍼, Raid 컨트롤러 버퍼(Raid를 사용하는 경우) 등에 따라 달라질 수 있습니다. 파일이 복사되면 먼저 메모리에서 스트림을 시작하여 보류 중인 쓰기 작업이 있음을 디스크에 알립니다. 그러면 디스크가 해당 작업을 처리합니다. 쓰기가 "완료"되었지만 파일이 실제로는 여전히 디스크에 기록되고 있는 경우가 매우 일반적입니다. ZFS와 같이 이러한 "지연"을 방지하는 파일 시스템이 있으며 저는 BtrFS를 믿습니다(이를 기록 중 복사라고 함). 다른 파일 시스템에서는 실제로는 완료되지 않았음에도 복사/쓰기 작업이 완료되었다고 보고합니다. 이로 인해 정전 등이 발생하면 파일이 손상될 수 있습니다. ZFS 및 BtrFS는 파일 쓰기 작업이 완료될 때까지 운영 체제에 파일 쓰기 작업 완료를 보고하지 않습니다. 완전히 완료되었습니다. 이런 일이 발생하지 않도록 하세요.

이를 테스트하려면 좋아하는 배포판의 DVD iso와 같은 더 큰 것을 한 디렉토리에서 다른 디렉토리로 복사해 보십시오. 명령줄은 곧 프롬프트로 돌아가지만, sync명령을 즉시 입력하고 보내면 쓰기 작업이 완전히 완료될 때까지 명령줄에서 정지되는 것을 볼 수 있습니다. (디스크 활동 표시등이 있는 경우 여전히 깜박이는 것을 볼 수 있습니다)

관련 정보