Chuyển tới nội dung chính

FAQ - Câu Hỏi Thường Gặp

Tổng hợp các câu hỏi phổ biến nhất về quản trị server Linux/Windows, troubleshooting và best practices từ cộng đồng sysadmin Việt Nam.

🐧 Linux Server

Làm sao để kiểm tra phiên bản Linux đang dùng?

# Xem phiên bản OS
cat /etc/os-release

# Xem kernel version
uname -r

# Xem thông tin chi tiết
hostnamectl

Xem thêm: Tổng Quan Linux Server cho Sysadmin

Server Linux bị chậm, làm sao kiểm tra nguyên nhân?

Các bước kiểm tra:

  1. CPU Usage:
top
htop # dễ nhìn hơn
  1. Memory Usage:
free -h
vmstat 1
  1. Disk I/O:
iostat -x 1
iotop
  1. Network:
iftop
nethogs

Xem thêm: Theo Dõi Process Linux Với ps Và top

Không SSH được vào server, phải làm gì?

Checklist troubleshooting:

  1. ✅ Kiểm tra network connectivity: ping server_ip
  2. ✅ Kiểm tra SSH port: telnet server_ip 22
  3. ✅ Kiểm tra firewall: sudo ufw status hoặc sudo firewall-cmd --list-all
  4. ✅ Kiểm tra SSH service: sudo systemctl status sshd
  5. ✅ Xem SSH logs: sudo tail -f /var/log/auth.log

Xem thêm: Khắc Phục Lỗi Không Đăng Nhập Được SSH

Package manager bị khóa (locked), không cài được phần mềm?

# Ubuntu/Debian - xóa lock files
sudo rm /var/lib/apt/lists/lock
sudo rm /var/cache/apt/archives/lock
sudo rm /var/lib/dpkg/lock*
sudo dpkg --configure -a
sudo apt update

# CentOS/RHEL - xóa yum lock
sudo rm -f /var/run/yum.pid
sudo yum clean all

Xem thêm: Sửa Lỗi Package Bị Khóa Trên Linux

Cron job không chạy, tại sao?

Nguyên nhân phổ biến:

  1. ❌ Sai cú pháp crontab
  2. ❌ PATH environment không đầy đủ
  3. ❌ Script không có quyền execute
  4. ❌ Cron service không chạy

Cách kiểm tra:

# Kiểm tra cron service
sudo systemctl status cron

# Xem logs
sudo tail -f /var/log/syslog | grep CRON

# Test script manually
bash -x /path/to/script.sh

Xem thêm: Khắc Phục Lỗi Cron Job Không Chạy

🐋 Docker

Docker container không start được?

Troubleshooting steps:

# Xem logs chi tiết
docker logs container_name

# Xem events
docker events

# Kiểm tra resource
docker stats

# Inspect container
docker inspect container_name

Lỗi thường gặp:

  • Port đã được sử dụng → Đổi port mapping
  • Volume mount permission denied → Fix permissions
  • Out of memory → Tăng memory limit
  • Network issues → Kiểm tra docker network

Xem thêm: Docker: Quản lý Container hiệu quả

Docker chiếm quá nhiều disk space?

# Xem disk usage
docker system df

# Dọn dẹp toàn bộ (cẩn thận!)
docker system prune -a --volumes

# Dọn dẹp từng phần
docker image prune -a # Xóa unused images
docker volume prune # Xóa unused volumes
docker container prune # Xóa stopped containers

Best practice: Dùng .dockerignore và multi-stage builds để giảm image size.

Docker Compose service không kết nối được với nhau?

Kiểm tra network:

# Xem network
docker network ls
docker network inspect project_default

# Kiểm tra service name resolution
docker-compose exec service1 ping service2

Lưu ý: Dùng service name thay vì localhost để kết nối giữa các containers.

Xem thêm: Hướng Dẫn Docker Compose - Deploy Multi-Container Apps

🌐 Web Server (Nginx/Apache)

Nginx trả về lỗi 502 Bad Gateway?

Nguyên nhân phổ biến:

  1. Backend service không chạy:
# Kiểm tra PHP-FPM
sudo systemctl status php7.4-fpm

