Answers:
经过大量研究,我可以使用usbmount解决我的问题:
sudo apt-get install usbmount
。安装NTFS驱动程序包的ntfs-3g的使用sudo apt-get install ntfs-3g
。
通过使用来打开usbmount文件,将usbmount配置为挂载指定的文件系统sudo nano /etc/usbmount/usbmount.conf
。
这儿有一行叫FILESYSTEMS=""
。仅通过usbmount挂载此行中指定的文件系统,因此我们将其更改为:FILESYSTEMS="vfat ntfs fuseblk ext2 ext3 ext4 hfsplus"
如果要使用usbmount挂载NTFS文件系统,请确保将ntfs和fuseblk添加 到该行。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驱动器只能访问几秒钟时,这是该问题的解决方案。此修复程序来自Christian Weinberger。
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"
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/mtab
USB设备安装到的文件夹。默认情况下,它们被挂载到/ media / usbstick0。
资源:
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步)。
对于那些试图在更新的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上运行,以作参考