iCloud와 Dropbox가 드라이브 추출을 막지 못하게 하는 방법
클라우드 동기화 서비스는 Mac에서 외장 드라이브 추출을 막기로 악명이 높습니다. 왜 드라이브를 붙들고 있는지, 그리고 어떻게 우회하는지 알아봅니다.
모든 앱을 닫았습니다. 전부 저장했습니다. 추출을 클릭했는데 macOS가 드라이브가 여전히 사용 중이라고 합니다. lsof를 실행하니 출력에 bird, cloudd, 또는 Dropbox가 보입니다. 클라우드 동기화 서비스가 드라이브를 인질로 잡고 있는 것입니다.
이는 Mac에서 추출 실패의 가장 흔하면서도 가장 덜 이해된 원인 중 하나입니다. 클라우드 동기화 서비스는 백그라운드에서 끊임없이 실행되며, 파일의 변경을 감시하도록 설계되어 있습니다. 그 감시는 열린 파일 핸들을 뜻하고, 열린 파일 핸들은 드라이브가 추출되지 않는다는 뜻입니다.
동기화 서비스가 추출을 막는 이유
클라우드 동기화 서비스는 폴더의 변경을 지켜보는 방식으로 작동합니다. 파일이 생성, 수정, 삭제되면 서비스가 이를 감지하여 변경 사항을 클라우드에 동기화합니다. 이런 변경을 감지하기 위해 서비스는 감시하는 디렉터리에 열린 파일 핸들을 유지하거나 파일 시스템 이벤트 감시자를 사용합니다.
감시 대상 경로 중 어느 하나가 외장 드라이브에 있을 때 문제가 발생합니다. 이는 여러 방식으로 일어날 수 있습니다.
동기화 폴더를 드라이브에 일부러 저장했을 수 있습니다. 공간 때문에 Dropbox 폴더를 외장 드라이브로 옮겼거나, iCloud Drive로 공유하는 프로젝트 폴더를 거기에 두었을 수 있습니다.
어떤 앱이 드라이브에 파일을 만들었고 동기화 서비스가 그것을 점유했을 수 있습니다. 일부 앱은 작업 중인 볼륨에 임시 파일, 캐시, 프로젝트 메타데이터를 저장합니다.
Spotlight가 드라이브를 색인했고 동기화 서비스가 그 색인 데이터를 포착했을 수 있습니다. 간접적이지만 일어나는 일입니다.
iCloud의 경우
macOS에서 iCloud의 동기화 데몬은 bird라고 불립니다(네, 정말입니다). 일부 동기화 작업을 처리하는 cloudd도 보입니다. 이 프로세스들은 시스템 서비스로 실행되며 종료해도 자동으로 다시 시작됩니다.
bird가 드라이브를 막고 있다면, 그 볼륨의 파일이나 폴더를 감시하고 있는 것입니다. 흔한 유발 요인은 다음과 같습니다.
- iCloud 데스크탑 및 도큐멘트: 이 기능을 켜 두었고 외장 드라이브가 Finder에 위치로 나타난다면, iCloud가 그와 관련된 경로를 색인할 수 있습니다.
- 미리보기 및 QuickLook: 외장 드라이브의 파일을 미리보기로 열면 iCloud로 동기화되는 최근 파일 참조가 생길 수 있습니다.
- Pages, Numbers, Keynote: 이 앱들은 기본으로 iCloud에 자동 저장합니다. 외장 드라이브에서 문서를 열었다면, 앱이 로컬 파일과 iCloud 참조 사이의 연결을 유지할 수 있습니다.
iCloud가 막는 것인지 확인하려면:
lsof /Volumes/YourDriveName | grep -i bird
lsof /Volumes/YourDriveName | grep -i cloudd
Dropbox의 경우
Dropbox는 파일 감시에 있어 훨씬 더 공격적입니다. 최신 macOS 버전에서 Dropbox 클라이언트는 Apple의 File Provider 프레임워크(이전의 커널 확장 방식은 macOS 12.3에서 지원이 중단됨)를 사용해 파일 시스템 작업을 실시간으로 감시합니다.
Dropbox 폴더나 Dropbox로 동기화되는 폴더가 외장 드라이브에 있다면, Dropbox는 그 볼륨에 지속적인 연결을 유지합니다. 오래전에 동기화가 끝난 파일조차 감시 목적으로 Dropbox의 파일 핸들이 걸려 있을 수 있습니다.
Dropbox를 대신해 파일을 열어 두는 Apple의 fileproviderd 프로세스도 보일 수 있습니다. 이는 Dropbox, OneDrive, Google Drive를 포함한 모든 File Provider 확장을 관리하는 시스템 데몬입니다. 그 서비스들이 감시하는 볼륨에 추가 파일 핸들을 만들 수 있습니다.
Dropbox에서 가장 신뢰할 수 있는 방법은 추출하기 전에 Dropbox 앱을 완전히 종료하는 것입니다. 메뉴 막대에서 Dropbox 아이콘을 클릭하고, 프로필 사진을 클릭한 뒤 종료를 선택하세요. 드라이브를 추출한 뒤 Dropbox를 다시 여세요.
Google Drive와 OneDrive
Google Drive의 데스크탑 앱(Drive for Desktop)은 파일 작업을 통해 외장 드라이브와 상호작용할 수 있는 가상 드라이브를 만듭니다. Google Drive와 외장 드라이브 사이에 파일을 복사했다면, Drive 클라이언트가 참조를 유지할 수 있습니다.
OneDrive는 백그라운드 파일 감시 면에서 Dropbox와 비슷하게 동작합니다. 파일 핸들을 붙드는 데에는 대체로 덜 공격적이지만, 여전히 추출을 막을 수 있습니다.
두 서비스 모두 추출하기 전에 메뉴 막대 아이콘에서 일시 중지하거나 종료할 수 있습니다.
실용적인 작업 흐름
외장 드라이브의 파일로 자주 작업하고 클라우드 동기화 서비스를 쓴다면, 추출하기 전에 동기화를 일시 중지하는 습관을 들이세요.
iCloud에는 쉬운 일시 중지 버튼이 없지만, 시스템 설정 > Apple ID > iCloud > iCloud Drive에서 iCloud Drive를 일시적으로 비활성화할 수 있습니다. 다만 번거롭습니다.
Dropbox는 메뉴 막대 아이콘에서 동기화를 일시 중지하세요. Dropbox 아이콘을 클릭하고, 프로필을 클릭한 뒤 “동기화 일시 중지"를 선택하세요.
Google Drive는 메뉴 막대에서 Drive 아이콘을 클릭하고 “동기화 일시 중지"를 선택하세요.
일시 중지한 뒤, 열린 파일 핸들이 닫히도록 몇 초 기다린 다음 드라이브를 추출하세요.
문제 예방하기
가장 깔끔한 방법은 클라우드로 동기화되는 폴더를 외장 드라이브에 절대 저장하지 않는 것입니다. 동기화 폴더는 Mac의 내장 저장소에 두고, 외장 드라이브는 동기화할 필요 없는 데이터에 쓰세요.
동기화되는 콘텐츠를 외장 드라이브에 꼭 두어야 한다면, 명확히 구분하세요. 동기화 파일은 한 폴더에, 동기화하지 않는 파일은 다른 폴더에 넣으세요. 추출해야 할 때 어떤 동기화 서비스를 일시 중지해야 할지 알 수 있습니다.
iCloud에 자동 저장하는 앱(Pages, Numbers, Keynote, 미리보기)으로 외장 드라이브의 파일을 여는 것을 피하세요. 최소한, 추출하기 전에 그 앱들을 닫고 파일 핸들을 놓아줄 잠깐의 여유를 주세요.
일시 중지로 충분하지 않을 때
때로는 동기화를 일시 중지하고 앱을 종료했는데도 드라이브가 추출되지 않습니다. 동기화 서비스가 일시 중지 후에도 남아 있는 오래된 파일 핸들을 남겨 둔 것입니다.
특정 프로세스를 죽여 이 핸들을 강제로 놓아줄 수 있습니다.
kill $(lsof -t /Volumes/YourDriveName)
이는 드라이브를 사용하는 모든 프로세스를 죽입니다. 공격적이지만 효과적입니다.
Ejecta는 이를 더 정밀하게 처리합니다. 클라우드 동기화 데몬을 포함해 어떤 프로세스가 드라이브를 붙들고 있는지 정확히 찾아내어 개별적으로 종료하게 해 줍니다. 드라이브에 연결된 모든 것을 죽이는 대신, 문제를 일으키는 bird 프로세스나 Dropbox 헬퍼만 표적으로 삼을 수 있습니다. 여러 동기화 서비스 중 어느 것이 범인인지 확실하지 않을 때 특히 유용합니다.
클라우드 동기화와 외장 드라이브가 꼭 충돌해야 하는 것은 아닙니다. 무대 뒤에서 무슨 일이 벌어지는지에 대한 가시성만 있으면 됩니다.
매번 터미널을 쓰고 싶지 않다면, Ejecta가 어떤 프로세스가 드라이브를 막고 있는지 정확히 보여주고 메뉴 막대에서 클릭 한 번으로 종료할 수 있게 해줍니다.
지금 구입 — $9.99