How to corrupt and repair bootloader

Xin chào, mình là Mint,

Hôm nay chúng ta sẽ cùng thực hành phá hỏng booloader, sau đó sẽ tạo lại bootloader bằng grub

Let’s do it

Xóa dữ liệu trên MBR

1
[root@localhost ~]# dd if=/dev/zero of=/dev/sda bs=446 count=1

Boot sector có độ dài 512 bytes, trong đó 446 bytes đầu tiên là bootloader code, phần còn lại sẽ là partition table, chúng ta sẽ chỉ ghi đè 446 bytes đầu tiên mà thôi

0x0000 to 0x01BD - First 446 bytes (boot loader code)
0x01BE to 0x01CD - Partition entry 1
0x01CE to 0x01DD - Partition entry 2
0x01DE to 0x01ED - Partition entry 3
0x01EE to 0x01FD - Partition entry 4
0x01FE to 0x01FF - Boot signature (55 AA)

Reboot và tận hưởng

Rescure hệ thống

  • Enter rescure mode

Khi sử dụng liveCD, CentOS có chế độ tự động phát hiện hệ điều hành cài đặt trên ổ cứng, tự động mount những phân vùng cần thiết để có 1 hệ thống hoàn chỉnh. Nếu sử dụng các distro khác hoặc hệ thống không tự động mount được, chúng ta sẽ phải mount bằng tay

Start shell

Tạo 1 thư mục để mount hệ thống

1
[root@localhost ~]# mkdir /mnt/centos

Sử dụng fdisk để kiểm tra xem các partition được cài đặt như thế nào

1
2
3
4
5
6
7
[root@localhost ~]# fdisk /dev/sda

p

Device Boot Start End Blocks Id System
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 16777215 7339008 8e Linux LVM

Như vậy, /dev/sda1 là phân vùng boot của hệ thống, /dev/sda2 là phần còn lại /
Trong trường hợp có nhiều partition hơn, chúng ta thực hiện mount các partition này vào các thư mục để xác định lần lượt các mountpoint, quan trọng là root / , hệ thống có thể có thêm /home, /var, /blabla. Xem file /etc/fstab để xác định.

Đối với Standard partition table, chúng ta có thể mount bằng lệnh

1
2

[root@localhost ~]# mount /dev/sda2 /mnt/centos

Đối với hệ thống sử dụng partition dạng LVM như trong bài lab này, sẽ tốn thêm 1 vài bước nữa

Xác định Volume Group

1
2
3
4
5
6
7
[root@localhost ~]# pvscan 
PV /dev/sda2 VG centos lvm2 [<7.00 GiB / 0 free]
Total: 1 [<7.00 GiB] / in use: 1 [<7.00 GiB] / in no VG: 0 [0 ]

[root@localhost ~]# lvscan
inactive '/dev/centos/swap' [820.00 MiB] inherit
inactive '/dev/centos/root' [<6.20 GiB] inherit

Do volume /dev/centos/root chưa active nên ta active trước khi mount

1
[root@localhost ~]# vgchange -a y /dev/centos/root

Tiếp theo là mount partition sử dụng lệnh

1
2

[root@localhost ~]# mount /dev/centos/root /mnt/centos

/boot sử dụng định dạng Standard nên ta có thể mount dễ dàng bằng

1
2

[root@localhost ~]# mount /dev/sda1 /mnt/centos/boot

Tiếp theo là mount /dev, /proc, /sys vào hệ thống mới

1
2
3
4

[root@localhost ~]# mount -t proc /proc /mnt/centos/proc
[root@localhost ~]# mount -t sysfs /sys /mnt/centos/sys
[root@localhost ~]# mount -o bind /dev /mnt/centos/dev

Change root system

1
[root@localhost ~]# chroot /mnt/centos

Reinstall GRUB

1
[root@localhost ~]# grub2-install /dev/sda

hoặc grub-install, dành cho Grub verison 1

Exit và reboot

PS:// Nếu test trên VirtualBox hoặc KVM thì phải gỡ LiveCD ra sau khi reboot nhé, VirtualBox hiện tại bị bug chain-load Ticket 2680

Xin chào and peace out!