Làm cách nào để tự động gắn phương tiện di động vào / media / <LABEL> khi được chèn mà không cần bất kỳ môi trường máy tính để bàn nào?


17

Tôi có một hệ thống sid Debian (Wheezy) (và tương tự cho arch), không có bất kỳ môi trường máy tính để bàn nào (và không có Xorg nào cả).

Tôi có thể gắn thẻ SD, thẻ nhớ USB, ổ cứng gắn ngoài vào nhãn vào một thư mục được chỉ định /media/theo cách thủ công với mount/ umountvà các mục phù hợp /etc/fstabhoặc tự động khi khởi động, nhưng điều này hấp dẫn, hạn chế và không đủ năng động cho nhu cầu của tôi: nếu tôi muốn chúng được gắn vào /media/<LABEL>, mỗi thiết bị có một <LABEL>mục nhập khác nhau cần có mục nhập riêng và mỗi <LABEL>thư mục con cũng cần được tạo / xóa thủ công /media/).

Vì vậy, cách tốt nhất để gắn kết họ là những gì tự động trong /media/<LABEL> lúc chèn (và tháo gắn kết chúng khỏi hệ thống tập tin ngay khi họ đang cắm dù rủi ro đó là cho dữ liệu )?

Giải pháp lý tưởng sẽ:

  1. phát hiện khi một phương tiện di động đã được cắm-in (tức là khi được thêm vào trong /dev/như sdax, sdbx, ... bằng udev)
  2. tạo một thư mục /media/theo nhãn của nó (nhãn của phương tiện lưu động)
  3. gắn kết nó trong thư mục /media/<LABEL>RWchế độ (nếu hệ thống tập tin hỗ trợ điều đó) với flushtùy chọn (cho a vfat)
  4. phát hiện nếu phương tiện truyền thông đã được rút ra
  5. nếu sau đó, ngắt kết nối nó khỏi hệ thống tập tin
  6. xóa thư mục tương ứng khỏi /media/

(các thiết bị phải được gắn ở chế độ đồng bộ oviously, để tránh bất kỳ mất mát dữ liệu khi nóng cắm vì bộ nhớ đệm chỉnh sửa: synccách quá nhiều cho vfatphương tiện di động như vậy flush đã được tạo ra như là một sự thỏa hiệp , kém an toàn hơn sync, nhưng ít rủi ro theo quy định của cuộc sống xe máy của những ký ức flash)

Tôi tìm thấy một số thông tin về autofs, HAL, udisks, udisks2, usbmountvv, nhưng nó không rõ ràng mà người ta bị phản đối hay ưa thích, và dù sao, tôi đã không tìm ra cách để cấu hình chúng một cách dễ dàng trên hệ thống của tôi để làm điều đó, cho đến bây giờ ...


Đầu tiên, bạn đã tìm kiếm các câu hỏi tương tự? Tôi nhớ nó đã được hỏi. Thứ hai, việc ngắt kết nối nên xảy ra trước khi rút phích cắm.
enzotib

1
Tất nhiên tôi đã làm: o] Ở đây và trên superuser. Vấn đề là các công cụ tiến hóa (udisks / udev), hoặc bị phản đối (HAL?), "Không được ưa thích" khác (udisks2?), V.v. Dù sao, tôi đã không thể tìm thấy bất kỳ giải pháp làm việc hay rõ ràng. Hầu hết những gì tôi phát hiện ra đều biết dựa vào cơ chế môi trường máy tính để bàn (Gnome, KDE hoặc XFCE); Tôi không muốn phải cài đặt bất kỳ. Về unmouting, không nhất thiết. Nếu thiết bị được đặt thành sync, một deamon có thể ngắt kết nối thiết bị khỏi fs nếu phát hiện thấy thiết bị đã được rút phích cắm mà không mất dữ liệu. Tất cả các distro máy tính để bàn làm điều đó. Tôi muốn điều đó trong thiết bị đầu cuối.
cedbeu

Nhìn vào sự thay thếhalevt này cho . Về việc ngắt kết nối, thông thường DE mong bạn đẩy thiết bị ra khỏi trình quản lý tệp, trước khi rút phích cắm vật lý.
enzotib

