'boot sector'에 해당되는 글 2건

  1. 2009.08.04 testdisk - 파티션 복구 프로그램 (2)
  2. 2009.07.06 GRUB for DOS boot code to MBR
2009.08.04 16:53

testdisk - 파티션 복구 프로그램

1. 파티션 문제의 원인

리눅스 부팅용 USB 부팅 디스크를 만들려고 dd.exe (윈도우용)을 실행 했는데 장치 번호를 잘못지정하여 하드디스크의 디스크를 지정하고 말았다. 하드디스크가 윈도의 C:\와는 다른 파티션 이라서 윈도우는 살아 있으나 작업 데이터가 모두 보이지 않았다. 앞이 깜깜... 

http://www.chrysocome.net/dd

E:\boot\dd>dd --list
rawwrite dd for windows version 0.5.
Written by John Newbigin <jn@it.swin.edu.au>
This program is covered by the GPL.  See copying.txt for details
Win32 Available Volume Information   link to \\?\Device\HarddiskVolume1
  fixed media
  Mounted on \\.\c:

\\.\Volume{a45b27ab-b3e4-11dc-9a4b-806d6172696f}\
  link to \\?\Device\HarddiskVolume2
  fixed media
  Mounted on \\.\d:

. . . ( 중략 ) ...

\\.\Volume{0381085c-a4b1-11dd-a013-001d7da1eb3b}\
  link to \\?\Device\Harddisk2\DP(1)0-0+6
  removeable media
  Mounted on \\.\i:

NT Block Device Objects
\\?\Device\CdRom0
  size is 4381736960 bytes

\\?\Device\Harddisk0\Partition0
  link to \\?\Device\Harddisk0\DR0
  Fixed hard disk media. Block size = 512
  size is 500106780160 bytes
\\?\Device\Harddisk0\Partition1
  link to \\?\Device\HarddiskVolume1
\\?\Device\Harddisk0\Partition2
  link to \\?\Device\HarddiskVolume2
\\?\Device\Harddisk0\Partition3
  link to \\?\Device\HarddiskVolume3
\\?\Device\Harddisk0\Partition4
  link to \\?\Device\HarddiskVolume4
\\?\Device\Harddisk1\Partition0
  link to \\?\Device\Harddisk1\DR1
  Fixed hard disk media. Block size = 512
  size is 263208960 bytes
<\\?\Device\Harddisk1\Partition1
  link to \\?\Device\HarddiskVolume5   link to \\?\Device\Harddisk2\DR5
  Removable media other than floppy. Block size = 512
  size is 516423680 bytes
\\?\Device\Harddisk2\Partition1
  link to \\?\Device\Harddisk2\DP(1)0-0+6
  Removable media other than floppy. Block size = 512
  size is 516391424 bytes

Virtual input devices
 /dev/zero   (null data)
 /dev/random (pseudo-random data)
 -           (standard input)

Virtual output devices
 -           (standard output)

E:\boot\dd>dd if=fedora.img of=\\.\d:

-> 이렇게 하면 하드의 D:가 부팅영역이 문제가 생기고 윈도우에서 인식이 되지 않고 포맷하라고 뜬다.

E:\boot\dd>dd if=fedora.img of=\\.\i: -> 이 한글자가 디스크를 못쓰게 만들 수 있음을 심각해야 하는 것을...

이것을 복귀하려고 인터넷을 뒤져 testdisk을 찾아 복구하여 살려 보았다. 이것으로 다시 파티션을 복구 하였다. 리눅스는 fedora의 USB 부팅 만드는 프로그램으로 해결 하였다.

https://fedorahosted.org/liveusb-creator/wiki

이 프로그램은 리눅스 부팅 USB을 만들어 주는 프로그램이다.

 

2. 파티션 분석

TESTDISK - 파티션 복구

파티션 복구를 위한 testdisk는 다음 사이트에서 다운할 수 있다.

http://www.cgsecurity.org

다운로드 : http://www.cgsecurity.org/wiki/TestDisk_Download

이 프로그램은 리눅스 쪽에서 사용되는 것을 PC로 포팅한것으로 보인다. 압축을 풀면 cygwin1.dll가 보이는 것으로 보아... 리눅스에서 개발된 프로그램을 윈도우에서 적용하는 대표적인 것이 cygwin이다. 그렇지만 cygwin을 설치할 필요는 없다.

Step1. testdisk 실행

D:\testdisk\testdisk-6.10\win>testdisk_win

log을 새로 만들었다.

Step2. 하드디스크 결정

복구해야할 하드를 결정한다.

Step3. OS 결정

AMD을 사용하고 있지만 Intel PC로 설정 한다. 이것은 OS을 정하는 것으로 [Intel   ]은 Windows계열을 말하는 것이다.

현재 컴퓨터는 Windows XP prof. SP3 버전이다.

