Sửa lỗi lệch giờ WSL2: 'Release file is not valid yet' làm hỏng apt-get và git

beginner🪟 Windows2026-06-19| WSL2 (Windows Subsystem for Linux 2) với Ubuntu 20.04 / 22.04 / 24.04 trên Windows 10 / 11

Error Message

Release file for ... is not valid yet (invalid for another Xh Ym Zs). Updates for this repository will not be applied.
#wsl2#linux#đồng-bộ-giờ#ubuntu

Chuyện gì đang xảy ra

Bạn mở laptop từ chế độ ngủ, vào WSL2, và chạy apt-get update. Lệnh thất bại với:

E: Release file for http://archive.ubuntu.com/ubuntu/dists/jammy-updates/InRelease is not valid yet (invalid for another 7h 23m 12s). Updates for this repository will not be applied.

Hoặc git pull báo lỗi SSL certificate — "certificate is not yet valid." Cùng nguyên nhân gốc rễ: đồng hồ của WSL2 đang bị trễ so với thực tế.

Đây là những gì xảy ra bên dưới. Khi Windows ngủ hoặc hibernate, VM của WSL2 bị tạm dừng hoàn toàn. Khi resume, Linux kernel không biết đã qua bao nhiêu thời gian — nó tiếp tục chính xác từ thời điểm bị đóng băng. Ngủ 7 tiếng và đồng hồ WSL2 của bạn sẽ trễ 7 tiếng. Bất kỳ công cụ nào kiểm tra timestamp đều bị ảnh hưởng: apt-get, git qua HTTPS, curl, TLS handshake — tất cả.

Sửa nhanh (một lệnh duy nhất)

Sao chép đồng hồ phần cứng của Windows vào đồng hồ hệ thống của WSL2:

sudo hwclock --hctosys

Chạy date trước và sau để thấy sự thay đổi:

date
# Thu Jun 18 03:21:45 UTC 2026  ← trễ vài tiếng

sudo hwclock --hctosys

date
# Thu Jun 18 10:47:02 UTC 2026  ← đúng rồi

Sau đó thử lại apt-get update. Lỗi "not valid yet" sẽ biến mất.

Không có hwclock? Dùng ntpdate thay thế:

sudo apt-get install -y ntpdate
sudo ntpdate time.windows.com

Phương án mạnh tay hơn: khởi động lại WSL2 từ PowerShell. Windows đặt lại đồng hồ VM khi khởi động, nên cách này luôn hiệu quả. Hãy lưu công việc đang làm trước.

# Đóng TẤT CẢ các phiên WSL
wsl --shutdown

Mở lại terminal WSL2 và đồng hồ sẽ đúng.

Xác nhận đã sửa xong

# Kiểm tra đồng hồ
date

# Chạy lại lệnh bị lỗi
sudo apt-get update

# Hoặc với git
git pull

Không còn thông báo "not valid yet" trong output của apt-get là bạn đã xong. Với git, pull hoặc fetch thành công xác nhận SSL đã hoạt động bình thường trở lại.

Sửa vĩnh viễn — tránh lỗi tái phát

Phải gõ sudo hwclock --hctosys mỗi lần laptop thức dậy sẽ rất phiền. Chọn một trong các cách dưới đây tùy theo phiên bản Ubuntu của bạn.

Tùy chọn 1: Bật systemd (Ubuntu 22.04 trở lên — khuyến nghị)

Ubuntu 22.04 và các phiên bản mới hơn hỗ trợ systemd bên trong WSL2. Khi đã bật, systemd-timesyncd sẽ tự động xử lý đồng bộ NTP — bạn không cần bận tâm về đồng hồ nữa.

Thêm đoạn này vào /etc/wsl.conf:

sudo tee -a /etc/wsl.conf <<EOF
[boot]
systemd=true
EOF

Khởi động lại từ PowerShell:

wsl --shutdown

Mở lại WSL2 và xác nhận dịch vụ đồng bộ đang chạy:

systemctl status systemd-timesyncd

Bạn muốn thấy active (running). Vậy là xong — lệch đồng hồ sẽ được xử lý tự động từ đây.

Tùy chọn 2: Tự động đồng bộ khi mở shell (Ubuntu 20.04 / không có systemd)

Thêm lệnh hwclock âm thầm vào file khởi động shell để nó chạy mỗi khi bạn mở terminal:

# Thêm vào ~/.bashrc hoặc ~/.zshrc
if [ -n "$WSL_DISTRO_NAME" ]; then
    sudo hwclock --hctosys 2>/dev/null || true
fi

Để bỏ qua yêu cầu nhập mật khẩu, cấp quyền sudo không cần mật khẩu cho user của bạn chỉ với lệnh hwclock:

sudo visudo

Thêm dòng này ở cuối file (thay yourusername bằng tên user Linux thực tế của bạn):

yourusername ALL=(ALL) NOPASSWD: /sbin/hwclock

Từ giờ mỗi terminal mới sẽ đồng bộ đồng hồ âm thầm trước khi bạn gõ lệnh đầu tiên.

Tùy chọn 3: Cài chrony để đồng bộ chính xác (debug TLS, Kerberos, hệ thống phân tán)

Với các công việc đòi hỏi độ chính xác đến millisecond — debug certificate, xác thực Kerberos, bất kỳ thứ gì phối hợp giữa các node phân tán — chrony ổn định hơn so với lệnh hwclock chạy một lần:

sudo apt-get install -y chrony
sudo systemctl enable chrony
sudo systemctl start chrony

Kiểm tra xem đang theo dõi chính xác chưa:

chronyc tracking

Output tốt sẽ hiển thị Leap status: Normal và độ lệch System time trong phạm vi millisecond. Thấy đơn vị giây thay vì millisecond? Quá trình đồng bộ vẫn đang hội tụ — đợi 30 giây rồi kiểm tra lại.

Tại sao WSL2 bị vậy còn WSL1 thì không?

WSL1 chạy các syscall Linux trực tiếp trên Windows kernel. Nó luôn dùng đồng hồ hệ thống của Windows — không thể bị lệch giờ.

WSL2 là một thứ khác hoàn toàn. Nó chạy một Linux kernel thật bên trong một VM Hyper-V nhẹ. Cho máy ngủ và VM đó bị tạm dừng lạnh. Khi resume, Windows không thông báo cho VM biết đã qua bao nhiêu thời gian, nên đồng hồ Linux đơn giản là sai.

Đây là hạn chế đã được ghi nhận của WSL2. Các cách dùng hwclock và NTP ở trên là những giải pháp đã được thiết lập. Nhóm WSL đang làm việc để tự động hiệu chỉnh đồng hồ khi resume, nhưng cho đến khi tính năng đó ra mắt, đồng bộ thủ công hoặc dùng systemd vẫn là con đường đáng tin cậy nhất.

Related Error Notes