2010년 3월 5일 금요일

윈도우 7 F8 컴퓨터 복구 모드가 없는 경우 2탄

이 글은 윈도우 7 F8 컴퓨터 복구 모드가 없는 경우 글에서 소개했던 reagentc.exe 파일로 문제가 해결되지 않는 분들을 위해 수동으로 복구 모드를 등록시켜주기 위해 작성했습니다. 제가 스크립트 짜봤는데 VMware에서 몇차례 테스트 결과 별 문제는 없었습니다. 이거 만들면서 알게된 점은 boot.sdi 파일이 윈도우 폴더에도 들어있다는 사실 ;; 전 지금껏 윈도우 7 DVD의 Boot 폴더에서 복사해왔는데 말이죠 ㅠㅠ boot.sdi 파일까지 첨부해서 올리려다 혹시나 싶어 파일 검색해보니 윈도우 폴더에 들어있더군요 ^^;;

 

다운로드

 

 

 

 

위 첨부파일을 받아서 우클릭 - 관리자 권한으로 실행 해주시면 됩니다.

 

아래는 스크립트 내용입니다. 고수님들 문제점이 발견되면 지적해주세요.

일반적으로 대부분 현재 OS의 identifier 가 {current} 이지만 가끔 {default} 인 경우도 있어서 이렇게 작성했습니다.

 

@echo off

 

:general
set REID={572bcd56-ffa7-11d9-aae0-0007e994107d}
set SD=%systemdrive%
md %SD%\Recovery
copy %windir%\system32\recovery\winre.wim %SD%\recovery\
if exist %windir%\system32\boot.sdi copy %windir%\system32\boot.sdi %SD%\recovery\
if not exist %windir%\system32\boot.sdi copy %windir%\syswow64\boot.sdi %SD%\recovery\
attrib %SD%\Recovery +h +s

 

:case1
set OSID=current
bcdedit /set {%OSID%} recoverysequence %REID%
if errorlevel 1 goto case2
bcdedit /set {%OSID%} recoveryenabled yes
goto continue

 

:case2
set OSID=default
bcdedit /set {%OSID%} recoverysequence %REID%
bcdedit /set {%OSID%} recoveryenabled yes
goto continue

 

:continue
bcdedit /create {ramdiskoptions}
bcdedit /set {ramdiskoptions} ramdisksdidevice partition=%SD%
bcdedit /set {ramdiskoptions} ramdisksdipath \Recovery\boot.sdi
bcdedit /create %REID% /d "Windows Recovery Environment" /application OSLOADER
bcdedit /set %REID% device ramdisk=[%SD%]\Recovery\winre.wim,{ramdiskoptions}
bcdedit /set %REID% osdevice ramdisk=[%SD%]\Recovery\winre.wim,{ramdiskoptions}
bcdedit /set %REID% path \windows\system32\winload.exe
bcdedit /set %REID% systemroot \windows
bcdedit /set %REID% detecthal yes
bcdedit /set %REID% nx optin
bcdedit /set %REID% winpe yes

 

:exit
exit

 

 

 

위 스크립트로 VMware에 32/64비트 둘다 msoobe.exe 강종으로 설치하고 테스트 해보니 잘 생성되었습니다.

 

 

 

 

아래 내용은 VHD + PE 멀티부팅 유저들만 참고하세요.

 

제 컴퓨터에서 수차례 테스트해본 결과 저처럼 VHD 부팅하시는 분들 중에 boot.sdi 파일의 경로가 새로 지정됨으로 인해 기존에 등록해두었던 PE로의 부팅이나 VHD 파일 교체하기 메뉴 등 {ramdiskoptions} 를 사용하는 PE 메뉴들로의 진입에 문제가 발생할 소지가 있음을 확인했습니다. 왜냐하면 VHD 부팅 유저들이 이 스크립트를 사용하면 boot.sdi 파일의 경로가 VHD 안에 있는 것으로 지정되는데 만약 VHD 파일을 기존 것으로 교체해버리면 boot.sdi 파일이 들어있지 않은 기존 VHD 파일에 당연히 boot.sdi 경로는 없을테니 {ramdiskoptions} 를 사용하는 다른 PE 부팅 메뉴들로는 부팅이 되지 않겠지요. 따라서 저처럼 Differencing VHD 기능을 사용하시는 분들은 이 스크립트로 F8 복구모드를 등록시키기 전에 먼저 부모 VHD 파일로 부팅한 다음 작업을 해주셔야 합니다. 아니면 위 스크립트에서 {ramdiskoptions} 생성하는 3줄을 빼버리셔도 됩니다.

 

bcdedit /create {ramdiskoptions}
bcdedit /set {ramdiskoptions} ramdisksdidevice partition=%SD%
bcdedit /set {ramdiskoptions} ramdisksdipath \Recovery\boot.sdi

 

