Kết nối với sự kiện mount / umount linux


9

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.


Làm thế nào là hệ thống tập tin được gắn kết? Mọi thứ không được tự động gắn kết có lẽ bạn có một số chương trình / công cụ đang thực hiện việc gắn kết cho bạn. Bạn cần xác định đó là gì và thay thế nó hoặc sửa nó.
Zoredache

Trong trường hợp của tôi, tôi thường sử dụng hệ thống con KDE (có lẽ đó là Cá heo, không biết thành phần nào chịu trách nhiệm cho lệnh mount thực tế)
Jörg Haubrichs

1
tôi đã viết về việc xử lý các thiết bị tự động với uDev hoặc với HALevt để trả lời cho một câu hỏi khác. đó sẽ là những sự thay thế cho hệ thống con KDE hoặc GVFS, nhưng quy trình có thể cung cấp cho bạn một số ý tưởng về nơi cần tìm. có vẻ như bạn muốn chạm vào các gắn kết Dbus (máy tính để bàn / không gian người dùng thay vì cấp hạt nhân).
quack quixote

Câu trả lời:


2

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/sbin/umountlệ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/mountbằ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-realhoặ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.


Lời khuyên rất tệ và một nỗi kinh hoàng duy trì nếu nhiều chương trình sẽ làm điều này. Đừng bắt đầu theo cách này.
Lothar

0

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.


2
inotify sẽ cho bạn biết rằng một thư mục đã được tạo (ví dụ dưới /mediahoặ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 đó.
Craig McQueen

0

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/mtabhay /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.


"Hacky" thường đủ tốt cho hầu hết các tình huống. Thế giới thực được điều hành bởi các giải pháp "hacky". Nếu bạn không biết điều đó thì bạn không có kinh nghiệm trong thế giới thực bằng hệ thống máy tính. Hãy lưu ý kiến ​​của bạn cho chính mình và bám sát thực tế. Cảm ơn.
natxo asenjo

1
@natxoasenjo đó là lý do tại sao có những nhà phát triển tốt và nhà phát triển tồi.
Pithikos

vui lòng quay lại khi bạn có một số kinh nghiệm trong thế giới thực. Những gì bạn đề xuất là viết một số tập lệnh / chương trình để thăm dò các tập tin và bạn nghĩ rằng đó là một ý tưởng tốt hơn là sử dụng một api được thử nghiệm tốt như udev. Ai là người phát triển xấu? ;-)
natxo asenjo

và nhân tiện, viết các quy tắc udev không giúp bạn trở thành một nhà phát triển, nhiều nhất là một sysadmin của máy tính của bạn.
natxo asenjo

1
@natxoasenjo tốt nếu bạn không thấy rằng các chương trình "thế giới thực" luôn bị hỏng do các giải pháp hackish thì bạn bị mù hoặc không có "trải nghiệm thế giới thực". Udev hoạt động tốt nhưng không liên quan gì đến việc gắn kết và ngắt kết nối. Và xin vui lòng ngừng biến điều này thành một chủ đề diễn đàn về ai là lập trình viên. Không giúp được ai.
Pithikos

0

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ị.


1
udev dường như không có một sự kiện cho mount / unmount mặc dù. Nó kích hoạt ngay khi bạn kết nối / ngắt kết nối thiết bị. Và liên kết của bạn không hoạt động ..
Pithikos

đã được trả lời 4 năm trước. Tôi không chịu trách nhiệm cho trang web đó. Nhưng bạn có thể xem qua archive.org ..., vâng, nó vẫn ở đó, việc tìm kiếm nó sẽ được để lại như một bài tập cho người đọc. Theo nhận xét của bạn về udev, udev cho phép bạn viết các quy tắc và thực thi các hành động khi chúng được khớp. Đó là tất cả những gì bạn cần.
natxo asenjo

2
vấn đề là giúp những người khác vấp phải vấn đề, đó không phải là về điểm hay các yếu tố thúc đẩy bản ngã khác. Bây giờ ngay cả khi người dùng trải qua tất cả những rắc rối đó, giải pháp ở đó đã lỗi thời. Vì vậy, bạn đang lãng phí thời gian của mọi người mà không có lợi ích gì (ngoại trừ 1-2 phiếu bầu bạn có).
Pithikos

2
@natxoasenjo những người dùng khác đều đúng và đây chính là lý do tại sao chúng tôi khuyến khích các câu trả lời trích dẫn hoặc diễn giải đủ thông tin từ các tài nguyên được liên kết để câu trả lời đứng riêng nếu các liên kết bị chết. Một câu trả lời tốt ở đây sẽ thực sự cho thấy một ví dụ về cách tạo quy tắc udev để chạy tập lệnh trước / sau khi gắn / ngắt kết nối.
nheo

1
@natxoasenjo Tôi đã truy cập bài đăng vì nhận xét của bạn bị gắn cờ bởi một người dùng không liên quan là thô lỗ hoặc bất lịch sự. Stack Exchange có những kỳ vọng nhất định cho câu trả lời, một trong số đó là chúng phải chứa nhiều hơn một liên kết đến một nguồn bên ngoài. Câu trả lời của bạn không đáp ứng yêu cầu đó. Bạn có ý kiến ​​về những gì "hoàn toàn ổn" không phù hợp với kỳ vọng của Stack Exchange để có câu trả lời hay. Xin vui lòng dành chút thời gian để đọc Làm thế nào để trả lời .
nhink
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.