Bạn đang ngồi chờ dnf update chạy mà tốc độ cứ lẹt đẹt? Mình cũng từng như vậy. Sau 2 năm dùng Fedora làm máy development chính, mình đã tìm ra cách giảm thời gian makecache từ ~45 giây xuống còn ~12 giây — chỉ bằng vài plugin và điều chỉnh cấu hình đơn giản.
Làm ngay trong 5 phút
Không cần đọc dài dòng, đây là những lệnh cần chạy ngay:
# Cài đặt bộ plugin cơ bản
sudo dnf install -y dnf-plugins-core deltarpm python3-deltarpm
# Bật fastest mirror — tự chọn server gần nhất
echo "fastestmirror=True" | sudo tee -a /etc/dnf/dnf.conf
# Bật parallel downloads — tải nhiều file cùng lúc
echo "max_parallel_downloads=10" | sudo tee -a /etc/dnf/dnf.conf
# Bật deltarpm — chỉ download phần thay đổi
echo "deltarpm=True" | sudo tee -a /etc/dnf/dnf.conf
# Refresh và test
sudo dnf clean all && sudo dnf makecache --refresh
Chỉ vậy thôi. Đang vội thì copy 5 lệnh trên là xong. Phần dưới giải thích tại sao mỗi thứ lại quan trọng.
Tại sao DNF mặc định lại chậm?
Vấn đề cốt lõi: DNF mặc định chỉ download từng package một. Không song song, không tự chọn mirror gần nhất, không có gì đặc biệt cả. Khi ngồi ở Hà Nội mà DNF đang kéo file từ server ở Frankfurt — dĩ nhiên sẽ chậm.
Thêm nữa, mỗi lần update DNF kéo toàn bộ package dù phần thay đổi chỉ là vài trăm KB. Tóm lại có 3 vấn đề chính:
- Chọn mirror không tối ưu — kết nối đến server ở xa
- Download tuần tự từng package thay vì song song
- Download toàn bộ package thay vì chỉ tải phần diff
Giải thích chi tiết từng plugin
1. dnf-plugins-core — Bộ plugin nền tảng
Gói này là meta-package chứa nhiều plugin quan trọng của DNF. Fedora hiện đại thường đã cài sẵn, nhưng chạy lại cho chắc cũng chẳng hại gì:
sudo dnf install dnf-plugins-core
# Kiểm tra các plugin đang có
dnf list installed | grep dnf-plugin
2. Fastest Mirror — Tự động chọn server nhanh nhất
Cơ chế đơn giản: plugin này ping thử tất cả mirror trong danh sách, rồi chọn cái phản hồi nhanh nhất từ vị trí của bạn. Mình test từ Việt Nam thấy tốc độ tăng gấp 3–4 lần so với để mặc định.
sudo nano /etc/dnf/dnf.conf
Thêm dòng này vào section [main]:
[main]
fastestmirror=True
Lần đầu chạy sẽ mất thêm vài giây để đo tốc độ các mirror. Kết quả được cache lại nên những lần sau nhanh hơn nhiều.
3. Parallel Downloads — Download nhiều package cùng lúc
Đây là tính năng mình thích nhất. Thay vì đợi từng package xong mới tải cái tiếp theo, DNF kéo đồng thời nhiều file:
sudo nano /etc/dnf/dnf.conf
# Thêm vào section [main]
max_parallel_downloads=10
Con số 10 là sweet spot qua kinh nghiệm. Tăng lên 20+ đôi khi khiến server mirror throttle ngược lại. Mạng yếu thì để 5–6 là đủ.
4. DeltaRPM — Chỉ download phần thay đổi
Thay vì kéo toàn bộ package 50MB khi update, deltaRPM chỉ download phần diff so với version đang cài. Package 50MB có thể chỉ cần tải 2–3MB nếu là update nhỏ — tiết kiệm băng thông khá rõ.
sudo dnf install deltarpm python3-deltarpm
# Bật trong config
echo "deltarpm=True" | sudo tee -a /etc/dnf/dnf.conf
Lưu ý: DeltaRPM hiệu quả nhất khi update thường xuyên. Nếu để máy lâu không update, delta files đôi khi lớn hơn package gốc — lúc đó DNF tự chuyển sang download full package.
Cấu hình nâng cao
File /etc/dnf/dnf.conf hoàn chỉnh
File cấu hình mình đang dùng trên máy development, copy về xài luôn:
[main]
gpgcheck=1
installonly_limit=3
clean_requirements_on_remove=True
best=False
skip_if_unavailable=True
# Tăng tốc download
fastestmirror=True
max_parallel_downloads=10
deltarpm=True
# Cache settings
keepcache=False
metadata_expire=6h
# Timeout — tránh treo khi mirror chậm
timeout=30
minrate=1000
Giải thích các dòng ít thấy hơn:
metadata_expire=6h— Không check update liên tục, 6 tiếng một lần là đủtimeout=30— Mirror không phản hồi trong 30 giây? Bỏ qua, thử cái khácminrate=1000— Tốc độ rớt xuống dưới 1KB/s thì đổi mirror ngaybest=False— Cho phép cài package không phải bản mới nhất nếu có dependency conflict
Refresh metadata trước update lớn
Trước mỗi lần nâng cấp lớn hoặc sau khi đổi cấu hình, chạy lệnh này để chắc đang dùng mirror tốt nhất:
# Xóa cache cũ và refresh
sudo dnf clean all
sudo dnf makecache --refresh
# Kiểm tra mirror đang được chọn
sudo dnf repolist -v | grep Repo-baseurl
Quản lý Copr repo với dnf-plugins-core
Có dnf-plugins-core rồi thì lệnh dnf copr dùng được luôn — bật Copr repository mà không cần copy URL thủ công:
# Bật một Copr repo
sudo dnf copr enable username/reponame
# Liệt kê Copr repos đang bật
sudo dnf copr list
# Tắt một repo không còn dùng
sudo dnf copr disable username/reponame
Tips thực tế từ kinh nghiệm dùng hàng ngày
Tip 1: Download trước, install sau
Mạng đang tốt thì tranh thủ kéo package về trước, install sau khi offline cũng được:
# Download toàn bộ update về cache mà chưa install
sudo dnf upgrade --downloadonly
# Install từ cache — không cần internet
sudo dnf upgrade --cacheonly
Tip 2: Tắt plugin không cần thiết
Một số plugin bật mặc định làm chậm quá trình resolve dependencies mà bạn chưa chắc có dùng đến:
# Xem plugin đang bật
ls /etc/dnf/plugins/
# Tắt plugin copr nếu bạn không dùng Copr
# Sửa file /etc/dnf/plugins/copr.conf, thêm:
# enabled=0
Tip 3: Alias tiện dụng cho terminal
Thêm vào ~/.bashrc hoặc ~/.zshrc:
# Update nhanh với output gọn
alias update='sudo dnf upgrade -y --refresh'
# Dọn dẹp sau update
alias cleanup='sudo dnf autoremove -y && sudo dnf clean packages'
# Áp dụng ngay mà không cần mở terminal mới
source ~/.bashrc
Kiểm tra kết quả
Sau khi cấu hình xong, benchmark đơn giản:
time (sudo dnf clean all && sudo dnf makecache)
Trên máy mình, makecache giảm từ ~45 giây xuống còn ~12 giây sau khi bật fastestmirror và parallel downloads. Kết quả còn tốt hơn nếu bạn có đường truyền 100Mbps trở lên.
2 năm dùng Fedora làm máy dev chính, setup này chưa bao giờ làm mình thất vọng. Fedora ra bản mới 6 tháng/lần với packages luôn bleeding-edge — chỉ cần đảm bảo download không là bottleneck, trải nghiệm sẽ khác hẳn.
