Freebsd

FreeBSD:刪除 devfs 中的符號連結

  • August 16, 2012

背景

我一直在改造一個小型的家用 NAS。這台伺服器代表了我第一次“真正”涉足伺服器管理領域,它已經教會了我很多東西。最初,這個東西是在一個拇指驅動器上使用 FreeNAS 設置的,該驅動器在 raidz1 中配置了 3 個磁碟。從那以後,我決定將整個系統遷移到 FreeBSD 9.0 (STABLE) 以更好地控制系統以及簡單地學習如何“自己動手”。一切進展順利,作業系統已成功安裝和更新(再次拇指驅動器,rw,訪問時間和其他一些東西被禁用以防止快閃記憶體濫用)。

現在我正在設置我的磁碟儲存,再次使用raidz1。為此,我已將所有要持久保存的文件複製到外部儲存中。在探索各種 zfs 命令時,我發現 FreeNAS 安裝中的原始 zpool 仍然可見。我使用導入和升級池

# zpool import ZFS1 tank   //Import the original zpool 'ZFS1', renaming it 'tank'
# zpool upgrade tank       //FreeNAS uses an older ZFS version, FreeBDS is v28
# zfs mount tank

並且能夠再次查看我的文件。肉汁。閒逛了一下,我決定還是要把舊水池吹走,重新開始。我發出

# zfs umount tank
# zpool destroy tank

完成沒有錯誤。現在我希望用這些磁碟重新創建一個“乾淨的”raidz1。

在創建新的 raidz1 之前,我在 中進行了一些探索,/dev只是想看看我能學到什麼。我想檢查陣列中使用的磁碟,但我得到的輸出對我來說似乎很奇怪。更糟糕的是,Google搜尋並不能真正解釋發生了什麼。磁碟列表如下:

# ls -l ad*
lrwxr-xr-x  1 root  wheel            4 Aug 12 20:50 ad2 -> ada2
lrwxr-xr-x  1 root  wheel            4 Aug 12 20:50 ad4 -> ada0
lrwxr-xr-x  1 root  wheel            4 Aug 12 20:50 ad6 -> ada1
crw-r-----  1 root  operator    0,  96 Aug 12 20:50 ada0
crw-r-----  1 root  operator    0,  98 Aug 12 20:50 ada1
crw-r-----  1 root  operator    0, 100 Aug 12 20:50 ada2

我知道我在設置 raid 時在 FreeNAS 中創建了三個虛擬磁碟,這是我懷疑連結的來源。我對此的問題如下:

  1. 通過搜尋符號連結的工作原理,我了解到符號連結只是將一個項目連結到另一個項目的文件。如果是這種情況,為什麼不使用“l”屬性列出 ada* 設備,而使用另一個屬性(可能是塊設備)列出實際硬體設備?
  2. 這些連結是我認為沒有必要的先前設置的產物。它們可以被刪除嗎?如果是這樣,如何(有點害怕隨意刪除東西;請參閱參考資料部分的最後一個連結)?刪除ad*條目是否會隱式刪除ada*節點,因為它們現在引用不存在的連結?還是我有這個倒退?
  3. 哪些是實際的硬體設備?正如我在上一個問題中提到的,我認為ad*節點將是字元設備或類似的東西,ada*節點將是連結文件。
  4. 最後,我知道根據設置和個人偏好肯定會有一些差異,但是將我的 SATA 設備配置為簡單的 raidz1 的“可接受”方式是什麼?對於一個簡單的家庭 NAS,所有這些符號連結業務似乎都是多餘的。

對於這篇長篇文章我深表歉意,但我已經嘗試了很長時間來理解這一點。提前感謝您的時間和幫助。

參考

  1. ada設備是連接到較新的 SATA 埠的驅動器。有些人錯過了備忘錄,因此修改了 DevFS 以提供這些設備名稱的符號連結作為傳統ad設備。但是,系統可能已經有一些較舊的 SATA 埠或 IDE 埠,因此它們將佔用較低的ad設備編號(ad0、ad1 等)。所以映射的ada設備得到更高的數字。

注意:如果您還沒有意識到,/dev是一種不同類型的文件系統 ( devfs )。雖然它顯示了像符號連結這樣的簡單結構,但它們並不是您所想的真正的符號連結。 2. 你的前提是錯誤的,見#1。 3. 那些沒有說它們是符號連結的(通過l你提到的)是設備驅動程序。它們有多“真實”,因為軟體也可以提供設備。 4. 我認為“最好”的方法是使用 GPT 分區,給它們起合理的名稱,並將這些命名的分區包含為 raidz 的 vdev。

像下面這樣的東西會做到這一點:

gpart create -s GPT ada0
gpart create -s GPT ada1
gpart create -s GPT ada2

gpart add -t freebsd-zfs -l tank-disk0 ada0
gpart add -t freebsd-zfs -l tank-disk1 ada1
gpart add -t freebsd-zfs -l tank-disk2 ada2

zpool create tank raidz /dev/gpt/tank-disk0 /dev/gpt/tank-disk1 /dev/gpt/tank-disk2

否則,最好將磁碟直接傳遞給 ZFS。兩種配置都有支持者。如果你走這條路,我強烈建議你也設置smartd監控磁碟執行狀況。還配置periodic為清理 zpool、監控 SMART 並向您發送定期報告(每週或任何您喜歡的)。

附帶說明一下,FreeNAS 和其他 FreeBSD 派生項目使使用 FreeBSD 比簡單地深入核心作業系統要容易得多。該手冊將指導您完成絕大多數您想要設置的內容,但隨著時間的推移,您也會遇到一些問題。如果您在 Google 上搜尋“手冊”,則 FreeBSD 手冊是第 2 個連結;這很重要/受歡迎/好。

關於參考的另一條註釋。第一個是一個糟糕的例子,因為你不應該對網卡進行符號連結,你應該重命名它們(雖然不是文件系統類型重命名)。DevFS 確實會響應連結和取消連結請求,主要是您所期望的。第二個和第三個參考文獻看起來不錯。請記住,連結類型比符號連結多。

引用自:https://unix.stackexchange.com/questions/45653