/etc 檔案位於不同分割區

/etc 檔案位於不同分割區

我的設定要求我的一些/etc文件駐留在單獨的分割區上。為此,我創建了一個軟連結:

ls -li /etc/group
956 lrwxrwxrwx 1 root root 21 May  7 15:48 /etc/group -> /var/common/etc/group

ls -li /var/common/etc/group
3145744 -rw-r--r-- 1 root root 668 May 11 11:02 /var/common/etc/group

我的問題是當我嘗試使用這些文件執行命令時:

groupadd foo
groupadd: failure while writing changes to /etc/group

strace報告:

rename("/etc/group+", "/var/common/etc/group") = -1 EXDEV (Invalid cross-device link)
write(2, "groupadd: failure while writing "..., 54groupadd: failure while writing changes to /etc/group
) = 54

我有什麼想法可以去groupadd上班嗎?

答案1

/etc因此,跨分區分割檔案是一個壞主意。

發生的情況是,該groupadd實用程式正在創建一個臨時文件,然後/etc/groups透過一個簡單的操作用臨時文件替換真實文件(或更確切地說,符號連結指向的文件)rename
問題是它rename()只能在同一個檔案系統上工作,否則會拋出錯誤。

您可能在這裡遇到的另一個潛在問題是,當執行某些操作時rename,它會破壞符號鏈接,現在它是一個普通文件。

/etc另一個潛在的問題是,在系統有機會掛載其他磁碟區之前,需要許多檔案才能正確啟動。因此,這些文件實際上將會遺失。

 

簡而言之,不,這無法解決。而且無論如何都不該這麼做。

答案2

/etc應該位於根檔案系統上。明智的做法就是維持這種狀態。

如果您確實需要 split /etc,則使用聯合安裝可能會獲得更好的結果。我不知道Linux是否支援聯合掛載,其中一個元件與掛載點相匹配,但是,很難不將真正的/etc根檔案系統作為聯合掛載的一部分。

如果您想將所有內容放在/etc不同的分割區上,您可以製作一個/etc僅包含所需內容的最小分割區(/etc/fstab、 init 需要的內容(/etc/inittab/etc/init/etc/rc*或您的 init 系統使用的任何內容)、最小/etc/passwd/etc/group等)。在啟動早期(比!早很多/etc/rc.local),綁定掛載/var/common/etc/etc.但這需要做很多工作才能正確,並且會導致/var/common/etc成為整體/etc,這可能不是您想要的。這種設定對於某些不使用任何常用初始化系統並且對根檔案系統的大小有嚴格限制的嵌入式系統來說非常有意義。

如果您有一個/var/common在許多伺服器之間共享的伺服器,您應該以不同的方式解決這個問題。使用適當的設定管理系統將共用檔案部署到/etc.

/etc/passwd像和 這樣的檔案/etc/group不應該在機器之間共用。僅將這些檔案用於本機使用者和群組。對於跨電腦共用的項目,請使用 NIS 或 LDAP。

相關內容