自動掛載支援

對於希望進行自動掛載支援的檔案系統(例如 fs/afs/ 中的 kAFS 和 fs/nfs/ 中的 NFS),可以使用此功能。 該功能包括允許執行核心內掛載和請求掛載點降級。 後者也可以由使用者空間請求。

核心內自動掛載

請參閱autofs - 工作原理的 “掛載陷阱” 部分

然後從使用者空間,你可以做類似的事情

[root@andromeda root]# mount -t afs \#root.afs. /afs
[root@andromeda root]# ls /afs
asd  cambridge  cambridge.redhat.com  grand.central.org
[root@andromeda root]# ls /afs/cambridge
afsdoc
[root@andromeda root]# ls /afs/cambridge/afsdoc/
ChangeLog  html  LICENSE  pdf  RELNOTES-1.2.2

然後,如果你檢視掛載點目錄,你會看到類似的內容

[root@andromeda root]# cat /proc/mounts
...
#root.afs. /afs afs rw 0 0
#root.cell. /afs/cambridge.redhat.com afs rw 0 0
#afsdoc. /afs/cambridge.redhat.com/afsdoc afs rw 0 0

自動掛載點過期

如果按照單獨概述的自動掛載程式掛載了要過期的掛載點,則自動過期掛載點很容易。

要執行過期,您需要按照以下步驟操作

  1. 建立至少一個列表,從中可以掛起要過期的 vfsmounts。

  2. 當在 ->d_automount 方法中建立新掛載點時,使用 mnt_set_expiry() 將 mnt 新增到列表

    mnt_set_expiry(newmnt, &afs_vfsmounts);
    
  3. 當您希望掛載點過期時,使用指向此列表的指標呼叫 mark_mounts_for_expiry()。 這將處理列表,標記其上的每個 vfsmount,以便在下次呼叫時可能過期。

    如果 vfsmount 已被標記為過期,並且如果其使用計數為 1(僅由其父 vfsmount 引用),那麼它將從名稱空間中刪除並丟棄(有效地解除安裝)。

    使用某種定時事件來驅動它,以固定的時間間隔呼叫它可能最簡單。

每次呼叫 mntput 都會清除過期標誌。 這意味著只有在上一次訪問掛載點後的第二次過期請求時才會發生過期。

如果移動掛載點,它會從過期列表中刪除。 如果在可過期掛載上進行繫結掛載,則新的 vfsmount 將不在過期列表中,也不會過期。

如果複製了名稱空間,則其中包含的所有掛載點都將被複制,並且位於過期列表中的那些掛載點的副本將被新增到相同的過期列表。

使用者空間驅動的過期

作為替代方案,使用者空間可以請求任何掛載點過期(儘管有些會被拒絕 - 例如,當前程序對 rootfs 的想法)。 它透過將 MNT_EXPIRE 標誌傳遞給 umount() 來實現這一點。 此標誌被認為與 MNT_FORCE 和 MNT_DETACH 不相容。

如果相關的掛載點被 umount() 或其父掛載點以外的其他東西引用,則將返回 EBUSY 錯誤,並且該掛載點將不會被標記為過期或解除安裝。

如果掛載點當時尚未標記為過期,則將給出 EAGAIN 錯誤,並且不會解除安裝它。

否則,如果它已經被標記並且未被引用,則將像往常一樣進行解除安裝。

同樣,每次除了 umount() 之外的任何東西檢視掛載點時,都會清除過期標誌。