grub2가 실제로 MBR이 설치된 드라이브를 확인하는 방법은 무엇입니까?

grub2가 실제로 MBR이 설치된 드라이브를 확인하는 방법은 무엇입니까?

저는 Squeeze 업그레이드의 일부로 grub2로 업그레이드된 Debian/Squeeze 시스템(최소한 Woody까지 거슬러 올라감)을 사용하고 있습니다. 모든 것이 잘 작동하지만 디스크 구성이 엉망이 될 것입니다.

현재 시스템은 RAID1이 적용된 /, /home 및 /boot 파티션이 있는 2개의 80GB 드라이브를 실행하고 있습니다. 스왑에 대해 궁금한 사람이 있을 경우를 대비해 RAID1이 적용된 "/data"가 있는 드라이브 쌍과 두 개의 스왑 영역도 있습니다. 영역), 그러나 나는 그것들을 건드리지 않을 것입니다).

2개의 130GB SSD를 추가하고 최소한 80GB 드라이브의 파티션만큼 크게 파티셔닝한 다음 RAID1을 포함하도록 RAID1을 늘리고 동기화를 기다린 다음 삭제하여 어레이의 새 SSD 드라이브로 전환할 계획입니다. 따라서 SSD만 남게 됩니다(그러면 파일 시스템이 커집니다). 하지만 mdadm/ext3 논쟁은 이 질문의 요점이 아닙니다...

이로 인해 컴퓨터에서 제거하고 싶은 오래된 80GB(IDE) 드라이브 2개가 남게 되었습니다. 삭제하면 중요한 MBR이 사라질까 봐 걱정됩니다. 내 컴퓨터가 계속 부팅 가능한 상태인지 어떻게 확인하나요?

