Đơn vị -.mount bị che khuất: ứng dụng khách OpenVPN không khởi động
Một tệp -.mount sót lại trong /run/systemd/system che khuất đơn vị gắn kết gốc, nên mọi đơn vị cần hệ thống tệp đều thất bại trước khi OpenVPN khởi động.
Dịch vụ của bạn thất bại trước khi OpenVPN kịp chạy, và thông báo lỗi nói về một đơn vị gắn kết mà bạn chưa từng cấu hình. Đó chính là dấu hiệu: systemd từ chối toàn bộ giao dịch vì đơn vị gắn kết gốc bị che khuất, và hồ sơ VPN của bạn vẫn chưa được đọc. Nguyên nhân thường gặp là một tệp còn sót trong thư mục đơn vị thời gian chạy, không phải fstab hỏng và cũng không phải chứng chỉ thiếu. Hãy lần theo tệp trước, vì đó là lời giải thích rẻ nhất cần loại trừ.
Lỗi nêu tên gắn kết gốc, không phải hồ sơ của bạn
systemd tự tạo đơn vị gắn kết gốc từ thông tin gắn kết của nhân, và đặt tên đơn vị là -.mount vì dấu gạch ngang đại diện cho đường dẫn gốc. Đơn vị đó thường chỉ tồn tại trong bộ nhớ và không có tệp nào phía sau. Khi lỗi nói rằng nó bị che khuất, ai đó đã đặt một tệp đơn vị vào nơi systemd sẽ nạp nó và trỏ tệp đó tới /dev/null. Việc che khuất là trạng thái thật, không phải lỗi đánh máy trong thông báo.
Đơn vị phiên bản thất bại vì đồ thị công việc của nó chạm tới gắn kết gốc thông qua thứ tự và thông qua các yêu cầu gắn kết của chính nó. Giao dịch bị từ chối trước khi tệp nhị phân OpenVPN được thực thi, nên không gì trong cấu hình của ứng dụng khách có thể là nguyên nhân. Đó là lý do việc đổi hồ sơ, chứng chỉ hay thông tin đăng nhập không có tác dụng với lỗi cụ thể này.
Hãy xem thư mục thời gian chạy trước khi gỡ lỗi OpenVPN
Tìm một tệp có đúng tên đó trong thư mục đơn vị thời gian chạy, rồi hỏi systemd xem nó nghĩ đơn vị là gì. Cả hai câu trả lời đều nhanh, và cùng nhau chúng tách một tệp còn sót khỏi một vấn đề gắn kết thật sự.
ls -l /run/systemd/system/-.mount
systemctl status -.mount
systemctl list-unit-files --state=masked | grep mount
Máy bình thường không có tệp như vậy, và danh sách bị che khuất không chứa gắn kết gốc. Nếu lệnh đầu tiên in ra một liên kết tượng trưng tới /dev/null, chẩn đoán đã rõ. Cùng thư mục đó có thể chứa một lớp che tmp.mount do chính công cụ đó tạo ra, và nó gây ra cùng loại lỗi dưới một tên khác. Hãy nhìn toàn bộ thư mục chứ không chỉ cái tên trong lỗi.
ls -la /run/systemd/system/*.mount
Nếu thư mục sạch mà đơn vị vẫn bị che khuất, lớp che nằm ở chỗ khác trên đường tìm kiếm, và systemctl cat -.mount sẽ chỉ ra tệp nào đang được nạp.
Xóa tệp, nạp lại và khởi động lại
Chỉ cần gỡ tệp thời gian chạy và nạp lại trình quản lý, và việc đó không chạm vào thứ gì đến từ gói cài đặt. Hãy nạp lại trước khi khởi động, vì systemd giữ trạng thái đơn vị đã nạp cho tới khi đọc lại thư mục.
sudo rm -f /run/systemd/system/-.mount /run/systemd/system/tmp.mount
sudo systemctl daemon-reload
systemctl status -.mount
sudo systemctl start [email protected]
Sau đó hãy đọc nhật ký của chính dịch vụ thay vì cho rằng bản sửa đã có tác dụng. Khởi động sạch chỉ chứng minh systemd đã chấp nhận đơn vị; ứng dụng khách vẫn có thể chết vì hồ sơ thiếu, máy ngang hàng không tới được hoặc chứng chỉ không xác thực. Đó là những vấn đề OpenVPN thông thường từng bị giấu sau đơn vị bị che khuất. Nhật ký ghi lại hồ sơ nào đã được nạp và đường hầm có thực sự được thiết lập hay không. Nếu đơn vị chạy mà đường hầm không lên, bạn đã chuyển sang một vấn đề khác, và đó là tiến bộ.
journalctl -u [email protected] -b --no-pager
Vì /run là hệ thống tệp tạm thời, việc khởi động lại cũng xóa tệp. Điều đó khiến việc khởi động lại trở thành một phép thử hữu ích: nếu dịch vụ chạy sau khi khởi động lại và lại thất bại sau lần triển khai tiếp theo, thì tệp đang được nướng vào ảnh.
Ngăn nó quay lại từ ảnh
Mẫu vùng chứa hoặc máy ảo che khuất các đơn vị gắn kết trong lúc dựng sẽ mang lớp che đó vào mọi bản sao. Thứ tiếp theo cần hệ thống tệp sẽ hỏng, và thông báo đổ lỗi cho gắn kết thay vì ảnh mà nó đến từ đó. Sửa bên trong một phiên bản đang chạy sẽ giấu vấn đề cho tới khi phiên bản tiếp theo được tạo.
Tìm trong ngữ cảnh dựng tên tệp và lệnh tạo ra nó, rồi gỡ lớp che khỏi mẫu và dựng lại. Nếu lớp che thực sự cần trong lúc dựng, hãy gỡ nó ở cùng lớp kết thúc quá trình dựng, để ảnh xuất xưởng khởi động sạch. Kiểm chứng trên một bản sao mới chứ không phải trên máy bạn sửa bằng tay. Đó là phép thử duy nhất chứng minh ảnh đã thay đổi.
Triệu chứng cần nhớ là sự lệch nhau giữa lỗi và thứ bạn đang cấu hình. Khi systemd phàn nàn về một gắn kết trong lúc bạn khởi động ứng dụng khách VPN, hãy đọc tên đơn vị trong thông báo trước khi đọc tên dịch vụ.