2015년 2월 15일 일요일

MacBook Pro 가 부팅이 안되는 이유 - 특히 Yosemite에서...

2015.2.15(일)

o 서론
  지난 12월 맥북프로가 부팅이 안되어서 오랫동안 여러가지 조치를 하고서 겨우 부팅이 되었음. 그런데, 부팅이 안된 명확한 이유를 모르고 있다가 그저께 밤에 또 아래와 같은 stop 사인이 나오면서 같은 증상을 보였음. 그래서 이번에는 recovery 파티션으로 들어가서 곧 바로 OS X 설치를 하니 모든 셋팅이 정상으로 다시 부팅할 수 있었음. 그러나, 여전히 이유를 모르고 있었음.
(그림 1) Mac OS의 부팅 불가 시 나오는 stop sign

o 문제의 발견
  사용하고 있는 맥북프로는 2009년 중반의 것으로 DVD가 달려있는 모델인데, DVD를 제거하고  disk0로 OCZ Azility 4 SSD가, disk1에 일반 HDD를 달았음. Apple의 SSD가 아니면 trim이 지원안되므로 언제 어느때 SSD가 죽어버릴 지 모르는 상황이어서 trim enabler를 설치하여 trim을 하고 있었고, CD 등을 사용하기 위하여서는 Apple의 USB superdriver를 USB에 연결하여 사용하고 있었음. 이것이 문제였던 것임. 즉, 요약하여, 관련 HW와 driver는 다음과 같은 상황

OS : 10.10.2
SATA : disk0 - SSD, disk1 - HDD
SSD trim : Trim Enabler 3.3
ODD : Apple USB superdrive connected to USB

Apple USB superdrive는 MacBook Air나 Mac Mini 등에서 ODD가 없는 모델에서만 동작하도록 만들어져 있음. 현재 상태처럼 ODD가 있던 모델에서는 동작하지 않음. 이것을 가능하게 하려면 다음 2가지 방법이 있음
  1. /Library/Preferences/SystemConfiguration/com.apple.Boot.plist 파일을 열어서 mbasd=1 라는 string을 을  <string></string> 의 사이에 넣고 save한 다음 재부팅하면 됨
  2. terminal을 열어서 sudo nvram boot-args=”mbasd=1″ 을 실행시켜도 됨

2번째 방법으로 활성화 시켜서 사용하고 있었음. 다른 리포트를 볼 때 2번의 방법이 1번의 방법과 완전히 동일하다고는 하지만 2번은 잘 안될 때도 있다고 하므로 요세미티에서는 1번의 방법을 사용해야할 것 같음. 어쨌건 1번 방법 사용하고자 함

1번의 방법을 사용하기 위해 com.Apple.Boot.plist 파일을 text editor로 열어보니.... 아니.. 바이너리 파일로 되어 있어서 내용을 함부로 수정했다가는 안될 것 같아서 조심스레 파일을 닫고 다시 구글링..

문제는 trim enabler에 있었음.

o 해결방안
trim enabler에서도 '같은' .plst 파일을 수정하고 있는 데, 수정/추가된 string은 kext-dev-mode=1 이었는 데, OS X 재설치 후 곧 바로 trim enabler를 먼저 설치했기 때문임. 따라서, trim enabler를 사용하고 있다면 2개의 string이 같이 들어가야 되는 데, trim enabler에서 먼저 수정했다면 .plist 파일을 바이너리로 바꾸어 놔 버린다는 점을 알게되었음. 이것은 Yosemite의 새로운 보안 방법 에 대응하기 위한 방법으로 device driver를 임의로 바꾼 경우 ( 악의로 인해서 바뀐 경우도 있겠지만 선의(?)의 3rd party driver의 설치도 같이 막힘)를 막고자 부팅 시 .kext (kernel extension 파일, 다른말로는 device driver) 파일들을 검사하는 데 이 검사를 못하게 만들기 위함이었음. 이러한 과정을 kext signing 이라고 한다함.

그렇다고해서 trim enabler를 사용하지 않으면 trim이 안되서 ssd가 언제 죽을 지 모르는 것이므로 (Mac에 SSD를 달고 trim 없이 3년 정도 쓰다가 갑자기 죽어버려서 데이터 다 날린 것이 6개월 전이었음.) 따라서, trim enabler를 사용은 해야되겠고.. Yosemite도 사용해야되겠고.. USB superdrive도 사용해야되겠고..

일단, xcode로 .plst 파일을 읽어보니(바이너리인데도 읽어짐) <string></string> 사이가 mbasd=1 kext-dev-mode=1로 되어 있어서 그대로 두고 superdrive도 잘 되겠거니 하였음.

2015.2.18. 추가분 : 그런데, 그동안 DVD를 안쓰고 있다가 디스크를 넣어보니 들어가지 않았음. 이것은 superdrive가 작동을 안한다는 것임.  여러가지 시도를 했보았으나, 결론은,  DVD가 내장된 MacBook Pro에서는 Yosemite일 때 trim enabler를 사용하면 Apple USB Superdrive 가 작동안한다는 것임. 여기에 대해서는 자세히 포스팅할 예정.. 해결책을 찾았음.

o 주의할 점

그러나 Apple사의 SSD가 아닌 SSD에 대한 trim을 지원하기 위해서는 trim enabler가 필요한 데,  Yosemite의 device driver 검사 정책을 포기하지 않는 이상(trim enabler와 같은 방법을 trim hack이라고하고 Apple이 이러한 hack을 막지 않고 그냥 둘 수는 없을 것임)  trim enabler는 이런 문제를 일으키게 될 것임. 이에 대해 trim enabler  사에서는 다음 몇가지를 주의하라고 함
  - PRAM reset을 할 때는 반드시 trim enabler에서 trim disable을 해 주고 실시하도록.. 그렇지 않으면 부팅 시 stop sign이 나타날 것임. 완전한 해결책은 아직 없음.
  - stop sign이 날 경우 다음 캡처의 절차로 해결하라고함 (바로 그저께 이렇게하면 더 해결될 듯했음) 아래 내용외에 1가지 더 해결방법이 있고, 안될 때는 최종적으로 recovery에서 OS X 재설치라고함. 아래 reference 참조..

(그림 2) trim enabler와 PRAM reset에 의한 부팅 시 stop sign에 대한 대처방법

o reference
  - trim enabler의 주의할 점 : http://www.cindori.org/trim-enabler-and-yosemite/ 
  - Yosemite의 SSD trim 관련 디스커션 기사 : http://www.zdnet.com/article/os-x-yosemite-and-third-party-ssds-heres-what-you-need-to-know/


o 후기
  - MacBook Pro에서 뜬금 없는 stop sign에 대한 의혹이 풀렸음. 앞으로는 PRAM reset할 때 조심해서 해야할 듯...
  - 이제 생각이 나는 데, 그그저께 USB 허브가 동작을 안해서 USB문제인지 알아보느라고 PRAM reset을 한 것이 생각남


댓글 없음:

댓글 쓰기