뿐만 아니라:

  • Squeeze 업그레이드를 수행했을 때 grub2를 어떤 드라이브에 설치해야 하는지에 대한 몇 가지 선택 사항이 있었던 것을 기억합니다(기본값은 모든 드라이브를 선택했습니다). 그러나 당시에는 시스템에 SSD가 없었습니다. SSD MBR에 grub을 설치하기 위해 이 명령을 다시 실행하는 방법은 무엇입니까? (이것은 일부 패키지의 dpkg 재구성인 것 같습니다).

  • grub2가 어떤 드라이브에 설치되어 있다고 생각하는지 어떻게 알 수 있나요? 맙소사, 요즘 /boot/grub/ 아래에는 거의 200개의 파일이 있습니다! 어디서 볼 수 있나요? 또한 /boot/grub/device.map.auto에는 현재 3개의 드라이브(80GB 중 2개, 다른 드라이브 쌍 중 하나만 나열되고 SSD는 없음)만 나열되는데, 이는 약간 이상해 보입니다. 최신 정보는 어떻게 얻을 수 있나요? (고쳐 쓰다:그것은 붉은 청어입니다. device.map.auto는 몇 년 전의 유물인 것 같습니다. grub-mkdevicemap 업데이트에서는 device.map이 합리적으로 보입니다. 내 생각에 이 부분에 대한 편집증은 GRUB에서 볼 수 있는 장치의 순서를 마음대로 바꾸는 오래된 마더보드의 BIOS에서 비롯된 것 같습니다.

결과:모든 것이 순조롭게 진행되었으며 이제 두 개의 기존 80GB IDE 드라이브가 즉시 작동하고 RAID1 SSD에서 실행되는 빠른 부팅 시스템이 있으며 모든 파일 시스템의 크기가 새 파티션 크기로 조정되었습니다. 내가 찾고 있는 또 다른 "Grub 퍼즐의 누락된 조각"은 dpkg-reconfigure grub-pcMBR 유지 관리가 필요한 디스크에 대한 힌트입니다. Aaron의 답변은 실제로 이것이 예상대로 작동하고 있다는 것을 가장 확신시켜 주었으므로 이 답변을 수락했습니다.

답변1

MBR은 512바이트이므로 GRUB이 있는지 빠르게 확인할 수 있습니다.

dd if=/dev/sda bs=512 count=1 | xxd

그러면 MBR이 덤프되고 바이트 0x17F = 383에 "GRUB"이 표시됩니다.

dd if=/dev/sda bs=1 count=4 skip=383

이렇게 하면 " GRUB"가 인쇄된 다음 dd출력이 인쇄됩니다.

더 많은 드라이브를 확장하기 위해 bash 루프 또는 다른 것으로 래핑할 수 있습니다 for. 이 작업을 수동으로 수행하고 싶지 않은 경우.

편집: 종료10년 후, 방금 이 항목이 다시 투표되었다는 알림을 받았습니다. 엄청난! 하지만 나는솔직히 모르겠어요GRUB는 최신 GPT 파티션 드라이브의 "보호 MBR"에 자체적으로 설치되므로 이 답변만 고려하십시오.잠재적인보다 현대적인 UEFI 부팅 방법입니다.

답변2

부팅 프로세스에는 여러 단계가 있습니다(기존 PC BIOS를 설명합니다).

  1. BIOS는 부팅 디스크의 첫 번째 섹터(512바이트)를 읽습니다.
  2. 첫 번째 섹터의 코드는 BIOS 인터페이스를 통해 고정된 위치에서 더 많은 데이터와 코드를 읽습니다. 이 BIOS 인터페이스는 두 개의 하드 드라이브만 표시합니다. 디스크 0은 첫 번째 섹터를 읽는 곳이고 디스크 1은 2개 이상 있을 경우 예측하기 어려운 또 다른 디스크입니다. 부트 섹터에는 추가 데이터가 있는 하드 디스크를 나타내는 바이트가 포함되어 있습니다 /boot/grub.
  3. 이전 단계에서 로드된 코드는 파티션, 파일 시스템 및 기타 고급 개념을 이해합니다. 이 데이터에는 (hd0)/boot/grub찾을 위치 grub.cfg와 기타 Grub 모듈을 결정하는 데 사용되는 파일 시스템 위치(즉, 유사한 문자열)가 포함됩니다 .
  4. grub.cfg일반적으로 메뉴를 표시하고 운영 체제를 시작하기 위해 실행됩니다.

부트 섹터는 grub-setup일반적으로 호출을 통해 생성됩니다 grub-install. 부트 섹터는 grub-install또는 명령줄(Linux 구문에서) grub-setup에 지정한 디스크 에서 끝납니다. 를 실행하여 디스크에 부트 섹터가 있는지 확인할 수 있습니다 file -s /dev/sda. 새 디스크를 추가하고 해당 디스크에서 부팅하려고 하므로 grub-install새 디스크에서 실행해야 합니다. grub-install동일한 디스크에서 여러 번 실행해도 아무런 해가 없습니다.

어려운 부분은 위의 2단계입니다. 가능하다면 BIOS 부팅 디스크에 Grub(예: 디렉터리 /boot/grub)을 넣으십시오(또는 다른 방향에서 접근하려면 BIOS에 동일한 디스크에서 부팅하도록 지시하십시오 /boot/grub). 이것이 device.map작용하는 곳 입니다 . (hd0)포함된 디스크를 매핑 했는지 확인한 /boot/grub다음 grub-install해당 디스크에서 실행하세요.

소프트웨어 RAID-1 구성에 두 디스크가 모두 있는 경우 동일한 부팅 섹터를 갖게 됩니다. 이는 이상적인 동작입니다. BIOS 부팅 디스크인 한 디스크에 오류가 발생하면 다른 디스크에서 부팅해도 문제가 없습니다(동일한 상대 위치에 동일한 바이트가 포함되어 있기 때문입니다). 일부 파티션만 미러링한 경우 부트 섹터를 설치하면 디스크 중 하나에만 영향을 미칩니다. 두 번째 미러 복사본이 포함된 디스크와 연결되도록 변경한 후 grub-install두 번째 디스크에서 다시 실행해야 합니다.device.map(hd0)/boot/grub

3단계는 상당히 복잡하지만 일반적으로 즉시 실행됩니다. 4단계에서 Grub은 UUID로 파일 시스템을 찾거나 이름이 지정된 파일을 찾으므로 더 이상 디스크를 지정하는 다양한 방법에 대해 걱정할 필요가 없습니다.

관련 정보