본문 바로가기

디스크와 파티션

디스크 서명(Disk Signature)이란?

디스크 서명(Disk Signature) 이란?



디스크 서명(Disk Signature)이란 디스크 자체에 부여된 고유한 ID 를 의미합니다. 즉, 디스크는 다른 디스크들과 중복되지 않는 고유한 ID 를 가지고 있는데 그것이 바로 디스크 서명입니다. 이렇듯 디스크마다 디스크 서명이 모두 다르기 때문에 윈도우는 디스크 서명을 통해 각각의 디스크를 구별하고 판별하게 됩니다.

1. 디스크에는 다른 디스크들과 중복되지 않는 디스크 서명이(Disk Signature) 존재.
2. 윈도우 및 특정 프로그램들은 디스크 서명을 통해 각각의 디스크를 판별.

※ 디스크 서명 = Disk Signature = 디스크 시그니쳐 = 시그니쳐 바이트





디스크 서명 정보

MBR 디스크에서 디스크 서명은 MBR 에 저장되어 있으며 4Byte(32bit) 16 진수 값으로 이루어져 있습니다.


MBR 의 구조



이러한 MBR 의 디스크 서명 정보를 직접 보도록 하죠. 섹터의 정보를 확인할 수 있는 프로그램을 통해 해당 디스크의 Logical Sector 001B8~01BB 정보를 확인하시면 됩니다. [* 스크린 샷의 GDisk 는 디스크 번호가 1 부터 시작하기 때문에 4 번 디스크는 윈도우에서 3 번 디스크를 의미합니다.]

실제 MBR 디스크의 디스크 서명 정보



디스크 서명은 리틀 엔디안 방식으로 저장되어 있기 때문에 뒤에서 부터 읽으시면 됩니다. 즉, 해당 디스크의 디스크 서명 값은 DF 68 49 C9 이 되는 것이죠. 그것이 맞나 DiskPart 를 통해 확인해 볼까요?

DiskPart [윈도우 7 버전]



정확하죠? 이것이 바로 디스크 서명 정보입니다. 이러한 디스크 서명 정보는 디스크가 초기화될 때 랜덤하게 부여됩니다.



GPT 디스크의 디스크 서명 정보도 비슷하기 때문에 폴딩으로 묶어 두었습니다. 아래의 폴딩을 확인하세요.






디스크 서명의 변화와 윈도우의 인식

윈도우는 디스크 서명을 통해 각각의 디스크를 인식하고 구별한다고 하였습니다. 그 단적인 예가 C: 와 같은 드라이브 문자가 저장된 레지스트리입니다.

HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices

디스크 서명 정보가 사용되는 예.



자~ 여기에서 이야기할 게 하나가 있습니다. 디스크 서명 정보는 사용자가 원하면 다시 새로운 값으로 변경할 수 있습니다. 그럼 디스크 서명이 바뀌면 디스크 서명 정보를 통해 디스크를 인식하고 분류하던 윈도우에서는 어떠한 변화가 일어날까요?

정답은 기존 디스크가 제거되고 전혀 새로운 디스크가 새로 장착된 것으로 인식합니다.






디스크 서명 변경으로 발생할 수 있는 문제

1. 프로그램 문제 발생

일부 프로그램은 디스크 서명 정보를 참고하여 작동하는 경우가 있습니다. 주로 회사에서 사용하는 프로그램들 중 데이터베이스 관련 프로그램 또는 서버 관련 프로그램들에서 이런 경우가 많습니다. 이러한 프로그램을 사용 중인 상태에서 해당 프로그램이 사용하는 디스크의 디스크 서명을 바꿔버리면 당연하게도 해당 프로그램의 기능이 정상적으로 작동하지 않을 수 있습니다.

그렇기 때문에 고스트와 같은 디스크 백업/복원/복제 도구로 기존의 디스크를 통채로 복제하여 새로운 디스크로 옮기는 경우(복원도 마찬가지) 사용하는 프로그램 중 디스크 서명 문제가 발생하는 프로그램은 없는지 확인한 후 그에 맞춰 디스크 서명을 유지하거나, 새로 만들거나, 원본과 동일하게 맞춰주는 적절히 조치를 취해야 할 필요가 있습니다.

ghost32 -clone,mode=copy,src=1,dst=2,szee -sure -fdsp -fx

-FDSP : 대상 디스크의 디스크 서명을 원본과 동일하게 유지.



2. 윈도우 부팅 문제

윈도우의 부팅에서도 문제가 발생합니다. 윈도우 XP 의 경우 Boot.ini 파일이 디스크 서명과는 전혀 상관없는 ARC 경로를 사용하여 아무런 문제가 없지만, 윈도우 7 의 경우 BCD 에 저장되는 파티션 장치 경로는 디스크 서명 정보를 활용하기 때문에 부팅 파티션이 포함된 디스크의 서명이 변경된 경우 윈도우의 부팅에 문제가 발생하게 됩니다.

