-fdsz : 고스트로 디스크 복사시 디스크 서명은?

* 예제는 32비트 고스트를 통해 작업하였습니다. 16비트, 64비트 고스트도 명령은 동일합니다.
* 16비트 고스트 = Ghost.exe  * 32비트 고스트 = Ghost32.exe  * 64비트 고스트 = Ghost64.exe


디스크에는 디스크 서명(Disk Signature) 이라는 것이 존재하고 있죠. 디스크 서명이 정확하게 무엇인지 모르시는 분들은 아래의 글을 먼저 참고하시길 바랍니다.



아무튼 디스크 서명은 해당 디스크를 구별하는 일종의 아이디로 디스크 초기화 당시 랜덤하게 부여된 고유한 값을 가지고 있습니다. 그렇다면 고스트에서 디스크 복사 작업을 진행할 때 대상 디스크의 서명은 어떻게 될까요? 일단 예제로 아래의 [디스크 4 -> 디스크 5] (고스트 기준 디스크 5 -> 디스크 6) 로 복사를 진행해보죠.

원본이 될 디스크 4 와 디스크 5 - 윈도우 기준


작업 전 살펴 본 디스크 4 와 디스크 5 의 서명은 아래와 같습니다.

디스크 4 - [7E1A246D], 디스크 5 - [6E100C52]


이 상태에서 고스트를 통해 [디스크 4 -> 디스크 5] 로 복사 작업을 진행하였습니다.

ghost32 -clone,mode=copy,src=5,dst=6 -sure -fx


* 참고로 스크린 샷은 윈도우에서 고스트 디스크 복사 작업의 특성상 오프라인 상태여서 확인이 안 되지만 실제론 복사가 완료된 상태입니다. 온라인으로 연결하면 정상적으로 표시됩니다.


복사가 모두 완료된 후 오프라인 상태에서(* 중요) 곧바로 대상 디스크의 디스크 서명을 살펴 본 모습입니다.

복사가 이루어진 대상 디스크의 서명이 [00000000] 으로 초기화된 모습.

여기에서 아셔야 할 것이 디스크가 오프라인 상태라도 디스크 서명은 정상적으로 출력이 됩니다. 즉, 해당 디스크가 오프라인 상태라서 디스크 서명이 저렇게 출력된 것이 아니라는 이야기죠. 확실하게 대상 디스크의 서명이 초기화된 것입니다.


이렇게 서명이 초기화된 디스크는 온라인 상태로 전환되면 윈도우에 의해 리셋되어 다시 랜덤하게 새로운 디스크 서명을 부여받습니다. 아래와 같이 말이죠.


온라인 전환으로 디스크의 서명이 새롭게 [2D7CAAAAA] 로 리셋된 모습.


즉, 대상 디스크의 서명은 초기화와 리셋 과정을 거쳐 [6E100C52] -> [2D7CAAAAA] 로 변화한 것입니다. 이게 고스트를 통한 디스크 복사 작업시 대상 디스크의 서명에 일어나는 변화의 모습입니다.

* 참고로 이와 같이 대상 디스크의 스위치를 리셋하는 것은 -fdsz 스위치가 담당합니다. 하지만 해당 스위치는 복사 작업의 기본값이기 때문에 자동으로 적용된 것입니다.







-fdsp : 고스트로 디스크 복사시 디스크 서명까지 복사하기

고스트로 디스크를 복사시 원한다면 원본 디스크의 서명까지 그대로 복제할 수 있습니다. 그것은 -fdsp 스위치를 추가하여 작업하시면 됩니다. 그러면 원본 디스크의 서명까지 함께 복제가 이루어집니다.

ghost32 -clone,mode=copy,src=5,dst=6 -sure -fx -fdsp





참고로 이 작업은 디스크 복사 후 원본 디스크를 제거하고 대상 디스크만 사용할 때, 또는 원본 디스크의 서명을 바꿀 예정일 때만 적용하셔야 합니다. 왜냐하면 한 시스템내에서 동일한 디스크 서명을 가진 디스크가 동시에 존재할 수 없기 때문이죠. 이런 경우 디스크 서명 충돌이 발생하게 되고 나중에 연결된 디스크를 강제로 온라인 상태로 전환하면 해당 디스크의 서명이 리셋되어 버립니다. 그건 디스크 서명 충돌 문제 해결하기 - DiskPart, MBRWiz, GDisk 글에서 설명을 드렸죠.

