꼬박 밤 새워 작성한 파일을 몽땅 날려버렸을 대의 허탈감이란 경험해 본 사람이면 안다. 이런 사태가 발생했다면 차분히 사라진 파일을 복구시킬 방법을 강구해야 한다. 이때 파일이 어떻게 작성되며 디스켓에 어떻게 저장되는지 그 원리를 안다면 큰 도움이 될 것이다.
'사후약방문'이나 '소잃고 외양간 고친다'는 말은 컴퓨터에도 그대로 적용된다. 이런 처지에 빠지지 않기 위해서는 예방책을 쓰는 것이 최선이지만 그래도 외양간 고치는 법 정도는 알아두는 것이 좋을 것이다. 밑져봐야 본전이니까.
때로 컴퓨터 초보자 중에는 진짜 멀쩡한 디스켓을 망가졌다고 걱정하기도 한다. 포맷도 하지 않은 디스켓에 파일을 저장하려고 할 때나 디스크 드라이브에 디스켓을 거꾸로 넣었을 때 등이 대표적인 경우다. 또 어린아이들이 디스크 드라이브에 전화카드 같은 이물질을 넣어 문제가 발생하는 경우도 더러 있다.
비트는 어떻게 기록되는가
옛날에는 외적의 침입을 알리기 위해 봉화를 피웠다. 높은 산 위의 봉수대에서 연기가 피어오르면 적이 쳐들어오는 것이고 연기가 오르지 않으면 이상 없음이라고 서로간에 약속이 돼 있는 것이다. 만일 산봉우리에 봉수대가 두개 있으면 우리는 4가지의 약속을 정할 수 있다. 1번 봉수대만 연기가 오르면 '적의 동태가 이상함', 2번 봉수대에만 연기가 오르면 '적의 침입', 1번과 2번 봉수대 모두 연기가 오르면 '급히 피난할 것', 두 봉수대 모두 연기가 오르지 않으면 '이상없음'과 같이···.
10 : 적의 동태가 이상함
01 : 적의 침입
11 : 급히 피난할것
00 : 이상없음
이같은 식으로 봉수대가 셋이면 8가지, 넷이면 16가지의 약속을 정할 수 있다. 미국사람들은 이같은 약속을 '코드'라고 부르고 컴퓨터에서도 이같이 2진수로 된 신호체계를 사용한다. 즉 0과 1이라는 두개의 숫자를 가지고 모든 사물과 상황을 표현하는데, 아스키코드라는 것은 2진수(0과 1) 8자리를 가지고 코드체계를 만든 것이다. 2진수 여덟자리면 2백56 가지의 경우를 약속할 수 있는데, 이같이 해놓으면 영어 대소문자 52자, 0에서 9까지의 숫자 10개, 특수문자들, <Enter>
이같이 0과 1만으로 모든 것을 표현하는데 이 0이나 1을 '비트'라고 부르고 비트가 8개 모인 덩어리를 '바이트'라고 부른다. 비트 8개가 모인 바이트가 사람의 언어와 대응하고 있고 바이트가 많이 모여 디스크에 저장될 때 우리는 이것을 '파일'이라고 부른다. 물론 파일은 1바이트로 이루어질 수도 있고 10만바이트로 이루어 질 수도 있다. 우리가 지금부터 살펴 볼 파일은 가장 기본적으로는 비트들로 이루어져 있는 것이다.
망가진 플로피디스켓이 있다면 버리기 전에 사각형의 시커먼 껍질을 벗겨내보라. 안쪽에는 원형으로 된 커피색의 얇은 막이 들어있다. 이 갈색은 산화철인데, 쉽게 말해서 아주 미세한 막대자석같은 것이 코팅되어 있는 것이다. 사실 이 산화철은 우리가 늘상 보는 것이다. 지하철 표라든가 신용카드 등에 있는 갈색 선이 모두 산화철인 것이다. 또 노래가 녹음된 테이프나 음반 등도 표면에 산화철이 코팅되어 있다.
디스크에 파일(더 구체적으로는 비트)이 저장되거나 읽혀지는 것을 이해하기 위해 음반의 구조를 생각해 보자. 헤드를 음반 위에 얹어 놓으면 음반이 돌아가면서 헤드가 특정한 길을 따라 거기에 기록된 정보를 읽어내고 그것을 소리로 바꾸어(앞에서 언급한 코드를 기억하기 바란다) 스피커로 출력한다.
플로피 디스켓이나 하드디스크도 이와 비슷한 원리로 파일을 저장하고 또 저장된 파일을 불러낸다. 문서를 작성하다가 저장명령을 내리면 도스는 디스크의 빈 영역으로 헤드를 움직여 접근한 다음 전기신호를 보내 디스크 표면에 코팅돼 있는 산화철의 상태를 임의대로 바꾼다. 예를 들어 0은 낮은 전압, 1은 높은 전압이라고 한다면 저장되어야 할 파일의 비트에 따라 헤드는 높고 낮은 전기신호를 보내 돌아가고 있는 디스크 위 산화철의 배열상태를 N극과 S극으로 대응시켜 맞추어주는 것이다.
디스크 표면의 산화철 입자들이 이같이 자화되면 컴퓨터가 꺼지더라도 N,S극의 배열상태는 변화하지 않으므로 저장이 가능하다. 그러나 예컨대, 디스크를 오디오 등과 같이 강한자력이 미치는 곳에 보관하면 그 안전을 보장할 수 없다. 외적인 강한 자력이 디스크 표면의 산화철 배열상태를 엉망으로 만들 수 있기 때문이다. 우리가 가끔씩 목격하는'전철 타고 오다 디스켓이 깨졌다'는 말은 근거 없는 말이 아니다.
그러므로 디스크를 보관하는 데서 피해야 할 첫번째 장소는 강한 자력이 미치는 곳이다. 또 먼지가 많은 곳이나 담배연기가 자욱한 곳은 먼지나 니코틴 입자가 산화철에 달라붙을 가능성이 높아 디스크의 에러를 빈발하게 한다. 온도와도 일정한 관계가 있는데 6-10℃ 사이가 좋고 한여름에는 아주 더운 자동차 속에서 파일이 망가지는 경우도 있다고 하니 주의하기 바란다.
기본중의 기본-시스템영역과 데이터영역
모든 디스크는 크게 두개의 영역으로 이루어져 있다. 하나는 시스템 영역이고 다른 하나는 데이터 영역이다. 우리가 문서를 작성해 저장 명령을 내리면 그 문서는 데이터 영역에 저장되고 시스템 영역에는 데이터 영역 몇번지에 어떤 파일이 저장돼 있다는 정보가 기록되어진다. 그러므로 만일 디스크의 시스템 영역이 있는곳이 손상을 입으면 도스는 데이터 영역에 실제로 문서가 그대로 저장돼 있어도 그 번지를 찾지 못하게 된다. 이런 상황이 파일 손상의 한가지 예이다.
■ 시스템 영역
시스템 영역은 부트레코드(Boot Record), 파일할당테이블(File Allocation Table), 루트 디렉토리(Root Directory)로 이루어진다.
► 부트레코드 : 부팅에 관계된 정보가 있는 곳이다. 어떤 디스크든 이 영역이 있으며 부팅에 관계된 정보가 이곳에 저장된다. 이 영역은 디스크의 제일 첫번지인 0트랙 0섹터다. 플로피 디스켓에서 1개의 섹터는 5백12바이트이므로 부트레코드도 같은 크기를 갖는다.
► 파일할당테이블(FAT) : 데이터 영역의 어떤 번지가 사용되었고 어떤 번지가 비어있는지를 기록해 놓은 표같은 것이다. FAT가 있기 때문에 도스는 디스크의 어떤 영역이 비어있는지를 알 수 있고 파일을 디스크에 저장할 때 다른 파일 위에 덮어쓰지 않고 비어있는 영역에 저장할 수 있다. FAT는 대단히 중요하기 때문에 도스는 이것을 2개 만들어 관리한다.
► 루트 디렉토리 : 모든 디스크는 반드시 루트 디렉토리를 가져야만 한다. 루트 디렉토리를 근간으로 해서 파일이 저장되며 또 그 아래에 서브디렉토리들이 만들어질 수 있기 때문이다. 여기에는 파일과 디렉토리(도스 입장에서는 디렉토리도 하나의 파일이다)에 대한 세부사항이 저장된다. 예를 들어, 파일명, 파일의 크기, 마지막으로 저장된 시간과 날짜 등 우리가 dir 명령을 내렸을 때 볼 수 있는 정보들이 그것 들이다.
그러나 루트 디렉토리에는 아주 중요한 두가지 요소가 더 저장되어 있다. 하나는 파일의 속성이고 다른 하나는 그 파일이 데이터 영역의 몇번지(클러스터 번호)에서 시작되고 있는지를 기록한 번지표다. 그러므로 시스템 영역의 루트 디렉토리 부분이 손상되면 파일이 저장된 첫번지를 모를 수 밖에 없고, 따라서 그 파일은 잃어버린 것이나 다름없다. 루트 디렉토리도 고정된 크기를 가지고 있어 보통 플로피디스켓은 1백12개, 하드디스크는 5백12개의 파일을 저장할 수 있다.
■ 데이터 영역
데이터 영역은 클러스터(Cluster)라는 단위로 이루어져 있다. 일반적으로 플로피디스켓에서 1개의 클러스터는 5백12바이트 크기(1개 섹터)이고, 하드디스크에서는 2천48바이트(4개의 섹터)크기다. 클러스터란 파일이 저장되는 단위, 즉 파일이 저장되는 기본 공간 개념이다.
우리는 하나의 파일을 저장하면 디스크의 데이터 영역에 있는 클러스터에 연속적으로 저장 될 것이라고 생각하는데 실상은 그렇지 않은 경우가 훨씬 더 많다. 예를 들어 우리가 데이터 영역의 중간 지점에 저장된 작은 파일 하나를 지웠다고 하자. 그러면 시스템 영역에 있는 FAT에 이 클러스터가 비어있는 것으로 기록 된다. 우리가 다시 문서를 작성하다가 이 문서를 디스크에 저장하면 FAT는 일단 비어있는 영역(클러스터)에다 저장하기 시작한다. 그리고 이 클러스터가 다 차고 나면 디스크상에서 뚝 떨어진 다른 클러스터에 그 다음부터 저장된다. 다음 클러스터에는 이미 다른 파일이 저장 돼 있기 때문이다.
그렇다면 이같이 하나의 파일이 비연속적으로 저장되면 도스는 파일을 어떻게 찾아낼까? 파일의 첫번지는 루트 디렉토리에 기록되어 있으므로 쉽게 찾아낸다. 그리고 그 클러스터를 읽고나면 그 클러스터의 마지막에 연결된 파일이 어떤 클러스터에 있는지 그 번지가 들어있다. 이같이 사슬식으로 연결된 클러스터 번지가 있기 때문에 하나의 파일이 완벽하게 연결되어 불러들여 질 수 있는 것이다. 물론 이같이 하나의 파일이 분산되어 있으면 그만큼 파일의 안전에는 위협이 된다. 중간사슬이 끊어지면 뒤의 파일을 찾을 수 없기 때문이다(이러한 클러스터를 로스트 클러스터-미아-라고 한다). 이러한 이유에서 우리는 도스의 defrag.exe나 노턴 유틸리티에 있는 speedisk.exe 등을 자주 실행해 분산화된 파일들을 연속된 공간에 완전히 재배치하는 일을 하는 것이다.
파일읽기 에러가 일어났을때 가장 먼저 시도해 볼 일은 일단 깨진 디스크라 하더라도 몇번이고 Retry를 해보라는 것이다. 보통 에러가 발생하면 에러 메시지가 나오면서 "Abort, Retry, Fail?"이라는 메시지가 나오는데 R을 몇번 누르다가 기적적으로 파일을 살리는 경우도 있는 것이다.
파일이 깨졌을 땐 NDD가 최고
다음으로 시도할 일은 망가진 디스크의 내용을 다른 디스크로 복사를 해보는 것이다. 이렇게 해서 복사가 되면 살릴 가능성은 상당히 높아진다. 복사가 되면서 새로운 디스크의 시스템 영역과 데이터 영역에 기록되므로 이를 불러들여 보는 것이다.
이같은 시도들이 무산되었을 때 가장 유용한 도구는 노턴 유틸리티에 있는 NDD(Norton Disk Doctor)다.
NDD.EXE를 실행시키고 화면에 나타나는 메시지를 살펴보면서 치료를 시작하자. 치료를 원하는 드라이브를 선택하고 나면 이 프로그램은 검사 1단계인 '논리적 구조에 대한 점검'을 시작한다.
여기서는 디스크의 시스템 영역과 데이터 영역이 제대로 대응되어 있는지 등을 검사한다. 화면의 검사항목들을 보면 알 수 있지만 부트레코드, 파일할당테이블, 루트디렉토리 등의 논리적 구조를 검사하는 것이다.
-Analyzing Partition Table
하드디스크를 검사하면 맨처음 파티션테이블을 점검하는데, 파티션테이블은 하드디스크에만 있다. 하드디스크를 포맷하면 이 디스크가 C드라이브 하나로 쓰일 것인지 아니면 C와 D 등으로 나누어 쓸 것인지를 정의하는 과정이 있는데 이 정보가 파티션테이블에 기록되는 것이다. 이 영역은 하드디스크의 부트섹터 보다 더 앞부분에 위치하며 이를 마스트부트섹터라고 부른다. 미켈란젤로 바이러스 등은 이 영역을 잘깨뜨리는데, 이 부분이 깨지면 도스가 하드디스크 자체를 인식하지 못한다.
-Analyzing Boot Record
부트레코드에 있는 정보들을 검사한다.
-Analyzing File Allocation Table
파일할당테이블에 기록된 '사용되는 클러스터'와 실제 데이터 영역을 대조한다. 만약 FAT에는 1백20번 클러스터가 사용중이라고 되어 있는데 실제로는 비어있는 경우이거나 그 반대의 경우에는 로스트 클러스터가 발견되었다는 대화상자가 나오고, 이어 치료할 것인지를 묻는다.
(Would you like to correct these errors?). <Yes>
이같이 로스트 클러스터를 저장했으면 NDD를 끝낸 후 '한글' 등을 실행하여 이 파일들을 불러들여 본다. 만일 그것이 '한글' 파일이나 아스키 파일이라면 정상적인 글자가 보이며 이를 다른 이름으로 저장하면 부분적으로나마 파일을 건져낼 수 있다. 그러나 글자가 아니라 이상한 문자들이 나타나면 프로그램 파일이 들어 있다고 봐야 한다. 이런 경우에는 그 프로그램을 다시 설치하는 것이 좋다.
로스트 클러스터를 파일로 저장하기 전에 'Undo File'을 만들 것인지를 물어보는 또하나의 대화상자가 나온다. 이는 '만일 이 조치를 취해서 상태가 더 악화된다면' 다시 원래의 상태로 돌려놓을 수 있도록 하는 배려다. <Create Undo File>
-Analyzing Directory Structure
루트디렉토리의 배치구조를 검사한다.
-Analyzing File Structure
루트 디렉토리에 있는 파일의 시작위치와 파일할당테이블을 대조해 위치가 일치하는지를 검사한다.
—Analyzing Lost Cluster
로스트 클러스터를 검사한다. 이로써 검사 1단계(논리적인 오류 검사)는 끝난다.
검사 2단계는 디스크의 물리적인 손상 여부를 점검한다. 먼저 'Surface Test'라는 대화 상자가 나오는데 기본 설정값대로 두고 <Begin Test>
디스크의 표면 검사중 불량섹터가 나타나면 어떻게 처리할 지를 묻는 대화상자를 보여주는데, 이 때 <;Move>;
보다 확실한 NDD를 위해서 한가지만 더 알아두자. 노턴 유틸리티에는 IMAGE.EXE라는 파일이 있다. 이 명령은 디스크의 시스템 영역을 한 부 복사해서 그 디스크의 제일 뒷부분에다 저장해 둔다. 이 명령을 AUTOEXEC.BAT파일에 등록해 두면 부팅이 될 때마다 시스템 영역을 복사하여 두므로 하드디스크 등의 시스템 영역이 파괴되었을 때 거의 완전하게 복구가 가능해진다. AUTOEXEC.BAT파일에 다음의 한 줄을 추가하면 된다.
C:\NU\IMAGE.EXE.
그러나 이같이 디스크가 말썽을 부리기 전에 미리 백업을 해 두는 것이 최고다. 또 데이터 크기가 너무 방대해 디스크로의 백업이 불가능에 가깝다면 CD-R을 구입해서 월이나 년 단위로 WORM(사용자가 1회에 한해 기록할 수 있는 CD-ROM이라고 생각하면 된다)에 백업해도 될 것이다.