IT/LINUX

[EX342]trouble shooting (MBR restore)

송시 2020. 12. 27. 18:03
728x90

사실 별로 그럴일은 없지만, 예전에 고객사의 리눅스가 해킹당한적이 있었다.

그걸 어떻게 알았냐하면, 뭔가 리눅스가 이상해서 재부팅을 수행했는데, GRUB 에서 부팅을 하지 못하는 것이였다.

부팅하지 못하는 리눅스에서 GRUB 를 복구하려던 내 노력에서 GRUB 상태가 매우 비정상이라는 것을 알게 되었고, 그것이 해킹과 관련되었던 것을 알게되었다.

어쨌든 사실 드문일이지만 GRUB 가 문제가 생기거나, MBR 영역이 손상되는 일이 종종 있다.

MBR 의 어떤 영역까지가 (offset DEC 446) 손상되었느냐에 따라 복구 방법이 다소 다른데

MBR 의 모든 영역 (DEC 512)이 손상되었다는 가정하에 복구를 해보고자 한다.

** 이 복구 방법에는 치명적인 단점이 있는데 파티션의 크기를 이미 알고 있어야 한다.

# dd if=/dev/zero of=/dev/sda bs=512 count=1

# reboot

부팅이 안된다.

CD 를 넣고 rescue mode 로 진입한다.

any Linux partitions 라는 메시지와 함께 chroot /mnt/sysimage가 되지 않는다

# cat /proc/partitions 를 통해 /dev/sda 의 파티션 정보가 없어진 것이 확인이 된다.

GPT 가 아니라면 보통 앞에 영역에 boot 이미지들이 있다.

# fdisk /dev/sda

n -> p -> 1 -> 2048 -> 2099199 -> w

** 2048 ~ 2099199 의 섹터크기는 1GiB 를 의미하는데, /dev/sda1 의 기존 파티션이 1GiB 라는 것을 아는 것이 중요하다. 만약 모른다면 찍어야 한다. 모른다면 더 크게 잡아도 조금 작게 잡아도 상관은 없다. 다만 그렇게 할때 /dev/sda1 가 마운트가 안되거나, 다음에 / 위치가 있는 파티션을 잡을 /dev/sda2 가 사용하지 못하게 될 것이다.

# fdisk -l /dev/sda

이번에는 /dev/sda2 를 만들어보자

# fdisk /dev/sda

n -> p -> 2 -> enter(default) -> enter(default) -> t -> 8e -> w

** 8e 는 파티션 타입이 LVM을 의미한다.

# reboot

다시 rescue mode 로 진입한다.

이번에는 any Linux partitions 라는 메시지도 없고 chroot /mnt/sysimage 도 가능하게 된다.

# chroot /mnt/sysimage

# grub2-install /dev/sda

를 통해 grub 영역을 복구 해준다.

 

위의 방법은 MBR의 주소 447 ~ 512 영역까지의 파티션 정보를 복구 한 후에

MBR 의 GRUB 영역을 복구해주는 방식인데, 보면 알겠지만 

섹터의 크기를 알고있어야하고 파티션 타입까지도 알고 있어야 한다는 정말 많은 것을 요구 한다.

다른 말로 말해 

GRUB 영역만 삭제된 것이라면 rescue mode 에서 chroot 이후 grub2-install 을 통해 쉽게 복구가 가능하다.

 

EX342 와 상관없이 MBR 을 복구하는 좋은 방법은

MBR 을 평소에 백업해두고, 장애가 발생하면 Livce CD 로 리눅스를 부팅하고 백업한 MBR 을 해당 디바이스에 복구하는 것이 젤 편한것 같다.

 

728x90