Step4. 문제 파티션을 찾기 위한 파티션 분석-[Analyse] 실행

Step5. 문제 파티션 파악

각 파티션이 표시 되어 있다.

1 : Windows XP가 설치되어 있는 파티션이다. 다행이 이 파티션은 살아 남아 있으므로 현재 컴퓨터에서 작업이 가능 하다.

그러나 이 윈도우 자체가 문제가 생기면 블루 스크린을 뜨면서 윈도우가 멈추었을 것이다. 그러면 DOS로 부팅하거나 다른 컴퓨터에 하드디스크을 연결하여 처리 해야 했을 것이다.

2. E extended LBA : 보통 하드디스크가 Primary 파티션을 4개까지 할수 있지만 보통 windows에서 파티션을 나누면 2번 부터는 extended LBA로 하고 이 밑에서 다시 논리 디스크를 만든다. 이것 역시 이 방식이다. 현재 이 밑에 5,6,7번 파티션 3개 존재 한다.

이중에 5번이 문제가 발생한 파티션이다.

5. L HPFS - NTFS : 이 파티션이 작업용 데이터 저장을 위한 파티션으로 사용하고 있었다. label이 [work]로 되어 있었는데 문제가 발생하여 'Invalid NTFS boot'로 나타난다. boot영역이 문제가 생긴 것이다.

6,7 L HPFS - NTFS : 정상 데이터 영역 파티션

다행히 복구하려는 파티션이 보인다. 이것이 잘못되어 있다면 심층탐색을 선택하여 찾아보야야 할 판인데... dd에서 사용한 fedora.img는 14K 밖에 되지 않아서 boot 영역을 넘어서지 않는 작은 크기 이므로 위와 같은 결과가 나온것으로 보인다.

만약 원래 사용하고 있었는데 파티션 자체가 보이지 않는다면 [Deeper Search]을 동원해야 한다.

[Deeper Search]에 관한 내용은 다음 블로그를 참조할 수 있다.

http://sirjhswin.tistory.com/174

[Analyse] 모드에서 복구를 시도 했으나 실패 했다. 따라서 다음 과정으로 진행 한다.

3. 파티션 복구

다시 testdisk을 실행하여 [Advanced] 메뉴를 사용하여 복구 하였다.

다음 3단계는 위의 분석과정과 같다.

Step1. testdisk 실행

Step2. 하드디스크 결정

Step3. OS 결정

Step4. 복구 방식 결정

복구를 위해 분석 메뉴가 아닌 [Advanced]을 선택한다.

Step5. 복구 파티션 결정

5을 선택하고 아래의 [boot]을 선택 한다. 이미 존재하는 부팅 영역을 복구하는데 사용 한다.

Step6. 복구 메뉴 [boot] 실행

'Boot sector'의 'Status : Bad'가 나타나고 'Backup boot sector'는 아직 살아 있는 OK로 나타났다. 따라서 복구하기 위해 [Backup BS]을 선택 했다. 이것은 backup boot 테이블 데이터를 사용하여 복구는 것을 말한다.

Step7. 복구 메뉴 [boot] 확인

확인 'y'을 누르고 다음을 진행하면

Step8. 복구 확인

'Boot sector'의 'Status : OK'가 나타나고 이제는 윈도우가 이 파티션을 읽을 수 있다.

Step9. 복구 끝

일단은 여기서 'Quit'하고  종료 하였다.

다시 testdisk을 실행하여 [Analyse]을 실행하여 체크 하였다.

5번 [work] 파티션이 복구 되었음을 나타낸다.

윈도우의 도구 중에서 디스크 검사를 했더니 가장 최근의 MTF와는 달라서 몇가지 수정이 되었다.

끝나기 전에 [Repair MFT]을 실행하면 이것은 해결은 되지 않아나 쉽다.

어째든 다시 하드의 파티션 영역이 살아났다. 데이터가 많은데 복구하려면 상당한 노력이 필요 했을 것이다.


출처 : http://blog.naver.com/dolicom


Trackback 0 Comment 2
  1. Favicon of http://www.cyworld.com/enoch24 inook Yoo 2009.09.08 21:41 address edit & del reply

    완전 훌륭한 자료 감사합니다 덕분에 살았네요

  2. 박주찬 2012.02.05 22:37 address edit & del reply

    역시 여기 블로그가 최고네요 ㅎㅎ 이거 오류 다른데에서는 제대로 됀 자료 못찾았썻는데
    여기와서 오류해결했네요 .. ㅎ 감사합니다 ~ 앞으로 많이 들릴게요

2009.07.06 15:41

GRUB for DOS boot code to MBR

Installation

There are many ways to install GRUB for DOS. Some of them require modifying MBR or partition boot sector, while others require changing system startup configuration files.

