Tự động hóa các hệ thống tập tin thanh USB khác nhau trên Jessie Lite


18

Tôi muốn có thể tự động kết nối các thanh USB fat32ntfs được định dạng khi đang di chuyển, như cắm nóng mà không cần khởi động lại Raspberry Pi 2. Tôi đã cài đặt ntfs-3g trên jessie-lite .

Đưa UUID vào fstabkhông phải là một tùy chọn vì tôi phải tìm UUID của mọi thiết bị. Tôi muốn có thể cắm các thiết bị USB khác nhau với các định dạng tệp khác nhau và tự động gắn chúng vào. Điều này có thể không?

Ngoài ra tôi đã từng gần như làm cho nó làm việc với usbmountchương trình. Tôi có thể truy cập ổ đĩa của mình trong một giây trước khi gặp lỗi transport endpoint is not connected. Tôi đã cài đặt lại chương trình nhưng sau đó tôi thậm chí không bao giờ đến điểm đó nữa, thậm chí không có lỗi.

Câu trả lời:


15

Sau rất nhiều nghiên cứu, tôi có thể khắc phục Sự cố của mình với usbmount:

Thêm ntfs vào usbmount

  1. Cài đặt usbmount với sudo apt-get install usbmount.
  2. Cài đặt gói trình điều khiển NTFS ntfs-3g với sudo apt-get install ntfs-3g.

  3. Định cấu hình usbmount để gắn kết các hệ thống tệp được chỉ định bằng cách mở tệp usbmount với sudo nano /etc/usbmount/usbmount.conf.

Ở đây có một dòng gọi là FILESYSTEMS="". Chỉ các hệ thống tệp được chỉ định trong dòng này được gắn kết qua usbmount, vì vậy chúng tôi thay đổi nó thành:FILESYSTEMS="vfat ntfs fuseblk ext2 ext3 ext4 hfsplus"

Nếu bạn muốn usbmount gắn kết hệ thống tập tin NTFS, hãy nhớ thêm ntfsfuseblk vào dòng. Các thiết bị NTFS đôi khi được liệt kê là fusblk bởi gói ntfs-3g, vì vậy hai thiết bị này giống nhau. Tôi thực sự không biết tại sao.

Ngoài ra, nếu bạn không thêm fuseblk trong cấu hình, các thiết bị NTFS chưa được cắm sẽ không tự động ngắt kết nối. Chúng sẽ được gắn kết và giữ thư mục mà chúng được gắn vào cho đến khi thiết bị được ngắt thủ công với unmount /dev/sda1 -> trong đó sda1 có thể là một biến khác .

Dòng quan trọng tiếp theo là FS_MOUNTOPTIONS="". Ở đây bạn chỉ định hệ thống tập tin nào sẽ được gắn kết và cách chúng nên được gắn kết.

Chúng tôi thay đổi nó thành: FS_MOUNTOPTIONS="-fstype=ntfs-3g,nls=utf8,umask=007,gid=46 -fstype=fuseblk,nls=utf8,umask=007,gid=46 -fstype=vfat,gid=1000,uid=1000,umask=007"

Với điều này, các hệ thống tập tin vfat (fat32) ntfs-3g (NTFS) và fuseblk (NTFS lại) được gắn kết. Tôi nghĩ rằng hầu hết các thông số có thể giữ nguyên. Một lần nữa ở đây chỉ cần thêm ntfs-3g ( thêm ntfs-3g chứ không phải ntfs ) và fuseblk để có thể gắn kết tất cả các tệp NTFS. Đối với nhiều hệ thống tập tin thêm nhiều dòng bắt đầu với -fstype=.

Giữ cho thiết bị NTFS được gắn cho đến khi rút phích cắm

Đây là một giải pháp cho vấn đề này, khi ổ đĩa NTFS được gắn chỉ có thể truy cập trong vài giây. Khắc phục sự cố này đến từ Christian Weinberger .

  1. Tạo tập tin usbmount.rules trong /etc/udev/rules.d/ với sudo nano /etc/udev/rules.d/usbmount.rules.

Đây là nội dung:

