如何掛載路徑中有空格的分割區

如何掛載路徑中有空格的分割區

我建立了一個分割區,我想將該分割區掛載到該目錄/home/max/VirtualBox VMs

我在 fstab 中寫了這一行:

/dev/sda4 /home/max/VirtualBox\ VM ext4 預設值 0 0

但它給了這個錯誤

[mntent]: /etc/fstab 中的第 16 行有問題

我知道由於“virtualBox VM”之間存在空間而出現此錯誤

是否可以安裝到該目錄?

[max@localhost VirtualBox VMs]$ 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

我遇到了同樣的問題,但略有不同:安裝BTFS包含 Virtual 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
...

相關內容