Ubuntu Server là một phiên bản đặc biệt của hệ điều hành Ubuntu, được thiết kế chuyên biệt để triển khai máy chủ, chạy các dịch vụ mạng, và vận hành hệ thống backend. Không giống như Ubuntu Desktop, Ubuntu Server không đi kèm giao diện đồ họa (GUI), giúp tiết kiệm tài nguyên và tăng hiệu suất.
1. Chọn phiên bản Ubuntu phù hợp
Khuyến nghị: Tính đến thời điểm hiện tại, Ubuntu 22.04 LTS (Jammy Jellyfish) – ổn định, tương thích tốt với driver NVIDIA, CUDA Toolkit, cuDNN, TensorFlow, PyTorch.
2. Cài đặt Ubuntu Minimal
+ Tải Ubuntu Server 22.04 ISO: https://ubuntu.com/download/server
+ Quá trình cài đặt:
Bước 1. Khởi động từ phương tiện cài đặt.
Sau khi khởi động và chọn “Try or Install Ubuntu Server” vào sẽ có giao diện cài đặt Ubuntu Server như hình bên dưới.
Bước 2. Tiếp tục chọn cấu hình layout của bàn phím nếu không muốn thay đổi có thể để mặc định ấn Enter để chọn Done để tiếp tục.
Bước 3. Chọn kiểu cài đặt Ubuntu Server minimized
Bước 4. Cấu hình network cho server, có thể cấu hình sau khi hoàn tất cài đặt bước chọn tiếp tục cài đặt không network.
Bước 5. Cấu hình proxy cho server, để trống và tiếp tục tiến qua.
Bước 6. Cấu hình repository cho server, phần này nếu dùng trong mạng nội bộ tốc độ sẽ nhanh hơn và không phụ thuộc vào kết nối ra ngoài, nếu chưa có thể để mặc định.
Bước 7. Phân vùng ổ đĩa, có thể để mặc định hoặc nếu muốn quản lý chuyên sâu và nâng cao hơn thì có thể cấu hình thủ công.
Chọn Done tiếp tục để hoàn tất cấu hình phân vùng ổ đĩa
Sau đó sẽ có thông báo có muốn định dạng lại, ổ đĩa sẽ xóa toàn bộ dữ liệu hiện tại chọn Continue để quá trình tiến hành cài đặt được tiếp tục.
Bước 8. Nhập thông tin user để thiết lập tài khoản truy cập vào Ubuntu Server.
Bước 9. Upgrade Ubuntu Pro hiện chưa có kết nối internet nên phần này sẽ bỏ qua và tiếp tục.
Bước 10. Chọn cài đặt OpenSSH server để sau khi toàn bộ quá trình cài đặt hoàn tất, có thể dùng ssh remote từ xa đến Ubuntu Server. Bước này có thể bỏ qua nếu chưa có nhu cầu.
Bước 11. Chờ đợi và theo dõi quá trình cài đặt hoàn tất, Khởi động lại và truy cập máy chủ.
Sau khi hoàn tất, có thể truy cập vào user đã tạo trước đó để sử dụng Ubuntu Server.
3. Tối ưu hóa hệ thống sau khi cài
3.1. Tắt các dịch vụ không cần thiết (giảm RAM, CPU)
  sudo systemctl disable cups.service        
  sudo systemctl disable avahi-daemon     
  sudo systemctl disable bluetooth.service  
  sudo systemctl disable ModemManager       
  sudo systemctl disable apport.service    
  sudo systemctl disable whoopsie.service   
  sudo systemctl disable snapd             