Install GRUB for DOS boot code to MBR

You can use bootlace.com or grubinst.exe to install GRUB for DOS boot code to MBR:

bootlace.com can be used in DOS, Windows 95/98/Me and Linux. Examples:

Install GRUB for DOS boot code to the MBR of first hard drive under DOS, Windows 95/98/Me:

   bootlace 0x80

Install GRUB for DOS boot code to the MBR of IDE channel 0, primary drive under Linux:

   bootlace /dev/hda

Install GRUB for DOS boot code to the MBR of hard drive image file aa.dsk:

   bootlace aa.dsk

grubinst.exe can be used in Linux, FreeBSD and Windows NT family OSs (Windows NT/2000/XP/2003/Vista). Examples:

Install GRUB for DOS boot code to the MBR of first hard drive under Windows NT family OSs:

   grubinst (hd0)

Install GRUB for DOS boot code to the MBR of IDE channel 0, primary drive under Linux/FreeBSD:

   grubinst "(hd0)"

You can also use device names:

   grubinst /dev/hda  (Linux)
   grubinst /dev/ad0  (FreeBSD)

Install GRUB for DOS boot code to the MBR of hard drive image file aa.dsk:

   grubinst aa.dsk

There are many options you can use with bootlace and grubinst, use the -h option to display help message.

After installing the boot code, you need to copy grldr and menu.lst to the root directory of any FAT16/FAT32/NTFS/EXT2 partition.

Install GRUB for DOS boot code to partition boot sector

You can use grubinst to install GRUB for DOS boot code to partition boot sector. Examples:

Install GRUB for DOS boot code to the first primary partition of the first hard drive:

   grubinst (hd0,0)

or

   grubinst --install-partition=0 (hd0)

or

   grubinst -p=0 (hd0)

Install GRUB for DOS boot code to the first primary partition of the hard drive image file aa.dsk:

   grubinst --install-partition=0 aa.dsk

or

   grubinst -p=0 aa.dsk

Just as in GRUB, extended partition starts with (hd0,4).

After installing the boot code, you need to copy grldr and menu.lst to the partition which you install the boot code on.

Starting GRUB for DOS from DOS

You can use load GRUB for DOS in config.sys using one of the following lines:

   DEVICE=GRUB.EXE
   INSTALL=GRUB.EXE
   SHELL=GRUB.EXE

grub.exe can also be launched from DOS prompt or batch file such as AUTOEXEC.BAT.

Starting GRUB for DOS from Linux

First, you need to apply the kexec patch to the Linux kernel.

Then, you can use the following commands to launch GRUB for DOS from linux:

   kexec -l grub.exe
   kexec -e

Booting GRUB for DOS via the Windows NT/2000/XP/2003 boot manager

Add the following line at the end of boot.ini (this file is hidden):

   C:\grldr="Start GRUB4DOS"

Then copy grldr to C:\, and create the GRUB4DOS configuration file at C:\menu.lst.

Next time you start windows, there is a new option "Start GRUB4DOS" which can be used to start GRUB for DOS.

Booting GRUB for DOS via the Windows Vista boot manager

Use bcdedit to configure the startup menu:

   bcdedit /create /d "Start GRUB4DOS" /application bootsector
   bcdedit /set {id} device boot
   bcdedit /set {id} path \grldr.mbr
   bcdedit /displayorder {id} /addlast

Then copy grldr.mbr to C:\, grldr and menu.lst to the root directory of any FAT16/FAT32/NTFS/EXT2 partition.

Note: previous version of grldr.mbr can also be used in boot.ini of Windows NT/2000/XP/2003. But it doesn't work anymore with the latest version.

Loading GRUB for DOS using other boot loader

grub.exe can be loaded as a linux kernel.

Load GRUB for DOS using GRUB or another copy of GRUB for DOS, add the following section to menu.lst:

   title Load GRUB4DOS
   kernel /grub.exe

Load GRUB for DOS using syslinux, add the following section to syslinux.cfg:

   label GRUB4DOS
           KERNEL grub.exe

Booting DOS/Windows 9X/Windows NT startup files

In GRUB for DOS, you can load the DOS/Windows 9X/Windows NT startup files directly.

DOS, Windows 95/98/Me:

   title Load io.sys
   root (hd0,0)
   chainloader (hd0,0)/io.sys

Windows NT/2000/XP/2003:

   title Load ntldr
   root (hd0,0)
   chainloader (hd0,0)/ntldr

Windows Vista:

   title Load bootmgr
   root (hd0,0)
   chainloader (hd0,0)/bootmgr


Disk emulation

In GRUB for DOS, disk emulation is implemented using the "map" command.

Direct mapping

Here is an example of mapping a image file as virtual floppy, and boot from it:

   title Boot from floppy image
   map (hd0,0)/aa.img (fd0)
   map --hook
   chainloader (fd0)+1
   rootnoverify (fd0)

