Gắn đĩa USB tự động (Cách thức hoạt động)


12

Bối cảnh: Tôi đang cố gắn một đĩa USB dưới dạng chỉ đọc nhưng cài đặt Ubuntu của tôi đang gắn nó khi tôi cắm đĩa vào.

Tôi có thể ngắt kết nối đĩa theo cách thủ công và kết nối lại bằng tay như chỉ đọc với các lệnh umount và mount nhưng điều đó không có gì thú vị. Ai đó có thể cho tôi một lời giải thích nhanh về cách chính xác các mount USB được thực hiện tự động trên một hệ thống linux thông thường (udev? Nền lịch sử cũng tốt) và có thể làm thế nào tôi có thể điều chỉnh quá trình này để cho tôi đọc đĩa ro?

Cảm ơn.

Chỉnh sửa: Tôi đang sử dụng gnome nếu điều đó có ích gì cả.
Edit2: Trong sự vội vàng của tôi, tôi đã quên cung cấp thêm một chút thông tin. Đây là những gì đĩa trông giống như đầu ra của 'mount'.

/dev/sdb1 on /media/LaCie type fuseblk (rw,nosuid,nodev,allow_other,default_permissions,blksize=4096)

Edit3: Điều này cũng có thể tương đối theo cách riêng của nó. Trong đầu ra mount tôi cũng có những điều sau đây:

gvfs-fuse-daemon on /home/fletcher/.gvfs type fuse.gvfs-fuse-daemon (rw,nosuid,nodev,user=fletcher)  

Tôi nghĩ rằng điều này có thể có liên quan đến gắn kết fuseblk ở trên, nhưng những gì tôi phát hiện ra là điều này.

Gvfs là hệ thống tệp ảo Gnome. Nó là một hệ thống tập tin ảo được xây dựng dựa trên các vfs kernel đã có sẵn. gvfs sử dụng thư viện GIO (là API VFS) để truy cập các tệp, thiết bị, vị trí mạng từ xa, v.v. Trong trường hợp trên ('gvfs-fuse-daemon') gvfs đang sử dụng FUSE để gắn tệp / vị trí / thiết bị. Đây thực chất là những gì xảy ra khi bạn gắn kết nối mạng từ xa trong Nautilus. Nó sẽ sử dụng FUSE để gắn kết vị trí (bên trong?) Thư mục .gvfs, và sau đó nó sẽ giao tiếp với lớp hệ thống tệp ảo gnome để giao tiếp với mount mới.

Về cơ bản cấu trúc này cho phép người dùng tự động gắn kết các vị trí mới và tương tác với chúng thông qua nautilus.

Chỉ để tham khảo: FUSE là một hệ thống tệp không gian người dùng, còn gọi là nó cho phép người dùng chạy mount ngay cả khi người dùng đó không root)

Vì vậy, nơi mà để lại cho tôi? Đĩa LaCie đang được gắn với loại fuseblk. Đây chỉ là một thiết bị khối gắn với cầu chì. Vì vậy, một số daemon đã tự động phát hiện ổ đĩa khi nó được cắm vào và sau đó tiếp tục và chạy cầu chì để gắn thiết bị khối của tôi. Vì vậy, daemon này là gì, và nó được cấu hình như thế nào (tôi đoán đó là một số điều gnome nội bộ) là câu hỏi quan trọng nhất. Một câu hỏi phụ là làm thế nào hệ thống tự động phát hiện một đĩa usb mới được chèn, nhưng tôi nghĩ đó là một phần của một mức độ thấp hơn và thấp hơn nhiều ở đây (đọc: udev?).

Liên kết:


Có một mục nhập fstab cho hệ thống tệp / media / LaCie và / hoặc thiết bị / dev / sdb1 không? Có phải / dev / sdb1 được dán nhãn bằng cách nào không (e2label / dev / sdb1)?
Tok

Không có mục fstab. Tôi tin rằng nó được dán nhãn khi nó được gắn kết tại / media / LaCie. Tôi chắc chắn cần phải cài đặt ntfslabel để chắc chắn tìm hiểu nhưng tôi sắp nghỉ việc. Nó cũng xuất hiện trên máy tính để bàn của tôi với tên LaCie.
fthinker

Câu trả lời:


3

Tôi đã cố gắng làm điều này trên máy tính của tôi và nó hoạt động :)

Đầu tiên tôi lấy tên cho thiết bị của mình:

ls -l /proc/disk/by-id/

Trong trường hợp của tôi, đó là / Proc / đĩa / by-id / usb-09a6_8001

Tôi đã thêm dòng này trong / etc / fstab:

/dev/disk/by-id/usb-09a6_8001   /media/macle ext2 ro,users 0 2

Và nó hoạt động, khi tôi cắm usbkey, nó được gắn ro và được sở hữu bởi người dùng của tôi.


Cảm ơn profy :) Nhưng lực đẩy chính của câu hỏi của tôi là để giảm bớt sự thất vọng tột cùng mà tôi cảm thấy mỗi khi tôi buộc phải hiểu cách thức các thiết bị automount và usb hoạt động. Tôi ở đây để giải mã ma thuật đằng sau những hệ thống phức tạp này. Bên cạnh đó, việc sử dụng các thiết bị fstab và usb là một chút khó khăn vì chúng không luôn được đảm bảo để cắm vào khi khởi động!
fthinker

