Tự động gắn USB vào plugin mà không cần UUID


9

Vì vậy, tôi đang làm một trung tâm truyền thông. Tôi cần Pi để tự động gắn bất kỳ thanh USB nào tôi cắm vào. Không có vấn đề gì về hệ thống tập tin (vfat, NTFS, ext). Tôi đã tìm kiếm khắp nơi và không thể tìm thấy bất cứ thứ gì hoạt động. Vâng, usbmount hoạt động một phần. Tôi không thể lấy nó để gắn NTFS và làm cho tất cả người dùng có thể truy cập ổ đĩa flash.

Chạy Raspbian Jessie Lite trên RPI3


1
Tại sao bạn không sử dụng một trung tâm truyền thông bên ngoài như OpenElec hoặc một cái gì đó tương tự? Họ có tất cả các quirks ủi ra.
Dr_Bunsen

5
Bởi vì tôi muốn tìm hiểu thêm về Linux
pauliucxz

Câu trả lời:


7

Vì vậy, tôi tìm thấy một giải pháp hoạt động khá tốt. Rất cảm ơn avanc và quy tắc udev của anh ấy đã làm cho điều này có thể. Tôi cũng đã sửa đổi nó để nó có thể gắn tối đa 4 ổ flash cùng một lúc (nó có thể tăng lên nếu cần).

Yêu cầu

  1. Cài đặt pmount nếu không cài đặt sudo apt-get install pmount
  2. Kịch bản lệnh này gắn ổ đĩa vào /media/usb*, vì vậy hãy đảm bảo rằng các thư mục đó không bị chiếm dụng. Nếu bạn muốn có một cái nhìn rõ ràng hơn, đừng tạo bất kỳ thư mục nào.

Quy tắc Udev

  1. Tạo tập tin /etc/udev/rules.d/usbstick.rules
  2. Chèn:

    ACTION=="add", KERNEL=="sd[a-z][0-9]", TAG+="systemd", ENV{SYSTEMD_WANTS}="usbstick-handler@%k"
    
  3. Lưu và đóng

Dịch vụ hệ thống

  1. Tạo tập tin /lib/systemd/system/usbstick-handler@.service
  2. Chèn:

    [Unit]
    Description=Mount USB sticks
    BindsTo=dev-%i.device
    After=dev-%i.device
    
    [Service]
    Type=oneshot
    RemainAfterExit=yes
    ExecStart=/usr/local/bin/cpmount /dev/%I
    ExecStop=/usr/bin/pumount /dev/%I
    
  3. Lưu và đóng

Kịch bản gắn kết

  1. Tạo tập tin /usr/local/bin/cpmount
  2. Chèn:

    #!/bin/bash
    if mountpoint -q /media/usb1
    then
       if mountpoint -q /media/usb2
       then
          if mountpoint -q /media/usb3
          then
             if mountpoint -q /media/usb4
             then
                 echo "No mountpoints available!"
                 #You can add more if you need
             else
                 /usr/bin/pmount --umask 000 --noatime -w --sync $1 usb4
             fi
          else
             /usr/bin/pmount --umask 000 --noatime -w --sync $1 usb3
          fi
       else
          /usr/bin/pmount --umask 000 --noatime -w --sync $1 usb2
       fi
    else
       /usr/bin/pmount --umask 000 --noatime -w --sync $1 usb1
    fi
    
  3. Cấp quyền thực thi cho người dùng (root): chmod u+x /usr/local/bin/cpmount

  4. Lưu và đóng

Hoàn thành

Khởi động lại RPi của bạn và kiểm tra.

GHI CHÚ

  • Bạn có thể thay đổi các tham số pmount, nhưng chúng cho phép mọi người r / w truy cập vào usb.
  • Số lượng điểm gắn kết có thể được thay đổi.
  • Cảm ơn avanc cho quy tắc và dịch vụ udev của mình .

Điều này hoạt động tốt, ngoại trừ Lưu ý (1) cho biết điều này cho phép truy cập r / w, nhưng tùy chọn "-r" để điều chỉnh lực lượng r / o. thay đổi từng dòng trong bốn dòng trên thành "-w" để cấp quyền truy cập đọc-ghi đầy đủ.
Dave Lawrence

Ngoài ra bạn bỏ lỡ một 0ngày /usr/bin/pmount --umask 00 -noatime -r --sync $1 usb4?
GramThanos

Tôi đã sao chép và dán đoạn script này và nó đã bị lỗi. Bạn cần thêm một bổ sung 0cho umaskcờ và thêm -vào noatimecờ cho elsecâu lệnh đầu tiên của bạn ở đó, vì vậy toàn bộ câu lệnh nên có /usr/bin/pmount --umask 000 --noatime -r --sync $1 usb4.
homersimpson

