1. 程式人生 > >詳解自動掛載檔案系統autofs

詳解自動掛載檔案系統autofs

autofs服務

=================================================
autofs檢測到使用者正試圖訪問一個尚未掛接的檔案系統,則自動掛載該檔案系統
如果它檢測到某個已掛接的檔案系統在一段時間內沒有被使用,那麼Autofs會自動將其解除安裝
幫助:man 5 autofs man auto.master

主配置檔案:/etc/auto.master

-------------------------------------------------
格式:map-point [type:]map [options]
舉例:/misc /etc/auto.misc --timeout 60
說明:將auto.misc指定的檔案系統掛載到/misc目錄下,最大空閒時間60秒
//map-point指定掛載點,但完整的掛載點由map-point欄位和map檔案共同決定。也可以指定為/- 表示掛載點完全由map檔案決定。
//type指定map的型別,引數比較多。如果map是一個文字檔案,則type為file;如果map為一個程式,則type為program;還有其他型別。
//map 指定掛載點路徑的部分組成、掛載選項、被掛載的檔案系統。特殊的map是-hosts 實際上指定map檔案為auto.nfs
//options 常用的是--timeout ,指定檔案系統在多長時間不被訪問則自動解除安裝。
//修改了主配置檔案後,需要重新啟動服務。修改其他配置檔案不用重啟服務。


map檔案:auto.smb auto.misc auto.nfs
-------------------------------------------------
//這裡只討論file和program型別的map。
file型別的map:
格式:key [-options] location
舉例:cd -fstype=iso9660,ro,nosuid,nodev :/dev/cdrom
說明:將/dev/cdrom檔案系統(光碟)掛載到/misc/cd目錄。這裡的cd與auto.master檔案的/misc構成了完整的掛載點。
//key key與auto.master中對應行的map-point構成完整的掛載點。注意:key前面沒有斜線/
//options 選項。fstype指定檔案系統型別,由autofs處理。其他選項提交給mount處理。
//location 檔案系統。如果檔案系統以/開頭,必須加冒號,否則無需加冒號。如nfs型別的檔案系統,192.168.0.106:/tmp <=前面無需加冒號
//如果你的key下有多個子目錄,且每個檔案系統都是掛載在子目錄上,如下。則需要在location前面增加一個欄位,指定子目錄的名稱,名稱必須以斜線開頭。
//下面第一行結尾的反斜線是用來連線下一行的(shell格式)。如果寫成一行,不需要這個反斜線。
192.168.0.106 -fstype=cifs /software ://192.168.0.106/software \
                /swap   ://192.168.0.106/swap

program型別的map:
格式:[-options] location //這是其執行後的標準輸出的格式。和file型別的一樣,只是無需指定key
說明:map為一個可執行的檔案(一般是指令碼)。這個指令碼在執行時獲取了一個引數$key。


key <=無論是map中的key還是輸入引數$key,其內容為掛載點路徑去掉auto.master的map-point欄位後剩餘的第一個目錄。
舉例:auto.master內容: /smb /etc/auto.smb       auto.smb內容: 192.168.0.106 -fstype=cifs /software ://192.168.0.106/software
完整的目錄因該是/smb/192.168.0.106/software   key內容為192.168.0.106

深入內容:

-------------------------------------------------
環境變數:man 5 autofs
可以在配置檔案中使用變數,這些變數被自動替換成變數值。如:/etc/auto.misc
cd -fstype=iso9660,ro,nosuid,nodev ${USER} :/dev/cdrom
//${USER}是一個變數,內容為當前使用者名稱。 掛載目錄為:/misc/cd/root   <=如果你以root登陸

特殊的符號:man 5 autofs
配置檔案中,符號&用來表示key值,符號*表示key為任意值
* -fstype=iso9660,ro,nosuid,nodev :/dev/cdrom   /misc/任意字串 《=訪問光碟
cd -fstype=iso9660,ro,nosuid,nodev /& :/dev/cdrom /misc/cd/cd 《=訪問光碟

輸入特殊符號:
基本上,在配置檔案中如果存在符號,都可能會出錯,解決的辦法就是給每個符號加反斜線\
cd -fstype=iso9660,ro,nosuid,nodev,fscontext=\"system_u\:object_r\:httpd_sys_content_t\" :/dev/cdrom


autofs 解析器對於包含如冒號、逗號和空格等的名稱非常敏感。應該用雙引號括住這些名稱(注:經測試,逗號用雙引號括住也不行)。

一個掛載問題:

請教一個問題
A: 192.168.1.100 執行 nfs服務
B: 192.168.1.200 是客戶端   mount -t nfs 192.168.1.100:/src /mnt
現在碰到一個問題 服務端A的nfs服務一旦跑死或者停掉之後

在B上面df  -h 直接卡住  , ll / 訪問根目錄也是卡住, fuser ,lsof 等似乎涉及到訪問/mnt 的動作 終端都會卡住,  按ctrl +c 也無法強制退出。

在B上面用netstat -an 檢視建立的連線  已經沒有跟A建立的連線了。

掛在程序automount卡死,ps -aux | grep automount程序狀態為D。

解釋:

這個現象是正常的,NFS伺服器掛了,客戶端不管執行 df 還是 cd /mnt 都會hang住,並且不能 ctrl+c強制退出。
只能等nfs伺服器啟動之後,或者重啟客戶端,就恢復了。

為了避免這個問題,掛載的時候要加和上soft選項。