내 MBR 코드에 어떤 절차가 있는지 확인

내 MBR 코드에 어떤 절차가 있는지 확인

저는 Macbook Pro에서 파티셔닝/이중 부팅을 많이 합니다. 이제 Mac OS X와 ​​Ubuntu 12.04가 설치되어 있고 Grub이 Ubuntu 파티션에 설치되어 있습니다.

알고 싶습니다. 내 MBR의 코드(처음 446바이트)는 무엇입니까? Mac은 EFI 및 GUID 파티션을 사용하므로 MBR은 단지 보호/하이브리드 MBR입니다(제 경우에는 하이브리드 MBR이었습니다).

Q: MBR에서 프로그램을 식별하는 방법(16진수 덤프 기준)? 어떤 종류의 서명이 있습니까?똥인거 같은데하지만 내가 하나 만들었어16진수 덤프내가 찾은 코드와 일치하지 않습니다.이 기사Grub MBR("1단계") 코드가 자세히 설명되어 있습니다.

편집: 저는 EFI 부팅 관리자 프로그램인 rEFInd를 실행하고 있습니다. 이는 EFI 응용 프로그램이므로 내 EFI 시스템 파티션에 있습니다. 프로그램은 시작 후 즉시 실행되지만 MBR의 446바이트에 코드를 배치하지 않는 것 같습니다.

EDIT2: 듀얼 부팅을 위해 Windows도 설치했다는 점을 추가해야 합니다.

답변1

답을 찾은 것 같습니다. Windows 시작 코드라고 생각합니다. hexdump( "Invalid partition table.Error loading operating system.Missing operating system.")에서 읽을 수 있는 ASCII를 기반으로 Google 검색을 수행하고 Windows 부트로더를 논의하는 사이트를 찾을 수 있었습니다. 내 16진수 덤프가 Windows 7 부트로더와 일치합니다. 자세한 내용은 참조하세요.http://thestarman.pcministry.com/asm/mbr/W7MBR.htm#CODE. 과거에 내 컴퓨터에 Windows 7을 설치했기 때문에 이는 의미가 있습니다.

답변2

ms-sys실용적인 사항다양한 MBR 및 PBR 부팅 코드 변형을 인식할 수 있을 뿐만 아니라 필요에 따라 작성할 수도 있습니다.

Usage:
        ms-sys [options] [device]
Options:
    -1, --fat12     Write a FAT12 floppy boot record to device
    -2, --fat32nt5  Write a FAT32 partition NT5.0 boot record to device
    -8, --fat32nt6  Write a FAT32 partition NT6.0 boot record to device
    -x, --exfatnt6  Write a EXFAT partition NT6.0 boot record to device
    -e, --fat32pe   Write a FAT32 partition PE boot record to device
    -3, --fat32     Write a FAT32 partition DOS boot record to device
    -4, --fat32free Write a FAT32 partition FreeDOS boot record to device
    -5, --fat16free Write a FAT16 partition FreeDOS boot record to device
    -6, --fat16     Write a FAT16 partition DOS boot record to device
    -n, --ntfs      Write a NTFS partition Windows 7 boot record to device
    -o, --fat16ros  Write a FAT16 partition ReactOS boot record to device
    -c, --fat32ros  Write a FAT32 partition ReactOS boot record to device
    -q, --fat32kos  Write a FAT32 partition KolibriOS boot record to device
    -l, --wipelabel Reset partition disk label in boot record
    -p, --partition Write partition info (hidden sectors, heads and drive id)
                    to boot record
    -H, --heads <n> Manually set number of heads if partition info is written
    -B, --bps <n>   Manually set number of bytes per sector (default 512)
    -O, --writeoem <s>   Write OEM ID string <s> to file system
    -S, --writewds <x>   Write Windows Disk Signature hexadecimal <x> to MBR
    -7, --mbr7      Write a Windows 7 MBR to device
    -i, --mbrvista  Write a Windows Vista MBR to device
    -m, --mbr       Write a Windows 2000/XP/2003 MBR to device
    -9, --mbr95b    Write a Windows 95B/98/98SE/ME MBR to device
    -d, --mbrdos    Write a DOS/Windows NT MBR to device
    -s, --mbrsyslinux    Write a Syslinux MBR to device
    -t, --mbrgptsyslinux Write a Syslinux GPT MBR to device
    -a, --mbrreactos     Write a ReactOS MBR to device
    -k, --mbrkolibrios   Write a KolibriOS MBR to device
    -r, --mbrrufus  Write a Rufus MBR to device
    -g, --mbrgrub4dos    Write a Grub4Dos MBR to device
    -b, --mbrgrub2  Write a Grub 2 MBR to device
    -z, --mbrzero   Write an empty (zeroed) MBR to device
    -f, --force     Force writing of boot record
    -h, --help      Display this help and exit
    -v, --version   Show program version
    -w, --write     Write automatically selected boot record to device

    Default         Inspect current boot record

Warning: Writing the wrong kind of boot record to a device might
destroy partition information or file system!

확인 모드의 사용 예(순수 UEFI 시스템의 일반적인 결과):

# ms-sys /dev/sda                # MBR of an UEFI-bootable disk
/dev/sda has an x86 boot sector,
it is a zeroed non-bootable master boot record, like the one this
program creates with the switch -z on a hard disk device.

# ms-sys /dev/sda1              # PBR of an UEFI ESP
/dev/sda1 has a FAT32 file system.
/dev/sda1 has an x86 boot sector,
it is an unknown boot record
The OEM ID is mkfs.fat

답변3

MBR 기술에 대해 배우는 또 다른 방법은 다음과 같습니다.정보 스크립트 시작원래 게시 날짜소스 단조.

바이트를 사용하여 MBR 코드를 식별 0x80할 수 있는 것 같습니다 .0x81

  case ${Bytes80_to_81} in
    0069) BST='ISOhybrid (Syslinux 3.72-3.73)';;
    010f) BST='HP Recovery';;
    019d) BST='BSD4.4: FAT32';;
    0211) BST='Dell Utility: FAT16';;
    0488) BST="Grub2's core.img";;

시작 메시지 스크립트 #L2595

다음 명령은 디스크에서 바이트 합계를 읽습니다 0x80.0x81

sudo hexdump -v -s 0x80 -n 2 -e '2/1 "%x" "\n"' /dev/sdXY
#   hexdump - ASCII, decimal, hexadecimal, octal dump
#       -v               => Cause hexdump to display all input data.
#       -s offset        => Skip offset bytes from the beginning of the input.
#       -n length        => Interpret only length bytes of input.
#       -e format_string => Specify a format string to be used for displaying data:
#           2/1  => number of bytes substited by %x / iteration count for the whole format string.
#           "%x" => Will be substituted with bytes, number of bytes is specified by first number, here 2.
#           \n   => Append line break
#       /dev/sdXY        => Input file.

출처 및 사례 시트독일 우분투 사용자 위키.

답변4

디스크/파티션의 처음 몇 KiB를 파일에 복사한 다음 strings(1) 또는 objdump(1)가 파일을 덤프하여 내부 내용을 알아낼 수 있습니다.

관련 정보