如何挂载路径中有空格的分区

如何挂载路径中有空格的分区

我创建了一个分区,我想将该分区挂载到此目录/home/max/VirtualBox VMs

我在 fstab 中写了这一行:

/dev/sda4 /home/max/VirtualBox\ VMs ext4 默认值 0 0

但它给出了这个错误

[mntent]: /etc/fstab 中的第 16 行有问题

我知道我收到此错误是因为“virtualBox VMs”之间存在空格

是否可以挂载到该目录?

[max@localhost VirtualBox 虚拟机]$ pwd
/home/max/VirtualBox 虚拟机

答案1

使用引号。

/dev/sda4 “/home/max/VirtualBox VMs” ext4 默认值 0 0

答案2

文件系统有自己的语法。要使用空格作为目录名称的一部分,您必须指定其代码点以零填充的 3 位八进制数,前面带有反斜杠(转义字符)。

ASCII,空格字符的代码点是八进制的 32 或 40,因此您可以使用:

/dev/sda4               /home/max/VirtualBox\040VMs  ext4    defaults        0 0

请注意,虽然其他字符的代码点也受支持,但支持程度相当不稳定。在我的计算机上,你可以写\127而不是W,但是不是 \070代替8...

答案3

我正在使用 Bash 函数将整个路径转换为代码点:

fstab_path(){
    local path=$1
    local s=
    local c=
    for i in $(seq 1 ${#path})
    do
        c=${path:i-1:1}
        s="$s"$(printf '\\0%o' "'$c")
    done
    echo "$s"  >/dev/stdout
}

path="path with spaces tabs etc.."
fpath=$(fstab_path "$path")

答案4

我遇到了同样的问题,但有一点不同:安装文件系统包含虚拟盒的子卷放入我的 ext4 分区上的主目录中(我刚刚更换了硬盘)。

我按照 Dennis 的解决方案操作,但仍然遇到问题。我遇到的问题是,新旧系统路径都包含空格,我的解决方案是替换全部包含空格的路径\040;它看起来像这样:

  • /dev/sda1是旧系统的 btrfs
  • /dev/sdb1新系统的
  • 挂载子卷path/with space/home/<user>/VirtualBox VMs
  • 最终的 /etc/fstab:
...
/dev/sdb1 /home ext4 defaults 0 0
/dev/sda1 /home/<user>/VirtualBox\040VMs btrfs defaults,subvol=path/with\040space 0 0
...

相关内容