Vâng đúng. Nhưng tôi đã thấy rằng một số trình tiện ích (trước đây được sử dụng) có thể ngắt kết nối các thiết bị từ fs chưa được ngắt kết nối trước khi rút phích cắm và thậm chí tự động xóa thư mục tương ứng của chúng khỏi / media / và vẫn hoạt động bình thường (nếu tất nhiên các thiết bị được cấu hình để đồng bộ). Cảm ơn bạn đã liên kết của bạn. Tôi sẽ có một cái nhìn ngay khi tôi trở về nhà trên udisksevt. Tôi đã có một cái nhìn về devmon và udiskie nhưng chúng không có trong các gói Debian. Nếu tôi có thể tìm thấy bất cứ điều gì khác, tôi sẽ thử điều đó nhưng tôi không thể tin rằng không có giải pháp riêng nào trên Debian để làm điều đó.
cedbeu

1
Tôi đang trên Debian quá và tôi sử dụng fdisk -lvà sau đó mount- đó là hai lệnh, nhưng OK, nếu bạn muốn nó tự động hoá, bạn sẽ phải phân tích fdisk -lđầu ra, và sau đó đặt nó trong mount- Tôi làm công cụ như vậy với head, tail, tr, cut, vv nhưng các chuyên gia thường làm điều đó với awkhoặc, thậm chí tốt hơn, tìm kiếm dữ liệu ở đúng nơi. Về việc xóa, ít nhất là đối với tôi khi tôi gắn kết /mnt, điều đó được thực hiện tự động. Về trình kích hoạt (khi bạn cắm vào) Tôi không có manh mối, nhưng vui lòng cho chúng tôi biết khi bạn giải quyết vấn đề này.
Emanuel Berg

Câu trả lời:


10

Tôi nghĩ rằng bạn đang tìm kiếm pmount.

Nếu bạn muốn tự động lắp khi chèn, hãy xem Tự động kết nối USB trên Debian .

Nếu hệ thống của bạn sử dụng udisks2 , đó là cách phản ứng ưa thích để chèn thiết bị lưu trữ di động. Xem Arch Wiki để biết các mẹo cấu hình cho Udisks.

Mặt khác, chương trình phản ứng khi một thiết bị mới xuất hiện là udev , vì vậy việc gắn tự động được kích hoạt theo quy tắc udev . Các usbmount gói cung cấp quy tắc udev để tự động gắn thiết bị lưu trữ USB và một vài người khác. Gọi mounttừ quy tắc udev không hoạt động đối với các hệ thống tệp FUSE (chẳng hạn như ntfs-3g), vì vậy hãy sử dụng udisks nếu bạn cần điều đó.

Bạn không thể tự động ngắt kết nối phương tiện khi chúng bị xóa vì quan hệ nhân quả không hoạt động theo cách đó. Các phương tiện truyền thông phải được ngắt kết nối trước khi nó được gỡ bỏ. Đối với phương tiện chỉ đọc, bạn có thể thoát khỏi việc ngắt kết nối sau khi xóa, mặc dù điều này có thể gây nhầm lẫn cho một số ứng dụng nếu chúng có tệp được mở trên hệ thống tệp đột nhiên biến mất. Đối với phương tiện có thể ghi, nếu bạn rút phích cắm hệ thống tệp được gắn, có khả năng hỏng dữ liệu.


Cảm ơn một triệu cho câu trả lời. Tôi sẽ thử điều đó càng sớm càng tốt và sẽ cho mọi người ở đây biết. Về việc không định hướng. Các bạn, làm ơn, đừng nói với tôi rằng đó là vấn đề nhân quả không phải là: o] Việc ngắt kết nối sau khi thiết bị được rút ra hoàn toàn có ý nghĩa (và có thể) ngay khi thiết bị được cấu hình đồng bộ. Sau đó, nó chỉ là một vấn đề của hệ thống tập tin. Nếu dữ liệu đã được chuyển mà không có bộ nhớ đệm (đồng bộ), thì không có vấn đề gì để rút phích cắm mà không ngắt kết nối. Sau đó, việc ngắt kết nối có thể được thực hiện và chỉ hữu ích để thông báo cho hệ thống rằng thiết bị không còn ở đó nữa.
cedbeu

