rsync는 정확한 파일에 연결됩니까, 아니면 이름이 같은 파일에만 연결됩니까?

rsync는 정확한 파일에 연결됩니까, 아니면 이름이 같은 파일에만 연결됩니까?

최근 교체한 컴퓨터(내부 HD에서 외부 HD로)를 위한 작은 rsync 백업 스크립트를 작성했습니다.

새 컴퓨터를 구입했을 때 파일을 복사했습니다(기존 내부 HD에서 새 내부 HD로). 동일한 파일 구조, 파일 이름 등

이제 이전 외부 HD에 연결된 새 컴퓨터에서 백업 스크립트를 실행할 수 있는지 궁금합니다.

내가 예상하는 잠재적인 문제는 rsync가 정확한 파일에 연결되는지 아니면 파일 이름만 연결되는지에 관한 것입니다.

파일 시스템에 대한 내용을 읽은 것을 기억합니다. 각 파일에 대해 "내부적으로" 특정 식별자(일련 번호 등)가 있으며 이름을 변경해도 해당 번호는 변경되지 않습니다.

따라서 rsync가 디렉토리 구조의 특정 위치에 있는 파일 이름 대신 해당 번호에 연결되면 모든 것을 중복으로 다시 복사하거나 다른 이상한 결과로 인해 외부 HD가 완전히 엉망이 될 수 있습니다.

rsync는 하드/소프트 링크를 사용하여 작동하며, 세부 사항이나 그 의미를 알기에는 전문가가 충분하지 않습니다.

도움을 주시면 감사하겠습니다!

MacOS Ventura 13.4.1, APFS(파일 시스템)

답변1

tl;dr

걱정할 것이 없습니다. 스크립트를 사용하세요rsync --dry-run --verbose …직접 확인해 보세요. 문제가 없어 보이면 원본 스크립트를 계속 사용하세요( --dry-run).


아이노드 번호

파일 시스템에 대한 내용을 읽은 것을 기억합니다. 각 파일에 대해 "내부적으로" 특정 식별자(일련 번호 등)가 있으며 이름을 변경해도 해당 번호는 변경되지 않습니다.

아이노드숫자. Unix/Linux의 기본 파일 시스템은 일반적으로 이 개념을 사용합니다(그리고 macOS는 Unix입니다). 내부적으로 inode를 사용하지 않는 파일 시스템은 마치 inode를 사용한 것처럼 나타나므로 비슷한 방식으로 처리할 수 있습니다. 그렇습니다. 파일에는 일련 번호가 있으며 ls -i이를 인쇄합니다.

따라서 rsync가 파일 이름 대신 해당 번호에 연결되면…

rsyncinode 번호를 기반으로 하지 않고 다음을 사용합니다.경로명(경로 이름은 다음으로 구성됩니다.파일 이름). Inode 번호는 파일 시스템 외부의 어떤 것도 의미하도록 설계되지 않았습니다. 그리고 파일 시스템 유형을 의미하는 것은 아닙니다. 즉, 파일 시스템의 특정 인스턴스 내부에 있으며 다른 파일 시스템(동일한 유형이라도)의 inode 번호에 연결되지 않습니다.

rsyncinode 번호를 기반으로 하려고 하면 큰 혼란을 초래할 수 있다는 말씀이 맞습니다 . 이 작업은 수행되지 않습니다. AFAIKinode 번호로 파일에 액세스할 수 있는 표준 인터페이스가 없습니다.. 그리고 귀하(또는 rsync)는 새 파일을 생성하는 동안 특정 번호를 요청할 수 없습니다. inode를 사용하지 않고 마치 사용한 것처럼만 나타나는 파일 시스템의 경우 inode 번호가 즉시 생성될 수 있으며 많은 경우(모두?) 마운트 해제 후 정확히 동일한 번호가 동일한 파일과 연결된다는 보장이 없습니다. 그런 파일 시스템을 다시 마운트하십시오.

이 모든 것은 프로그램이 파일 시스템 자체를 다루지 않는 한 inode 번호에 신경 쓰지 않아야 함을 의미합니다. Inode 번호는 파일 시스템 내부에 있습니다. cp또는 같은 프로그램은 rsync다른 수준의 추상화에서 작동해야 하며 실제로 그렇습니다. 추상화의 다른 수준은 경로 이름이 있는 디렉토리 트리입니다.

inode 번호가 "누출"되어 이러한 프로그램에서 (안전하게) 사용되는 한 가지 시나리오는 프로그램이 하드링크를 찾아내려고 할 때입니다. 하드링크된 파일은 단일 파일(inode 번호)로 연결되는 두 개 이상의 경로 이름입니다. 프로그램은 inode 번호를 비교하여 어떤 경로 이름이 동일한 파일로 연결되는지 알 수 있습니다. 하드링크는 단일 파일 시스템 내에서만 작동합니다. 동일한 inode 번호를 가지고 있지만 다른 파일 시스템에 존재하는 파일은 관련이 없으며 프로그램은 이를 고려합니다.

예를 들어 / 옵션 rsync을 사용할 수 있습니다 .--hard-links-H

이는 rsync소스에서 하드 링크된 파일을 찾아 대상에서 해당 파일을 함께 링크하도록 지시합니다. 이 옵션이 없으면 소스의 하드 링크된 파일은 별도의 파일인 것처럼 처리됩니다.

[…]

rsync는 전송 세트 내부에 있는 파일 간의 하드 링크만 감지할 수 있습니다. […]

(원천:man 1 rsync)

rsync -H소스에서 하드링크를 찾아내고 대상에서 하드링크를 생성하려고 시도합니다. 그러나 그렇더라도 대상의 inode 번호는 소스의 inode 번호와 아무 관련이 없습니다. 소스의 일부 경로 이름이 동일한 파일 시스템 내에서 동일한 inode 번호로 연결되는 것을 발견 하면 rsync -H대상에서 해당 경로 이름을 만들려고 시도합니다.일부단일 inode 번호; 즉, 하드링크된 파일을 만들려고 시도합니다. 정확히 숫자가 무엇인지는 의 범위(및 능력)를 벗어납니다 rsync. 하드링크( )를 생성하는 인터페이스에서도 link(2)inode 번호가 아닌 경로 이름을 사용하므로 도구는 번호에 신경 쓸 필요가 없습니다.


백업 스크립트만 실행할 수 있나요?

파일을 복사했습니다(이전 내부 HD에서 새 내부 HD로). 동일한 파일 구조, 파일 이름 등. 이제 이전 외부 HD에 연결된 새 컴퓨터에서 백업 스크립트를 실행할 수 있는지 궁금합니다.

당신은 할 수 있습니다.새 소스의 inode 번호는 이전 소스의 inode 번호와 완전히 다를 수 있지만(아마도 그럴 가능성이 높습니다), 이는 전혀 중요하지 않습니다. 소스와 동일한 디렉토리 구조이면 충분합니다.

있다는 것을 기억하세요--dry-run/-n.안전한 편이 되려면, 스크립트 사본을 작성하여 사용하십시오 rsync --dry-run --verbose …. 그것을 실행하고 출력을 분석하십시오. 그러나 (있는 경우) 발생하는 문제는 inode 번호와 관련이 없습니다.

관련 정보