그래서 위와 같이 윈도우에서(윈도우 PE 포함) 고스트를 통해 디스크 서명까지 포함하여 디스크 복사를 진행한 경우 복사 완료 후 대상 디스크를 온라인 상태로 전환하시면 안 됩니다. 그러면 윈도우가 디스크 서명 충돌 문제를 해결하고자 기껏 열심히 복제한 대상 디스크의 서명을 다시 리셋시켜 버리기 때문이죠.



그래서 이렇게 복사 작업을 마친 후 원본 디스크를 제거할 것이라면 이제 시스템을 종료한 후 원본 디스크를 제거하시면 되고, 원본 디스크도 계속 사용하실 거라면 원본 디스크의 서명을 변경해주는 작업을 진행하시면 됩니다.

원본 디스크의 서명 변경 작업은 DiskPart 를 통해 수동으로 새로운 서명을 지정해주거나, MBRWiz 와 같은 써드 파티 프로그램을 통해 리셋하거나, 아니면 고스트와 함께 제공되는 GDisk 를 이용하여 초기화하시면 되겠죠. 이러한 작업들은 마찬가지로 디스크 서명 충돌 문제 해결하기 - DiskPart, MBRWiz, GDisk 글에 설명이 되어 있습니다.

참고로 윈도우 7 의 부트 매니저인 BOOTMGR 은 디스크 서명에 영향을 받죠. 그럼 사용 중인 윈도우 디스크를 바꾸기 위해 고스트를 통해 윈도우가 포함된 디스크를 복사한 후 해당 디스크로 부팅하면 어떻게 될까요? 디스크 서명이 바뀌고 BOOTMGR 은 디스크의 서명이 바뀌면 디스크를 찾지 못하는데 말이죠.

걱정하실 것이 없는 게 고스트의 최신 버전을 사용하면 그런 경우라도 윈도우는 정상적으로 부팅됩니다.(11.x 기준) 이는 고스트가 이것을 자동으로 처리해주기 때문이죠. 그리하여 윈도우의 부팅만을 위하여 -fdsp 스위치를 굳이 사용하실 필요는 없습니다. 하지만 윈도우 비스타 이후의 운영체제를 지원하지 않는 8.x 버전대의 고스트에서는 부팅에 실패하게 됩니다. 이건 아래의 글을 참고하시길 바랍니다.

[GSS - Ghost] 고스트와 윈도우 - 부티용 윈도우 7 디스클르 복사, 복원한 후 0xc000000e 부팅 오류가 발생하는 경우





고스트로 디스크 복사시 대상 디스크의 서명을 그대로 유지하려면?

애석하게도 이건 제가 알기론 고스트 자체만으로는 딱히 방법이 없는 것으로 알고 있습니다. 그래서 이럴 땐 먼저 고스트 작업 전 대상 디스크의 서명을 확인하고, 복사 작업 후 다시 디스크 서명을 원래대로 되돌려주는 것 외에는 방법이 없을 듯 합니다. 이를 간단하게 DiskPart 를 통해 작업을 한다면 아래와 같이 할 수 있겠죠.

01. 고스트 복사 전 대상 디스크의 서명 확인 (이 때 디스크 번호는 본인에게 맞게)

diskpart
select disk=5
uniqueid disk
exit



02. 고스트 복사 작업 진행

ghost32 ......


03. 고스트 복사 후 대상 디스크의 서명 변경 및 온라인 전환 (이 때 서명은 앞에서 미리 확인한 서명)

diskpart
select disk=5
uniqueid disk id=6E100C52
online disk
exit




뭐 크게 어려운 작업은 없죠? 이런 식으로 작업하시면 됩니다. 이번 글은 여기까지 입니다. ^^




배치 파일 예제

위의 디스크 복사 후 원래의 서명으로 되돌리는 것을 간단하게 배치 파일화하면 아래와 같이 만들 수 있겠네요.


