Có cách nào để cung cấp các tập lệnh post-mount và pre-umount trong Linux không?
Tôi đang cố gắng thực hiện một số tập lệnh trên phương tiện lưu trữ khi được gắn kết và trước khi vượt qua (ví dụ: để đồng bộ hóa).
Bất kỳ trợ giúp đánh giá cao.
Có cách nào để cung cấp các tập lệnh post-mount và pre-umount trong Linux không?
Tôi đang cố gắng thực hiện một số tập lệnh trên phương tiện lưu trữ khi được gắn kết và trước khi vượt qua (ví dụ: để đồng bộ hóa).
Bất kỳ trợ giúp đánh giá cao.
Câu trả lời:
Nếu bạn đang cố gắng làm điều này cho những người gọi lệnh /sbin/mount
và /sbin/umount
lệnh, tất cả những gì bạn phải làm là tạo một chương trình bao bọc cho cả hai và lập trình những gì bạn muốn vào các chương trình trình bao bọc này.
Một chương trình trình bao bọc được thay thế /sbin/mount
bằng chương trình trình bao bọc gọi là thực /sbin/mount
(được đổi tên thành một cái gì đó như /sbin/mount-real
hoặc /sbin/umount-real
). Để ngăn bất kỳ ai gọi chương trình thực, hãy sử dụng quyền của nhóm để hạn chế chương trình và đặt bit SGID trên các chương trình trình bao bọc.
Nếu bạn đang tìm cách khắc phục mount(2)
cuộc gọi thư viện, đó là một nỗ lực và có thể khó khăn và có lẽ không nên vì điều này có thể gây ra sự cố cho hệ thống nội bộ xử lý, đặc biệt là trong khi khởi động và tắt máy.
Ngay cả với chương trình trình bao bọc, có lẽ bạn phải kiểm tra kỹ lưỡng để tránh nhiễu hệ thống và thực hiện các điều chỉnh phù hợp.
Bạn có thể có thể sử dụng hook kernel inotify , mặc dù một sự kiện không kết nối trước có thể rất khó nắm bắt vì tôi không chắc có sự kiện inotify nào được gửi trước khi thư mục bị xóa hay không.
/media
hoặc /mnt
), nhưng không phải nếu một hệ thống tập tin đã được gắn trên thư mục đó.
Giải pháp đơn giản nhất có lẽ sẽ hoạt động mãi mãi là thăm dò ý kiến /etc/mtab
hay /proc/mounts
. Khi một thay đổi đối với tệp đó được thực hiện, điều đó có nghĩa là một cái gì đó đã được gắn kết hoặc không được đếm. Sau đó, bạn phải kiểm tra ở đó cho thiết bị bạn muốn.
Udev không phải là giải pháp tốt nhất vì nó chỉ cho bạn biết nếu một thiết bị được kết nối. Nó không nói nếu thiết bị đã thực sự gắn kết hay không. Điều này đôi khi có thể hoạt động nhưng đó là một giải pháp khó khăn mà đến một lúc nào đó sẽ bị phá vỡ và bạn sẽ nhổ tóc ra.
bạn có thể viết một quy tắc udev để làm điều đó. Tôi đã sử dụng một cái gì đó như thế này để tự động sao lưu công cụ vào ổ đĩa USB. Công cụ thú vị.