Linux

如何允許在只讀 NFS 分區上進行本地寫入

  • April 20, 2015

我在 Ubuntu 12.04 上創建了自己的 PXE/NFS 網路引導伺服器,如此所述。如果我在伺服器端更改這樣的文件,我可以在客戶端寫入文件/etc/exports

/srv/ubuntulivecd/        *(rw,async,no_root_squash,no_subtree_check) 

我只想在本地更改文件。我的意思是如果我在本地寫入文件,這不應該更改 NFS 分區上的文件。如果我將rw(read-write)選項更改為ro(read-only),由於權限,我無法更改文件(如預期的那樣)。有沒有辦法在客戶端本地或臨時更改文件(所有文件必須在重新啟動或斷電後刪除)?

在客戶端中,您可以將文件複製到tmpfs(與 live-cd 啟動相同)。您需要在 NFS 上的 RO 文件系統和本地電腦上的tmpfs RW 文件系統之間設置**聯合類型 FS ( aufs )。

example for tmps:
$ mount -t tmpfs no_device /tmp

現在您在 /tmp 上所做的一切都將在 ramfs 上執行

example for union:
$ ls dir1
subdir
$ ls dir1/subdir
file1
$ ls dir2
subdir
$ ls dir2/subdir
file2
$ mkdir dir_union
$ mount -t aufs -o dirs=dir1=rw:dir2=ro no_device dir_union
$ ls dir_union
subdir
$ ls dir_union/subdir
file1 file2

注意dir1=rwdir2=ro。現在你可以$ rm dir_union/subdir/file2了,應該是ro,但是在聯合中你可以修改它,你不會得到錯誤。事實上,只有差異被映射。如果你這樣做

$ ls -la dir_union
file1 .wh.file2

其中 .wh.file2 是映射差異的文件。

與 CD ROM 相同:

$ mount -o ro /dev/cdrom /mnt/cdrom
mount -t tmpfs no_device /mnt/rw
mount -t aufs -o dirs=/mnt/rw=rw:/mnt/cdrom=ro no_device /mnt/union

在這裡,您將在 /mnt/union 中看到 CD-rom 的所有原始文件。如果修改它們,則映射差異,可以更改 /mnt/union 中的文件,但 /mnt/cdrom 中的原始文件保持不變。

現在,作為練習,為 NFS 掛載執行此操作;)

乾杯

引用自:https://serverfault.com/questions/581120