@echo off
setlocal enabledelayedexpansion
pushd %~dp0

rem 사용자 설정, 고스트 디스크 복사 작업의 원본과 대상을 설정. 디스크 번호는 고스트 기준.
rem src = 고스트 원본, dst = 고스트 대상.


set src=5
set dst=6



rem 현재 배치 파일을 실행한 윈도우의 버전을 확인하여 XP 라면 이를 알리고 종료.

for /F "tokens=4" %%a in ('ver') do (
set wv=%%a
)

for /F "tokens=1 delims=." %%a in ("%wv%") do (
set wv1=%%a
)

if /i not "%wv1%" == "6" goto Win_Fail


rem 배치 파일이 관리자 권한으로 실행되지 않았다면 이를 알리고 종료.

bcdedit > nul
if /i not "%errorlevel%" == "0" goto Admin_Fail


rem 위에서 사용자가 설정한 고스트 대상을 통해 DiskPart 의 디스크 번호를 설정.
rem DiskPart 는 0 번부터 시작, 고스트는 1 번부터 시작이니 1 을 빼면 DiskPart 의 번호가 나옴.


set /a dps=%src%-1
set /a dpd=%dst%-1


rem 대상 디스크의 원래 디스크 서명을 추출하여 sign 변수로 설정.

echo select disk=%dpd% > dtemp.txt
echo uniqueid disk >> dtemp.txt
echo exit >> dtemp.txt

diskpart /s dtemp.txt > id1.txt

for /F "tokens=3" %%a in ('findstr "디스크 ID" id1.txt') do (
set sign1=%%a
)

del id1.txt /q


rem 고스트 디스크 복사 작업 시작.
rem 핑거 프린트가 남지 않길 원하면 마지막에 -fnf 스위치를 추가하시면 됩니다.


ghost32 -clone,mode=copy,src=%src%,dst=%dst% -sure -fx


rem 대상 디스크를 온라인으로 전환 후 잠시 기다렸다가 디스크 서명을 원래대로 되돌림.

echo select disk=%dpd% > dtemp.txt
echo online disk >> dtemp.txt
echo exit >> dtemp.txt

diskpart /s dtemp.txt > nul

choice /n /t 1 /d y > nul

echo select disk=%dpd% > dtemp.txt
echo uniqueid disk id=%sign1% noerr >> dtemp.txt
echo exit >> dtemp.txt

diskpart /s dtemp.txt > nul

choice /n /t 1 /d y > nul

echo select disk=%dpd% > dtemp.txt
echo uniqueid disk >> dtemp.txt
echo exit >> dtemp.txt

diskpart /s dtemp.txt > id2.txt

del dtemp.txt /q


rem 디스크 서명이 원래대로 유지되었는지 확인. 변경되었다면 원래의 서명을 텍스트로 저장.

for /F "tokens=3" %%a in ('findstr "디스크 ID" id2.txt') do (
set sign2=%%a
)

del id2.txt /q

cls
echo.

if /i "%sign1%" == "%sign2%" (
echo 디스크 서명이 작업 전 %sign1% -^> 작업 후 %sign2% 로 정상적으로 유지되었습니다.
) else (
echo 디스크 서명이 작업 전 %sign1% -^> 작업 후 %sign2% 로 변경되었습니다.
echo 원래의 디스크 서명을 sign.txt 로 저장하였으니 수동으로 변경하시길 바랍니다.
echo %sign1% > sign.txt
)

pause
goto End


rem 작업 종료.

:End
endlocal
exit


rem 관리자 권한으로 실행되지 않았을 경우 이를 알리고 작업 종료.

:Admin_Fail
echo.
echo 배치 파일이 관리자 권한으로 실행되지 않았습니다. 마우스 오른쪽 버튼으로 클릭하여 관리자 권한으로 실행하세요.
echo.
pause
goto End

rem 윈도우 XP 환경에서 실행된 경우 이를 알리고 작업 종료.

:Win_Fail
echo.
echo 이 배치 파일은 윈도우 비스타(PE 포함) 이후의 환경에서만 사용할 수 있습니다.
echo.
pause
goto end