왜냐하면 어차피 boot.sdi 파일과 {ramdiskoptions} 에 대한 정보는 PE 부팅을 사용하시던 분들이라면 이미 BCD에 등록되어 있기 때문에 새로이 등록할 필요가 없고 바로 복구모드 항목을 생성해도 되기 때문입니다. 제가 스크립트 짤 때 bcdedit /create {ramdiskoptions} 에서 항목이 있다고 나오면 바로 boot.sdi 단계는 넘기고 아래쪽으로 내려가도록 만들까 생각도 해봤는데 그래도 혹시나 항목이 있음에도 불구하고 boot.sdi 파일의 경로가 잘못 지정되어 있는 상태이거나 아니면 {ramdiskoptions} 항목만 존재하고 boot.sdi 파일의 경로는 지정되어 있지 않은 경우도 만에 하나 있을 수 있으므로 함부로 그렇게 짤 수도 없었습니다. 또한 이 문제는 VHD 부팅 + 램디스크 PE 부팅 이라는 조합을 동시에 사용하는 저같은 극히 일부 유저들에만 국한되는 문제이고 더욱이 그 유저들 중에 F8 복구모드가 없는 경우는 더더욱 소수일 것이고 또한 설령 F8 복구모드가 없다고 해도 이 스크립트보단 reagentc.exe 파일로 간단히 해결될 가능성이 높고, 또한 PE로 부팅하는 분들은 어차피 F8 복구모드의 필요성을 별로 느끼지 못하실 것이라 생각하기 때문에 스크립트에 따로 {ramdiskoptions} 항목에 대한 체크는 넣지 않았습니다.

 

다시 말씀드리지만 이 추가 내용은 VHD + PE 부팅 유저들만 참고 하시면 됩니다. 99%(?)의 일반 유저들과는 전혀 관계없는 이야기 이니 스킵하시기 바랍니다.

 

그리고 이미 위 스크립트 실행으로 VHD 안에 boot.sdi 파일이 지정된 경우라 하더라도 boot.sdi 파일의 경로는 다시 지정해주시면 됩니다. 저같은 경우 현재 XP 파티션이자 시스템, 활성 파티션인 D 드라이브 boot 폴더 안에 이 파일을 넣어두었기 때문에

 

bcdedit /set {ramdiskoptions} ramdisksdidevice partition=D:
bcdedit /set {ramdiskoptions} ramdisksdipath \boot\boot.sdi

 

라고 입력을 하면 되겠지요.

 

댓글 17개:

  1. 1등입니다.^^

    감사합니다.^^

    아들이 스누피 기저귀 사용합니다..^^

    답글삭제
  2. 비밀 댓글 입니다.

    답글삭제
  3. @카리스마조 - 2010/03/05 08:18
    옆에 있는 사진이 그 주인공인가 보네요 ^^

    답글삭제
  4. 유용한 내용 잘 봤습니다. 집필은 모두 마치셨나 보군요

    여유 생기면 좋은 내용이 가득할테니 구입해 보도록 하겠습니다. 아무쪼록 대박나시길 기원합니다 ^^

    답글삭제
  5. @Anonymous - 2010/03/05 10:48
    윈도우 미디어 인코더를 사용하면 되는데 64비트에선 사용할 수 없더군요. 그래도 일단 내일 포스팅해두겠습니다.



    64비트용은 찾아보니 영문판이 있네요. ^^;;

    답글삭제
  6. 배치 파일로 작성해주셨군요^^ 좋은팁 감사합니다~

    답글삭제
  7. 오늘도 기가막히게 유익한 내용 잘 보고 갑니다 ^^



    GUID 를 지정해두고 해도 괜찮은가보네요?

    새로운 지식을 얻었습니다 ㅎㅎ

    배치파일 잘 보관하고 있어야겠네요~

    답글삭제
  8. DVD 부팅 해야 되는줄 알았는데 있었군요.

    항상 좋은 정보 감사합니다.

    답글삭제
  9. 크.. 역시 방대한 양의 스크립트군요;;;;



    그나저나..set OSID=default <<이부분 새로운 발견이네요 -_-;;



    저렇게 하면 default 로 지정된 GUID 가 변수로 지정되는건가요..ㅎㅎ;;

    답글삭제
  10. @LiveREX - 2010/03/05 17:40
    항목 생성할 때 아무거나 마음대로 GUID 형식에만 맞게 지정하면 되는 것 같은데 저건 제가 마음데로 지정한건 아니고 비스타 SP1 WAIK에 들어있는 복구환경 스크립트에 들어있던 GUID입니다.

    답글삭제
  11. @Touch&Heart - 2010/03/05 22:44
    음... 그게 아니고 위에서 current로 먼저 지정을 한 다음 만약 오류가 발생하면 if errorlevel 1에서 current 대신 default를 사용하도록 case2로 보내는 것입니다. 현재 부팅된 윈도우 7은 대부분 current이지만 간혹 default 인 경우가 있더군요.

    답글삭제
  12. 고장 나면 써먹어야 할듯 하네요 ㅋㅋ 퍼가서 고이 간직 ㅎㅎ;; 뼈가 되고 살이 되는 정보 ㅋㅋ

    답글삭제
  13. 감사합니다

    복구모드가 이제 생겼어요

    좋은 한 주 되세요

    답글삭제
  14. 안녕하세요. 항상 도움 많이 받고 있습니다 (__) 다름이 아니라 저는 복구 모드는 있는데 복구 모드에 진입하면 에러가 발생합니다. 스누피님이 알려주신 방법 1, 2 모두 해봤지만 마찬가지네요. 해결 방법 없을까요?

    http://img16.imageshack.us/img16/1412/19198466.jpg

    답글삭제
  15. 비밀 댓글 입니다.

    답글삭제
  16. 자식VHD로 부팅하면, V3가 정지하고 윈도우 방화벽이 켜지는 문제가 생겨서 안철수 연구소에 문의를 했더니, 자식VHD로 부팅한 후 V3를 새로 설치해야 한다고 하는데, 해결 방법이 없는지요...

    답글삭제
  17. '지정한 파일을 찾을 수 없습니다' ㅠㅠ 안 됩니다.

    답글삭제