iMac 잠자기 안되는 문제 (OSX 10.15 Catalina)

카탈리나 업그레이드 이후 맥이 잠자기가 되질 않는다. 검색을 좀 해보니 동일한 문제를 겪는 사람들이 있는 것 같다. 10.15.3 업데이트가 설치된 지금까지 해결되지 않았다.

https://discussions.apple.com/thread/250933408 내용을 보면 동일하다. UserEventAgent 프로세스가 sleep 진입을 막고있다. apfs 관련 wbc_drain이라는 작업을 하는 것으로 보이는데 top으로 보면 sleeping 상태다. 도대체 뭘 위해 잠자기를 막고 있는건지 모르겠다. 화면만 꺼진 맥이 몇 달 째 전기만 왕창 잡아먹었을 듯.

catalina 이미지 검색결과

MacOS 10.15 Catalina

신기한건 회사에서 업무용으로 사용하는 맥은 괜찮다는거다. 회사 맥은 2017년 5K 모델이고, 집에 있는 맥은 Late 2013 모델이다. 동일하게 둘 다 Fusion Drive를 사용한다.

맥에 Catalina를 클린 인스톨 해 봐도 동일한 문제가 발생한다. 동일한 설정에서 모하비에서는 문제가 없었다.

pmset -g 커맨드를 쳐 보면 sleep prevented by UserEventAgent가 없어지질 않는다. 이 상태에서는 맥이 절대로 슬립에 진입하지 않는다.

cky@iMac ~ % pmset -g           
System-wide power settings:
Currently in use:
 standby              0
 Sleep On Power Button 1
 womp                 1
 halfdim              1
 hibernatefile        /var/vm/sleepimage
 powernap             0
 autorestart          1
 networkoversleep     0
 disksleep            10
 standbydelayhigh     86400
 sleep                1 (sleep prevented by UserEventAgent)
 autopoweroffdelay    28800
 hibernatemode        0
 autopoweroff         1
 ttyskeepawake        1
 displaysleep         10
 highstandbythreshold 50
 standbydelaylow      86400

pmset -g assertions 쳐 보면 apfs 관련된 것 때문이라는 것을 알 수 있다.

cky@iMac ~ % pmset -g assertions
2020-02-06 23:44:44 +0900 
Assertion status system-wide:
   BackgroundTask                 1
   ApplePushServiceTask           0
   UserIsActive                   1
   PreventUserIdleDisplaySleep    0
   PreventSystemSleep             0
   ExternalMedia                  1
   PreventUserIdleSystemSleep     1
   NetworkClientActive            0
Listed by owning process:
   pid 147(hidd): [0x0000001b0009808e] 00:00:00 UserIsActive named: "com.apple.iohideventsystem.queue.tickle serviceID:10000047f name:AppleHIDKeyboardEve product:Apple Keyboard eventType:3"  
	Timeout will fire in 600 secs Action=TimeoutActionRelease
   pid 104(powerd): [0x0000000f00088008] 01:26:49 ExternalMedia named: "com.apple.powermanagement.externalmediamounted"  
   pid 92(UserEventAgent): [0x000010f3000b88dc] 00:14:46 BackgroundTask named: "com.apple.apfsd.wbc_drain"  
	Created for PID: 2256. 
Kernel Assertions: 0x10c=USB,BT-HID,MAGICWAKE
   id=502  level=255 0x4=USB mod= description=com.apple.usb.externaldevice.14900000 owner=External
   id=504  level=255 0x4=USB mod= description=com.apple.usb.externaldevice.14400000 owner=Keyboard Hub
   id=506  level=255 0x100=MAGICWAKE mod= description=llw0 owner=IOSkywalkNetworkBSDClient
   id=507  level=255 0x100=MAGICWAKE mod= description=en0 owner=en0
   id=508  level=255 0x8=BT-HID mod= description=com.apple.driver.IOBluetoothHIDDriver owner=BNBMouseDevice
Idle sleep preventers: IODisplayWrangler

그래서 불편하지만 어쩔 수 없이 전원을 끄고있다. 2007년부터 맥을 사용해왔는데 맥의 전원을 끄고 쓰는건 지금이 처음이다. 빨리 해결됐으면 좋겠다.

외장하드 부트캠프 심플 가이드 (Windows To Go EFI 부팅)

