[Mac] finder를 이용하여 디스크 추출하기가 안 될 때 터미널을 이용하여 추출하는 방법

디스크 추출 오류

맥에 외장 SSD를 연결하여 작업한 후 모든 작업을 끝내고 볼륨 꺼내기를 하려고 하면 (분명 모든 작업이 끝났는데도) 계속 디스크가 사용 중이라고 뜨면서 안전하게 제거가 되지 않는 현상이 반복됐다.

‘하나 이상의 프로그램이 사용 중이기 때문에 ‘~’ 디스크가 추출되지 않았습니다.
디스크를 즉시 추출하려면, 강제 추출 버튼을 클릭하십시오.’

외장하드에서는 보통 복사 작업 등이 종료가 되면 알아서 잘 제거가 되는 것과 달리 SSD는 자동으로 작업 종료가 되지 않는 듯 하여 해결 방법을 검색해봤다.

사용 중인 프로그램 찾기

외장 SSD를 안전하게 제거하기 위해서는 어떤 프로그램이 디스크를 사용 중인지 확인한 후 해당 프로세스를 종료하는 방법이 가장 효과적이라고 한다.

  1. 터미널로 사용 중인 프로그램을 찾은 뒤
  2. 사용 중인 프로그램을 종료하면 된다.
sudo lsof /Volumes/디스크이름
  • 예를 들어 SSD 이름이 “My SSD”라면 sudo lsof /Volumes/My\ SSD처럼 입력하며, 공백이 있는 경우 백슬래시($$로 이스케이프해야 함)
COMMAND   PID  USER   FD   TYPE DEVICE  SIZE/OFF    NODE NAME
Finder    497  사용자  21r   REG  14,2   246223   33241712 /Volumes/My SSD/file.jpg
Preview   638  사용자  cwd   DIR  14,2   442      2993107 /Volumes/My SSD/Documents
  • 여기서 COMMAND 열은 프로그램 이름을, PID 열은 프로세스 ID
kill PID번호
sudo kill PID번호
sudo kill -INT PID번호
sudo kill -KILL PID번호
  • 각 명령어를 실행한 후 sudo lsof /Volumes/디스크이름 명령어를 다시 실행해 프로세스가 실제로 종료되었는지 확인

하지만, 이건 프로그램이 한 두개일 때 얘기고 열댓개가 넘어가면 귀찮다.

특정 볼륨 사용 프로세스 한 번에 종료하기

sudo fuser -k /Volumes/디스크이름
  • -k 옵션은 “kill”을 의미하며, 해당 볼륨을 사용 중인 모든 프로세스를 자동으로 종료한다. 디스크이름은 실제 SSD의 이름으로 바꿔야하는 것 잊지말 것.

이 방법이 안 통할 경우, lsof와 awk로 일괄 종료를 하면 된다.

sudo lsof /Volumes/디스크이름 | awk 'NR>1 {print $2}' | xargs sudo kill -9
  • lsof로 디스크를 사용하는 프로세스 목록 출력
  • awk로 PID 컬럼만 추출 (첫 번째 헤더 라인 제외)
  • xargs로 각 PID에 kill -9 명령 실행

kill -9의 작동 원리

kill -9SIGKILL 시그널을 보내는데, 이는 프로세스에게 즉시 종료를 강제하는 명령이다. 프로세스가 정상적으로 종료 작업(파일 저장, 메모리 정리 등)을 수행할 기회를 주지 않고 바로 강제 종료시킨다.
일반적인 종료 시그널인 SIGTERM과 달리, SIGKILL은 프로세스가 거부할 수 없으며 graceful shutdown(정상적 종료 절차)이 불가능하다.

안전한 사용 조건

다음 조건이 모두 충족된다면 계속 사용해도 안전:
1. 파일 전송이 완전히 완료된 상태: 복사 진행률이 100%이고, 백그라운드 쓰기 작업도 충분히 기다린 후에만 사용.
2. 중요한 앱이 실행 중이지 않을 때: 외장 디스크를 사용 중인 프로세스가 대부분 시스템 백그라운드 프로세스(Spotlight, QuickLook, fseventsd 등)일 경우에는 안전.
3. 데이터베이스나 편집 중인 파일이 없을 때: 외장 디스크에서 직접 파일을 편집하거나 데이터베이스를 실행 중이라면 사용하지 않아야함.

더 안전한 대안

# 1단계: 먼저 SIGTERM으로 정상 종료 시도
sudo lsof /Volumes/디스크이름 | awk 'NR>1 {print $2}' | xargs sudo kill

# 2단계: 여전히 프로세스가 남아있다면 SIGKILL 사용
sudo lsof /Volumes/디스크이름 | awk 'NR>1 {print $2}' | xargs sudo kill -9
  • 하지만 외장 디스크의 경우, 사용 중인 프로세스가 대부분 시스템 모니터링 서비스(Spotlight indexing, fseventsd 등)이므로 바로 kill -9를 사용해도 일반적으로 문제가 없다고 함.

📢만약 잘못된 부분이 있다면 댓글 부탁드립니다.

Leave a Comment