Tắt GUI khi không cần (chạy server headless): sudo systemctl set-default multi-user.target
3.2. Tối ưu bộ nhớ ảo & cache
Giảm swappiness để hệ điều hành ưu tiên dùng RAM hơn là ghi dữ liệu vào SWAP, giúp tăng tốc độ xử lý, đặc biệt quan trọng trong các tác vụ AI/Deep Learning dùng nhiều RAM: echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf
Gợi ý các giá trị swappiness phù hợp:
Giá trị Ý nghĩa
0 Gần như không dùng SWAP (cẩn thận vì có thể gây crash nếu RAM cạn)
10 Khuyến nghị cho AI/DL: Dùng hết RAM rồi mới dùng swap
60 Mặc định Ubuntu: Dùng SWAP tương đối thường xuyên
100 Rất thích dùng swap, không phù hợp với workload AI
Giảm áp lực thu hồi cache của hệ thống file (vfs_cache_pressure) để giữ lại cache inode/dentry lâu hơn, giúp tăng tốc độ truy cập file — cực kỳ hữu ích trong AI/DL khi load dataset từ ổ cứng nhiều lần: echo 'vm.vfs_cache_pressure=50' | sudo tee -a /etc/sysctl.conf
Gợi ý các giá trị vfs_cache_pressure phù hợp:
Giá trị Ý nghĩa
100 Mặc định, dọn cache inode/dentry với tốc độ "bình thường"
50 Khuyến nghị cho AI/DL – giảm áp lực, giữ cache lâu hơn
10 Giữ cache rất lâu – tốt nếu bạn có RAM dư thừa
200+ Dọn cache rất mạnh – không phù hợp với AI workloads
Giảm vfs_cache_pressure giúp:
+ Dataset loader (PyTorch, TensorFlow, OpenCV, etc.) sẽ truy cập nhanh hơn nếu cùng một file được gọi nhiều lần.
+ Hệ thống không cần đọc lại metadata/inode từ ổ đĩa mỗi lần
Chạy câu lệnh sau để áp dụng các thay đổi lên hệ thống sau khi cấu hình bộ nhớ ảo và cache: sudo sysctl -p
3.3. Tối ưu I/O và đĩa
Tối ưu I/O và đĩa trong Ubuntu là bước cực kỳ quan trọng cho hệ thống AI – đặc biệt nếu làm việc với dữ liệu lớn, đọc/ghi tệp tensor, checkpoint, mô hình, v.v.
3.3.1. Mount disk với tùy chọn noatime
Mặc định, mỗi lần đọc file, hệ thống sẽ ghi lại thời gian truy cập (atime) → làm phát sinh I/O không cần thiết.
Mở file fstab: sudo nano /etc/fstab
Thêm noatime, ví dụ: UUID=xxxx-xxxx / ext4 defaults,noatime 0 1
Lưu và reboot.
3.3.2. Kích hoạt TRIM định kỳ (cho SSD)
TRIM giúp SSD dọn sạch các khối không dùng → tăng hiệu suất, kéo dài tuổi thọ. Chạy dòng lệnh sau để kích hoạt trim cho SSD:
    sudo systemctl enable fstrim.timer
    sudo systemctl start fstrim.timer
Ubuntu sẽ tự động trim mỗi tuần. Kiểm tra: sudo systemctl status fstrim.timer
3.3.3. Sử dụng I/O Scheduler phù hợp
Việc chọn đúng I/O Scheduler (trình lập lịch I/O) là rất quan trọng để tối ưu hóa hiệu suất ổ đĩa, đặc biệt với các hệ thống AI/Deep Learning, nơi I/O lớn và nhiều file song song (dataset, checkpoint, tensor) là bình thường.
Khuyến nghị:
Ổ đĩa Scheduler khuyến nghị
SSD (SATA/NVMe) none hoặc mq-deadline
HDD truyền thống deadline hoặc bfq
Enterprise SSD/HDD (RAID) mq-deadline hoặc none
Để kiểm tra I/O scheduler hiện tại, sử dụng câu lệnh: cat /sys/block/sdX/queue/scheduler
Với SSD: sdX thường là sda, nvme0n1, hoặc vda (trong máy ảo)
Để cấu hình scheduler, có thể dùng udev: sudo nano /etc/udev/rules.d/60-ioschedulers.rules
Thêm nội dung:
Ví dụ SSD (mq-deadline): ACTION=="add|change", KERNEL=="sda", ATTR{queue/scheduler}="mq-deadline"
Ví dụ NVMe (none): ACTION=="add|change", KERNEL=="nvme0n1", ATTR{queue/scheduler}="none"
Sau đó, Reload udev:
    sudo udevadm control --reload-rules
    sudo udevadm trigger