1
@cblab Bạn đang quá đơn giản. Nếu một tệp được mở để ghi và bạn kéo thiết bị ra, tệp có khả năng bị hỏng; ngắt kết nối đảm bảo rằng không có tệp nào được mở. Trên nhiều hệ thống tập tin (không phải là FAT), việc ngắt kết nối nhiều hơn là đặt bit bẩn thành 0, chúng cần phải xóa một bản ghi. Đối với các thiết bị flash, mối quan tâm chính với ngàm đồng bộ là nó làm thiết bị hao mòn nhanh hơn rất nhiều, vì nó ngăn chặn việc ghi nhóm. Xem superuser.com/questions/180722/ và và listlist.com/lists/vger.kernel.org/linux-kernel/22/111748.html
Gilles 'SO- ngừng trở nên xấu xa'

Xin chào @Gilles. Cảm ơn bạn đã trả lời. Tôi không nghĩ rằng tôi quá đơn giản, mặc dù. Bạn đang đúng về một số điểm. Nhưng, người dùng quyết định liệu anh ta có muốn sống rủi ro hay không. Bạn đồng ý, bài viết của bạn là 7 tuổi; bây giờ, một flushtùy chọn gắn kết được thiết kế đặc biệt để vfattránh những vấn đề đó: việc viết không được thực hiện sau mỗi khối, nhưng ngay khi thiết bị dường như không hoạt động. Và những ký ức chớp nhoáng cũng làm tăng đáng kể vòng đời chết chóc của họ. Bây giờ, rõ ràng người dùng phải lưu ý không rút phích cắm thiết bị trong khi các tệp được mở hoặc trong một bản sao (hoặc ngay sau đó). Nhưng đó là sự thỏa hiệp tốt.
cedbeu

Dù sao, usbmount có thể là lựa chọn tốt cho tôi, nhưng thật không may, nó không gắn các thiết bị vào một thư mục tùy thuộc vào tên nhãn của chúng, nhưng trong /media/usb-*, không phù hợp với nhu cầu của tôi. Tôi muốn có thể tự động gắn kết các thiết bị /media/<DEV_LABEL>với flushtham số khi chúng được phát hiện (nếu có thể với việc tạo thư mục động) và để ngắt kết nối chúng và /media/tự động xóa các thư mục nếu chúng không được phát hiện nữa. Rủi ro tôi chịu là tùy thuộc vào tôi.
cedbeu

1
Hãy chú ý rằng usbmountkhông hỗ trợ NTFS kể từ jessienữa: bug.debian.org/774149
malat

2

Đây là cách gần đây tôi đã làm nó, và tôi khá hài lòng với phương pháp này bây giờ. Cái này dành cho Ubuntu 12.04 + gentoo, nhưng tôi đoán bất kỳ bản phân phối nào, cho phép cài đặt udev và autofs sẽ hoạt động.

Điều kiện tiên quyết: Bạn phải cài đặt udev + autofs.

Bước 1)

Tạo tệp "/etc/udev/rules.d/90-usbsd-auto.rules" sau đây (tất nhiên bạn có thể sử dụng bất kỳ tên nào miễn là nó kết thúc bằng ".rules"). :

# Add symlink /dev/usbdisks/<label> to /dev/sd[a-z][1-9] 
# if partition has a label
# Add symlink /media/usb/<label> to /media/autousb/<label>
# for automounter support
ACTION=="add", KERNEL=="sd*", ENV{DEVTYPE}=="partition", \
    ENV{ID_BUS}=="usb", ENV{ID_FS_LABEL_ENC}=="?*", \
    SYMLINK+="usbdisks/$env{ID_FS_LABEL_ENC}", MODE:="0660", \
    RUN+="/bin/rm /media/usb/$env{ID_FS_LABEL_ENC}", \
    RUN+="/bin/ln -sf /media/autousb/$env{ID_FS_LABEL_ENC} /media/usb/$env{ID_FS_LABEL_ENC}"

# Fallback: If partition has a NO label, use kernel name (sd[a-z][1-9])
ACTION=="add", KERNEL=="sd*", ENV{DEVTYPE}=="partition", \
    ENV{ID_BUS}=="usb", ENV{ID_FS_LABEL_ENC}!="?*", \
    SYMLINK+="usbdisks/%k", MODE:="0660", \
    RUN+="/bin/rm /media/usb/%k", \
    RUN+="/bin/ln -sf /media/autousb/%k /media/usb/%k"

