Một tiện ích nhỏ để sửa đổi trực tiếp hệ thống tệp
Khi tôi lần đầu tiên giải quyết việc sử dụng phân phối linux cho các máy chủ từ xa của mình, tôi cần một cách để nhanh chóng cài đặt các hệ thống tệp gốc khác nhau trên một máy chủ đích, vì vậy tôi đã viết [paroodise].
Để có thể flash một thiết bị khối khởi động, bạn cần tháo ra . Bạn chỉ có thể ngắt kết nối nếu bạn ngừng sử dụng nó. Để ngừng sử dụng nó, bạn cần khởi động lại các dịch vụ của mình tại chỗ, từ một hệ thống tệp gốc khác. Điều này giống với những gì initramfskhi khởi động hệ điều hành dựa trên linux, hạt nhân thực thi hình ảnh khởi động để thiết lập hệ thống tệp từ vị trí true trong đó dịch vụ được đưa ra.
Để đạt được điều này trên một đã chạy hệ thống, chúng tôi phải cẩn thận cách chúng tôi khởi động lại các quy trình của mình. Chúng tôi không thể giết ssh trừ khi chúng tôi chắc chắn rằng tập lệnh của chúng tôi sẽ chạy cho đến khi thành công.
Toàn bộ quá trình dễ dàng hơn nhiều trên các bản phân phối không dựa trên systemd, vì systemd gắn sâu vào nhân linux, việc xử lý các quy trình của nó một cách thiếu thận trọng có thể gây ra hoảng loạn cho nhân ... thực tế là trên các bản phân phối gần đây hơn, đó là điều thường xảy ra :)
Khi tôi viết tiện ích nhỏ này, có vẻ như tôi không biết các cách ổn định để tạo ra các quy trình tồn tại lâu hơn các phiên ssh ban đầu, Nó nên được viết lại bằng các phương pháp nhất quán hơn.
Toàn bộ quá trình bao gồm
sao chép các tệp tối thiểu cần thiết để khởi động lại hệ thống tệp trên bộ nhớ
di chuyển (hoặc tạo lại) các điểm gắn kết hạt nhân (/dev
, /proc
, /sys
)
giết chết các dịch vụ trước đó được tạo ra bởi cây quy trình systemd đứng
thực thi lại systemd vào hệ thống tệp xoay quanh mới,systemctl daemon-reexec
Nếu mọi thứ hoàn thành thành công, tại thời điểm này, có thể tạo ra một dịch vụ ssh mới và đăng nhập vào một phiên mà các điểm gắn kết ban đầu có sẵn để sửa đổi.