3.3.4. Kích hoạt Write-back Cache để tăng hiệu suất ghi đĩa (nếu ổ hỗ trợ)
Để kiểm tra ổ đĩa có hỗ trợ Write Cache hay không, có thể sử dụng lệnh sau đây: sudo hdparm -I /dev/sdX | grep 'Write cache'
Thay /dev/sdX bằng tên thiết bị thật, ví dụ: /dev/sda, /dev/sdb, v.v.
Nếu hệ thống chưa bật Write-back Cache, có thể sử dụng câu lệnh sau đây: sudo hdparm -W1 /dev/sdX
Với :
-W1: Bật write cache
-W0: Tắt write cache (không khuyến nghị trừ khi cần độ tin cậy ghi tuyệt đối, ví dụ hệ thống cơ sở dữ liệu ngân hàng)
Để kích hoạt tự động mỗi lần khởi động, có thể sử dụng udev: sudo nano /etc/udev/rules.d/85-writeback.rules
Thêm nội dung: ACTION=="add", KERNEL=="sdX", ATTR{device/write_cache}="write back"
Thay sdX bằng ổ đĩa thật (ví dụ: sda, sdb,…)
Lưu lại file và cập nhật: sudo udevadm control --reload-rules

Chú ý: Nếu kích hoạt write-back cache, khi hệ điều hành ghi dữ liệu xuống đĩa, ổ đĩa không ghi ngay lập tức xuống bề mặt đĩa. Thay vào đó, dữ liệu được lưu tạm trong bộ nhớ cache (RAM bên trong ổ đĩa). Sau đó, ổ đĩa sẽ tự động ghi dữ liệu xuống đĩa vật lý sau một thời gian ngắn. Nếu mất điện trong lúc dữ liệu còn trong write-back cache, dữ liệu đó sẽ bị mất vì chưa kịp ghi thật xuống đĩa. Nếu dùng hệ thống AI với UPS hoặc cloud (AWS/GCP) thì nên bật để tối ưu hiệu suất.

Các trường hợp nên xem xét kích hoạt write-back cache hoặc không:
Tình huống Nên bật Không nên bật Ghi chú
Máy AI có UPS (nguồn điện dự phòng) UPS giúp tránh mất điện đột ngột
Máy chủ trong cloud (AWS, GCP, Azure) Hạ tầng đảm bảo nguồn điện liên tục
Laptop hoặc máy để bàn dùng ổ SSD SSD thường ổn định hơn khi ghi đột ngột
Hệ thống ghi dữ liệu ngân hàng, tài chính Dữ liệu phải an toàn tuyệt đối
Server không có UPS, hay mất điện Rủi ro cao khi ghi file quan trọng
3.3.5. Tăng giới hạn file mở và I/O queue
Để tăng giới hạn file mở (ulimit) và I/O queue depth trên Ubuntu (đặc biệt quan trọng với AI workloads, multi-threaded I/O, hoặc training song song), có thể thực hiện như sau:
+ Tăng giới hạn số file có thể mở (ulimit)
Mặc định Ubuntu để giới hạn rất thấp (~1024 hoặc 65536).
Bước 1: Sửa /etc/security/limits.conf: sudo nano /etc/security/limits.conf
Thêm dòng sau vào cuối file:

* soft nofile 1048576
* hard nofile 1048576

Bước 2: Sửa /etc/pam.d/common-session /etc/pam.d/common-session-noninteractive
Thêm vào cả hai file: session required pam_limits.so
Bước 3: Sửa /etc/systemd/user.conf/etc/systemd/system.conf
Mở hai file sau:
  sudo nano /etc/systemd/user.conf
  sudo nano /etc/systemd/system.conf
Tìm và sửa: DefaultLimitNOFILE=1048576
Bước 4: Khởi động lại hệ thống
  sudo reboot
+ Tăng I/O queue depth (nr_requests)
Tạo file cấu hình Udev rule: sudo nano /etc/udev/rules.d/60-queue-depth.rules
Thêm nội dung (ví dụ với NVMe): ACTION=="add|change", KERNEL=="nvme0n1", ATTR{queue/nr_requests}="1024"
Hoặc với HDD/SSD: ACTION=="add|change", KERNEL=="sda", ATTR{queue/nr_requests}="1024"
Sau đó reload rule:
  sudo udevadm control --reload-rules
  sudo udevadm trigger
3.3.6. Dọn rác & theo dõi đĩa
3.3.6.1. Dọn rác hệ thống
+ Xóa cache APT:
 sudo apt clean       
 sudo apt autoclean
+ Gỡ các gói không còn dùng: sudo apt autoremove --purge
+ Xóa các Snap cũ (nếu còn dùng Snap)
 sudo apt purge snapd -y
 sudo rm -rf ~/snap /snap /var/snap /var/lib/snapd
+ Xóa nhật ký hệ thống quá lớn
 Giới hạn kích thước nhật ký: sudo nano /etc/systemd/journald.conf
 Thêm hoặc sửa:
   SystemMaxUse=100M
   RuntimeMaxUse=50M