KERNEL=="sd*", DRIVERS=="sbp2",         ACTION=="add",  PROGRAM="/bin/systemd-escape -p --template=usbmount@.service $env{DEVNAME}", ENV{SYSTEMD_WANTS}+="%c"
KERNEL=="sd*", SUBSYSTEMS=="usb",       ACTION=="add",  PROGRAM="/bin/systemd-escape -p --template=usbmount@.service $env{DEVNAME}", ENV{SYSTEMD_WANTS}+="%c"
KERNEL=="ub*", SUBSYSTEMS=="usb",       ACTION=="add",  PROGRAM="/bin/systemd-escape -p --template=usbmount@.service $env{DEVNAME}", ENV{SYSTEMD_WANTS}+="%c"
KERNEL=="sd*",                          ACTION=="remove",       RUN+="/usr/share/usbmount/usbmount remove"
KERNEL=="ub*",                          ACTION=="remove",       RUN+="/usr/share/usbmount/usbmount remove"
  1. Tạo tập tin usbmount @ .service trong / etc / systemd / system / with sudo nano /etc/systemd/system/usbmount@.service.

Đây là nội dung:

[Unit]
BindTo=%i.device
After=%i.device

[Service]
Type=oneshot
TimeoutStartSec=0
Environment=DEVNAME=%I
ExecStart=/usr/share/usbmount/usbmount add
RemainAfterExit=yes

Bây giờ khởi động lại và kiểm tra xem cat /etc/mtabthư mục nào các thiết bị usb được gắn vào. Theo mặc định, chúng được gắn vào / media / usbstick0 .

Nguồn:

Kitô hữu sửa chữa

Tại sao fusblk?


Giải pháp này cần thêm một vài bước, xem câu trả lời của tôi.
AbiusX

2

Câu trả lời của Untermoser là chính xác, nhưng nó sẽ phá vỡ một số chức năng của usbmount.

Bởi vì anh ta đang sử dụng các đơn vị Systemd để sinh ra các quy trình để gắn kết (để kích hoạt NTFS), biến môi trường $DEVPATHkhông còn được gửi đến usbmount addlệnh, dẫn đến lỗi tạo liên kết tượng trưng.

Để khắc phục điều đó, hãy chạy như sau:

sed -i '/# Determine vendor/,/if/ s/\(.*vendor=\)/if [ -z "$DEVPATH" ]; then DEVPATH="$(udevadm info --query=path --name=\/$DEVNAME)"; fi\n\1/g' /usr/share/usbmount/usbmount

Lệnh trên tạo lại $DEVPATHnếu nó không có sẵn.

Ngoài ra còn có một lỗi khác trong usbmount usbmount remove. Nó lặp lại trên các điểm gắn kết và một trong số đó được xác định trong cấu hình usmount là không thể đếm được. Tuy nhiên, nếu một trận đấu được tìm thấy nhưng không có trong danh sách đó, hãy xóa các ngắt và không làm gì cả. Điều này đặc biệt quan trọng nếu bạn tạo nhiều điểm gắn kết cho một USB, vì usbmount nhìn thấy đầu tiên và không làm gì cả.

Để khắc phục, cần có thay đổi sau:

sed -i '/umount.d ||/,/break/ s/break.*//; /umount.d ||/,/done/ s/:/:\n\t\tbreak 2/' /usr/share/usbmount/usbmount

Điều này sẽ di chuyển sự phá vỡ bên trong vòng lặp bên trong (nơi thành công được đảm bảo và phá vỡ 2 bước).


1

Đối với những người đang cố gắng để có được cùng hoạt động trên Stretch (Lite) mới hơn và nhận thấy rằng câu trả lời của Untermoser và AlbiusX không bỏ qua các ổ đĩa vfat, bạn sẽ cần phải làm theo các bước bổ sung này ngoài các câu trả lời được cung cấp của họ :

Chạy lệnh sau trong terminal:

sudo mkdir -p /etc/systemd/system/systemd-udevd.service.d/

Điều này sẽ tạo ra các thư mục cần thiết. Tiếp theo, tạo một tập tin conf ở đây, ví dụ:

sudo nano /etc/systemd/system/systemd-udevd.service.d/shared-mount-ns.conf

Trong tập tin này thêm các dòng sau:

[Service] MountFlags=shared

Điều này sẽ thay đổi hành vi mặc định của systemd-udevd đối với các không gian tên hệ thống tập tin riêng để sử dụng các chia sẻ, tương đương với hành vi của udev trong jessie.

(Được cung cấp từ /unix/330094/udev-rule-to-mount-disk-does-not-work/330156#330156 )


Vì vậy, đây là vấn đề suốt - tôi đã xem xét các tài liệu lỗi thời. Đang chạy Linux raspberrypi 4.14.79-v7+trên Pi, để tham khảo
ctietze
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.