Linux
如何允許在只讀 NFS 分區上進行本地寫入
我在 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=rw和dir2=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 掛載執行此操作;)
乾杯