
이것이 안전한 것으로 간주되는지 궁금합니다. 링크가 남아 있는 한 파일 핸들이 제대로 작동한다는 것을 알고 있으며 식별자가 이름이 아닌 inode라는 것을 알고 있지만 다른 FS에서 어떻게 작동하는지 잘 모르겠습니다.
예를 들어 ext4 하드 드라이브에서 NTFS USB 스틱으로 복사하거나 FAT 스틱에서 ext4 드라이브로 복사합니다.
나는 단지 여러 개의 대용량 미디어 파일을 복사하고 복사가 완료되기 전에 이름을 바꿨습니다. 체크섬이 일치합니다. 항상 안전한지, 반대 방향으로 작동하는지, 알아야 할 단점이나 이 작업을 피해야 할 이유가 있는지 궁금합니다.
OS/Distro는 5.0.0-15 Linux 커널을 사용하는 Ubuntu입니다.
답변1
다른 FS에서 어떻게 작동하는지 잘 모르겠습니다.
이름 바꾸기 작업 자체는 다른 파일 시스템에서 작동하지 않습니다. 텍스트 편집기에서 파일에 쓰는 것과 cp
다른 파일 시스템의 소스 파일을 사용하여 파일에 쓰는 것에는 차이가 없습니다 .
리눅스에서는rename
시스템 호출은 다른 하드 링크와 열린 파일 설명(및 설명자)을 포함하는 파일에 대한 다른 링크에 투명합니다.맨페이지에는 명시적으로
다음에 대한 파일 설명자 열기이전 경로또한 영향을 받지 않습니다.
(POSIX에서 참조를 찾을 수 없었기 때문에 "Linux"로 자격을 얻었습니다. 이는 POSIX 스타일 운영 체제에서 일반적이라고 생각합니다.)
따라서 파일 시스템 간에 파일을 복사할 때 cp
읽기용 소스와 쓰기용 대상을 열고 복사를 시작합니다. 이름 바꾸기 작업은 사용 중인 파일 설명자에 영향을 주지 않습니다. 에 영향을 주지 않고 소스 및/또는 대상의 이름을 바꿀 수 있습니다 cp
.
이를 생각하는 또 다른 방법은 포함된 디렉터리에 있는 파일 이름이 해당 inode를 가리키는 디렉터리 항목의 일부라는 것입니다. 열린 파일 설명은 다른 하드 링크와 마찬가지로 inode에 대한 다른 포인터입니다. 파일 이름을 변경해도 다른 기존 포인터에는 영향을 미치지 않습니다.
주의해야 할 주의 사항은 다음과 같은 도구가 시스템 호출이 수행할 수 있는 mv
작업에만 국한되지 않는다는 것입니다. 파일 시스템에 파일을 저장 rename
하는 경우 는 실패하고(또는 작업이 파일 시스템에 걸쳐 수행된다는 사실을 파악하고 시도조차 하지 않음) 파일 내용을 수동으로 복사하고 원본을 삭제합니다. 이름이 바뀌는 파일이 동시에 변경되는 경우 좋은 결과를 얻을 수 없습니다.mv
rename
mv
mv