在Jessie Lite上自动挂载各种USB棒文件系统


18

我希望能够自动挂载格式化的USB记忆棒fat32ntfs,就像热插拔而不重启我的Raspberry Pi2。我在jessie-lite上安装了ntfs-3g

fstab不能放入UUID,因为我必须找到每个设备的UUID。我希望能够插入具有不同文件格式的不同USB设备并自动安装它们。这可能吗?

同样,我曾经几乎将它与该usbmount程序一起使用。在出现错误之前,我可以访问驱动器一秒钟transport endpoint is not connected。我重新安装了该程序,但随后甚至连错误都没有到那个地步。

Answers:


15

经过大量研究,我可以使用usbmount解决我的问题:

将ntfs添加到usbmount

  1. 用安装usbmount sudo apt-get install usbmount
  2. 安装NTFS驱动程序包的ntfs-3g的使用sudo apt-get install ntfs-3g

  3. 通过使用来打开usbmount文件,将usbmount配置为挂载指定的文件系统sudo nano /etc/usbmount/usbmount.conf

这儿有一行叫FILESYSTEMS=""。仅通过usbmount挂载此行中指定的文件系统,因此我们将其更改为:FILESYSTEMS="vfat ntfs fuseblk ext2 ext3 ext4 hfsplus"

如果要使用usbmount挂载NTFS文件系统,请确保将ntfsfuseblk添加 到该行。ntfs-3g软件包有时会将NTFS设备列为fusblk,因此这两个是相同的。我真的不知道为什么。

另外,如果您未在配置中添加fuseblk,则拔出的NTFS设备将不会自动卸载。它们将保持挂载状态并保留其挂载文件夹,直到使用unmount /dev/sda1 -> 手动卸载设备为止,其中sda1可能是另一个变量

下一条重要的线是FS_MOUNTOPTIONS=""。在这里,您指定应挂载哪些文件系统以及如何挂载它们。

我们将其更改为: 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"

这样就安装了文件系统vfat(fat32)ntfs-3g(NTFS)和 fuseblk(再次为NTFS)。我认为大多数参数可以保持不变。再次在这里只需添加ntfs-3g(添加ntfs-3g而不是ntfs)和fuseblk即可挂载所有NTFS文件。要获取更多文件系统,请添加更多以开头的行-fstype=

保持NTFS挂载,直到拔出设备

当已安装的NTFS驱动器只能访问几秒钟时,这是该问题的解决方案。此修复程序来自Christian Weinberger

  1. 创建文件usbmount.rules/etc/udev/rules.d/sudo nano /etc/udev/rules.d/usbmount.rules

这是内容:

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. 创建文件usbmount @。服务的/ etc / systemd /系统/sudo nano /etc/systemd/system/usbmount@.service

这是内容:

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

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

现在重新启动,并检查cat /etc/mtabUSB设备安装到的文件夹。默认情况下,它们被挂载到/ media / usbstick0

资源:

基督徒修复

为什么要乱搞?


此解决方案还需要几个步骤,请参阅我的答案。
AbiusX '11

2

Untermoser的答案是正确的,但是它将破坏某些usbmount功能。

由于他使用Systemd单元生成要挂载的进程(以启用NTFS),因此$DEVPATH不再将环境变量发送到usbmount add命令,从而导致符号链接创建失败。

要解决此问题,请运行以下命令:

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

$DEVPATH如果上面的命令不可用,则会重新创建。

关于,usbmount中还有另一个错误usbmount remove。它遍历挂载点,并且在usmount config中定义的挂载被卸载。但是,如果找到匹配项但不在该列表中,请删除中断并不执行任何操作。如果您为一个USB创建多个安装点,则这一点尤为重要,因为usbmount会看到第一个并且不执行任何操作。

要修复,需要进行以下更改:

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

这会将中断移动到内部循环中(保证成功的地方,并中断2步)。


1

对于那些试图在更新的Stretch(Lite)上使用相同功能并且发现Untermoser和AlbiusX的答案没有卸载vfat驱动器的用户,除了提供的答案之外,您还需要按照以下额外步骤进行操作:

在终端中运行以下命令:

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

这将创建所需的所需文件夹。接下来,在此处创建一个conf文件,例如:

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

在此文件内添加以下行:

[Service] MountFlags=shared

这会将systemd-udevd的专用文件系统名称空间的默认行为更改为使用共享的名称空间,这等效于jessie中udev的行为。

(源自/unix/330094/udev-rule-to-mount-disk-does-not-work/330156#330156


所以这一直都是问题-我一直在寻找过时的文档。我Linux raspberrypi 4.14.79-v7+在Pi上运行,以作参考
ctietze
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.