Khôi Phục Máy Chủ Linux Sau Sự Cố
Giới Thiệu
Trong thế giới công nghệ thông tin, việc máy chủ gặp sự cố là điều không mong muốn nhưng khó tránh khỏi. Từ lỗi phần cứng, tấn công mạng, đến lỗi cấu hình nghiêm trọng, bất kỳ sự cố nào cũng có thể khiến hệ thống ngừng hoạt động. Khôi phục máy chủ Linux sau sự cố không chỉ là một kỹ năng quan trọng mà còn là yếu tố then chốt để đảm bảo tính liên tục của doanh nghiệp. Hướng dẫn này sẽ trình bày các bước cơ bản để phục hồi hệ thống Linux từ bản sao lưu, giúp bạn đưa máy chủ trở lại hoạt động một cách hiệu quả.
📋 Thời gian: 45 phút | Độ khó: Trung bình
Yêu Cầu
Để thực hiện quá trình khôi phục, bạn cần có các điều kiện tiên quyết sau:
- Bản sao lưu đáng tin cậy: Đây là yếu tố quan trọng nhất. Bản sao lưu có thể là toàn bộ hệ thống (full system image), các thư mục quan trọng, hoặc dữ liệu ứng dụng.
- Phương tiện khởi động (Bootable Media): Một USB/CD/DVD cài đặt Linux hoặc môi trường Live CD/USB (ví dụ: Ubuntu Live, SystemRescueCD) để truy cập hệ thống khi máy chủ không thể khởi động bình thường.
- Kiến thức cơ bản về Linux CLI: Khả năng sử dụng dòng lệnh để thao tác với hệ thống tập tin, phân vùng và các công cụ sao lưu/khôi phục.
- Truy cập vật lý hoặc từ xa: Quyền truy cập vào máy chủ để cấu hình BIOS/UEFI, khởi động từ USB/CD hoặc thông qua giao diện quản lý từ xa (IPMI, iDRAC, iLO).
- Kết nối mạng: Nếu bản sao lưu được lưu trữ trên một máy chủ từ xa (NFS, SMB, S3, v.v.).
Các Bước Thực Hiện
Quá trình khôi phục có thể khác nhau tùy thuộc vào phương pháp sao lưu bạn đã sử dụng. Dưới đây là các bước chung áp dụng cho việc khôi phục một bản sao lưu hệ thống bằng tar.
Bước 1: Chuẩn Bị Môi Trường Khôi Phục
Đầu tiên, bạn cần khởi động máy chủ vào một môi trường phục hồi.
- Gắn phương tiện khởi động: Cắm USB/CD Live Linux vào máy chủ.
- Thay đổi thứ tự khởi động: Khởi động lại máy chủ và truy cập BIOS/UEFI để đặt ưu tiên khởi động từ USB/CD.
- Khởi động vào môi trường Live: Chọn khởi động vào hệ điều hành Live Linux.
- Mở Terminal: Sau khi hệ thống Live khởi động, mở một cửa sổ Terminal.
Bước 2: Xác Định Phân Vùng và Dữ Liệu Sao Lưu
Bạn cần xác định các phân vùng trên đĩa cứng mới (hoặc đĩa cứng đã được format lại) và vị trí của bản sao lưu.
-
Liệt kê các thiết bị đĩa:
# Liệt kê tất cả các thiết bị đĩa và phân vùng
lsblk
fdisk -l⚠️ Lưu ý: Xác định đúng đĩa mục tiêu (ví dụ:
/dev/sda,/dev/nvme0n1) để tránh nhầm lẫn và mất dữ liệu. -
Tạo lại cấu trúc phân vùng: Nếu đĩa cứng trống hoặc bạn muốn thay đổi cấu trúc, hãy tạo lại các phân vùng tương tự như hệ thống gốc.
# Ví dụ với fdisk (thay /dev/sda bằng đĩa của bạn)
fdisk /dev/sda
# Hoặc gdisk cho GPT
gdisk /dev/sdaTạo phân vùng cho
/,/boot,/home(nếu có), và swap. Đảm bảo các phân vùng có kích thước phù hợp. -
Định dạng các phân vùng:
# Định dạng phân vùng gốc (root) thành ext4
mkfs.ext4 /dev/sda1 # Thay sda1 bằng phân vùng gốc của bạn
# Định dạng phân vùng boot (nếu có)
mkfs.ext4 /dev/sda2 # Thay sda2 bằng phân vùng boot của bạn
# Tạo/kích hoạt swap (nếu có)
mkswap /dev/sda3 && swapon /dev/sda3 -
Gắn các phân vùng:
# Tạo điểm gắn kết cho hệ thống mới
mkdir /mnt/new_root
# Gắn phân vùng gốc vào /mnt/new_root
mount /dev/sda1 /mnt/new_root
# Nếu có phân vùng /boot riêng
mkdir /mnt/new_root/boot
mount /dev/sda2 /mnt/new_root/boot
# Gắn cực phân vùng khác nếu có (ví dụ: /home)
# mount /dev/sdaX /mnt/new_root/home -
Gắn phương tiện sao lưu:
# Ví dụ: gắn ổ USB chứa bản sao lưu
mkdir /mnt/backup_drive
mount /dev/sdb1 /mnt/backup_drive # Thay sdb1 bằng phân vùng trên ổ USB của bạn
# Hoặc gắn NFS share
# mount -t nfs 192.168.1.100:/path/to/backup /mnt/backup_drive
Bước 3: Khôi Phục Hệ Thống Gốc
Sử dụng công cụ tar để giải nén bản sao lưu vào hệ thống mới.
# Di chuyển vào thư mục gốc của hệ thống mới
cd /mnt/new_root
# Giải nén bản sao lưu. Đảm bảo bạn đang ở /mnt/new_root
# Thay /mnt/backup_drive/full_backup.tar.gz bằng đường dẫn đến file backup của bạn
tar xvpfz /mnt/backup_drive/full_backup.tar.gz -C . --numeric-owner
# Hoặc nếu bản backup không nén
# tar xvpf /mnt/backup_drive/full_backup.tar -C . --numeric-owner
💡 Mẹo: Tùy chọn --numeric-owner rất quan trọng để giữ nguyên ID người dùng/nhóm, đảm bảo quyền truy cập file chính xác. Tùy chọn -C . giải nén vào thư mục hiện tại (/mnt/new_root).
Bước 4: Cấu Hình Hệ Thống Sau Khôi Phục
Sau khi giải nén, bạn cần thực hiện một số cấu hình để hệ thống có thể khởi động.
-
Cập nhật
/etc/fstab: Đảm bảo UUID hoặc tên thiết bị trong/etc/fstabkhớp với các phân vùng mới.# Lấy UUID của các phân vùng mới
blkid
# Chỉnh sửa file fstab
nano /mnt/new_root/etc/fstabCập nhật các dòng tương ứng với
/,/boot,/homevàswapvới UUID chính xác. -
Chroot vào hệ thống mới: Chroot cho phép bạn thực thi các lệnh như thể bạn đang ở trong hệ thống đã khôi phục.
# Gắn các hệ thống tập tin đặc biệt
mount --bind /dev /mnt/new_root/dev
mount --bind /proc /mnt/new_root/proc
mount --bind /sys /mnt/new_root/sys
mount --bind /run /mnt/new_root/run # Nếu có
# Chroot vào hệ thống mới
chroot /mnt/new_root /bin/bash
# Cập nhật PATH trong môi trường chroot
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin -
Cài đặt lại GRUB (Bootloader): Đây là bước cực kỳ quan trọng để hệ thống có thể khởi động.
# Cài đặt GRUB vào MBR của đĩa (thay /dev/sda bằng đĩa chính của bạn)
grub-install /dev/sda
# Cập nhật cấu hình GRUB
update-grub -
Cập nhật initramfs (nếu cần): Đôi khi bạn cần cập nhật initramfs để đảm bảo kernel có thể tìm thấy root filesystem.
update-initramfs -u -k all -
Thoát khỏi chroot:
exit
Bước 5: Kiểm Tra và Khởi Động Lại
Sau khi hoàn tất các bước cấu hình, bạn có thể khởi động lại máy chủ.
-
Ngắt kết nối các phân vùng:
# Ngắt các bind mounts trước
umount /mnt/new_root/dev
umount /mnt/new_root/proc
umount /mnt/new_root/sys
umount /mnt/new_root/run # Nếu có
# Ngắt các phân vùng của hệ thống mới
umount /mnt/new_root/boot # Nếu có
umount /mnt/new_root
# Ngắt phương tiện sao lưu
umount /mnt/backup_drive -
Khởi động lại máy chủ:
reboot⚠️ Quan trọng: Rút USB/CD Live ra khỏi máy chủ trước khi khởi động lại. ✅ Nếu mọi thứ suôn sẻ, máy chủ của bạn sẽ khởi động vào hệ điều hành đã khôi phục.
Troubleshooting
⚠️ Lỗi: Hệ thống không khởi động hoặc khởi động vào GRUB Rescue
- Nguyên nhân: GRUB không được cài đặt đúng cách hoặc không tìm thấy kernel/root filesystem.
- Cách xử lý:
- Khởi động lại vào môi trường Live CD.
- Thực hiện lại Bước 2 (Gắn phân vùng) và Bước 4 (Cấu hình hệ thống sau khôi phục), đặc biệt là các lệnh
grub-installvàupdate-grubtrong môi trườngchroot. - Kiểm tra kỹ
fstabđể đảm bảo UUID/tên thiết bị là chính xác.
⚠️ Lỗi: "Permission denied" hoặc các dịch vụ không hoạt động
- Nguyên nhân: Quyền sở hữu (ownership) hoặc quyền truy cập (permissions) của file/thư mục bị sai lệch sau khi khôi phục.
- Cách xử lý:
- Đảm bảo bạn đã sử dụng
--numeric-ownerkhi giải nén bản sao lưu vớitar. - Trong môi trường
chroothoặc sau khi khởi động, chạy lệnh kiểm tra quyền sở hữu:chown -R root:root / # Kiểm tra nếu root sở hữu tất cả, sau đó điều chỉnh cho các user/dịch vụ cụng thể
find / -perm /6000 -print # Tìm các file có SUID/SGID bit sai - Kiểm tra các file cấu hình dịch vụ (
/etc/systemd/system,/etc/init.d) và log lỗi của dịch vụ (journalctl -xehoặc/var/log/syslog).
- Đảm bảo bạn đã sử dụng
⚠️ Lỗi: Không tìm thấy thư viện hoặc các lệnh không hoạt động trong môi trường chroot
- Nguyên nhân: Môi trường
chrootchưa được cấu hình đầy đủ. - Cách xử lý: Đảm bảo bạn đã gắn các thư mục
/dev,/proc,/sys,/runbằngmount --bindtrước khi vàochroot, và đãexport PATH.
⚠️ Lỗi: Hệ thống khởi động nhưng mất kết nối mạng
- Nguyên nhân: Cấu hình mạng (
/etc/network/interfaces,/etc/netplan/*.yaml,/etc/sysconfig/network-scripts/) bị sai hoặc không phù hợp với phần cứng mạng mới (nếu có). - Cách xử lý:
- Kiểm tra tên giao diện mạng:
ip a. Đôi khi tên giao diện có thể thay đổi (ví dụ:eth0thànhenpXsY). - Chỉnh sửa file cấu hình mạng cho phù hợp với tên giao diện và cài đặt IP mới.
- Khởi động lại dịch vụ mạng:
sudo systemctl restart networkinghoặcsudo netplan apply.
- Kiểm tra tên giao diện mạng:
Kết Luận
Khôi phục máy chủ Linux sau sự cố là một quy trình đòi hỏi sự cẩn thận và hiểu biết về hệ thống. Hướng dẫn này cung cấp lộ trình tổng quát, nhưng mỗi trường hợp có thể có những điểm đặc thù riêng.
💡 Best Practices:
- Sao lưu thường xuyên: Đây là nền tảng của mọi chiến lược phục hồi. Đảm bảo bản sao lưu của bạn luôn được cập nhật và lưu trữ an toàn.
- Kiểm tra bản sao lưu: Định kỳ kiểm tra tính toàn vẹn và khả năng khôi phục của bản sao lưu. Một bản sao lưu không thể phục hồi thì vô dụng.
- Ghi lại cấu hình: Ghi lại chi tiết cấu hình hệ thống, phân vùng, và các bước sao lưu/khôi phục.
- Thực hành phục hồi: Thực hiện các bài tập phục hồi định kỳ trên môi trường thử nghiệm để làm quen với quy trình và phát hiện sớm các vấn đề.
- Kế hoạch phục hồi thảm họa (DRP): Xây dựng một kế hoạch chi tiết về các bước cần thực hiện trong trường hợp xảy ra thảm họa.
Với một kế hoạch sao lưu và phục hồi được thực hiện tốt, bạn có thể tự tin đối mặt với bất kỳ sự cố nào, giảm thiểu thời gian ngừng hoạt động và bảo vệ dữ liệu quan trọng của mình.