Cẩm Nang Cấu Hình CentOS 7: Từ Khởi Động Systemd Đến Tối Ưu Hệ Thống

1. Sự Chuyển Đổi Công Nghệ Khởi Động Trong CentOS 7

1.1 Từ Sysvinit Sang Systemd

Sysvinit là công nghệ khởi động truyền thống với những ưu nhược điểm riêng:

Ưu điểm:

  • Hoạt động ổn định, cơ chế đơn giản và dễ hiểu
  • Dựa vào shell script để quản lý

Nhược điểm:

  • Khởi động tuần tự, thời gian boot lâu
  • Dễ bị treo khi có dependency chưa được đáp ứng (ví dụ: webServer phụ thuộc NFS server chưa khởi động)

Upstart là công nghệ trung gian, được phát triển để khắc phục hạn chế của Sysvinit trước khi Systemd ra đời.

Systemd là giải pháp hiện đại với khả năng khởi động song song, giúp rút ngắn đáng kể thời gian boot của hệ thống.

1.2 Cơ Chế Khởi Động Song Song

Giải Quyết Socket và Port Dependency

Systemd tiền tạo các socket và port trước khi dịch vụ thực sự khởi chạy, đảm bảo các dịch vụ có thể khởi động đồng thời mà không gặp lỗi conflict.

Giải Quyết D-Bus Dependency

D-Bus hoạt động như một hệ thống message bus cho inter-process communication:

  • Đồng bộ: Như trò chuyện trực tiếp, đảm bảo an toàn và ổn định nhưng chậm hơn
  • Bất đồng bộ: Gửi message qua queue, nhanh hơn nhưng tiềm ẩn rủi ro về an ninh
Giải Quyết Filesystem Dependency

Sử dụng cơ chế autofs để mount filesystem theo nhu cầu thay vì mount tất cả trong quá trình khởi động.

2. Quản Lý Tên Card Mạng Trong CentOS 7

2.1 Sự Khác Biệt Trong Nhận Diện Phần Cứng

Phiên bản Cơ chế đặt tên
CentOS 6 Dựa trên thứ tự nhận diện phần cứng, tên có thể thay đổi sau mỗi lần khởi động
CentOS 7 Dựa trên vị trí slot PCI Express, tên cố định và có tính dự đoán cao hơn

Lưu ý quan trọng: Nếu xóa network adapter trong VMware, slot tương ứng cũng bị xóa, có thể gây ra vấn đề về tên card mạng.

2.2 Đổi Tên Card Mạng Về Định Dạng Cũ (ethX)

Thực hiện các bước sau để đổi tên card mạng từ ens33 sang eth0:

Bước 1: Di chuyển đến thư mục cấu hình và tắt NetworkManager

cd /etc/sysconfig/network-scripts/ && systemctl stop NetworkManager && systemctl disable NetworkManager

Bước 2: Đổi tên file cấu hình

mv ifcfg-ens33 ifcfg-eth0

Bước 3: Cập nhật nội dung file cấu hình

TYPE=Ethernet
NAME=eth0
DEVICE=eth0
ONBOOT=yes
IPADDR=10.0.0.200
PREFIX=24
GATEWAY=10.0.0.254
DNS1=223.5.5.5

Bước 4: Sửa file grub configuration

Chỉnh sửa /etc/default/grub, thêm các tham số net.ifnames=0 và biosdevname=0 vào dòng GRUB_CMDLINE_LINUX:

GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="rhgb net.ifnames=0 biosdevname=0 quiet"
GRUB_DISABLE_RECOVERY="true"

Bước 5: Tái tạo grub configuration

grub2-mkconfig -o /boot/grub2/grub.cfg

Kết quả xác nhận:

Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-693.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-693.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-6fb9d1e602e84f5eacbc9ea411c00d80
Found initrd image: /boot/initramfs-0-rescue-6fb9d1e602e84f5eacbc9ea411c00d80.img
done

Bước 6: Khởi động lại và kiểm tra

