diskutil eject: Mac 터미널에서 드라이브를 추출하는 방법
diskutil로 어떤 Mac 드라이브든 터미널에서 추출하세요. 추출되지 않는 볼륨을 강제로 마운트 해제하고 lsof로 무엇이 붙들고 있는지 찾는 법까지 다룹니다.
Finder는 드라이브가 사용 중이라고 알려 줍니다. 무엇이 사용 중인지도, 어떻게 해야 할지도 알려 주지 않습니다. 터미널은 둘 다 알려 줍니다.
간단한 답: 터미널에서 드라이브를 추출하려면
diskutil eject /Volumes/YourDriveName을 실행하세요. 실패하면sudo lsof /Volumes/YourDriveName으로 무엇이 추출을 막는지 확인하고,kill <PID>로 문제의 프로세스를 멈춘 뒤 다시 추출하세요. 최후의 수단으로diskutil unmountDisk force /dev/diskN이 드라이브를 강제로 분리하지만, 활발히 쓰는 것이 없을 때만 하세요.
명령줄에 익숙하다면, 터미널은 macOS에서 고집스러운 드라이브 추출을 처리하는 가장 강력한 방법입니다. 아직 익숙하지 않더라도, 이 명령들은 시작하기 좋은 출발점입니다.
diskutil eject로 기본 추출하기
Mac 터미널에서 외장 드라이브를 추출하는 가장 직접적인 방법:
diskutil eject /Volumes/YourDriveName
YourDriveName을 Finder에 나타나는 그대로 드라이브의 실제 이름으로 바꾸세요. 이름에 공백이 있으면 따옴표로 감싸세요.
diskutil eject "/Volumes/My Drive"
이는 Finder에서 추출 버튼을 클릭하는 것과 같은 일을 합니다. 잘 되면 드라이브가 깔끔하게 마운트 해제되고 끝입니다. 실패하면 Finder가 결코 제공하지 않는 더 유용한 오류 메시지를 받습니다.
추출하지 않고 마운트만 해제할 수도 있습니다(드라이브가 디스크 유틸리티에 보이지만 마운트되지는 않음).
diskutil unmount /Volumes/YourDriveName
이 차이는 여러 파티션이 있는 드라이브에서 중요합니다. unmount는 볼륨 하나를 제거합니다. eject는 물리적 기기와 그 모든 볼륨을 한 번에 제거합니다.
diskutil list로 드라이브 식별자 찾기
더 고급 명령을 쓰기 전에 드라이브의 식별자가 필요합니다. 연결된 모든 디스크를 나열하세요.
diskutil list
출력에는 모든 디스크와 그 파티션이 표시됩니다. 외장 드라이브는 disk4나 disk5 같은 형태입니다. 내장 드라이브는 보통 disk0과 disk1입니다.
외장 드라이브만 더 읽기 쉽게 보려면:
diskutil list external
디스크 식별자를 알면 볼륨 이름 대신 /dev/ 경로로도 추출할 수 있습니다.
diskutil eject /dev/disk4
이는 볼륨 이름에 특이한 문자가 있거나, 볼륨이 마운트되지 않았는데 디스크는 여전히 연결되어 있을 때 유용합니다.
모든 외장 드라이브를 한 번에 추출하는 방법
모든 외장 드라이브를 한 명령으로 추출해야 한다면, 두 가지 접근법이 있습니다.
diskutil로 모든 외장 디스크를 찾아 추출하기:
diskutil list external | grep -o 'disk[0-9]*$' | while read disk; do diskutil eject "/dev/$disk"; done
또는 Finder가 하는 일을 그대로 따르는, 터미널에서의 AppleScript:
osascript -e 'tell application "Finder" to eject (every disk whose ejectable is true)'
AppleScript 방식은 Finder가 추출 가능하다고 여기는 디스크만 추출합니다. 시동 디스크와 네트워크 볼륨은 건너뛰는데, 대개 그게 원하는 바입니다.
diskutil eject가 실패할 때 강제 마운트 해제하기
일반 추출이 “couldn’t unmount disk” 같은 오류로 실패하면 강제로 하세요.
diskutil unmount force /Volumes/YourDriveName
또는 특정 디스크의 모든 볼륨을 한 번에 마운트 해제하기:
diskutil unmountDisk force /dev/disk4
강제 마운트 해제는 무엇이 사용 중이든 macOS에게 볼륨을 놓아주라고 지시합니다. 드라이브를 물리적으로 뽑는 것보다 더 통제된 방식입니다. 시스템이 여전히 캐시를 비우고 프로세스에 알립니다. 하지만 프로세스가 파일을 깔끔하게 닫기를 기다리지는 않습니다.
중요한 것이 기록되고 있지 않다고 확신할 때 강제 마운트 해제를 사용하세요. 디스크 유틸리티에서 강제 추출하는 것의 명령줄 등가물입니다. 활발히 사용 중이던 드라이브에 이를 쓰기 전에 언제 강제 추출이 안전하고 위험한지에 대한 가이드를 참고하세요.
lsof로 무엇이 추출을 막는지 찾기
이것이 추출 문제에서 터미널을 귀중하게 만드는 명령입니다.
lsof /Volumes/YourDriveName
lsof는 “list open files"의 약자입니다. 그 볼륨의 파일을 열어 둔 모든 프로세스를 보여 줍니다. 프로세스 이름, 프로세스 ID(PID), 실행 중인 사용자, 그리고 어떤 파일이 열려 있는지 말입니다. (lsof 플래그와 패턴에 대한 집중적인 설명은 Mac 사용자를 위한 lsof 명령 가이드를 참고하세요.)
완전한 결과(시스템 프로세스 포함)를 보려면 sudo와 함께 실행하세요.
sudo lsof /Volumes/YourDriveName
sudo 없이는 자신의 사용자 계정 소유의 프로세스만 보입니다. Spotlight의 mds나 Time Machine의 backupd 같은 시스템 프로세스는 나타나지 않습니다. sudo를 쓰면 실제로 드라이브를 열어 두고 있는 모든 것이 보입니다.
lsof 출력 읽기
출력은 대략 이렇게 보입니다.
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mds 123 root 12r REG 1,8 4096 789 /Volumes/MyDrive/.Spotlight-V100/...
Finder 456 aaron 15r DIR 1,8 1024 2 /Volumes/MyDrive
Dropbox 789 aaron 8u REG 1,8 8192 345 /Volumes/MyDrive/Projects/.dropbox
가장 중요한 열:
- COMMAND: 프로세스 이름 — 무엇이 추출을 막는지 알려 줍니다.
- PID: 프로세스 ID — 필요하면 프로세스를 죽이는 데 사용합니다.
- FD: 파일 디스크립터와 접근 모드.
r은 읽기,w는 쓰기,u는 읽기/쓰기를 뜻합니다.w나u가 보이면 무언가가 활발히 드라이브에 쓰고 있는 것이며, 강제 추출은 위험합니다. - NAME: 접근 중인 구체적인 파일 — 프로세스가 거기 있는 이유를 정확히 드러내는 경우가 많습니다.
흔한 범인: mds(Spotlight 색인), backupd(Time Machine), Dropbox, Google Drive, Finder 자체. 표적 해결책은 Spotlight가 추출을 막는 경우와 iCloud/Dropbox가 추출을 막는 경우에 대한 심층 글을 참고하세요.
막는 프로세스 죽이기
막는 프로세스의 PID를 알면 정상적으로 종료하세요.
kill 789
이는 정상 종료 신호를 보냅니다. 프로세스가 파일을 닫고 정리할 기회를 얻습니다. 종료될 몇 초의 여유를 준 뒤 다시 추출을 시도하세요.
정상 종료에 응답하지 않으면:
kill -9 789
이는 즉시 강제 종료합니다. 프로세스가 정리할 기회를 얻지 못합니다. 최후의 수단으로 쓰세요. 특히 시스템 프로세스에는요.
특정 볼륨을 사용하는 모든 프로세스를 한 명령으로 죽이려면:
sudo lsof -t /Volumes/YourDriveName | xargs kill
-t 플래그는 lsof가 PID만 출력하게 하고, xargs가 이를 kill에 넘깁니다. 조심하세요. 이는 드라이브를 사용하는 모든 프로세스를 죽이며, 중요한 작업 도중인 것도 포함될 수 있습니다.
완전한 문제 해결 작업 흐름
추출되지 않는 드라이브를 위한 전체 순서입니다.
# 1단계: 일반 추출 시도
diskutil eject /Volumes/YourDriveName
# 2단계: 실패하면 무엇이 막는지 확인
sudo lsof /Volumes/YourDriveName
# 3단계: 문제의 프로세스 죽이기 (PID를 실제 번호로 바꿈)
kill 12345
# 4단계: 다시 추출 시도
diskutil eject /Volumes/YourDriveName
# 5단계: 여전히 막히면 강제 마운트 해제
diskutil unmountDisk force /dev/disk4
대부분의 문제는 3단계에서 해결됩니다. 막는 것을 찾아 죽이고, 깔끔하게 추출하세요.
유용한 진단 변형
Spotlight가 드라이브를 붙들고 있는지 구체적으로 확인하기:
lsof /Volumes/YourDriveName | grep mds
추출을 막는 고유한 프로세스 이름만 나열하기(중복 행 없음):
lsof /Volumes/YourDriveName | awk '{print $1}' | sort -u
무언가가 활발히 쓰고 있는지 보기 위해 실시간 디스크 입출력 관찰하기:
sudo fs_usage -f diskio | grep YourDriveName
이는 계속 실행되며 모든 디스크 작업을 일어나는 대로 보여 줍니다. 멈추려면 Control-C를 누르세요. lsof가 프로세스를 보여 주지만 그것이 활발히 쓰고 있는지 아니면 그저 오래된 핸들을 붙들고 있는지 확실하지 않을 때 사용하세요.
터미널이 들이는 수고만큼의 가치가 없을 때
이 명령들은 강력하며, 몇 번 써 보면 익숙해집니다. 하지만 작업하다가 터미널 창으로 맥락을 전환하는 데에는 실제 비용이 따릅니다. 진단 명령을 실행하고, 기술적인 출력을 분석하고, 어떤 PID가 죽여도 안전한지 판단하는 일 말입니다.
Ejecta는 위의 모든 것을 자동으로 합니다. 드라이브를 모니터링하고, 막는 모든 프로세스를 찾아내며, 각각을 종료하는 클릭 한 번의 버튼을 제공합니다. sudo lsof로 얻을 정보와 같은 것을 메뉴 막대에서 시각적으로 보여 줍니다. 외울 명령도, 분석할 출력도 없습니다.
9.99달러로, 이 여러 단계의 터미널 작업 흐름 전체를 클릭 한 번으로 대체하는 도구를 얻습니다. 한 달에 한 번 이상 이 문제와 씨름하고 있다면, 첫 주 안에 아껴진 답답함으로 본전을 뽑습니다. Ejecta를 7일간 무료로 사용해 보세요. 터미널은 필요 없습니다.
매번 터미널을 쓰고 싶지 않다면, Ejecta가 어떤 프로세스가 드라이브를 막고 있는지 정확히 보여주고 메뉴 막대에서 클릭 한 번으로 종료할 수 있게 해줍니다.
지금 구입 — $9.99