パスにスペースがあるパーティションをマウントする方法

パスにスペースがあるパーティションをマウントする方法

パーティションを1つ作成し、そのパーティションをこのディレクトリにマウントしたいと考えました/home/max/VirtualBox VMs

fstab に次の行を書きました:

/dev/sda4 /home/max/VirtualBox\ VMs ext4 デフォルト 0 0

しかし、このエラーが発生します

[mntent]: /etc/fstab の 16 行目が不正です

このエラーは、「virtualBox VM」の間にスペースがあるために発生していることがわかっています。

そのディレクトリにマウントすることは可能ですか?

[max@localhost VirtualBox VMs]$ pwd
/home/max/VirtualBox VMs

答え1

引用符を使用してください。

/dev/sda4 "/home/max/VirtualBox VMs" ext4 デフォルト 0 0

答え2

スタバ独自の構文があります。ディレクトリ名の一部としてスペースを使用するには、コードポイント先頭にバックスラッシュ (エスケープ文字) が付いた、ゼロ埋めされた 3 桁の 8 進数として。

アスキースペース文字のコード ポイントは 8 進数で 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

私も同じ問題を抱えていましたが、少し違いがありました。マウントbtrfsVirtual Box を含むサブボリュームを ext4 のパーティション上のホーム ディレクトリにコピーしました (ハード ドライブを変更したばかりでした)。

私はデニスの解決策に従いましたが、それでも問題がありました。私が遭遇した問題は、古いシステムパスと新しいシステムパスの両方に、私の解決策で置き換えるスペースが含まれていたことです。全て;を含むスペースを含むパス\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
...

関連情報