reboot
ip a s eth0

Kết quả mong đợi:

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:49:5d:cb brd ff:ff:ff:ff:ff:ff
inet 10.0.0.200/24 brd 10.0.0.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe49:5dcb/64 scope link 
valid_lft forever preferred_lft forever

2.3 Cấu Hình Card Mạng Eth0 Ngay Từ Khi Cài Đặt

Trong màn hình cài đặt, nhấn Tab và thêm các tham số sau:

net.ifnames=0 biosdevname=0

3. Hệ Tập Tin: XFS và ext4

CentOS 7 sử dụng XFS làm filesystem mặc định, được thiết kế tối ưu cho:

  • Dữ liệu lớn (large data)
  • Tập tin kích thước lớn (large files)

Trong khi CentOS 6 sử dụng ext4 mặc định.

Lưu ý partition /boot: CentOS 7 yêu cầu partition /boot lớn hơn so với CentOS 6, khuyến nghị tối thiểu 1GB.

4. Tối Ưu Hóa YUM Repository

4.1 Thêm EPEL Repository

curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

4.2 Cài Đặt Các Công Cụ Hỗ Trợ

yum install -y vim wget bash-completion tree lrzsz nmap nc htop pssh sshpass net-tools setuptool

Các công cụ này bao gồm:

  • vim: Trình soạn thảo văn bản mạnh mẽ
  • wget/curl: Tải file từ internet
  • bash-completion: Auto-complete cho bash
  • tree: Hiển thị cấu thư mục dạng cây
  • lrzsz: Transfer file qua ZMODEM
  • nmap/nc: Network scanning và troubleshooting
  • htop: Theo dõi tiến trình nâng cao
  • net-tools: Công cụ mạng truyền thống (ifconfig, netstat)

5. Các Lệnh Mạng Trong CentOS 7

CentOS 7 ưu tiên sử dụng các lệnh mới: ipss thay cho các lệnh cũ.

5.1 Cài Đặt Công Cụ Truyền Thống (Tương Thích CentOS 6)

yum install -y net-tools  # Cung cấp ifconfig
yum install -y setuptool  # Công cụ cấu hình (nmtui thay thế)

6. Quản Lý Hostname

Phiên bản Vị trí file hostname
CentOS 6 /etc/sysconfig/network
CentOS 7 /etc/hostname

Cách Đổi Hostname Trong CentOS 7

hostnamectl set-hostname centos8
logout

Sau khi đăng nhập lại:

ssh 10.0.0.200
hostname
centos8
cat /etc/hostname
centos8

Lưu ý: Lệnh hostnamectl sẽ tự động chuyển đổi tất cả ký tự thành chữ thường.

7. Tương Thích /etc/rc.local

File /etc/rc.local trong CentOS 7 là symlink đến /etc/rc.d/rc.local:

ll /etc/rc.local
lrwxrwxrwx. 1 root root 13 Nov 13 11:17 /etc/rc.local -> rc.d/rc.local
ll /etc/rc.d/rc.local
-rw-r--r--. 1 root root 473 Aug  5 14:38 /etc/rc.d/rc.local

Quan trọng: Để script trong rc.local hoạt động, cần cấp quyền thực thi:

chmod +x /etc/rc.d/rc.local

Khuyến cáo: systemd không khuyến khích sử dụng shell script để quản lý dịch vụ hệ thống.

8. Runlevel và Target Trong Systemd

CentOS 6 lưu trữ cấu hình runlevel trong /etc/inittab, trong khi CentOS 7 sử dụng symlink:

Các target khả dụng:

