원문 캡처 · eclecticlight.co
원문 캡처 · eclecticlight.co

Finder에서 파일을 복사하거나 옮길 때 APFS에서는 같은 볼륨 안인지 다른 볼륨으로 이동하는지에 따라 동작이 달라진다. macOS Catalina에서 파일을 다루려면 볼륨의 차이와 복제 파일의 특성을 알아둘 필요가 있다.

APFS 볼륨과 복제 파일

APFS에서 각 볼륨은 디렉터리와 확장 속성을 포함한 메타데이터를 갖춘 별도의 파일 시스템이다. 같은 컨테이너 안의 볼륨들은 디스크 공간을 공유해 여유 공간을 나눠 쓰지만, 파일 시스템 자체를 공유하지는 않는다. 따라서 한 볼륨에서 다른 볼륨으로 파일을 끌어 옮기면 두 번째 볼륨에 새 파일이 만들어진다. APFS 볼륨끼리는 데이터나 inode를 공유할 수 없다. 다만 Catalina의 새로운 Volume Groups에서는 inode 관리 방식이 다르다.

iCloud 저장 공간은 시동 볼륨(Data)의 파일에 대응한다. 파일이 원격 저장 공간으로 옮겨져도 로컬에는 스텁 파일이 남으므로, iCloud Drive는 별도 볼륨이 아니라 시동 볼륨의 확장처럼 동작한다.

APFS의 복제 파일(copy-on-write clone)은 일반 파일과 하드 링크의 중간에 해당한다. 같은 볼륨에서 파일을 복사하거나 복제하면 새 파일이 만들어지지만, 처음에는 원본과 데이터를 공유한다. 편집으로 두 파일의 내용이 달라지면 바뀐 데이터는 따로 저장되고, 공유 데이터는 줄어든다. 이 과정은 투명하게 진행돼 두 파일이 데이터를 얼마나 공유하는지 쉽게 확인할 방법은 없다. 복제는 같은 파일 시스템과 볼륨 안에서만 이뤄지지만, 여유 공간에는 영향을 주며 그 영향은 해당 컨테이너의 모든 볼륨에 미친다.

Apple은 clonefile() 매뉴얼에서 복제 파일은 원본과 데이터 블록을 공유하지만 속성, 확장 속성, 접근 제어 목록(ACL)은 별도로 가지며, 소유권 정보와 setuid·setgid 비트는 예외라고 설명한다. 원본이나 복제본에 이후 쓰기를 하면 변경 내용은 수정된 파일에만 반영된다.

하드 링크는 파일 시스템의 여러 참조가 저장소의 같은 객체를 가리킨다. 따라서 어느 참조로 접근하든 데이터 변경 내용이 동일하게 보인다. 복제 파일은 서로 다른 객체를 가리키며, 한쪽의 데이터를 변경하면 두 파일의 데이터가 분리된다.

Finder에서 복사와 이동하기

같은 볼륨 안에서는 파일을 끌어다 놓으면 폴더 사이에서 이동한다. Option 키를 누른 채 끌면 원본을 남기고 복사하며, Command 키를 누른 채 끌면 원본을 제거하고 이동한다.

서로 다른 볼륨 사이에서는 파일을 끌어다 놓으면 복사한다. Option 키를 눌러도 원본을 남긴 채 복사하며, Command 키를 누르면 원본을 제거하고 이동한다.

iCloud Drive 폴더는 시동 볼륨의 일부처럼 동작한다. 상대편이 시동 볼륨이면 같은 볼륨 규칙을, 다른 볼륨이면 볼륨 간 규칙을 따른다. 끌어 놓기 동작을 확실히 알고 싶다면 수정 키를 사용하는 편이 안전하다. 그러면 상대편이 시동 볼륨인지 따로 따질 필요가 없다.

복제 여부와 주의할 점

Finder에서 파일을 복사하거나 복제하면 macOS는 가능한 경우 복제를 시도한다. 원본과 복사본은 같은 APFS 볼륨에 있어야 하지만, 파일 크기의 최소 또는 최대 조건은 없어 보인다. 이전 macOS 버전인 10.13과 10.14에서는 폴더를 복사하거나 복제할 때 복제를 사용하지 않을 수 있었다. Catalina에서는 폴더의 깊이가 얕으면 폴더 안의 파일을 복제한다.

표준 도구로 파일이 실제 복사됐는지 복제됐는지 확인하기는 매우 어렵다. Finder와 Terminal의 ls 명령은 복제 파일도 실제 복사본과 같은 저장 공간을 차지한다고 표시한다. 복사 과정에 걸리는 시간으로 구분할 수 있는 경우도 있지만, 시간이 오래 걸려 진행 막대가 표시될 정도로 큰 파일에서만 쓸 수 있다.

사용자가 복제 여부를 제어할 수 있는 방법은 명령줄 도구 cp의 옵션뿐이다. 이 옵션은 가능한 경우 복제를 강제한다.

text
cp -c oldfilename newfilename

같은 볼륨에 있는 두 파일이 복제본이 아니라 각자 별도의 데이터를 사용하도록 하려면, 파일을 다른 볼륨에 복사한 뒤 필요하면 이름을 바꾸고 첫 번째 볼륨으로 다시 복사하거나 옮기는 방법이 가장 확실하다.

심볼릭 링크와 하드 링크도 이동과 복사의 영향을 받는다. 심볼릭 링크는 상황에 따라 다르지만, 특히 경로가 다른 볼륨으로 복사되거나 이동되면 끊어질 위험이 크다. 하드 링크는 사실상 원본 파일과 같으므로 다른 볼륨으로 복사하거나 이동할 때 파일 전체가 복사되거나 이동한다. Finder 별칭과 북마크는 심볼릭 링크보다 견고하도록 설계됐지만, 특히 다른 볼륨으로 옮기거나 복사하면 실제로 끊어질 수 있다. 심볼릭 링크와 하드 링크는 복제되지 않는다. Finder 별칭과 북마크는 이론상 복제될 수 있지만, 복제 여부를 확인하기는 더 어렵다.

복제는 큰 파일의 사본을 만들 때 단기적으로 필요한 저장 공간을 줄이는 데 유용하다. 하지만 두 파일을 활발히 수정하면 내용이 달라지면서 별도 저장 공간이 점차 늘어난다. 따라서 복제 파일을 조금만 수정해도 필요한 공간이 크게 늘 수 있다.

복제는 데이터 무결성에도 영향을 줄 수 있다. 100GB 동영상 파일을 복제해 끝부분을 각각 수정한 뒤 세 파일이 처음에 공유하던 데이터 A와 B에 손상이 생기면, 파일 시스템을 거쳐 별도 저장을 유발한 경우가 아닌 한 세 파일 모두 손상될 수 있다. 저장 블록의 고장이나 비트 부패가 공유 데이터에 발생하면 세 파일이 한꺼번에 영향을 받는다는 뜻이다. 어떤 데이터가 여러 파일에 공통으로 들어 있는지 확인하거나 파일의 복제를 해제할 도구는 현재 없는 것으로 보인다. 중요한 파일은 신중한 작업 절차를 따르고 무결성을 확인해야 한다.