Mount --bind 在同一檔案系統中移動文件,就像在同一檔案系統中一樣

Mount --bind 在同一檔案系統中移動文件,就像在同一檔案系統中一樣

如果我mount --bind /a/b並且如果我mv /a/bigfile /b/將花費很多時間(如果原始檔案很大)。這實際上會複製文件,然後刪除來源文件,而不是簡單地更新文件系統的文件表。

我了解如何以及為何mount --bind有效。正如其他人指出的那樣,對此有一些很好的解釋:

有沒有什麼方法可以告訴 mount amount --bind在同一個檔案系統中,以便透過實際更新檔案系統的檔案表來完成這樣的操作(移動)?

我問的是如何解決這個問題,而不是如何理解它:也許我不知道的內核補丁已經可用,或者我還沒有找到丟失的參數(等等)。

原因:在我當前的設定中,有一個服務(nextcloud)僅支援mount --bind.我無法使用符號連結。例如,如果我需要在 nextcloud 的每個帳戶中擁有一個共用資料夾,則必須使用綁定。我可以接受任何適用於 nextcloud 的解決方案,如果它是在檔案系統/核心層級制定的。這是因為當前設定還包括以其他方式存取這些文件,例如 ssh。換句話說,我希望能夠使用任何命令或應用程式來移動文件,例如範例。

答案1

顯然不是,手冊頁rename(2)提到了這一點:

EXDEV 舊路徑新路徑不在同一個安裝的檔案系統上。 (Linux 允許在多個點掛載一個檔案系統,但rename()不能跨不同的掛載點工作,即使在兩個掛載點上掛載相同的檔案系統也是如此。

如果我沒記錯的話,綁定安裝與多次安裝相同的檔案系統相同,即事後綁定沒有「來源」和「目標」。

還有另一個回答幾個月前關於同一主題的另一個問題。該連結指向與核心開發人員進行的討論。所以去投票吧。

答案2

我在 docker 容器中的 nextcloud 和 samba 也遇到同樣的問題。我透過將所有資料移至 nextcloud 中並讓其他人從該磁碟區綁定安裝它們來解決這個問題。

因此,從任何服務的角度來看,mv 總是只位於一個綁定掛載內。

不確定這是否對你有幫助

答案3

使用rsync代替mv應該可以解決問題。嘗試使用以下命令

rsync -avP /a/bigfile /b/bigfile

問題是因為 的視點mount --bind位於內核中,並且對諸如 之類的更高級別程式是隱藏的mv。與 不同的是mvrsync僅移動文件的已修改部分。

這解釋了關於mount --bind 什麼是綁定安裝?

相關內容