dd를 사용하여 Grub 설치를 복원할 수 있나요?

dd를 사용하여 Grub 설치를 복원할 수 있나요?

다음과 같은 파티션 레이아웃을 갖춘 이중 부팅 시스템이 있습니다.

# fdisk -l
Disk /dev/sda: 596.2 GiB, 640135028736 bytes, 1250263728 sectors
Disk model: SAMSUNG HM640JJ 
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x08c427b9

Device     Boot      Start        End   Sectors   Size Id Type
/dev/sda1            80325   30800324  30720000  14.7G  7 HPFS/NTFS/exFAT
/dev/sda2         30800325  440400559 409600235 195.3G  7 HPFS/NTFS/exFAT
/dev/sda3        440403966 1132820479 692416514 330.2G  f W95 Ext'd (LBA)
/dev/sda4  *    1132820480 1250263039 117442560    56G 83 Linux
/dev/sda5        440403968 1116043263 675639296 322.2G  7 HPFS/NTFS/exFAT
/dev/sda6       1116045312 1132820479  16775168     8G 82 Linux swap / Solaris

Partition table entries are not in disk order.

이는 partedMBR을 기반으로 합니다 gdisk. Linux를 설치한 후 Windows로 부팅한 적이 없으며 dd라이브 Linux 이미지에서 부팅할 때 Linux의 전체 60G 파티션과 HDD의 처음 63개 섹터를 외장 HDD에 주기적으로 백업했습니다.

dd if=/dev/sda4 of=linux.img bs=4096 conv=fdatasync
dd if=/dev/sda of=boot.img bs=512 count=63 conv=fdatasync

내 Linux가 (처음으로) 충돌한 후 위의 역방향 부팅을 사용하여 복구를 시도했습니다.

dd if=linux.img of=/dev/sda4 bs=4096 conv=fdatasync
dd if=boot.img of=/dev/sda bs=512 conv=fdatasync

dd오류가 보고되지 않았으며 Linux 파티션이 예상대로 복원되었습니다. 하지만 부팅할 수 없습니다(Grub에 문제가 있어서 시스템이 계속 재부팅되고 커서가 깜박인 다음 갑자기 계속해서 재부팅됩니다). 마지막으로 라이브를 사용 chroot하고 다시 시작하십시오 grub-install. 그 후 다시 정상적으로 부팅할 수 있었습니다.

Grub이 이를 핵심 이미지로 사용하기 때문에 처음 63개 섹터를 백업했습니다(제 기억이 정확하다면). 부팅 후 가장 먼저 하는 일은 newboot.img 파일로 덤프한 후 다음을 수행하는 것입니다.

 diff boot.img newboot.img

아무것도 반환되지 않습니다. 즉, grub을 다시 설치한 후에도 영역이 동일하다는 의미입니다.

  • 이 경우 시작할 수 없는 근본 원인은 무엇입니까?
  • 백업을 어떻게 해야 합니까(제3자 방지)?

내가 아는 한 파티션 변경이나 UUID는 없습니다. 두 이미지가 함께 생성됩니다. 그럽 코드가 섹터 63 이후 어딘가에서 계속될 수 있습니까? 어디서, 얼마나 걸릴까요?

감사해요.

답변1

dd if=/dev/sda of=boot.img bs=512 count=63 conv=fdatasync

마스터 부트 레코드와 기타 62개 섹터(31.5KB)를 백업하려고 합니다. 그러나 MBR 다음 디스크의 첫 번째 트랙에 포함된 GRUB2 부분은 이보다 쉽게 ​​클 수 있습니다.

예, 치수를 확인하신 /boot/grub/i386-pc/core.img후 그보다 작을 수도 있습니다. 하지만 이것이 core.imgMBR과 첫 번째 파티션의 시작 부분 사이에 공간을 삽입하는 것의 전부는 아닙니다. 적어도 최신 GRUB2에는 일부 GRUB 모듈도 포함되어 있습니다.

  • fshelp.mod, 다양한 파일 시스템을 위한 공통 지원 모듈
  • part_msdos.mod,MBR 파티션 테이블 지원
  • Linux 디렉터리를 포함하는 파일 시스템 과 일치하는 파일 시스템 지원 모듈입니다 /boot.

core.img내 시스템에서 /boot파일 시스템이 ext2/3/4(즉, 지원되는 파일 시스템이 매우 작음)라고 가정하면 이러한 최소 모듈의 전체 크기는 ext2.mod36KB를 넘습니다. Linux 배포판은 더 많은 기능을 제공하기 위해 더 많은 모듈을 포함하도록 선택할 수 있습니다. 위에 나열된 모듈은 매우 간단한 모듈 세트입니다.

이러한 모듈은 LZMA 알고리즘을 사용하여 압축하여 전체 크기를 줄일 수 있지만 최신 GRUB2는 Reed-Solomon 오류 수정 코드를 사용하여 비트 오류로부터 임베디드 코드를 보호하여 크기를 다시 늘립니다.

저는 다양한 부트로더를 감지하고 진단/법의학 목적으로 해당 하위 수준 구성을 읽는 프로그램을 개발하려고 노력해 왔습니다. 기본적으로 다음 기능을 복제한 것으로 나타났습니다.bootinfoscript(약간의 차이점이 있습니다). 그러나 디스크의 구조를 올바르게 읽으면 시스템에 포함된 GRUB2 코드의 전체 크기는 102섹터, 즉 51KB입니다.

관련 정보