使用 fstab 挂载 posixovl

使用 fstab 挂载 posixovl

以下行:

/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 分享您的包装脚本。我最近用它来挂载用户家中的目录。我发现我想用你的脚本改进两个问题:

  1. 重命名原始mont.posixovl二进制文件意味着一旦您的发行版的数据包管理器安装了新的更新,它可能会停止运行
  2. 原始版本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

相关内容