파일이 기록되면 이름을 바꿉니다.

파일이 기록되면 이름을 바꿉니다.

이것이 안전한 것으로 간주되는지 알고 싶습니다. 링크가 존재하는 한 파일 처리가 잘 작동한다는 것을 알고 있으며 식별자가 이름이 아니라 inode라는 것을 알고 있지만 다른 파일 시스템에서 어떻게 작동하는지 잘 모르겠습니다.

예를 들어 ext4 하드 드라이브에서 NTFS USB 스틱으로 복사하거나 FAT 스틱에서 ext4 드라이브로 복사합니다.

방금 여러 개의 대용량 미디어 파일을 복사하고 복사가 완료되기 전에 이름을 바꿨습니다. 체크섬이 일치합니다. 항상 안전한지, 반대 방향으로 작동하는지, 알아야 할 단점이나 피해야 할 이유가 있는지 알고 싶습니다.

운영 체제/배포판은 5.0.0-15 Linux 커널이 포함된 Ubuntu입니다.

답변1

다른 FS에서 어떻게 작동하는지 잘 모르겠습니다.

이름 바꾸기 작업 자체는 다른 파일 시스템에서 작동하지 않습니다. cp텍스트 편집기에서 파일을 쓰는 것과 다른 파일 시스템의 소스 파일을 사용하여 쓰는 것 사이에는 차이가 없습니다.

Linux에서 rename시스템 호출은 다른 하드 링크와 열린 파일 설명(및 설명자)을 포함하여 파일에 대한 다른 링크에 투명합니다.맨페이지에는 명확하게 나와 있습니다.

열린 파일 설명자오래된 길영향을 받지도 않습니다.

(저는 단순히 POSIX에서 참조를 찾을 수 없었기 때문에 "on Linux"를 선택했습니다. 이는 POSIX 스타일 운영 체제에서 일반적이라고 가정합니다.)

따라서 파일 시스템 전체에서 파일을 복사할 때는 cp읽기 위해 소스를 열고 대상에 쓴 다음 복사를 시작하세요. 이름 바꾸기 작업은 사용 중인 파일 설명자에 영향을 주지 않습니다. cp.

이를 생각하는 또 다른 방법은 포함된 디렉토리에 있는 파일 이름이 해당 inode를 가리키는 디렉토리 항목의 일부라는 것입니다. 열린 파일 설명은 다른 하드 링크와 마찬가지로 inode에 대한 또 다른 포인터입니다. 파일 이름을 변경해도 다른 기존 포인터에는 영향을 주지 않습니다.

이와 같은 도구는 시스템 호출이 수행할 수 있는 작업 mv에만 국한되지 않는다는 점에 유의하는 것이 중요합니다 . 파일 시스템 전체에 걸쳐 파일을 저장 하면 실패할 것입니다. 시도)를 시도한 다음 파일 내용을 수동으로 복사하고 원본 파일을 삭제하십시오. 이름이 바뀌는 파일을 동시에 변경하면 좋은 결과가 나오지 않습니다.renamemvrenamemvmv

관련 정보