# Some FileSystems emit a "change" event when they are unmounted.
# UDEV seems to delete the device symlink in this case :-(
# So we need to re-create it here
ACTION=="change", KERNEL=="sd*", ENV{DEVTYPE}=="partition", \
    ENV{ID_BUS}=="usb", ENV{ID_FS_LABEL_ENC}=="?*", \
    SYMLINK+="usbdisks/$env{ID_FS_LABEL_ENC}", MODE:="0660"

# Fallback: If partition has NO label, use kernel name
ACTION=="change", KERNEL=="sd*", ENV{DEVTYPE}=="partition", \
    ENV{ID_BUS}=="usb", ENV{ID_FS_LABEL_ENC}!="?*", \
    SYMLINK+="usbdisks/%k", MODE:="0660"


# When device is removed, also remove /media/usb/<label>
ACTION=="remove", KERNEL=="sd*", ENV{DEVTYPE}=="partition", \
    ENV{ID_BUS}=="usb", ENV{ID_FS_LABEL_ENC}=="?*", \
    RUN+="/bin/rm /media/usb/$env{ID_FS_LABEL_ENC}"

# Fallback: If partition has no label, remove /media/usb/%k
ACTION=="remove", KERNEL=="sd*", ENV{DEVTYPE}=="partition", \
    ENV{ID_BUS}=="usb", ENV{ID_FS_LABEL_ENC}!="?*", \
    RUN+="/bin/rm /media/usb/%k"

Điều này làm gì: Nó tạo ra hai liên kết tượng trưng, ​​một cho phân vùng thiết bị lưu trữ USB trong "/ dev / usbdisks / <...>". Nó sẽ sử dụng nhãn của phân vùng lưu trữ USB hoặc tên kernel, nếu không có nhãn. Liên kết tượng trưng thứ hai sẽ liên kết từ "/ media / usb / <...>" đến "/ media / autousb / <...>" điều này được thực hiện để hỗ trợ bộ đếm tự động (xem bước 2).

Lưu ý: Ban đầu tôi không sử dụng quy tắc với các biến ID_FS_LABEL_ENC, vì theo tôi, điều này rất nguy hiểm. Điều gì xảy ra nếu bạn cắm hai thanh USB sử dụng cùng một nhãn?

Nhưng người đăng đặc biệt muốn sử dụng nhãn của đĩa USB, vì vậy tôi đã sửa đổi các quy tắc cho phù hợp.

Để đảm bảo udev đọc các quy tắc này sử dụng

sudo udevadm control --reload-rules

Với tệp quy tắc udev này, mọi thứ được thiết lập để tự động phân vùng thiết bị lưu trữ USB. Lưu ý rằng ngay bây giờ, thiết bị sẽ KHÔNG được tự động hóa (cố ý). Nó sẽ được tự động hóa khi bạn sử dụng nó với

Bước 2)

Cài đặt tự động thành automount / media / autousb / <...>: Tôi đã thêm dòng sau vào tệp "/etc/auto.master" của mình (cho Ubuntu 12.04):

/media/autousb /etc/auto.usb --timeout=60

Điều này có nghĩa là AutoFS sẽ ngắt kết nối thiết bị sau 60 giây không hoạt động. Bạn có thể muốn sử dụng ít hơn hoặc nhiều hơn, tùy thuộc vào khẩu vị của bạn.

Đối với Gentoo, bạn phải sửa đổi "/etc/autofs/auto.master" để sử dụng hợp lý

/media/autousb /etc/autofs/auto.usb --timeout=60

Bây giờ tôi đã tạo "auto.usb" với nội dung sau:

#!/bin/bash

key=${1}
fstype=$(/sbin/blkid -o value -s TYPE /dev/usbdisks/${key})
if [ "${fstype}" = "vfat" ] ; then
  echo "-fstype=vfat,sync,uid=0,gid=plugdev,umask=007 :/dev/usbdisks/${key}"
  exit 0
fi
if [ "${fstype}" = "ntfs" ] ; then
  echo "-fstype=fuse.ntfs-3g,sync,uid=0,gid=plugdev,umask=007 :/dev/usbdisks/${key}"
  exit 0
