以下行:
/path1 /path2 posixovl none 0 0
失败并出现错误:
/sbin/mount.posixovl: invalid option -- 'o'
Usage: /sbin/mount.posixovl [-F] [-S source] mountpoint [-- fuseoptions]
这是因为mount.posixovl
使用非标准安装语法,并且fstab
假设默认安装语法将调用它,例如。
mount.posixovl /path1 /path2 -o [whatsoever_/etc/fstab_options]
编辑#1: 同样的问题,在这个 linuxquestions.org 问答中用一个更丑陋的 hack 解决了,标题为:[已解决] 如何在启动时安装fuse-posixovl 分区?
答案1
感谢 vehystrix 分享您的包装脚本。我最近用它来挂载用户家中的目录。我发现我想用你的脚本改进两个问题:
- 重命名原始
mont.posixovl
二进制文件意味着一旦您的发行版的数据包管理器安装了新的更新,它可能会停止运行 - 原始版本
mount.posixovl
始终以 root 身份启动,并且似乎忽略uid=
并gid=
安装选项。这导致安装文件系统的用户无法访问该文件系统
我稍微改变了你的脚本并将其保存到/sbin/mount.fuse-posixovl
(与 ubuntu 包名称相关),所以我可以使用 fstab 中的类型fuse-posixovl
来安装它。
这是脚本的修改版本:
#!/bin/bash
# wrapper for mount.posixovl to conform with common mount syntax
# with this wrapper posixovl can be used in fstab
# location of the original mount.posixovl
origposixovl="/sbin/mount.posixovl"
# gather inputs
while [ $# -gt 0 ]; do
if [[ "$1" == -* ]]; then
# var is an input switch
# we can only use the -o or -F switches
if [[ "$1" == *F* ]]; then
optsF="-F"
else
optsF=""
fi
if [[ "$1" == *o* ]]; then
shift
if [[ "$1" == *uid=* ]]; then
runas=$(getent passwd $(echo "$1" | sed -E -e 's/^.*uid=([^,]+)(,.*)?$/\1/') | cut -d: -f1)
fi
optsfuse="-- -o $1"
else
optsfuse=""
fi
shift
else
# var is a main argument
sourcedir="$1"
shift
if [[ "$1" != -* ]]; then
targetdir="$1"
shift
else
targetdir="$sourcedir"
fi
fi
done
# verify inputs
if [ "$sourcedir" == "" ]; then
echo "no source specified"
exit 1
fi
if [ "$targetdir" == "" ]; then
echo "no target specified"
exit 1
fi
# build mount.posixovl command
if [[ -n "$runas" ]]; then
su - "${runas}" -c "\"$origposixovl\" $optsF -S \"$sourcedir\" \"$targetdir\" $optsfuse"
else
"$origposixovl" $optsF -S "$sourcedir" "$targetdir" $optsfuse
fi
这是使用它的 fstab 行的示例:
/home/myuser/Nextcloud/homebin /home/myuser/bin fuse-posixovl uid=1000,gid=1000 0 0
答案2
我为此编写了一个包装器,mount.posixovl
使其可以与fstab
首先,重命名/sbin/mount.posixovl
为其他名称,例如/sbin/mount.posixovl.orig
/sbin/mount.posixovl
最后,创建一个包含以下内容的新文件:
#!/bin/bash
# wrapper for mount.posixovl to conform with common mount syntax
# with this wrapper posixovl can be used in fstab
# location of the original mount.posixovl
origposixovl="/sbin/mount.posixovl.orig"
# gather inputs
while [ $# -gt 0 ]; do
if [[ "$1" == -* ]]; then
# var is an input switch
# we can only use the -o or -F switches
if [[ "$1" == *F* ]]; then
optsF="-F"
else
optsF=""
fi
if [[ "$1" == *o* ]]; then
shift
optsfuse="-- -o $1"
else
optsfuse=""
fi
shift
else
# var is a main argument
sourcedir="$1"
shift
if [[ "$1" != -* ]]; then
targetdir="$1"
shift
else
targetdir="$sourcedir"
fi
fi
done
# verify inputs
if [ "$sourcedir" == "" ]; then
echo "no source specified"
exit 1
fi
if [ "$targetdir" == "" ]; then
echo "no target specified"
exit 1
fi
# build mount.posixovl command
"$origposixovl" $optsF -S "$sourcedir" "$targetdir" $optsfuse
当然,将新创建的设置/sbin/mount.posixovl
为可执行( chmod +x /sbin/mount.posixovl
)
posixovl
安装槽很有用fstab