* 빨간색으로 표시한 srcdst 는 포함된 명령들을 직접 수정할 필요없이 대상을 용이하게 바꿀 수 있도록 하기 위해 변수로 뺀 것입니다. 제가 이런 구조를 좋아해서요. ^^;

* DiskPart 스크립트에서는 디스크 온라인 전환 작업과 디스크 서명 변경 작업을 한 번에 진행하는 경우 디스크 서명 변경 작업이 씹히기 때문에 이를 나눈 후 그 사이에 Choice 를 통해 약간의 텀을 주어야 합니다. 그래도 혹시 몰라 마지막에 고스트 복사 작업 전과 작업 후의 서명 변화를 비교하는 작업을 추가하였습니다.

* 작업은 디스크 서명의 수정을 지원하는 윈도우 비스타 이상의 버전이 필요하므로(PE 포함) 윈도우 XP 에서 배치 파일이 실행된 경우 자동으로 종료하도록 만들었습니다. 윈도우 XP 에서 사용할 경우 DiskPart 가 아닌 MBRWiz 와 같은 다른 프로그램을 사용하여 배치 파일을 만들어야 겠죠.

* PE 환경에서 사용하려는 경우 findstr.exe 와 findstr.exe.mui 파일을 고스트, 배치 파일과 함께 미리 준비하거나 PE 환경에 포함시켜야 합니다.

* 참고로 이 배치 파일은 한글 윈도우(한글 윈도우 PE) 환경만을 고려하여 작성한 것입니다.


간단하게 이런 식으로 배치 파일을 짜면 되지 않을까 생각합니다. 그런데 디스크 복사 작업을 진행하면서 원본과 동일하게 만드는 것은 필요할 지 모르겠지만, 사실 대상 디스크의 서명을 유지하는 것은 거의 필요치 않을 거라 생각합니다. 그래서 위의 배치 파일은 해당 작업에 대해 배치 파일을 짜려면 이런 식으로 구성할 수 있다는 일종의 예제로만 보시면 될 듯 합니다. 여러가지 배치 파일들을 뜯어보다 보면 자기에게 필요한 부분을 찾아낼 수 있게 될 테니요. 

이제 위의 배치 파일에서 좀 부족한 부분들을 당장 생각해보자면, 곧바로 작업하면 위험성이 있기 때문에 설정된 원본 SRC 와 대상 DST 를 출력해준 후 실제로 작업을 진행할 것인지를 묻는 과정을 추가할 수 있겠고,

echo 디스크 %dps%(고스트 디스크 %src%) 를 디스크 %dpd% (고스트 디스크 %dst%) 로 복사합니다.
echo.
set /p YN=실제로 작업을 진행하시겠습니까? (Y/N) :
if /i "%YN%" == "Y" goto Start
if /i "%YN%" == "N" goto End


아니라면 SRC 와 DST 를 사용자에게 직접 입력받는 것을 생각해 볼 수 있겠네요. 이 때는 먼저 현재 디스크의 목록을 출력해주면 좋겠죠.

echo 디스크 복사의 원본과 대상을 설정합니다.
echo.
set /p src=원본 디스크 번호(고스트 기준) :
set /p dst=대상 디스크 번호(고스트 기준) :


뭐 이런 식으로 하면 될 것 같습니다. 저도 뭐 배치 파일 작성 실력이 기초적인 수준이라 많은 분들께 배우고자 하는 분들께 도움이 될 정도는 아니지만 어느 정도 참고는 될 수 있을거라 생각합니다. 종종 이런 식으로 배치 파일을 작성해 보도록 하죠. 진짜로 여기까지 입니다. ^^



 

 

신고
캐플 블로그에 공개된 글은 반드시 원본 글의 링크를 포함시키는 조건으로 자유롭게 이용하실 수 있습니다.
하지만 블로그의 발전을 위하여 되도록이면 링크로 글을 소개해주시길 부탁드립니다. ^^