1
Tôi không biết nó hoạt động như thế nào, nhưng tôi khá chắc chắn rằng các thiết bị mới được phát hiện theo quy tắc udev, hãy xem /etc/udev/rules.d/ và tại /lib/udev/rules.d/.
profy

2

Ngày nay, các giải pháp mặc định theo như tôi biết udiskmột trình nền cung cấp một api dbus cũng như giao diện dòng lệnh . Ngoài ra còn có nhiều trình bao bọc udisks và thiết bị tự động có sẵn.

Thông thường, bạn không udisktự cấu hình vì nó chỉ thực hiện những gì được nói để bạn phải xem xét Gnome. Có thể Tiện ích đĩa Gnome cho phép bạn sửa đổi / thay đổi các cờ gắn kết.


2

Như Ulrich Dangel đã nói, udisks nên là tài liệu tham khảo ngày nay. Tôi vẫn chưa thấy nó được thông báo như thế nào (udev-> dbus-> udisks?), Nhưng bằng tay nó có thể được sử dụng để gắn thiết bị với các tùy chọn bạn cần.

Udisks nói chuyện với polkit để xem người dùng được phép làm gì với khối lượng. Tôi đoán ở đây, nhưng nếu chúng ta có thể tìm một nơi để đặt thuộc tính cho một đĩa / thiết bị được đặt tên thì nó sẽ hoạt động.

Sử dụng udisksctl, người dùng của bạn sẽ có thể gắn thiết bị với các tùy chọn bạn cần, đại loại như thế này:

gắn kết udisksctl -b / dev / sdxy -o ro / mountpoint

Tuy nhiên, tôi không biết nơi để đặt các tùy chọn.

CẬP NHẬT: Theo đề xuất của Ulrich, tôi đã đi đến tiện ích đĩa Gnome và tôi đã đạt được những gì bạn cần nhưng không chắc đó có phải là giải pháp thanh lịch nhất hay không. Tôi đang sử dụng Kororaa 17 (dựa trên Fedora 17) với Cinnamon + Gnome3, đã đi đến tiện ích "Disks" và các tùy chọn gắn kết được sửa đổi cho ổ đĩa USB của tôi, thêm "ro" và lưu lại.

Nó thêm một mục vào fstab (đó là nơi tôi không xem đó là một giải pháp tao nhã, tôi nghĩ nó nên duy trì như một cấu hình người dùng không phải là hệ thống rộng), tôi cắm vào ổ đĩa và nó được gắn tự động vào điểm gắn kết đã chọn với các tùy chọn Tôi đã lưu tại tiện ích đĩa Gnome.


Bạn có ý nghĩa gì với bạn để xem nó được thông báo như thế nào? Bước nào còn thiếu?
Ulrich Dangel

Và nó không phải là udev→dbus→udisknhưngudev/uevent→udisk→dbus
Ulrich Dangel

Tôi có nghĩa là tôi không thực sự chắc chắn và tôi muốn xác minh nó nhưng bây giờ tôi thấy tôi đã không sai 100%.
tăng gấp

[đình công] Vui lòng hiển thị dòng đã được thêm vào fstab. Tôi muốn xác nhận những gì tôi nghĩ. [/ Strike] Vì vậy, dòng fstab phù hợp với câu trả lời của @ profy? tức là với rotùy chọn.
đảo ngược

-1

Về chủ đề làm thế nào kernel phát hiện phần cứng, đây là một bài viết rất hay những gì xảy ra .

Tóm tắt:

  • hạt nhân liên tục quét các bus PC của bạn và ánh xạ các thiết bị vào hệ thống tệp ảo, thường là bên dưới /sys/.
  • kernel gửi một thông báo rằng phần cứng mới có sẵn cho udev, trong đó:
    • xử lý quy tắc udev trên thiết bị
    • symlink thiết bị vào /dev/
    • tải trình điều khiển thiết bị
    • thông báo không gian người dùng của thiết bị thông qua dbus

Tại thời điểm này, thiết bị đã sẵn sàng để được sử dụng bởi không gian người dùng. Gvfs và FUSE đều là hệ thống tập tin người dùng.


Không, udevthường không thông báo cho các ứng dụng thông qua dbusviệc này được thực hiện bởi các ứng dụng của bên thứ ba. Nếu bạn sử dụng, qdbus --systembạn sẽ không thấy bất kỳ tên udev nào. Thông thường các applicaitons chỉ đăng ký chính họ ueventshoặc gửi các quy tắc riêng của họ
Ulrich Dangel

Cảm ơn đã chỉ ra rằng @ulrich. Tóm tắt của tôi đưa ra một phác thảo rất cơ bản bao gồm nhiều bước ở giữa. Xem các bài viết liên kết để biết chi tiết gritty.
đảo ngược

2
bài báo cũng sai vì thông thường không có cuộc bỏ phiếu nào liên quan đến việc giám sát xe buýt
Ulrich Dangel
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.