ll runlevel*.target
lrwxrwxrwx. 1 root root 15 Nov 12 06:30 runlevel0.target -> poweroff.target
lrwxrwxrwx. 1 root root 13 Nov 12 06:30 runlevel1.target -> rescue.target
lrwxrwxrwx. 1 root root 17 Nov 12 06:30 runlevel2.target -> multi-user.target
lrwxrwxrwx. 1 root root 17 Nov 12 06:30 runlevel3.target -> multi-user.target
lrwxrwxrwx. 1 root root 17 Nov 12 06:30 runlevel4.target -> multi-user.target
lrwxrwxrwx. 1 root root 16 Nov 12 06:30 runlevel5.target -> graphical.target
lrwxrwxrwx. 1 root root 13 Nov 12 06:30 runlevel6.target -> reboot.target

Xem và thay đổi default target:

systemctl get-default
systemctl set-default multi-user.target
Removed symlink /etc/systemd/system/default.target.
Created symlink from /etc/systemd/system/default.target to /usr/lib/systemd/system/multi-user.target.
systemctl get-default
multi-user.target

9. Systemd: Quản Lý Dịch Vụ Toàn Diện

Các unit files được lưu trữ tại:

  • /usr/lib/systemd/system/ (mặc định)
  • /etc/systemd/system/ (ưu tiên cao hơn)

Quản Lý Dịch Vụ

Hành động Lệnh
Khởi động dịch vụ systemctl start httpd.service
Dừng dịch vụ systemctl stop httpd.service
Khởi động lại systemctl restart httpd.service
Tải lại cấu hình systemctl reload httpd.service
Xem trạng thái systemctl status httpd.service

Quản Lý Boot Status

Hành động Lệnh
Kích hoạt khởi động cùng hệ thống systemctl enable httpd.service
Hủy kích hoạt khởi động systemctl disable httpd.service
Kiểm tra trạng thái boot systemctl is-enabled httpd.service
Xem tất cả dịch vụ boot ls /etc/systemd/system/multi-user.target.wants/
Xem dịch vụ thất bại systemctl --failed

Thêm Mới Unit

# Đặt file .service vào /usr/lib/systemd/system/
systemctl load foo.service

Xóa Unit

Không có lệnh trực tiếp, cần dừng dịch vụ và xóa file cấu hình thủ công.

10. Phân Tích và Tối Ưu Thời Gian Khởi Động

10.1 Kiểm Tra Tổng Thời Gian Boot

systemd-analyze
Startup finished in 420ms (kernel) + 1.463s (initrd) + 3.953s (userspace) = 5.837s

10.2 Phân Tích Chi Tiết Từng Dịch Vụ

systemd-analyze blame
811ms firewalld.service
767ms dev-sda2.device
547ms boot.mount
445ms postfix.service
397ms NetworkManager-wait-online.service
247ms abrt-ccpp.service
194ms network.service

10.3 Xuất Biểu Đồ Thời Gian Khởi Động

systemd-analyze plot > boottime.svg
sz boottime.svg

Mở file SVG trong trình duyệt để xem trực quan timeline khởi động. Sau 2 giây đầu, hệ thống bắt đầu khởi động song song hầu hết các dịch vụ.

11. Tắt Các Dịch Vụ Không Cần Thiết

11.1 Vô Hiệu Hóa Firewall

systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: active (running)
systemctl is-enabled firewalld.service
enabled
systemctl is-active firewalld.service
active

Tắt và vô hiệu hóa firewall:

systemctl stop firewalld.service
systemctl disable firewalld.service
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.

Lưu ý: CentOS 7 mặc định sử dụng firewalld thay vì iptables. Nếu cần iptables, cài đặt thêm iptables-services.

11.2 Cấu Hình SELinux

SELinux trong CentOS 7 tương tự CentOS 6. Để tạm thời vô hiệu hóa:

setenforce 0

Để vô hiệu hóa vĩnh viễn, sửa file /etc/selinux/config:

SELINUX=disabled

12. Cài Đặt Các Công Cụ Bổ Sung

curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum install -y vim wget bash-completion tree lrzsz nmap nc htop pssh sshpass net-tools setuptool

Thẻ: CentOS centos7 systemd sysvinit Network-Configuration

Đăng vào ngày 13 tháng 9 lúc 20:49