|
망가진 디스켓 복구하는 법 |
요즘은 주로 3.5인치 디스켓을 많이 사용하여서 디스켓이 파손된다거나 하는 경우가 드물기는 하지만 5.25인치를 주로 쓰던 때에는 디스켓이 구겨지거나 긁히거나 하여 그 속에 저장되어 있던 귀중한 데이타를 못쓰게 되는 경우가 종종 있었습니다. 물론 요즈음도 가끔 주위에서 디스켓이 깨저서저장된 데이타를 못쓰게 되었다며 안타까와 하는 경우가 있기는 합니다.
디스켓이 망가지는 이유는 보통 두 가지인데 그 하나는 정말로 디스켓이 불량이라서 디스켓의 일정부분이 물 리적으로 못쓰게 되어 버리는 경우이고(잘 알겠지만 디스켓의 내부는 마그네 틱 소재로 되어 있어서 자석등을 가져갈 경우 데이타가 날아가기도 하고 또 뾰족한 물건등에 의해서 긁히기도 합니다) 나머지 하나는 컴퓨터 바이러스의 침투라든지 파일저장 과정에서 이상 전기신호가 발생하는 등으로 해서 디스켓의 내부구조가 일그러져 버리는 경우입니다. 이 두 가지 경우 모두 복구가 불가능한 것은 아닌데, 상식적으로 생각해 보아도 첫 번째 경우라면 파손된 부분을 제외한 나머지 부분은 살릴 수 있을 것이고, 두 번째 경우라면 망가 진 내부구조를 바로 만들어 주면 될 것 같지요?
사실 디스켓의 내부구조를 조금만 알고 나면 흔히 망가졌다고 생각하는 디 스켓을 대개는 복구할 수 있습니다. 그리고 완전복구가 불가능하더라도 디 스켓 내부에 있는 꼭 필요한 파일들이 만이라도 찾아서 살릴 수 있는 것입니 다. 오늘의 주제를 망가진 디스켓을 복구하는 법이라고 정했지만 사실 여기 서 이야기하고 싶은 것은 디스켓의 내부구조에 관한 내용입니다. 디스켓을 복구한다는 것은 결국 디스켓의 내부구조를 알아야 할 수 있는 일이기 때문 입니다.
새로 디스켓을 사면 보통 디스크 포맷(fromatting)이란 작업을 하게 되는데, 물론 처음부터 포맷되어져 나오는 디스켓도 많지만 처음 판매될 때부터 포맷을 하지 않고 나오는 이유는 컴퓨터의 운영체제에 따라 포맷을 하는 방식이 다르기 때문입니다. 같은 포맷된 디스켓이라 하더라도 맥킨 토시 컴퓨터에 서 사용하던 디스켓을 일반 PC에서는 인식하지 못하는 것도 같은 이유에서 입니다.
어쨌든 디스켓을 포맷하면 디스켓에는 우리 눈 에는 보이지 않지만 몇 가지 변화가 생기게 됩니다. 아무런 표시도 없던 디스켓의 마그네틱 표면에 마치 올림픽 스타디움의 육상트랙처럼 적당한 간격으로 가로세로로 선이 그어지고 그 어진 선으로 구분되어 지는 각 구획마다 순서 대로 섹터(Sector)와 트랙(Track)으로 구분되어 제각각 번호가 붙여집니다. 그러면 이제부 터 컴퓨터는 디스켓에 파일을 저장하고 또 지 우고 하는 작업을 하게 될 경우에는 이 부여된 번호를 가지고 하게 되는 것입니다(옆의 그림을 참조하세요).
물론 디스켓이 3.5인치냐 5.25인치냐 또는 하드 디스크냐에 따라 당연히 트랙과 섹터의 수나 크기는 달라지겠죠. 그리고 같은 3.5인치 디스켓이라 하더라도 처음 포맷할 때에 옵션을 어떻게 주느냐에 따라서 디스켓의 한 면만을 포맷할 수도 있고 디스크의 섹터수와 트랙수를 다르게 주어 1.44M의 용량으로 되게 할 수도 있고 2M자리가 되게 할 수도 있습니다. 일반적으로 3.5인 치 디스켓을 1.44M로 포맷하였을 경우 80개의 트랙과 트랙당 18개의 섹터를 만들게 됩니다..
디스켓을 포맷할 경우에 트랙과 섹터의 금이 그어지고 이렇게 하여 생기는 구획공간에 순서대로 0번부터 1번, 2번, 3번하는 식으로 번호가 부여되는 것과 동시에 다른 한편에서는 또다른 일이 일어납니다. 바로 "파일 관리 시스템" 의 구축이 그것입니다.
[* 참고: 이렇게 해서 부여된 각각의 공간을 흔히들 "클러스트 cluster"라고 부르는데 사실 논리섹터(logical sector)란 표현이 더 정확한 표현이고 클러스트는 논리섹터를 다시 몇개 단위로 묶어서 부르는 말입니다. 다만 1.44M자리 3.5인치 디스켓에서는 논리섹터 1개가 클러스트 1개와 1:1대응하 는 관계로 여기서는 그냥 "클러스트"를 사용하기로 한 것입니다. 참고로 3.5 인치 디스켓의 클러스트 수는 2,847개입니다.]
파일 관리 시스템이라고 하여 뭐 그렇게 대단한 것은 아닙니다. PC는 디스켓 상의 파일을 효율적으로 관리하기 위하여 앞에서 만들어진 섹터들 중에서 처음 몇 부분의 공간을 미리 점거하여 이 곳은 사용자가 건드리지 못하도록 한 다음에 이곳에다가 파일관리에 필요한 몇 가지 정보들을 담아 두게 되는 데 보통 3.5인치 디스켓에서는 논리섹터로 따져서 0번부터 대략 30번까지가 이 영역에 해당됩니다. 당연히 이 영역은 디스켓 용량이 클 수록 비례하여 커질 수밖에 없겠지요.
그러면 과연 이 파일 관리 시스템에는 어떤 정보들이 있으며 또 이들이 있어 서 어떻게 디스크상의 파일들을 관리하는가를 살펴보기로 하겠습니다. 파일 관리 시스템은 3부분으로 나뉩니다. 아래의 표는 일반적인 3.5인치 디스켓을 1.44M로 정상포맷하였을 경우의 파일관리 시스템의 구조입니다.
영 역 이 름
점거구역(클러스트번호)
Boot Record
1 ∼ 18
Root Directory Area
19 ∼32
너무 어려워 뭐가 뭔지 모르겠다 구요? 결론적으로 말해서 여러분이 알아야 할 것은 사용자가 디스켓을 포맷한 이후에 처음으로 어떤 파일을 하나 만들어 저장하였다고 하더라도 그 내용은 디스켓의 가장 처음 부분에 기록되는 것이 아니라 적어도 디스켓상의 33클러스트 이후의 부분에 기록된다는 것입니다. 그리고 그 앞의 0~32 클러스트까지는 컴퓨터가 점거하여서 그 디 스켓에 관한 여러 가지 정보들, 예를 들어 어떤 파일들은 어느 곳에 위치한다거나 어떤 파일의 크기는 얼마라는 등의 정보들을 저장해 둔다는 것입니다.
디스켓이 깨진다는 말도 대개는 이 부분이 뒤틀린다거나 이 부분에 바이러 스 프로그램이 들어앉아 컴퓨터가 이 디스켓에 들어있는 여러 가지 파일들에 대한 정보들을 제대로 엑세스할 수 없게 된다는 말입니다.
* * * * *
그러면 앞의 0~32클러스트까지는 어떤 내용들이 들어가는지 한번 살펴 보도록 하겠습니다. 이 3 영역 각각에 대하여 그 하는 역할에 대하여 검토해 보 고나면 디스켓의 작동원리에 관한 이해가 어느 정도될 것입니다.
Boot Record 이 부분은 디스크의 가장 첫 클러스트에 위치하며 우리가 컴퓨터의 디스켓을 바꾸어 끼었을 경우라든지 디스크 드라이버에 디스켓을 넣은 채로 부팅을 하거나 하게 되면 컴퓨터가 가장 먼저 읽어 보는 부분입니 다. 그 디스켓의 ID카드 정도라고나 할까요. 그래서 이 부분에 이상이 생기 거나 하게 되면 컴퓨터는 디스켓 전부를 아예 인식하지 못하는 결과가 발생 하기도 합니다. 사실 ID카드라고 하기는 했지만 이 부분에 기록되어 있는 내 용은 데이타라기 보다는 작은 기계어 프로그램이라고 하는 것이 더 옳습니다. 컴퓨터에 처음 디스켓을 집어 넣고 부팅을 하게 될 경우 컴퓨터는 BIOS수 준에서 맨 먼저 이 Boot Record(절대섹터로 따졌을 때는 0면, 0트랙, 1섹터) 를 읽습니다. 즉 이 부트 레코드에 기록되어져 있는 작은 기계어 프로그램을 실행시 키하는 것입니다.
이제 이 부트레코드에는 어떤 내용이 기록되어 있는 지를 직접 한번 보도록 하겠습니다. A:드라이버에 아무 디스켓이나 한 장 집 어넣고(물론 포맷은 되어있어야 합니다) 윈도우즈의 도스창을 열어 DEBUG 를 실행시키면 아래와 비슷한 내용이 출력될 것입니다.
C:\WINDOWS>debug[Enter]
- l200 0 0 1[Enter] ←메모리 200번지에 A:의 클러스트 0부터 1만큼 읽을 것
- d200 3ff[Enter] ← 200번지부터 3FF번지까지를 화면에 표시할 것1ADD:0200 EB 34 90 28 77 32 6B 5F-49 48 43 00 02 01 01 00 .4.(w2k_IHC..... 1ADD:0210 02 E0 00 40 0B F0 09 00-12 00 02 00 00 00 00 00 ...@............ 1ADD:0220 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 12 ................ 1ADD:0230 00 00 00 00 01 00 FA 33-C0 8E D0 BC 00 7C 16 07 .......3.....|.. 1ADD:0240 BB 78 00 36 C5 37 1E 56-16 53 BF 2B 7C B9 0B 00 .x.6.7.V.S.+|... 1ADD:0250 FC AC 26 80 3D 00 74 03-26 8A 05 AA 8A C4 E2 F1 ..&.=.t.&....... 1ADD:0260 06 1F 89 47 02 C7 07 2B-7C FB CD 13 72 67 A0 10 ...G...+|...rg.. 1ADD:0270 7C 98 F7 26 16 7C 03 06-1C 7C 03 06 0E 7C A3 3F |..&.|...|...|.? 1ADD:0280 7C A3 37 7C B8 20 00 F7-26 11 7C 8B 1E 0B 7C 03 |.7|. ..&.|...|. 1ADD:0290 C3 48 F7 F3 01 06 37 7C-BB 00 05 A1 3F 7C E8 9F .H....7|....?|.. 1ADD:02A0 00 B8 01 02 E8 B3 00 72-19 8B FB B9 0B 00 BE D6 .......r........ 1ADD:02B0 7D F3 A6 75 0D 8D 7F 20-BE E1 7D B9 0B 00 F3 A6 }..u... ..}..... 1ADD:02C0 74 18 BE 77 7D E8 6A 00-32 E4 CD 16 5E 1F 8F 04 t..w}.j.2...^... 1ADD:02D0 8F 44 02 CD 19 BE C0 7D-EB EB A1 1C 05 33 D2 F7 .D.....}.....3.. 1ADD:02E0 36 0B 7C FE C0 A2 3C 7C-A1 37 7C A3 3D 7C BB 00 6.|...<|.7|.> 무슨 내용인지 도통 모르시겠다구요? 여기서는 희귀한 문자들 하나하나를 설명하 지는 않겠습니다. 다만 이 부분을 흔히들 "부트스트랩"이라고 부른다는 것과 이 부분이 컴퓨터를 켜면 맨 먼저 실행되는 부분이라는 것만 알아두기로 합 시다. 그리고 한가지 흥미로운 것은 이 Boot Record가 컴퓨터 바이러스의 온상이 된다는 사실입니다. 아까 컴퓨터는 디스켓이 들어오면 맨 먼저 이 부트레코 드에 기록되어져 있는 작은 기계어 프로그램(이를 "부트스트랩 boot strap" 이라고 함)을 읽는다고 하였지요? 그렇다면 만약에 여기에 원래의 부트 스트랩이 아닌 바이러스 제작자가 만든 엉뚱한 기계어 프로그램이 들어 있 다면 어떻게 될까요. 그리고 그 프로그램이 바로 바이러스 프로그램이라면 요? 컴퓨터는 바보스럽게도 그냥 이것을 진짜 부트스트랩인줄 알고 읽어서 실행시키게 되지요. 이것이 바로 바이러스의 침투과정의 하나가 되는데 컴퓨 터 바이러스에 관하여는 다음에 다시 다루기로 하겠습니다.
FAT 화일 할당표(File Allocation Table)이라고 불리우는 이 영역은 말하자 면 구청의 토지대장 같은 것입니다. 이것은 디스크 상에 저장되어 있는 어느 특정 파일이 클러스트 몇번부터 몇번까지를 차지하고 있는지를 소상하게 그 려놓은 클러스트 지도(map) 같은 것이라고 할 수 있습니다. 흔히 화일을 정 리하다가 보면 "Lost Chain"이라는 메시지가 나올 때가 있는데 그 때는 어 떤 연유로 이 지도가 엉킨 것입니다. 컴퓨터를 만드는 사람들은 이 FAT이 상당히 중요하다고 생각하였던지 똑같은 것 두벌을 두어 관리하도록 되어 있어서 만약에 FAT하나가 깨져 버리면 비상용 FAT를 이용하여 복구할 수 도 있도록 되어있습니다. FAT의 지도가 어떻게 파일과 연결되는가는 잠시 후에 설명하기로 하구요.
루트 디렉토리 영역 루트디렉토리 영역은 말 그 대로 컴퓨터의 루트디렉토리(흔히 "C:\"로 표현되어 지는)에 위치하고 있는 화일과 디렉토리(혹은 윈도 우즈에서는 "폴더"라 불리는 것으로 사실 그 실체는 크기가 0byte인 특별한 종류의 화일에 불과하다)의 목록을 관리하는 부분입니다. 이 부분에는 루트디렉토리에 놓여져 있는 파일 들의 이름과 그 파일의 크기, 작성일자 등이 기록되어져 있고 그 파일이 읽 기전용(Read Only)파일인지 혹은 숨겨진(Hidden)파일인지하는 그 파일의 속 성과 그 파일이 디스켓상의 어느 클러스트에 위치하고 있는지 하는 그 시작 클러스트 번호도 기록되어져 있습니다. [ * 참고: 3.5인치 디스켓에서 클러스트 하나는 512byte에 불과합니다. 그러 므로 대개의 파일은 클러스트 여러 개의 공간을 차지하는 것이 일반적이며 루트 디렉토리 영역에는 단지 시작클러스트의 번호만이 기록되어져 있을 뿐 입니다. 그러면 크기가 큰 파일들이 디스켓의 이곳 저곳에 흩어져 저장되어 있다면 컴퓨터가 이 시작클러스트의 위치만 가지고 어떻게 나머지 부분들 까지도 다 찾아서 억세스할 수 있을 까요? 이 때 필요한 것이 바로 FAT입 니다. 컴퓨터는 시작 클러스트를 기점으로 하여 FAT를 읽고 해석하여서 파 일의 나머지 부분들이 저장되어 있는 곳을 찾아내는 것입니다.] 다음은 DEBUG를 이용하여 출력한 루트디렉토리의 시작 클러스트인 #19번 클러스 트(16진수로는 13h)의 내용인데 무엇과 좀 비슷하다는 생각 안 드세요?
그렇습니다. 도스를 사용해 본 적이 있는 분들이라면 'dir'명령을 실행시켰을 경우 출력되는 결과와 비슷하다는 것을 느꼈을 것이고, 윈도우즈 95에서 윈 도우즈 탐색기를 가지고 파일목록을 볼 때 나오는 내용들과도 비슷하다는 것을 느꼈을 겁니다. 그도 그럴 수 밖에 없는 것이 컴퓨터에서 파일목록을 보여준다는 것은 내부적으로는 결국 이 부분을 읽어서 적당히 예쁘게 출력 해 주는 것에 불과하기 때문입니다.