2
@pauliucxz; Cũng có thể đề cập trong bài viết của bạn rằng tệp cpmountphải có quyền thực thi được đặt cho người dùng pi(không có cài đặt mặc định, chỉ có rwquyền được đặt theo mặc định): sudo u+x cpmount(bên trong /usr/local/bin). Nó không làm việc cho tôi chỉ vì lý do đó. Bây giờ nó hoạt động hoàn hảo ...
GeertVc

Đừng tạo dịch vụ systemd trong /lib/systemd/system//etc/systemd/system/thay vào đó hãy sử dụng . Đường dẫn trước được dành cho các dịch vụ được cung cấp bởi các gói đã cài đặt, trong khi đường dẫn sau có thể được quản trị viên hệ thống sử dụng cho các dịch vụ riêng của mình.
steviethecat

6

Phiên bản của tôi dựa trên câu trả lời ở trên:

Dịch vụ hệ thống

Đặt:

[Unit]
Description=Mount USB sticks
BindsTo=dev-%i.device
After=dev-%i.device

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/local/bin/automount %I
ExecStop=/usr/bin/pumount /dev/%I

trong /lib/systemd/system/usbstick-handler@.service

Kịch bản gắn kết

Đặt:

#!/bin/bash

PART=$1
FS_LABEL=`lsblk -o name,label | grep ${PART} | awk '{print $2}'`

if [ -z ${FS_LABEL} ]
then
    /usr/bin/pmount --umask 000 --noatime -w --sync /dev/${PART} /media/${PART}
else
    /usr/bin/pmount --umask 000 --noatime -w --sync /dev/${PART} /media/${FS_LABEL}_${PART}
fi

Trong /usr/local/bin/automount, và sau đó:

sudo chmod +x /usr/local/bin/automount

Khởi động lại.

Tên điểm / thư mục gắn kết sẽ ở định dạng /media/<PartitionLabel>_<sdxy>. Trong trường hợp một phân vùng không có nhãn, nó sẽ chỉ là /media/<sdxy>.

Vì vậy, tôi thường gắn nhãn ổ USB của mình với dung lượng của chúng. ví dụ 8G, 16G. Khi tôi cắm vào nhiều đĩa USB có cùng nhãn, tôi vẫn có thể phân biệt chúng như, ví dụ:

/media/500G_sdb1
/media/500G_sdc1

Cảm ơn. Tôi đã phải loại bỏ các --synctùy chọn. Tốc độ ghi rất chậm trên ổ đĩa ngoài USB của tôi
Mr Hyde

0

Giải pháp tốt nhất tôi đã tìm thấy cho việc này là sử dụng dịch vụ pmount .

Tôi đã sử dụng quy trình bình thường để cài đặt nó:

sudo apt-get install pmount

Điều duy nhất bạn cần lo lắng là nếu bạn đã có các thư mục thông thường trong / media / pi có cùng tên với ổ USB. Nếu bạn làm như vậy, nó sẽ nối một số khi nó gắn ổ đĩa.

Ví dụ: nếu bạn có một thư mục có tên / media / pi / STICK và sau đó bạn cài đặt ổ đĩa flash có tên STICK, bạn sẽ thấy nó đã gắn nó tại / media / pi / STICK1

Điều này có thể xảy ra nếu bạn đã cài đặt thanh nhưng không được đẩy ra đúng cách khi nó được gỡ bỏ, trước khi cài đặt pmount.

Khi điều đó xảy ra với tôi, các chương trình của tôi vẫn vui vẻ viết vào STICK của tôi nhưng khi tôi rút nó ra và cắm nó vào một máy tính khác thì nó trống rỗng. Nó được ghi vào thư mục chứ không phải vào thiết bị.

Vì vậy, tôi đã đổi tên thư mục thành / media / pi / temp, cài đặt pmount, gắn STICK và sao chép nội dung của temp sang / media / pi / STICK

Sau đó, khi tôi đẩy nó ra và xác minh trên một máy tính khác, nó đang thực hiện chính xác những gì tôi dự định.


Tôi đã cài đặt nó, nhưng nó không làm gì cả. Khi tôi cắm vào ổ falsh của tôi không có gì xảy ra. Tôi đã kiểm tra / phương tiện và nó trống rỗng. Tôi cũng đã kiểm tra lsblk và nó không được gắn ở bất cứ đâu.
pauliucxz

Nó sẽ hiển thị bên dưới / media / pi - sử dụng trình quản lý tệp để đi sâu vào đó và nhìn theo cách đó .. Nó cũng sẽ nhắc bạn nhập mật khẩu khi được cài đặt. Nếu không, thì có lẽ nó không nhận ra ổ flash đó. Một cách khác bạn có thể thấy đó là df -h
SDsolar

fdisk -l hiển thị ổ đĩa flash, nếu tôi gõ "pmount / dev / sda1 / media / pi / STICK" thì nó sẽ gắn kết thành công. Nhưng df -h không thấy nó. Tôi đã thử nhiều ổ đĩa và chúng vẫn không tự động gắn kết.
pauliucxz
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.