- 상업적인 용도의 사이트는 대상에서 제외됩니다. -
- 글에는 오류가 있을 수 있고, 추후 수정 또는 재발행될 수 있습니다. -
  1. 돌산 2012.08.18 13:21 신고  댓글주소  수정/삭제  댓글쓰기
    역시 캐플님 글을 보면 고스트가 어떤 과정을 거쳐 어떻게 작용되는 것인지 확실하게 이해가 가네요.
    항상 캐플님이 말하듯이 "단순한 따라하기의 글이 아닌 어떻게 전개되는지 이해하는 것이 중요하다"는 것을
    언제나 느끼게 됩니다.저 역시 이런 글을 아주 좋아라 합니다...그런데..전 실전에는 약합니다...ㅎㅎㅎ.

    하....그런데 어머님 건강이 나아지셔야 할텐데...
    • BlogIcon CApple 2012.08.21 21:45 신고  댓글주소  수정/삭제
      누구나 첫 실전엔 약하죠. 사실 저도 이렇게 정리하지만 실제 고스트 작업을 진행할 때는 몇번이고 확인하면서 덜덜덜 떤답니다. ㅎㅎㅎ

      어머님 이야기는 신경써주셔서 감사합니다. ^^
  2. 병운 2012.10.11 09:23 신고  댓글주소  수정/삭제  댓글쓰기
    내용 잘 봤습니다.

    사본의 디스크 서명을 계속 유지한체 복사를 하는 경우는 아무리 생각해도 없을거 같아요.
    설령 있다고 해도 배치파일을 저렇게 복잡하게 만들어서 처리하는 경우도 없을거 같구요.
    뭐 이런방법이 있다는 것 정도로 알면 좋을것 같네요.

    이번 강좌는 의외로 간단한 내용인데, 너무 복잡하게 풀어서 다른 분들이 혹시라도 어렵게 생각하실까봐 드리는 말씀입니다.

    그나저나 배치파일중 현재 windows 버젼을 확인하는 부분이 아주 신기하네요.
    token 을 확인해서 버젼을 찾는건가요?
    • BlogIcon CApple 2012.10.11 10:39 신고  댓글주소  수정/삭제
      이 강좌는 거의 초기에 작성된 걸 순서만 맞춰서 옮겨오느라 간단하게 나가고 있는 다른 스위치 정리들과는 다르게 말이 좀 많죠. ㅎㅎㅎ

      아~ 윈도우 버전은 윈도우 명령어인 ver 로 찾는 겁니다. 버전이 6 으로 시작하면 비스타, 7, 8 이고 5 로 시작하면 2000, XP 거든요. ^^
    • 병운 2012.10.11 21:51 신고  댓글주소  수정/삭제
      아...ver 명령어를 그렇게 적용도 가능하군요.
      ㅎㅎㅎ
      정말 이런말 잘 안하는데, 님 좀 짱인듯!
    • BlogIcon CApple 2012.10.11 22:49 신고  댓글주소  수정/삭제
      ^^;;;; 간단한건데요 뭘 ㅎㅎㅎ
  3. BlogIcon 니드뽀폴쉐 2012.10.11 13:37 신고  댓글주소  수정/삭제  댓글쓰기
    복구만 해봤던지라 서명이 문제될줄은 몰랐는데...
    하드에서 스스디로 교체할 때 꼭 필요하겠네요.
    물론 상당수의 사용자가 그냥 새로 설치할 것 같긴 하지만... ^^;;;
  4. 신유호 2014.05.12 20:36 신고  댓글주소  수정/삭제  댓글쓰기
    궁금한 점이 하나 생기네요. 일반적으로 고스트를 가장 많이 사용하는 패턴인 c드라이브를 백업하고 나중에 윈도우가 문제가 생겨 복원하는 경우에,
    백업한 하드와 같은 하드에 복원을 할 때, 서명이 바뀌지는 않나요? 특별히 서명에 대한 옵션을 넣지 않는다면요?

댓글을 달아 주세요

- 댓글에선 예의를 지켜주시기 바라며, 블로그지기는 댓글에서 따로 활동하지 않습니다.

* 티스토리 사용자는 여기를 클릭하시면 로그인 됩니다.

BBCode 안내   굵게 밑줄 기울임 취소선   취소선 취소선 취소선 취소선   왼쪽 정렬 가운데 정렬 오른쪽 정렬   코드박스 인용구 이미지   이미지 업로드-Imgur.com