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: ip và ss 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