상기한 본 발명의 목적을 실현하기 위한 하나의 특징에 따른 손상된 데이터를 갖는 손상된 디렉토리 정보로부터 데이터 복원 방법은, 손상된 데이터를 갖는 하드디스크에서 상기 손상된 데이터를 갖는 디렉토리정보가 손상된 후 상기 손상된 데이터를 복원하는 방법에 있어서,
(ⅰ) 손상된 데이터를 갖는 제1 드라이브로부터 섹터 정보를 검출하는 단계;
(ⅱ) 상기 제1 드라이브로부터 부트 섹터의 값을 읽는 단계;
(ⅲ) 상기 검출된 섹터 정보와 부트 섹터의 값을 근거로 디스크 정보를 분석하는 단계;
(ⅳ) 상기 단계(ⅲ)에서 디스크 정보가 FAT 정보가 아닌 경우에는 디스크 정보가 NTFS 파일 시스템이라 판단하여 NTFS 파일 시스템을 복원하는 단계;
(ⅴ) 상기 단계(ⅲ)에서 디스크 정보가 FAT 정보인 경우에는 FAT 정보를 검출하여 메모리에 저장하는 단계;
(ⅵ) 루트 디렉토리 정보를 검출하여 메모리에 저장하는 단계;
(ⅶ) 데이터 섹터로부터 손상된 디렉토리 및 손상된 파일 정보를 검출하는 단계;
(ⅷ) 상기 단계(ⅶ)에서 검출된 디렉토리 정보를 이용하여 복원할 디렉토리 정보를 분석하고, 분석된 디렉토리 정보를 근거로 손상된 디렉토리 정보를 생성하는 단계; 및
(ⅸ) 상기 손상된 디렉토리 정보를 근거로 손상된 디렉토리를 복원하고, 복원 디렉토리 및 복원된 파일 정보를 근거로 손상된 데이터를 복원하여 제2 드라이브에 저장하는 단계를 포함한다.
이러한 손상된 데이터를 갖는 손상된 디렉토리 정보로부터 데이터 복원 방법 및 이를 저장한 컴퓨터가 판독 가능한 기록 매체에 의하면, 단순히 지워진 파일뿐만 아니라 하드디스크에 데이터를 덮어써서 디렉토리 정보까지 손상이 된 경우에도 실제 데이터만 덮어써지지 않은 경우에는 복원을 할 수 있도록 해준다.
또한 현재까지의 기술로는 실제 데이터가 남아있는 경우라도 디렉토리 정보가 손상된 경우는 복구가 불가능하였으나 이번에 새로 개발된 기술을 사용하면 디렉토리 정보자체가 손상된 경우일지라도 데이터를 복원할 수 있다.
그러면, 통상의 지식을 지닌 자가 본 발명을 용이하게 실시할 수 있도록 실시예에 관해 설명하기로 한다.
일반적으로 하드디스크의 데이터 시스템 및 레지스트리(registry)는 사용자가 컴퓨터 시스템을 잘못 사용하거나 또는 하드웨어의 결함으로 인해 하드디스크 드라이브에 기록된 데이터가 손상된 경우에 그 기록된 정보값이 변동된다. 따라서, 이 값들을 기본 상태의 데이터의 데이터 시스템 및 레지스트리와 비교하여 차이가 발생하면, 그 차이가 발생한 부분에서 하드디스크 드라이브에 오류, 즉 손상이 있음을 확인할 수 있다.
도 1은 본 발명의 실시예에 따른 손상된 데이터를 갖는 손상된 디렉토리 정보로부터 데이터 복원 방법을 설명하기 위한 흐름도이다.
도 1에서와 같이, 먼저 손상된 하드디스크 드라이브를 열거나 섹터를 읽는 7함수에서 섹터 정보를 검출한다(단계 S10). 이때 검출되는 섹터 정보는 FAT 파일 시스템인 경우 하기 하는 바와 같이, 파티션 테이블(Partition table), 부트 섹터 (Boot sector)정보, FAT(File Allocation Table) 정보, 루트 디렉토리(Root directory) 정보, 데이터 섹터 정보를 포함한다.
파티션 테이블 |
부트 섹터 |
FAT |
루트 디렉토리 |
DATA |
이때, 파티션 테이블은 한 개의 물리적인 하드 디스크를 한 개 이상의 논리적인 드라이브로 나누는데 있어서 각 드라이브의 시작위치 및 크기 등에 대한 정보를 가진다. 예를 들어 4기가짜리 하드를 2개의 2기가짜리 하드로 분할하는 경우 첫 번째 하드는 0 에서 2기가까지 사용하고, 두 번째 하드는 2기가부터 4기가까지 사용한다는 내용을 담고 있다.(하기 하는 struct PARTITION_TABLE 참조)
부트 섹터는 각 파티션의 첫번째 섹터에 위치하여 파일시스템의 종류, FAT크기, 전체 섹터 수, 시작 클러스터의 위치 및 클러스터 당 섹터 수 등의 정보를 가진다.(하기 하는 struct A_BF_BPB=바이오스 파라미터 블록 참조)
또한 파일 할당 테이블(File Allocation Table; 이하 FAT라 칭함.)은 파일을 할당하는 클러스터(cluster)의 위치를 알아내어 클러스터들의 연결 상태를 저장하는 블록이며, 루트 디렉토리는 모든 파일이나 디렉토리의 가장 상위 디렉토리이다.
이러한 FAT 파일 시스템에 있어서, 노턴 유틸리티(Norton Utility)의 디스크 에디터(diskedit.exe)를 사용하면 각 내용의 헥사 코드(Hex code) 및 데이터 내용을 덤프(Dump)해서 데이터로 저장할 수 있고, 또한 프린트하여 볼 수 있다.
그러면 파티션 테이블과 부트 섹터의 바이오스 파라미터 블록(BIOS Parameter Block; 이하 BPB라 칭함.)의 구조를 설명한다.
먼저 파티션 테이블은 하드디스크를 1개 이상으로 분할하는 경우 각 파티션에 대한 할당 정보를 가지고 있다. 보다 상세히는 파티션 테이블은 다음의 내용을 가지고 있다.
-----------------------------------------------------------------------
struct PARTITION_TABLE {
BYTE Part_BootInd; //0x80 - active
BYTE Part_FirstHead; //starting head
BYTE Part_FirstSector; //starting sector
BYTE Part_FirstTrack; //starting cylinder
BYTE Part_FileSystem; //What partition type
BYTE Part_LastHead; //end head
BYTE Part_LastSector; //end sector
BYTE Part_LastTrack; //end cylinder
DWORD Part_StartSector; //starting sector counting from 0
DWORD Part_NumSectors; //number of sectors in partition
};
-----------------------------------------------------------------------
여기서, Part_BootInd가 '0x80'이면 부팅 가능한 파티션을 의미하고, '0'이면 부팅이 되지 않는 파티션을 의미한다.
또한 Part_FileSystem은 Part_FileSystem의 값을 의미하는데 그 각각의 내용은 다음과 같다.
-----------------------------------------------------------------------
#define PART_UNKNOWN 0x00 //Unknown.
#define PART_DOS2_FAT 0x01 //12-bit FAT.
#define PART_DOS3_FAT 0x04 //16-bit FAT. Partition smaller than 32MB.
#define PART_EXTENDED 0x05 //Extended MS-DOS Partition.
#define PART_DOS4_FAT 0x06 //16-bit FAT. Partition larger than or equal to 32MB.
#define PART_DOS32 0x0B //32-bit FAT. Partition up to 2047GB.
#define PART_DOS32X 0x0C //Same as PART_DOS32(0Bh), but uses Logical Block Address Int 13h extensions.
#define PART_DOSX13 0x0E //Same as PART_DOS4_FAT(06h), but uses Logical Block Address Int 13h extensions.
#define PART_DOSX13X 0x0F //Same as PART_EXTENDED(05h), but uses Logical Block Address Int 13h extensions.
#define DOS_EXTENDED_PARTITION 0x05
#define LINUX_EXTENDED_PARTITION 0x85
#define WIN98_EXTENDED_PARTITION 0x0f
#define LINUX_SWAP_PARTITION 0x82
-----------------------------------------------------------------------
이상에서는 파티션 테이블에 대해 설명했다.
이어 부트 섹터(Boot sector)의 값을 검출하고(단계 S20), 부트 섹터의 값을 근거로 디스크 정보를 분석한다(단계 S30). 이때 부트 섹터는 일반적으로 1개의 드라이브에 대한 데이터 시스템 정보를 가지고 있다. 예를 들어, FAT16, FAT32 및 NTFS(NT File System)에 따라 다른 정보를 가지고 있다. 그 예로서 FAT32에서 사용되는 부트 섹터의 BPB의 구조는 다음과 같다.
-----------------------------------------------------------------------
typedef struct _A_BF_BPB { //FAT 바이오스 파라미터 블럭
WORD A_BF_BPB_BytesPerSector; //섹터당 바이트수
BYTE A_BF_BPB_SectorsPerCluster;//클러스터당 섹터수
WORD A_BF_BPB_ReservedSectors;//예약 섹터
BYTE A_BF_BPB_NumberOfFATs; //FAT 갯수
WORD A_BF_BPB_RootEntries; //최대 루트디렉토리 목록 갯수
WORD A_BF_BPB_TotalSectors; //파티션의 섹터 크기
BYTE A_BF_BPB_MediaDescriptor;//미디어 서술자
WORD A_BF_BPB_SectorsPerFAT; //FAT당 섹터수
WORD A_BF_BPB_SectorsPerTrack;//트랙당 섹터수
WORD A_BF_BPB_Heads; //드라이브 상의 R/W 헤드의 수
WORD A_BF_BPB_HiddenSectors; //드라이브 상의 숨겨진 섹터의 수
WORD A_BF_BPB_HiddenSectorsHigh; //숨겨진 섹터 값의 하이 워드
DWORD A_BF_BPB_BigTotalSectors; //FAT32드라이브 상의 총 섹터수
DWORD A_BF_BPB_BigSectorsPerFat; //FAT32드라이브상의 FAT당섹터수
DWORD A_BF_BPB_BigSectorsPerFatHi;
WORD A_BF_BPB_ExtFlags;
WORD A_BF_BPB_FS_Version;
DWORD A_BF_BPB_RootDirStrtClus;//FAT32 드라이브의 루트 디렉토리가시작되는 클러스터 위치
WORD A_BF_BPB_RootDirStrtClusHi;
WORD A_BF_BPB_FSInfoSec; //파일 시스템 정보 섹터의 섹터수
WORD A_BF_BPB_BkUpBootSec; //백업 부트 섹터의 섹터수
WORD A_BF_BPB_Reserved[6]; //예약 필드
} A_BF_BPB, *PA_BF_BPB;
--------------------------------------------------------------
이어 단계 S30에서 분석한 디스크 정보가 FAT 파일 시스템인지의 여부를 체크하여(단계 S40), FAT 파일 시스템이 아닌 경우에는 NTFS 파일 시스템이라 판단하여 NTFS 방식으로 데이터 데이터를 복원하고(단계 S50), FAT 파일 시스템인 경우에는 FAT 파일 시스템 방식으로 데이터를 복원한다(단계 S60).
도 2는 상기한 도 1에 도시한 단계 S60의 데이터 복원 방법을 설명하기 위한 흐름도이다.
도 2를 참조하면, 먼저 하드디스크의 FAT 정보를 검출하여 메모리에 저장하고(단계 S610), 루트 디렉토리 정보를 검출하여 메모리에 저장한다(단계 S620).
이어 데이터 섹터에 디렉토리 정보가 없고 데이터만 있는 경우에는 데이터 형식별로 분석하여 손상된 디렉토리를 검출한다(단계 S630).
이어 찾아진 단계 S610 내지 단계 S630에서 얻어진 정보를 사용하여 복구할 디렉토리 정보를 분석하고, 분석된 디렉토리 정보를 근거로 디렉토리를 생성한다(단계 S640).
이어 손상된 디렉토리를 복구하고, 복구된 디렉토리 내에 저장된 손상된 데이터를 복구한다(단계 S650).
도 3은 도 2에 도시한 디렉토리 및 데이터 복원 단계를 보다 상세히 설명하기 위한 흐름도이다.
도 3을 참조하면, 먼저 수동으로 환경 설정에서 찾아진 데이터 사이즈의 초기 사이즈를 임의의 크기로 변경한다(단계 S6510).
이어 디렉토리를 복원하는 화면에서 확장자별로 찾아진 데이터를 등록하고(단계 S6520), 프로그램에서 자체적으로 데이터 이름 및 사이즈 정보를 분석하여 생성한다(단계 S6530).
이어 사용자는 필요한 경우 수동으로 디렉토리를 복원하는 화면에서 리스트에 있는 데이터의 이름 및 그 크기를 임의로 변경한다(단계 S6540).
이어 필요한 데이터를 제1 드라이브와는 상이한 제2 드라이브에 저장한다(단계 S6550). 이때 제2 드라이브는 기존의 손상된 제1 드라이버의 하드디스크 용량에 대응하는 또는 그 보다 큰 용량의 저장 매체인 것이 적당하다.
단계 S6550에서 1차 저장된 복원 데이터의 크기와 손상된 데이터 크기를 비교하여(단계 S6560), 손상된 데이터 크기가 복구된 데이터 크기보다 큰 경우에는 리스트에 있는 데이터의 이름 및 그 크기를 임의로 변경하는 단계 S6540으로 피드백하여 데이터의 이름 및 크기를 재설정한다.
또한 단계 S6560에서 손상된 데이터 크기가 복구된 데이터 크기보다 작은 경우에는 복구된 데이터를 읽는 프로그램을 사용하여 정상적으로 읽어들일 수 있다.
이와 같은 본 발명은 손상된 데이터를 복원하도록 함으로써 사용자가 디렉토리를 삭제하고, 그 삭제된 디렉토리 정보가 손상된 경우라도 하드디스크에 저장된 데이터를 복원할 수 있다.
상기에서는 본 발명의 바람직한 실시예를 참조하여 설명하였지만, 해당 기술분야의 숙련된 당업자는 하기의 특허 청구 범위에 기재된 본 발명의 사상 및 영역으로부터 벗어나지 않는 범위 내에서 본 발명을 다양하게 수정 및 변경시킬 수 있음을 이해할 수 있을 것이다.