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


17

Squeeze 업그레이드의 일환으로 grub2로 업그레이드 된 데비안 / 스퀴즈 시스템 (최소한 Woody로 돌아가는 히스토리가 있음)을 사용하고 있습니다. 모두 잘 작동하지만 디스크 구성을 망칠 것입니다.

현재 머신은 RAID1-ed /, / home 및 / boot 파티션이있는 2 개의 80GB 드라이브를 실행합니다 (RAID1이있는 "/ data"및 스왑이있는 다른 드라이브 쌍이 있습니다. ,하지만 나는 그것들을 만지지 않습니다.)

130GB SSD 2 개를 추가하고 80GB 드라이브의 파티션 크기 이상으로 파티션을 나누고 RAID1을 포함하도록 확장하고 동기화를 기다린 다음 기존 드라이브를 제거하여 새 SSD 드라이브로 전환하려고합니다. SSD 만 남은 다음 파일 시스템을 확장합니다. 그러나 mdadm / ext3 wrangling 은이 질문에 관한 것이 아닙니다 ...

그것은 기계에서 제거하고 싶은 오래된 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는 몇 년 전부터 유물처럼 보였습니다. device.map은 grub-mkdevicemap의 업데이트에서 합리적으로 보였습니다.이 영역의 편집증은 오래된 mobo의 BIOS에서 비롯된 것이라고 생각합니다 변덕스러운 GRUB에서 본 장치 순서를 다시 정렬하십시오).

결과 : 모든 것이 순조로워졌으며 이제 두 개의 오래된 80GB IDE 드라이브를 즉시 사용할 수 있으며 모든 파일 시스템의 크기가 새로운 파티션 크기로 조정 된 RAID1 SSD에서 실행되는 빠르고 빠른 부팅 시스템이 있습니다. 내가 찾던 다른 "그럽 퍼즐 누락" dpkg-reconfigure grub-pc은 어느 디스크가 MBR을 유지할 것인지 묻는 프롬프트 였습니다 . 아론의 대답은 실제로 이것이 예상대로 작동하고 있음을 확신시켜주었습니다.

답변:


17

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루프 또는 더 많은 드라이브를 가로 지르는 무언가로 랩핑 할 수 있습니다 . 수동으로 원하지 않는 경우


4
GRUB의 위치가 버전마다 다를 수 있기 때문에 약간만 추가하면 dd if=/dev/sda bs=1 count=512 | grep -aob GRUB됩니다. 부팅 섹터 내에서 마커의 위치를 ​​반환합니다.
Alessandro Santini

16

부팅 과정에는 몇 가지 단계가 있습니다 (전통적인 PC BIOS를 설명합니다).

  1. BIOS는 부팅 디스크의 첫 번째 섹터 (512 바이트)를 읽습니다.
  2. 이 첫 번째 섹터의 코드는 BIOS 인터페이스를 통해 고정 된 위치에서 추가 데이터와 코드를 읽습니다. 이 BIOS 인터페이스는 두 개의 하드 디스크 만 노출합니다. 디스크 0은 첫 번째 섹터를 읽은 곳이며 디스크 1은 두 개 이상의 디스크가 있으면 쉽게 예측할 수없는 다른 디스크입니다. 부팅 섹터에는 추가 데이터가있는 하드 디스크를 나타내는 바이트가 포함됩니다. 이 포함 된 디스크입니다 /boot/grub.
  3. 이전 단계에서로드 된 코드는 파티션, 파일 시스템 및 기타 고급 개념을 이해합니다. 데이터에는 Grub 모듈 (hd0)/boot/grub을 찾을 위치 grub.cfg와 추가 위치를 결정 하는 파일 시스템 위치 (예 : 문자열 )가 포함됩니다 .
  4. grub.cfg 일반적으로 메뉴를 표시하고 OS를 부팅하기 위해 실행됩니다.

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

어려운 부분은 위의 2 단계입니다. 가능하면 Grub (즉, /boot/grub디렉토리)을 BIOS 부팅 디스크에 넣거나 다른 방향에서이 디스크에 접근하면 BIOS가 디스크가있는 곳에서 부팅하도록 지시하십시오 /boot/grub. 여기가 시작 device.map됩니다. (hd0)이 포함 된 디스크에 매핑되어 있는지 확인한 /boot/grub다음 grub-install해당 디스크에서 실행하십시오 .

두 디스크가 소프트웨어 RAID-1 구성에있는 경우 동일한 부트 섹터가 있습니다. 이것은 바람직한 동작입니다. BIOS 부트 디스크 인 하나의 디스크에 장애가 발생하면 다른 디스크에서 부팅하면 작동합니다 (동일한 관련 위치에 동일한 바이트가 포함되어 있기 때문에). 특정 파티션 만 미러링 한 경우 부트 섹터를 설치하면 디스크 중 하나에 만 영향을줍니다. 의 두 번째 미러링 된 복사본이 포함 된 디스크와 연결 되도록 grub-install변경 한 후 두 번째 디스크에서 다시 실행해야합니다 .device.map(hd0)/boot/grub

3 단계는 매우 복잡하지만 일반적으로 즉시 작동합니다. 4 단계에서 Grub은 UUID로 파일 시스템을 찾거나 명명 된 파일을 찾습니다. 따라서 더 이상 디스크를 지정하는 다양한 방법에 대해 걱정할 필요가 없습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.