fi
if [ "${fstype}" = "ext4" ] ; then
  echo "-fstype=ext4,sync,nocheck :/dev/usbdisks/${key}"
  exit 0
fi

exit 1

Auto.usb này cần phải được thực thi, để autofs sử dụng điều này như một tập lệnh (bash). Ví dụ

sudo chmod 0755 /etc/auto.usb

Việc này làm gì: Tập lệnh này sẽ cho AutoFS (/ usr / sbin / automount) cách gắn phân vùng thiết bị lưu trữ usb.

Trước tiên, tập lệnh sẽ sử dụng "/ sbin / blkid" để tìm hiểu loại hệ thống tệp nào trên phân vùng.

Tập lệnh sau đó sẽ cung cấp các tùy chọn gắn kết tùy thuộc vào phân vùng thiết bị.

Lưu ý: Tôi đã bao gồm mã mẫu cho các hệ thống tệp "vfat" (có lẽ phổ biến nhất cho các thẻ nhớ USB), "ntfs" và "xfs". Tất nhiên khá dễ dàng để mở rộng điều này để hỗ trợ nhiều hệ thống tập tin hơn.

Bước 3) Tùy chọn ... Để "nhả" == ngắt kết nối (các) thanh usb của bạn (hoặc phân vùng trên thanh USB của bạn), tạo tập lệnh trong / sbin / usbeject:

#!/bin/bash
killall -s SIGUSR1 /usr/sbin/automount

Với tập lệnh này, bạn có thể sử dụng "sudo usbeject" để ngắt kết nối tất cả các phân vùng thiết bị USB được gắn (bằng cách nói với autoount để ngắt kết nối chúng).

Tất nhiên bạn có thể chỉ cần đảm bảo rằng phân vùng không được sử dụng ở bất cứ đâu; Sau đó, bộ đếm tự động sẽ ngắt kết nối phân vùng sau khi hết thời gian 60 giây ...

Thủ thuật thực sự ở đây là sử dụng các liên kết tượng trưng từ "/ media / usb" đến "/ media / autousb":

  • Các liên kết tượng trưng "/ media / usb" sẽ được tạo bởi udev, cung cấp cho người dùng một cái nhìn tổng quan đơn giản về các phân vùng thiết bị lưu trữ usb ở đó
  • AutoFS sau đó sẽ tự động đếm phân vùng theo yêu cầu nếu bạn sử dụng nó qua / media / usb
  • Với tệp "auto.usb" theo kịch bản, bạn có thể hỗ trợ bất kỳ loại hệ thống tệp nào và ngoài ra, bạn cũng có thể hỗ trợ bất kỳ loại sơ đồ đặt tên nào.
  • Cách tiếp cận này hỗ trợ các thanh USB với nhiều phân vùng, ngay cả khi các phân vùng này sử dụng các loại hệ thống tệp khác nhau.

2

Ok, đã lâu rồi, nhưng tôi vẫn trả lời câu hỏi của mình với lựa chọn tốt nhất mà tôi tìm thấy cho đến bây giờ. Để tóm tắt: tạo udevquy tắc, được liên kết với một số tập lệnh (sẽ tạo / xóa thư mục và hủy / gắn thiết bị di động) và gắn vào udevloại sự kiện của thiết bị = partition.

1 - Tạo tập lệnh thêm / xóa

Lưu tập lệnh sau storage-automount.shvào /lib/udev/và làm cho nó có thể thực thi được ( sudo chmod a+x /lib/udev/storage-automount.sh):

#!/bin/sh