map --hook is used to make the mapping created by first map command take effect immediately.

Here is an example of booting from the virtual hard disk:

   title Boot from hard disk image
   map (hd0,0)/aa.dsk (hd0)
   map (hd0) (hd1)
   map --hook
   chainloader (hd0,0)+1
   rootnoverify (hd0,0)

Map the image file as virtual hard disk, but boot from the original disk:

   title Create virtual hard disk
   map (hd0,0)/aa.dsk (hd1)
   map --hook
   chainloader (hd0,0)+1
   rootnoverify (hd0,0)

CDROM emulation is not implemented.

In direct mapping, the image file must be contiguous.

The virtual disk is implemented using INT 13. Therefore, it can be accessed in system that still uses INT 13, such as all kinds of DOS and Windows 9X (compatible mode disk access), and it can't be accessed in system that usesprotected mode drivers, such as Linux, FreeBSD and Windows NT family OSs.

Indirect mapping

Indirect mapping is very similar to direct mapping, here is an example:

   title Boot from floppy image
   map --mem (hd0,0)/aa.img (fd0)
   map --hook
   chainloader (fd0)+1
   rootnoverify (fd0)

The --mem option indicates indirect mapping.

In indirect mapping, the image file is copy to memory before the mapping is applies, therefore, the image file need not to be contiguous, however, you must have enough memory to hole the image file.

Auto MBR creation

To create virtual hard disk, you need an image file that resemble a real hard disk, which consist of MBR and partition data. If the image file only contains partition data, you need to patch it with MBR to create disk image. GRUB for DOS has taken this into consideration. When mapping disk image file, it will test the presence of MBR, if not found, it will create MBR automatically using the partition data. For example:

   title Boot from hard disk image
   map --mem (hd0,0)/aa.dsk (hd0)
   map (hd0) (hd1)
   map --hook
   chainloader (hd0,0)+1
   rootnoverify (hd0,0)

aa.dsk can be either disk image or partition image, in the later case, GRUB for DOS will create the MBR in the air.

memdisk

The indirect mapping of GRUB for DOS is similar to the function of external tool memdisk from syslinux. In fact, the following two menu entries do roughly the same thing:

   title Boot from virtual disk using internal map command
   map --mem (hd0,0)/aa.dsk (hd0)
   map (hd0) (hd1)
   map --hook
   chainloader (hd0,0)+1
   rootnoverify (hd0,0)
   title Boot from virtual disk using external memdisk
   kernel (hd0,0)/memdisk
   initrd (hd0,0)/aa.dsk

However, memdisk does not support direct mapping or auto MBR creation.


CDROM related subjects

Using ATAPI CDROM in GRUB for DOS

Use the following command to initialize ATAPI CDROM:

   cdrom --init

Then, use the following command to start using ATATPI CDROM:

   map --hook

After map --hook, the CDROM device can be accessed using (cd0), (cd1), etc.

(Note, if you need to use more than one map --hook, perhaps because you are also mapping disk images to memory, then the second and subsequent hook commands need to be map --rehook)

To boot from the first CDROM, use the following commands:

   chainloader (cd0)
   boot

To stop using CDROM:

   map --unhook
   cdrom --stop

The first command removes the (cdN) device mapping, while the second one stops the CDROM driver.

Note: If you boot GRUB for DOS from CDROM, the booting device will be (cd). This device is always accessible. However, if you want to access file from other CDROMs, you still need to initialize them using the above commands.

Examples:

To boot from the first CDROM:

   title Boot From First CDROM
   cdrom --init
   map --hook
   chainloader (cd0)
   boot

Create a bootable CDROM

In GRUB for DOS, you can use grldr to create bootable CDROM:

   mkisofs -R -b grldr -no-emul-boot -boot-load-seg 0x1000 -o bootable.iso iso_root
   mkisofs -R -b grldr -no-emul-boot -boot-load-size 4 -o grldr.iso iso_root

grldr and menu.lst should be placed at the root directory of CDROM image.

The above two commands can both create a bootable CDROM, but they are not totally the same.

The first one tells BIOS to load the whole grldr. However, some buggy BIOS might ignore it and load only a portion of the file, typically one sector (2048 bytes). This will cause the program to fail.

The second one tells BIOS to load only the first sector (2048 bytes), and the program loads the rest from CDROM. This method is safer, it should work for most BIOS.

Note: you can optionally use the -boot-info-table option, but the info table will be ignored by the program.

Load GRUB for DOS from BCDW

To load GRUB for DOS from BCDW, first copy grldr and menu.lst to the root directory of CDROM image, then add a new line to the [MenuItems] section of BCDW configuration file bcdw.ini:

   \grldr   ; Grub4Dos

Trackback 1 Comment 0