# Kiểm tra port
sudo netstat -tlnp | grep 9000
  1. Timeout quá thấp:
# Tăng timeout trong nginx.conf
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
  1. SELinux chặn:
sudo setsebool -P httpd_can_network_connect 1

Xem thêm: Khắc Phục Lỗi 403 và 404 Trên Nginx

Website chạy chậm, làm sao tối ưu Nginx?

Quick wins:

# Enable Gzip compression
gzip on;
gzip_types text/plain text/css application/json;

# Enable caching
location ~* \.(jpg|jpeg|png|gif|css|js)$ {
expires 30d;
add_header Cache-Control "public, immutable";
}

# Increase worker connections
worker_processes auto;
worker_connections 2048;

Xem thêm: Tối Ưu Hiệu Năng Nginx Cho Máy Chủ Web

Lỗi 403 Forbidden khi truy cập website?

Nguyên nhân và giải pháp:

  1. Permission sai:
# Fix permissions
sudo chown -R www-data:www-data /var/www/html
sudo chmod -R 755 /var/www/html
  1. Directory index thiếu:
location / {
index index.php index.html index.htm;
}
  1. SELinux context sai (CentOS/RHEL):
sudo chcon -R -t httpd_sys_content_t /var/www/html

🗄️ Database

MySQL/MariaDB không start được?

Troubleshooting:

# Xem logs
sudo tail -f /var/log/mysql/error.log

# Kiểm tra port
sudo netstat -tlnp | grep 3306

# Kiểm tra disk space
df -h

# Kiểm tra InnoDB
sudo mysqld --innodb-force-recovery=1

Lỗi phổ biến:

  • Disk full → Dọn dẹp disk
  • Port bị chiếm → Đổi port
  • InnoDB corruption → Recovery mode

Xem thêm: Thiết Lập MySQL Server trên Linux

Không kết nối được database từ ứng dụng?

Checklist:

  1. ✅ Database service đang chạy
  2. ✅ Firewall cho phép port 3306
  3. ✅ User có quyền remote access:
GRANT ALL PRIVILEGES ON dbname.* TO 'user'@'%' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
  1. ✅ bind-address trong my.cnf:
bind-address = 0.0.0.0  # Cho phép remote

Xem thêm: Khắc Phục Lỗi Không Kết Nối Database

Làm sao backup database tự động hàng ngày?

#!/bin/bash
# /root/scripts/backup-db.sh

TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
BACKUP_DIR="/backup/mysql"
DB_NAME="your_database"
DB_USER="backup_user"
DB_PASS="secure_password"

# Create backup
mysqldump -u $DB_USER -p$DB_PASS $DB_NAME | gzip > $BACKUP_DIR/${DB_NAME}_${TIMESTAMP}.sql.gz

# Keep only 7 days
find $BACKUP_DIR -name "*.sql.gz" -mtime +7 -delete

Cron job:

# Daily at 2 AM
0 2 * * * /root/scripts/backup-db.sh >> /var/log/db-backup.log 2>&1

Xem thêm: Sao lưu Database MySQL trên Linux

🔒 Bảo Mật

Làm sao bảo mật SSH server?

Best practices:

  1. Đổi port mặc định:
# /etc/ssh/sshd_config
Port 2222
  1. Disable root login:
PermitRootLogin no
  1. Dùng SSH key thay password:
# Tạo key
ssh-keygen -t ed25519 -C "[email protected]"

# Copy key lên server
ssh-copy-id user@server
  1. Enable fail2ban:
sudo apt install fail2ban
sudo systemctl enable fail2ban

Xem thêm: Bảo Mật SSH Với Key Authentication

Firewall nên mở những port nào?

Minimal setup:

# Allow SSH (custom port)
sudo ufw allow 2222/tcp

# Allow HTTP/HTTPS
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

# Enable firewall
sudo ufw enable

Production server:

  • Chỉ mở ports cần thiết
  • Whitelist IP nếu có thể
  • Dùng fail2ban chống brute force
  • Regular audit với sudo ufw status verbose

Xem thêm: Cấu Hình UFW Firewall Chi Tiết

Làm sao kiểm tra server có bị hack không?

Các dấu hiệu:

# 1. Kiểm tra user lạ
cat /etc/passwd | grep -v nologin