# set the mountpoint name according to partition or device name
mount_point=$ID_FS_LABEL
if [ -z $mount_point ]; then
    mount_point=${DEVNAME##*/}
fi

# if a plugdev group exist, retrieve it's gid set & it as owner of mountpoint
plugdev_gid="$(grep plugdev /etc/group|cut -f3 -d:)"
if [ -z $plugdev_gid ]; then
    gid=''
else
    chown root:plugdev $mount_point
    gid=",gid=$plugdev_gid"
fi

# create the mountpoint directory in /media/ (if not empty)
if [ -n $mount_point ]; then
    mkdir -p /media/$mount_point
    # other options (breaks POSIX): noatime,nodiratime,nosuid,nodev
    mount -t $ID_FS_TYPE \
      -o rw,flush,user,uid=0$gid,umask=002,dmask=002,fmask=002 \
      $DEVNAME /media/$mount_point
fi

Lưu tập lệnh sau storage-autounmount.shvào /lib/udev/và làm cho nó có thể thực thi được ( sudo chmod a+x /lib/udev/storage-autounmount.sh):

#!/bin/sh

# set the mountpoint name according to partition or device name
mount_point=$ID_FS_LABEL
if [ -z $mount_point ]; then
    mount_point=${DEVNAME##*/}
fi

# remove the mountpoint directory from /media/ (if not empty)
if [ -n $mount_point ]; then
    umount -l /media/$mount_point
    rm -R /media/$mount_point
fi

2 - Tạo udevquy tắc để đính kèm các tập lệnh đó vào các sự kiện

Và cuối cùng, thêm một udevquy tắc vào /etc/udev/rules.d/, ví dụ 85-storage-automount.rules:

ENV{DEVTYPE}=="partition", RUN+="/lib/udev/storage-automount.sh", ENV{REMOVE_CMD}="/lib/udev/storage-autounmount.sh"

và làm cho nó có các quyền giống như các quy tắc khác trong thư mục / thư mục đó

Bây giờ, khi bạn cắm thiết bị lưu trữ vào, một thư mục sẽ được tạo /media/theo tên phân vùng (tôi không nhớ nhưng tôi nghĩ nó cũng hoạt động với phân vùng NTFS) và phân vùng của bạn sẽ được gắn vào nó. Đó là R / W cho người dùng nếu bạn có một plugdevnhóm trên hệ thống của mình. Ngoài ra, các thiết bị được gắn ở chế độ đồng bộ để hạn chế rủi ro mất dữ liệu trong trường hợp rút phích cắm nóng.

Khi thiết bị bị xóa, thiết bị sẽ bị ngắt và thư mục bị xóa khỏi /media

Ngoài ra, công cụ để theo dõi các udevsự kiện là udevadm monitor, với các tùy chọn như --envhoặc --property:

$ udevadm monitor --env

Điều này đã được thử nghiệm và hoạt động tốt trên cả debian và arch, nhưng có lẽ hoạt động trên tất cả các bản phân phối dựa vào udev.


Tôi nghĩ rằng + r nên được thay thế bằng + x trong "đặt nó thành thực thi (sudo chmod + r /lib/udev/st Storage-autounmount.sh)"
Jeremy

Tôi có một bản cài đặt jessie mới mà tôi đã theo dõi chỉ dẫn của bạn chặt chẽ, nhưng không thể khiến automount xảy ra từ tty1, ngay cả sau khi khởi động lại (không có trong hướng dẫn của bạn, nhưng tôi cũng không có tự động khởi động lại trước). Lắp ổ USB được phát hiện (Tôi nhận được thông báo bảng điều khiển), nhưng không có gì hiển thị trong / media / (ngoại trừ cdrom). Tôi có thể tự gắn ổ USB, vì vậy tôi biết nó cũng hoạt động. [tiếp tục bình luận sau]
TomRoche

[tiếp tục từ nhận xét trước] Tôi đã cài đặt gói = udev, có dirs = {/ etc / udev / rule.d /, / lib / udev /} được điền trước và có tệp thực thi = udevadm trong $ PATH. Tôi muốn biết (1) trong bản phát hành Debian nào mà bạn thực hiện công việc này? (Tôi đang giả sử khò khè) (2) bạn đã cài đặt gói Debian nào udev?
TomRoche

@TomRoche là Wheezy, vào thời điểm đó, thực sự, và tôi chưa cài đặt gói đặc biệt nào, tôi đã cố gắng thực hiện một thiết lập tối giản và cố gắng tránh càng nhiều càng tốt để sử dụng các gói không được cung cấp bởi cài đặt tối thiểu. Tôi không cần phải khởi động lại, đó là lý do tại sao điều này không có trong hướng dẫn của tôi. Đã khá lâu tôi không tham gia vào nó. Tôi có thể thử lại sớm.
cedbeu

1

Tôi nghĩ rằng nó khá muộn nhưng tôi sẽ đăng nó nếu có ai cần nó: (cũng là câu trả lời StackExchange đầu tiên của tôi)

Sau khi kiểm tra giải pháp ở nhiều nơi, tôi tìm thấy một giải pháp đơn giản trong Arch Wiki:

Liên kết đến Arch Wiki .

Chúng ta có thể thêm quy tắc udisks2 để thay đổi thư mục mount mặc định từ /run/media/$USER/sang /media/<Label>.

Thêm quy tắc sau vào /etc/udev/rules.d/với tên như 99-udisks2.rules:

ENV{ID_FS_USAGE}=="filesystem|other|crypto", ENV{UDISKS_FILESYSTEM_SHARED}="1"

Sau đó, chúng ta có thể chỉ cần cài đặt một công cụ đơn giản như Udiskie cho automount.


Xin chào, và chào mừng ở đây. Cảm ơn sự lựa chọn của bạn. Đối với Udiskie, tôi thực sự muốn có một tùy chọn dòng lệnh đầy đủ (không có Xorg cũng như bất kỳ giao diện đồ họa nào có sẵn trên hệ thống). Và Câu hỏi là 6,5 năm tuổi (ow, gosh!), Tôi đoán bây giờ mọi thứ đã thay đổi :) Nhưng dù sao, +1 cho câu trả lời đầu tiên của bạn, cảm ơn bạn.
cedbeu

1

Vui lòng xem trang ArchWiki Udev . Bạn không được phép thực thi mounttừ các quy tắc của Udev hoặc từ các tập lệnh được thực thi bởi các quy tắc của Udev.

Tuy nhiên, như được hiển thị trong dự án udev-media-automount , việc thực hiện nó khá đơn giản bằng cách gọi một đơn vị Systemd từ quy tắc Udev, sau đó gọi một tập lệnh thực hiện việc gắn kết. Không giống như udisks2 và các giải pháp khác, udev-media-automount hướng đến trường hợp đơn giản mà bạn muốn gắn kết một cái gì đó với tư cách là rootngười dùng mà không nhất thiết phải chờ môi trường máy tính để bàn hoặc "phiên người dùng". Nó dường như chính xác là những gì OP đang yêu cầu, và tôi thấy nó có chức năng và dễ hiểu.


Rất vui, cảm ơn bạn. Đó là một câu hỏi khá cũ mà tôi đã hỏi (gần 7 năm trước, không làm tôi cảm thấy trẻ hơn ^^). Tuy nhiên, tôi sẽ xem xét đề xuất của bạn. Tôi đoán môi trường systemd đã trưởng thành hơn nhiều kể từ đó. Cảm ơn, tôi sẽ kiểm tra cái này!
cedbeu

0

Tôi tìm thấy một cách để làm điều này bằng cách chỉnh sửa tập tin / etc / fstab. Một mục đơn giản trông như:

/dev/sdb1 /media/robot/hdd1 ntfs defaults 0 0

<file system> <mount point> <type> <options> <dump> <pass>


Gắn kết /etc/fstabchỉ được tự động gắn khi khởi động.
Graeme

@Graeme, tôi có một thẻ sdcard mà tôi gắn qua / etc / fstab. Để thử nghiệm, tôi đã thử ngắt kết nối và gỡ bỏ sdcard khỏi máy tính của mình. Tôi đã xác minh rằng giá treo không còn hiển thị qua 'df'. Khi tôi chèn lại thẻ sdcard của mình, gắn kết sau đó sẽ xuất hiện lại mặc dù tôi đã không kể lại một cách rõ ràng. Đây là trên Ubuntu 16.04.
Gino

@Gino, Ubuntu đã thực hiện cài đặt tự động theo mặc định một thời gian rồi.
Graeme

@Graeme, có vẻ như thiết bị tự động Ubuntu đang chọn mount chính xác từ / etc / fstab, nếu nó tồn tại ở đó. Vì vậy, ít nhất là trên Ubuntu 16.04, ngàm được tự động gắn vào lúc khởi động sau khi chèn lại vào cổng usb, nếu có bất kỳ ..
Gino

@Gino Tôi đã không sử dụng Ubuntu trong một thời gian, nhưng tôi khá chắc chắn rằng nó sẽ tự động hóa thẻ sd của bạn bất kể những gì trong fstab. Fstab thiên về thiết lập các yếu tố hệ thống cốt lõi hơn là các đĩa bổ sung trên các hệ thống hiện đại.
Graeme
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.