데이터 저장소에만 사용하는 하드 드라이브에는 여전히 과거 우분투 설치의 GRUB이 있습니다.
드라이브의 나머지 데이터를 손상시키지 않고 GRUB을 GRUB에서 어떻게 제거 할 수 있습니까?
배경
때때로 부팅 순서가 다양한 컴퓨터간에 데이터 드라이브를 이동하기 때문에 각 컴퓨터의 BIOS 설정에서 데이터를 수용하지 않으려면 부팅 할 수 없도록하고 싶습니다 .
데이터 드라이브 만 연결된 상태에서 컴퓨터의 전원을 켜면 다음이 나타납니다.
error: no such device: fdf38dd4-9e9d-479d-b830-2a6989958503.
grub rescue>
이전 백업에서 /etc/fstab
이것이 최근에 다시 포맷하고 더 이상 존재하지 않는 루트 파티션의 UUID 임을 확인할 수 있습니다 . 다음은 데이터 드라이브의 파티션 테이블 과 원시 마스터 부트 레코드 입니다.
기본 질문에 대답하지 않는 해결 방법에는 관심이 없습니다. 이 문제를 해결하는 몇 가지 방법을 생각할 수 있지만 직접 해결하는 방법을 모른다는 원칙에 귀찮게합니다. 모든 설치 절차에는 해당 제거 절차가 있어야합니다.
답변
디스크의 처음 몇 바이트를 0x00으로 만들어 장치를 부팅 할 수 없게 만들 수 있습니다.
일반적으로 (그리고 이것은 grub, grub2 및 ntldr iirc 모두에 해당합니다) 드라이브의 첫 번째 바이트는 x86 jmp 명령이됩니다. 부트 스트랩을 위해 장치에 실행을 전달할 때 단순히 장치 정보를 코드로 빨아들이도록 CPU를 설정하기 때문에 디스크 레이블 이전에도 발생합니다. 유효하지 않은 코드가 있으면 인터럽트를 트리거하고 BIOS가 예외를 처리하고 다음 부팅 장치로갑니다.
예를 들어, 디스크의 시작은 다음과 같이 시작합니다.
00000000 eb 63 90 d0 bc 00 7c fb 50 07 50 1f fc be 1b 7c |.c....|.P.P....||
첫 번째 부분은 eb 63
현재 IP에서 0x63으로 오프셋 이동 (0x65)입니다.
00000060 00 00 00 00 ff fa 90 90 f6 c2 80 74 05 f6 c2 70 |...........t...p|
00000070 74 02 b2 80 ea 79 7c 00 00 31 c0 8e d8 8e d0 bc |t....y|..1......|
여기서부터 실행이 계속됩니다.
섹터의 끝은 다음과 같습니다.
000001b0 cd 10 ac 3c 00 75 f4 c3 ed db 96 d6 00 00 80 01 |...<.u..........|
000001c0 01 00 83 fe ff ff 3f 00 00 00 c1 07 a6 0e 00 fe |......?.........|
000001d0 ff ff 83 fe ff ff 00 60 00 11 00 00 38 29 00 fe |.......`....8)..|
000001e0 ff ff 82 fe ff ff 00 08 a6 0e 00 58 5a 02 00 00 |...........XZ...|
000001f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 aa |..............U.|
디스크가 MBR 파티션 테이블로 포맷 된 경우, 오프셋에있는 파티션 테이블 0x1be
과 오프셋 55aa
의 섹터의 맨 끝에 발생 하는 MBR 서명의 두 가지만 있으면됩니다 0x1fe
. 0x1be
10 진수 446입니다.
다음은 물론 장치를 부팅 할 수 없게 만듭니다. 그러나 이것은 당신이 원하는 것입니다. 장치를 부팅 할 수 없게하려면이 작업을 수행하지 마십시오. mmm-kay? 나는 /dev/sdz
많은 사람들이 없기 때문에 단순히 장치가 있다고 가정 하고 /dev/sdz
, 이것은 일부 바보 초보자가 맹목적으로 붙여 넣기 명령을 복사 할 위험을 줄입니다.
먼저 MBR을 백업 파일로 복사하십시오.
sudo dd if=/dev/sdz of=/some/where/safe/preferably/not/on/dev/sdz/backup.mbr bs=512 count=1
다음으로 해당 파일을 복사하십시오.
cp backup.mbr backup.mbr.test
다음으로 루프백 장치를 만들어서 내용이 잘리지 않도록합니다. 가짜 섹터 0의 변경 사항을 테스트로 적용합니다.
sudo losetup /dev/loop7 backup.mbr.test
sudo dd if=/dev/zero of=/dev/loop7 bs=446 count=1
sudo losetup -d /dev/loop7
hexdump
파일을 확인하고 전체 파티션 테이블이 손상되지 않았는지 확인하십시오.
sudo hexdump -C backup.mbr.test
다음과 같은 내용이 표시되어야합니다.
00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
000001b0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 01 |................|
000001c0 01 00 83 fe ff ff 3f 00 00 00 c1 07 a6 0e 00 fe |......?.........|
000001d0 ff ff 83 fe ff ff 00 60 00 11 00 00 38 29 00 fe |.......`....8)..|
000001e0 ff ff 82 fe ff ff 00 08 a6 0e 00 58 5a 02 00 00 |...........XZ...|
000001f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 aa |..............U.|
00000200
이제, 0x1be
당신이 볼 수있는 곳입니다 80
hexdumped 출력에,이 또한 할 수있다 00
여전히 유효하다. 에서 바이트를 (이 파티션 테이블에서 “부팅”플래그는, 그것은 완전히 가장 현대적인 바이오스 무시 있기 때문에 당신은 … 혼자 떠날 수의) 0x1bf
거의 것입니다하지만 결코 될 수 없다 0x00
(이 가장 일반적이다 0x01
당신을하지만 다른 값을 사용할 수 있습니다) backup.mbr
과거 0x1be
가 변경 되지 않도록 이것을 당신과 비교할 수 있습니다 .
변경 사항을 올바르게 적용했으면 디스크의 첫 부분으로 파일을 직접 복사 할 수 있습니다. 파일을 /dev/zero
다시 작성하는 대신 파일을 작성하는 이유 는 오타 방지를위한 것 입니다. 실수로 count=1
시간을 낭비하지 않으면 파일을 복사해도 EOF를 지나지 않습니다. 더 안전합니다.
sudo dd if=backup.mbr.test of=/dev/sdz
다음으로 hexdump
디스크를 변경하여 예상대로 변경했는지 확인하십시오.
hexdump -C /dev/sdz | head
까지 비교 0x200
에 대한 backup.mbr.test
확인은 당신이 원하는 무엇을 만들 수 있습니다.
마지막으로, 어떤 이유로 든 문제가 발생하면 다음을 통해 MBR 백업을 드라이브에 다시 복사 할 수 있습니다.
sudo dd if=backup.mbr of=/dev/sdz
도움이 되었기를 바랍니다.
답변
경고 : 매우 위험한
Linux 자체에서 dd 명령을 사용할 수 있습니다 (파티션 테이블을 제거함).
# dd if=/dev/null of=/dev/sdX bs=512 count=1
파티션 테이블없이 MBR을 제거하십시오 (아래 주석 참조).
# dd if=/dev/null of=/dev/sdX bs=446 count=1
교체 /dev/hdX
등 실제 장치 이름 /dev/hda
. fdisk -l
명령을 사용 하여 장치 이름을 찾으십시오.
# fdisk -l
출처
답변
에 대한 나의 경험
sudo install-mbr -i n -p D -t 0 /dev/sda
/dev/sda
Windows 7이 설치된 곳 에서 grub2를 성공적으로 제거 했으므로 “/ dev / sda에서 grub을 어떻게 제거합니까?” 답변되었습니다.
그러나 질문의 두 번째 부분은 “/ dev / sda의 MBR을 어떻게 복원합니까?”입니다. install-mbr
명령이 MBR을 복원하지 못했기 때문에 응답하지 않았습니다 . 결과적으로 Windows는 더 이상 부팅되지 않으며 Windows 부팅 관리자는 손상된 MBR에 대한 오류를보고하고 사용자에게 Windows 복구 CD에서 복구를 요청합니다.
답변
이 주제에 관한 Wikipedia 기사 를 읽은 후 몇 가지 추가 솔루션을 제안하고 싶습니다.
-
BIOS에서 부팅 순서 변경 🙂
-
가장 안전하고 안전한 방법 :
fdisk
해당 드라이브의 모든 파티션에서 “부팅 가능”플래그를 제거 하는 데 사용 하십시오. 대부분의 MBR은 체인로드 할 “부팅 가능”파티션을 찾기 때문에 그러한 파티션이 없다면 GRUB은 아무것도하지 않을 것으로 예상합니다. 그래도 테스트하지 않았습니다.위의 방법으로도 도움이되지 않으면 표준 MBR 코드의 무료 복제본을 설치하십시오.
-
mbr
패키지를 설치 하고 다음과install-mbr
같은 명령을 사용 하십시오.sudo apt-get install mbr sudo install-mbr -i n -p D -t 0 /dev/sda
크레딧 : 방법 : Ubuntu LIVE CD를 사용하여 Windows MBR 복구
Wikipedia 기사를 읽음으로써 MBR을 식별하는 유일한 부분은 섹터의 가장 끝에있는 서명 (바이트 510 및 511)이라는 인상을 받았습니다. MBR의 처음 446 바이트는 기계 명령어를 포함해야합니다. MBR 서명이있는 경우 BIOS는 처음 446 바이트의 실제 내용에 관계없이 부트 로더로 제어를 전송합니다.
IBM PC 호환 컴퓨터에서 ROM BIOS에 포함 된 부트 스트랩 펌웨어는 마스터 부트 레코드를로드하고 실행합니다. [14] … 따라서 MBR의 시작 부분에는 리얼 모드 기계 언어 명령어가 포함됩니다. [14] BIOS는 저장 장치에서 물리적 메모리로 MBR을 읽은 다음 마이크로 프로세서를 부팅 코드의 시작 부분으로 보냅니다.
MBR 코드 섹션의 크기가 제한되어 있기 때문에 일반적으로 스토리지 장치에서 메모리로 추가 코드 (예 : 부팅 로더)를 복사하는 작은 프로그램 만 포함됩니다. 그런 다음 실제 운영 체제를로드하는이 코드로 제어가 전달됩니다.
…
BIOS의 부트 스트랩 시퀀스는 주소가 0x7C00 인 컴퓨터의 실제 메모리에있는 첫 번째 유효한 MBR을로드합니다. BIOS 코드에서 마지막으로 실행 된 명령어는 해당 주소의 “점프”가되어 MBR 복사본의 시작 부분으로 실행됩니다. BIOS 구현자가 다른 검사를 포함하도록 선택할 수 있지만 대부분의 BIOS에 대한 기본 유효성 검사는 0xAA55 서명입니다.
따라서 MBR에는 항상 부트 로더가 포함되어 있어야하며 처음 446 바이트를 0으로 설정하면 BIOS가 디스크에서 부팅을 시도하는 것을 막을 수는 없지만 잘못된 코드를 실행하는 동안 컴퓨터가 중단 될 수 있습니다.
업데이트 : 또한 이 기사 에서는 디스크를 BIOS에서 “부팅 할 수없는”것처럼 보이게하려면 실제로 디스크 편집기를 사용하여 섹터 및 섹터에서 MBR 서명을 편집해야합니다. 디스크의 파티션 테이블을 보는 OS에 영향을 미칠지 확실하지 않지만 적어도 바이트를 다시 수정할 수는 있습니다 …
답변
더 간단한 또 다른 솔루션.
제 경우에는 데비안 리눅스가 있지만 Mandriva를 사용하고 싶었습니다. 다른 사람들도 사용할 수 있습니다.
PC를 끈 다음 부팅하고 싶지 않은 부팅 디스크 (그럽이있는 디스크)를 제거하십시오.
mandriva iso 또는 설치하려는 다른 변형으로 만든 부팅 가능한 USB를 넣으면 iso 파일에서 부팅 가능한 USB 스틱을 사용하여 Google을 사용하는 도구가 있습니다 (또는 CD ROM에서 구운 설치 프로그램을 사용할 수 있음)
이제 대부분의 Linux 설치 프로그램은 평가판 또는 휴대용 Linux를 위해 수행 할 작업, 재생 및 사용 또는 설치를위한 설치를 선택할 수있는 옵션을 제공합니다. 이 시점에서 우리는 기다립니다 (화면을 기다리기 위해 커서를 아래로 이동하지만 Enter 키를 누르거나 마우스로 클릭하지 마십시오).
이 시점에서 USB / 또는 / CDRom이 시작되어 실행 중임을 상기하십시오. 이제 일시적으로 제거한 하드 디스크를 플러그인하는 시간이 1 분 정도 기다립니다 (일부 바이오스에는 1 분 이상 기다릴 필요가 없습니다)
대부분의 설치 프로그램에는 원하는대로 수행 할 수있는 파티션 도구가 포함되어 있으므로 설정 프로세스를 계속하십시오. 잘 그것의 간단한 해결책, 나는 초보자로 단순히 오래된 리눅스 설정을 제거했습니다.
답변
오래된 질문이지만 어제 나에게 일어난 것처럼 나는 이것을 다음과 같이 해결했다. 나는 컴퓨터를 끄고, 하드 드라이브를 물리적으로 분리하고 컴퓨터를 다시 시작한 다음
~ $ sudo update-grub
이 작업을 완료하고 컴퓨터를 끄고 하드 드라이브를 다시 연결 한 후 2 년 전부터 더 이상 존재하지 않는 기존 Windows 7 파티션이 표시되지 않았습니다.
나는 이것이 지구로 향하는 해결책이라는 것을 이해하지만 작동합니다. 언젠가 나는 그 하드 드라이브를 완전히 닦을 것이고, 남은 GRUB 흔적은 사라질 것입니다.