# 2. Kiểm tra process lạ
ps aux | grep -v "\" | sort -nrk 3,3 | head

# 3. Kiểm tra network connections
sudo netstat -tulpn | grep ESTABLISHED

# 4. Xem SSH login history
sudo last -a | head -20

# 5. Kiểm tra crontab
sudo crontab -l -u root

Tools hữu ích:

  • rkhunter - Rootkit detection
  • chkrootkit - Rootkit checker
  • aide - File integrity checker
  • lynis - Security auditing

🔧 Troubleshooting Chung

Server bị out of memory (OOM), phải làm gì?

Ngay lập tức:

# Xem process dùng nhiều RAM nhất
ps aux | sort -nrk 4,4 | head

# Kill process nếu cần
sudo kill -9 PID

# Xem OOM killer logs
sudo dmesg | grep -i "killed process"

Giải pháp lâu dài:

  1. Tăng RAM
  2. Add swap space
  3. Tối ưu ứng dụng
  4. Dùng caching (Redis/Memcached)

Làm sao monitor server 24/7?

Free tools:

  • Netdata: Real-time monitoring đẹp, dễ dùng
  • Prometheus + Grafana: Professional stack
  • Zabbix: Enterprise-grade monitoring

Quick setup Netdata:

bash <(curl -Ss https://my-netdata.io/kickstart.sh)

Xem thêm: [Cài Đặt Netdata Trên Linux

Disk đầy, không xóa được file?

# Tìm folder lớn nhất
du -h / | sort -rh | head -20

# Dọn dẹp logs
sudo journalctl --vacuum-size=100M
sudo find /var/log -name "*.log" -type f -mtime +30 -delete

# Dọn dẹp package cache
sudo apt clean # Ubuntu/Debian
sudo yum clean all # CentOS/RHEL

# Dọn dẹp Docker
docker system prune -a --volumes

Timezone server sai, làm sao sửa?

# Xem timezone hiện tại
timedatectl

# Đổi sang Asia/Ho_Chi_Minh
sudo timedatectl set-timezone Asia/Ho_Chi_Minh

# Đồng bộ thời gian với NTP
sudo timedatectl set-ntp true

Xem thêm: Cấu Hình Timezone Trên Linux

📊 Performance Testing

Làm sao test tốc độ server?

Speedtest script của BacPV:

# Linux/macOS
curl -Lso- bacpv.com/speedtest.sh | bash

# Windows PowerShell
iwr bacpv.com/speedtest.ps1 | iex

Test gì:

  • ✅ CPU, RAM, Disk info
  • ✅ Disk speed (Sequential + Random I/O)
  • ✅ Network speed (International + Vietnam ISPs)
  • ✅ Latency (ping test)

Xem thêm: Hướng dẫn sử dụng Speedtest Script

Server mới nên chọn cấu hình nào?

Nhỏ (Blog, Landing page):

  • 1 CPU, 1GB RAM, 20GB SSD
  • Ubuntu 22.04 hoặc AlmaLinux 9

Trung bình (Website, Small API):

  • 2 CPU, 2-4GB RAM, 40-80GB SSD
  • Load balancer nếu traffic cao

Lớn (E-commerce, High traffic):

  • 4+ CPU, 8GB+ RAM, 160GB+ SSD
  • Separate DB server
  • CDN cho static files
  • Redis/Memcached caching

💬 Các Câu Hỏi Khác

BacPV.com có cung cấp dịch vụ tư vấn không?

Hiện tại BacPV.com là nền tảng chia sẻ kiến thức miễn phí. Bạn có thể:

Làm sao đóng góp bài viết cho BacPV?

  1. Fork repo: https://github.com/zelel009/bacpv.com
  2. Viết bài theo format Markdown
  3. Tạo Pull Request
  4. Chúng tôi sẽ review và merge

Tôi không tìm thấy bài viết về topic X?

Vui lòng gửi yêu cầu qua:

Chúng tôi sẽ ưu tiên các topics được yêu cầu nhiều!


🆘 Cần hỗ trợ thêm?

Không tìm thấy câu trả lời?

Thời gian phản hồi: Thường trong vòng 24-48 giờ làm việc.