Khởi động lại journald: sudo systemctl restart systemd-journald
+ Xóa các file tạm không dùng:
   sudo rm -rf /tmp/*
   sudo rm -rf ~/.cache/thumbnails/*
3.3.6.2. Theo dõi đĩa
Kiểm tra dung lượng ổ đĩa: df -h
Tìm thư mục nặng nhất: sudo du -sh /* 2>/dev/null | sort -h
+ Xem dung lượng thư mục chi tiết: sudo du -ah / | sort -rh | head -n 30
+ Kiểm tra I/O theo thời gian thực:
    sudo apt install iotop dstat
    sudo iotop -o
    sudo dstat -cdngy
3.3.7. Công cụ theo dõi I/O
Dưới đây là các công cụ theo dõi I/O mạnh mẽ nhất trên Ubuntu – rất hữu ích khi làm AI, đặc biệt để:
+ Theo dõi hiệu năng ổ cứng (SSD/NVMe/HDD)
+ Phát hiện nghẽn cổ chai I/O (gây chậm khi train model lớn)
+ Ghi log để tối ưu hệ thống
3.3.7.1. iotop - Giám sát tiến trình đang sử dụng đĩa
   sudo apt install iotop
   sudo iotop -o
Flag Ý nghĩa
-o Chỉ hiển thị tiến trình đang dùng I/O
-a Hiển thị tổng cộng I/O của từng tiến trình
-b Chạy ở chế độ background (non-interactive)
3.3.7.2. dstat - Thống kê CPU, RAM, I/O, mạng theo thời gian thực
   sudo apt install dstat
   dstat -cdngy --top-io --top-bio
Tùy chọn Giải thích
-c CPU
-d Disk
-n Network
-g Page in/out
-y System stats
--top-io Tiến trình sử dụng I/O nhiều nhất
--top-bio Tiến trình sử dụng block I/O nhiều nhất
3.3.7.3. atop - Công cụ theo dõi hệ thống toàn diện (I/O + RAM + CPU + NET)
   sudo apt install atop
   sudo atop
Nhấn d trong giao diện để chỉ xem I/O
3.3.7.4. nvme-cli - Giám sát SSD/NVMe chuyên sâu
   sudo apt install nvme-cli
Dùng để kiểm tra I/O throughput, sức khỏe, độ trễ NVMe:
   sudo nvme smart-log /dev/nvme0n1
   sudo nvme top
3.3.7.5. iostat (thuộc gói sysstat) - thống kê I/O theo thiết bị
   sudo apt install sysstat
   iostat -xz 1
3.3.7.6. glances - All-in-one system monitor
   sudo apt install glances
   glances
Cột hiển thị Ý nghĩa
tps Số lần I/O mỗi giây
kB_read/s, kB_wrtn/s Tốc độ đọc/ghi
await Thời gian đợi trung bình
%util % thời gian đĩa bận → nếu >80%, cổ chai I/O
Có thể giám sát toàn hệ thống, cả ổ đĩa, RAM, GPU (nếu có psutil, nvidia-ml-py)
3.3.7.7. bpftrace / perf - Advanced tracing (cho dev/kernel engineer)
Dành cho dev nếu muốn tracing I/O latency, kernel I/O stack, etc. Ví dụ: sudo bpftrace -e 'tracepoint:block:block_rq_issue { @[comm] = count(); }'
3.4. Tối ưu khởi động
Gỡ các package GUI không cần: sudo apt remove libreoffice* thunderbird* gnome-games* gnome-music* rhythmbox* -y
3.5. Cài logrotate & dọn hệ thống
+ Giới hạn log: sudo nano /etc/systemd/journald.conf
  Sửa:
     SystemMaxUse=100M
     RuntimeMaxUse=50M
 Thực thi thay đổi lên hệ thống: sudo systemctl restart systemd-journald
+ Dọn gói rác:
   sudo apt autoremove --purge -y
    autoremove: Xóa các gói được cài tự động mà không còn được sử dụng.
    --purge: Xóa cả file cấu hình (sạch hoàn toàn).
   Xóa tất cả các file .deb đã được tải xuống trong /var/cache/apt/archives: sudo apt clean
   Xóa các gói phần mềm đã bị lỗi, bị hỏng (nếu có)
    sudo dpkg --configure -a
    sudo apt install -f