저는 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";;
다음 명령은 디스크에서 바이트 합계를 읽습니다 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)가 파일을 덤프하여 내부 내용을 알아낼 수 있습니다.