0xc000000e 부팅 오류



즉, 윈도우가 포함된 파티션을 나타내는 Device 와 OSDevice 옵션의 경로를 찾지 못해 문제가 발생하게 되는 것이죠. 뭐 이건 간단하게 해결하면 간단하게 해결할 수 있고 복잡하게 해결하면 복잡하게 해결할 수도 있습니다. 하단의 관련 글을 확인하세요.



3. 디스크 서명이 바뀌는 이유

이렇게 디스크 서명이 바뀌게 되는 가장 큰 원인은 써드 파티 디스크 or MBR 관리 프로그램들을 통해 MBR 영역을 초기화할 때 많이 발생하게 됩니다.

일부 프로그램들은 MBR 을 초기화하면서 코드 영역만을 초기화하는 것이 아니라 디스크 서명 영역까지 Zero (0x00000000) 로 리셋시키는 경우가 있는데, 이렇게 되면 디스크 서명이 다시 랜덤하게 부여되면서 기존과 다른 값으로 디스크 서명이 바뀌게 되는 것이죠.

또는 프로그램 자체에 MBR 을 초기화하면서 디스크 서명을 유지할 지 리셋시킬지를 결정할 수 있는데 사용자가 이 차이를 인식하지 못하고 잘못된 명령을 내리게 되는 경우도 있을 수 있겠죠.

GDisk32 /mbr /pGDisk32 /mbr /z


이렇게 원치 않게 디스크 서명이 바뀐 경우 다시 원래의 디스크 서명으로 바꿔주면 되긴 되는데, 만약 원래의 디스크 서명을 모르면 좀 골치 아파지는 겁니다.

DiskPart [윈도우 7 버전]


MBRWiz 3.0.83






디스크 서명 충돌

반대로 서로 다른 두 디스크가 동일한 서명을 가지고 있는 경우 디스크 서명 충돌이라는 문제가 발생하게 됩니다.



윈도우는 디스크 서명을 통해 디스크를 인식하는데 이미 있는 디스크가 또 연결되려니 문제가 발생하는 것이죠. 이렇게 되면 나중에 연결된 디스크는 오프라인 상태로 연결되어 정상적으로 사용할 수 없게 됩니다.

이 상황은 여러분들도 간단하게 만들 수 있는데 가상 디스크를 하나 생성하시고(ex. Test1.vhd) 연결하여 초기화하신 후 연결한채로 해당 VHD 파일을 탐색기를 통해 복사한 후(ex. Test2.vhd) 해당 파일도 동시에 연결시켜 보세요. 그럼 디스크 서명 충돌을 경험하실 수 있습니다.

이런 경우 강제로 온라인 연결하는 방법과(디스크 서명 자동 리셋) 수동으로 디스크 서명을 리셋하는 방법이 있는데 이는 분량 조절상 다음의 글에서 이야기하도록 하겠습니다. 이상입니다.


쉬어가는 이야기 - 리틀 엔디안, 빅 엔디안

잠깐 리틀 엔디안이란 단어가 나왔죠. 해당 단어는 원래 걸리버 여행기에서 나오는 이야기입니다. 걸리버 여행기에 등장하는 소인국 릴리퍼트에는 빅 엔디안(Big-Endian) 당과 리틀 엔디안(Little-Endian) 당이 있었는데, 이 두 당은 하나의 정치적인 문제를 가지고 첨예하게 대립하고 있었습니다. 삶은 달걀을 깨 먹을 때 둥근 쪽으로 깨먹어야 하냐?(빅 엔디안) 뾰족한 쪽으로 깨먹어야 하냐?(리틀 엔디안) 로 말이죠.


근데 컴퓨터에서도 데이터를 저장하고 읽는 방식을 정하면서 동일한 문제가 발생하였습니다.

데이터 0x0000002A

00 00 00 2A - 빅 엔디안
2A 00 00 00 - 리틀 엔디안

빅 엔디안은 사람이 읽는 그대로이기 때문에 보기에 편합니다. 고로 디버그가 쉬워 집니다. 반대로 리틀 엔디안은 하위 바이트만이 필요할 때 예로 2A 만 필요할 때 따로 계산할 필요없이 앞의 두 바이트만 바로 가져오면 되는 장점이 있습니다.(이런 경우가 많나 봅니다...) 고로 프로그래밍이 편합니다.

그렇다면 뭐가 더 좋은 방식일까요? 답은...


"삶은 계란을 먹을 때 둥근 쪽으로 까야 하나요? 뾰족한 쪽으로 까야 하나요?"


참고 - http://ko.wikipedia.org/wiki/엔디언
http://www.nicklib.com/bbs/board.php?bo_table=bbs_scrap&wr_id=6