Mac에는 Bootcamp라는 기능으로 Windows로 부팅할 수 있는 기능을 지원해 준다. 내장 HDD의 파티션을 Windows용 파티션으로 쪼개서 설치할 수 있도록 지원해주는데, 이 것 보다는 외장하드나 외장SSD에 설치해 두는 것이 여러모로 편리하다.

결론적으로 말하면 EFI부팅 가능한 Windows To Go를 설치한 외장하드를 만들면 된다.

필요한 준비물은 다음과 같다. 1) Windows 설치하려는 외장 HDD/SSD, 2) Windows 설치 iso 파일, 3) Windows 실행된 컴퓨터이다.

먼저 EFI 파티션을 만든다. Windows에서 해도 되고 Mac에서 해도 되는데, Mac 터미널에서는 다음과 같이 디스크를 지워주기만 하면 된다. diskutil list 명령을 통해서 연결한 외부 저장장치 이름을 찾아서 해당 디스크를 삭제한다. 여기서는 40GB짜리 disk5번이 되겠다.

diskutil list

diskutil erasedisk free untitled disk5 명령으로 디스크를 초기화한다.

diskutil erasedisk free

이제 Windows 머신에 외장하드를 연결해서 디스크 관리를 통해서 보면 200MB EFI 파티션이 앞에 잡혀있고 뒷 부분은 할당되지 않은채로 남아있는 것을 볼 수 있다.

디스크 관리 화면

할당되지 않은 영역을 우클릭하여 새 단순볼륨을 만들어준다. 기본 값으로 다음, 다음, 다음 눌러가면서 만들면 NTFS 파티션이 하나 만들어진다. 여기서는 E: 문자로 할당되어 마운트 되었다.

디스크 관리 – NTFS 파티션 생성

준비한 Windows 설치 iso 파일을 탐색기에서 찾아서 우클릭 > 탑재를 선택한다. 그러면 해당 이미지 파일을 엑세스 할 수 있도록 드라이브 문자를 하나 할당해준다. 여기서는 F:로 할당되었다.

그리고 EFI 파티션을 마운트 하기(드라이브 문자 할당) 위하여 cmd를 관리자 권한으로 실행한다. (검색에서 cmd 라고 치면 나오는 파일에 오른쪽 클릭하여 관리자 권한 실행 선택)

cmd를 관리자 권한으로 실행

diskpart 명령을 실행한 후 드라이브 문자를 할당해준다. 할당하려는 외장하드의 EFI 파티션을 찾아서 assign letter 명령으로 G: 드라이브를 할당해줬다. 여기서는 disk1번이고, 이 디스크의 첫번째 파티션이 EFI 파티션이다.

EFI 파티션 마운트

탐색기에서 봤을 때 다음과 같이 E:(Windows를 설치하려는 빈 공간), F:(iso를 탑재한 Windows 설치 파일), G:(EFI 파티션) 드라이브에 엑세스가 가능해야 한다.

작업 공간이 마운트 된 모습

이제 열어둔 cmd 창에서 dism 명령을 통해서 외장하드에 윈도우를 설치해준다. 여기서 F:는 iso 이미지가 탑재된 드라이브명, E:는 NTFS로 포맷해둔 외장하드의 Windows 설치 공간이다.

dism /apply-image /imagefile:F:\sources\install.wim /index:1 /applydir=E:\

Windows To Go 설치

이제 bcdboot 명령으로 EFI 파티션에 부트파일을 만들어준다. 여기서 E:는 새로 설치한 외장하드 드라이브, G:는 EFI 파티션이다.

bcdboot E:\Windows /s G: /f UEFI

부트파일 생성

준비가 다 되었다.

준비한 외장 하드를 맥에 연결한 후 부팅한다. 부팅하면서 option 키를 누르고 부팅하면 부트 장치를 선택할 수 있는데, 이 때 EFI 장치가 보여야하고 이를 선택하면 부팅이 되면서 윈도우 설치의 나머지 부분을 진행할 수 있다.

이렇게 설치해두면 Parallels Desktop에서도 불러다 쓸 수가 있다. 가벼운 작업은 맥에서 가상머신으로 하면 되고, 헤비한 작업은 듀얼부팅을 한 후 사용하면 된다. 🙂