閱讀512 返回首頁    go 中電雲集


FreeBSD建立文件係統

當係統負載逐步增加,僅僅依靠原有文件係統的空間是不夠的,更有效的方式是增加新的硬盤設備。這首先需要改動 硬盤及其控製器的硬件設置,以及FreeBSD內核配置,以便硬盤能安裝到計算機上並能被FreeBSD內核正確識別 。接下來就需要在新硬盤上創建新的文件係統。

在係統安裝過程中,已經接觸了在FreeBSD下管理硬盤和分區的方式,FreeBSD需要兩個步驟才能為文 件係統分配一個硬盤空間,第一步是為FreeBSD創建一個UFS係統分區,這個分區隻由FreeBSD來使用,然後 在第二步中從這個分區中,為各個文件係統劃分空間,在FreeBSD下稱為創建文件係統的DiskLabel標簽。

最容易和直觀的創建新文件係統或交換空間方式是使用安裝程序sysinstall,以便係統啟動能夠自動安裝 上這個文件係統。使用Sysinstall來安裝新文件係統的方式在係統安裝的過程中已經有了詳細描述,以root權 限執行/stand/sysinstall就能進入Sysinstall,然後選擇Partition進行分區,選擇 Label創建和維護BSD文件係統。

  • 建立文件係統的命令行方式

除了使用sysinstall之外,還可以使用命令行的方式來完成這些操作。相比較而言,命令行的方式更困難 ,也更容易出錯,因此一般不需要使用這種方式,然而命令行方式能帶來更大的靈活性,在一些係統維護情況下更為有效。

命令行方式建立文件係統需要使用fdisk命令進行硬盤的分區工作,fdisk能查看係統分區表上的分區信息 ,並更改其分區設置;然後disklabel命令可以在分區中劃分不同子分區空間並標記各個空間的DiskLabel ;使用newfs建立新文件係統,或者使用swapon命令增加交換設備。

創建新文件係統,首先要使用交互式的fdisk命令(使用-i參數)對硬盤進行分區,不帶參數的fdisk命 令僅僅顯示該硬盤的分區設置,而不能更改設置。fdisk均使用它檢測到的硬盤設置作為缺省設置,如果不需要改變,就 可以直接使用這些缺省設置回應其詢問。在fdisk中可以修改的數據有硬盤映射數據,以及四個分區的起始位置和類型。

# fdisk -i wd1

******* Working on device /dev/rwd1 *******

parameters extraced from in-core disklabel are:

cylinders=525 heads=255 sectors/track=63 (16065 blks/cyl)

parameters to be used for BIOS calculations are:

cylinders=525 heads=255 sectors/track=63 (16065 blks/cyl)

Do you want to change our idea of what BIOS thinks ? [n]

fdisk能檢測硬盤的真實映射數據和BIOS的映射數據,由於FreeBSD不使用BIOS存取硬盤數據, 因此這兩個數據有可能不一致,但這不影響FreeBSD係統對硬盤的訪問。但BIOS的映射數據必須與BIOS中的設 置一致,否則fdisk使用錯誤數據劃分的分區,係統的引導和其他使用BIOS的操作係統就無法正確識別。當硬盤上沒 有硬盤分區時,fdisk無法獲得正確的BIOS映射數據(因為FreeBSD不訪問BIOS),此時就需要在詢問是 否更改BIOS映射方式時回答yes,以進行更改。一般在硬盤上已有分區或不需要兼容的情況下,不需要更改這個設置, 直接回車選擇no略過這個設置。

The data for partition 1 is:

UNUSED>

Do you want to change it? [n] y

然後,fdisk會針對每個分區詢問是否更改其數據,此時按需要更改分區的設置。由於使用fdisk可以直接 指定分區的起始和結束,因此具有很大的靈活性,也很容易出現錯誤,如分區的劃分出現重疊。由於多操作係統引導程序 Boot Manager占用了硬盤主引導區後麵的幾個空餘扇區,按照DOS/Windows的標準,雖然主引導區僅占用 了一個扇區,同一柱麵中的其他扇區(一般為64或32個)也不能被分配給其他分區,而要保持為空餘,這些扇區可以為 Boot Manager占用。這樣就在fdisk指定分區的起始時,是不能從0開始的,而要從下一個柱麵的起始位置開 始。

然後按照要求回答分區的類型,(FreeBSD分區為165,DOS分區為6),分區的開始位置和大小,注意 單位應該為512字節(扇區大小)。後麵的大部分參數可以使用缺省值回應詢問,或者設定激活分區。

更改分區設置並保存退出fdisk之後,還需要檢查係統中是否具有對應的設備文件,必須在/dev目錄下擁有 相應的設備文件才能訪問物理設備。

劃分了UFS基本分區之後,就可以使用disklabel創建文件係統或交換空間的disklabel了,為 了方便起見,可以先為這個分區建立空的disklabel,然後再進行修改。

# disklabel -r -w wd1s3 auto

# disklabel -e wd1s3

在使用-w參數為分區wd1s3生成缺省的disklabel時,就必須給定磁盤的類型,通常可以使用auto ,讓係統自動檢測。除了自動偵測之外,在/etc/disktab文件中也給出了很多標準磁盤類型數據,這些數據中 包括包括軟盤在內的各種磁盤類型,對於這個文件中不存在的新型磁盤,可以根據原有類型進行修改而生成新數據。通常很少 需要利用這個文件中提供的磁盤類型數據來生成disklabel,使用auto參數能讓係統自動檢測磁盤的類型。極少 數情況下,例如在配置偽存儲設備vn的時候,才需要使用具體磁盤類型參數。

直接生成的disklabel僅僅包括磁盤的類型信息,以及一個使用c表示整個係統分區的空disklabel ,而沒有具體文件係統的disklabel。要真正劃分文件係統,需要再使用disklabel -e編輯更改disklabel 配置,例如增加兩個子分區,b和e,就需要為b設置類型swap的disklabel,為e設置類型4.2BSD的disklabel, 而c使用的unused類型表示這個disklabel不用做文件係統或交換空間, 可用於特定目的,如raw方式存取硬盤。

注意由於要使用手工計算文件係統的大小,因此很容易發生重疊等錯誤。各個不同空間的disklabel允許重 疊,例如缺省產生的以c代表的disklabel表示整個FreeBSD係統分區就會與其他disklabel的空間 重疊。但是具體用做文件係統或交換空間的部分就不能重疊,否則會導致存取錯誤發生。

保存退出後,就可以使用disklabel -r wd1s1來查看新建的代表文件係統或交換空間的label 。下麵為增加之後的disklabel的最後一部分。

#     size   offset    fstype   [fsize bsize bps/cpg]

b:    61440        0    swap                    

c:   409536        0    unused        0     0       

e:   348096    61440    4.2BSD        0     0     0

然後在新建的disklabel為4.2BSD類型的空間上真正建立文件係統,需要使用newfs命令。

# newfs /dev/rwd1s1e

執行fsck檢查剛建立的磁盤分區有無錯誤

# fsck -y /dev/rwd1s1e

然後就可以將這個建立好的文件係統安裝到係統中了,如果建立的是交換空間,可以使用swapon命令可使 該交換分區立即生效。

# mount /dev/wd1s1e /mnt

# swapon /dev/wd1s1b

為了在啟動時自動安裝上這個文件係統,需要編輯/etc/fstab文件,將文件係統和交換設備加入係統,那 麼下次係統啟動之後,就能使用新的磁盤分區和新的交換設備了。例如新磁盤為wd1,相應FreeBSD的分區為wd1s3e (文件係統)和wd1s3b(交換分區),文件係統要安裝到係統的/disk2目錄下,則fstab應為:

# Device      Mountpoint  FStype  Options  Dump    Pass#

/dev/wd0s3b   none        swap    sw       0       0

/dev/wd0s3a   /           ufs     rw       1       1

/dev/wd0s3f   /usr        ufs     rw       2       2

/dev/wd0s3e   /var        ufs     rw       2       2

proc          /proc       procfs  rw       0       0

/dev/wd1s1e   /cdrom      cufs    rw       2       2

/dev/wd1s1b   none        swap    sw       0       0

然後就可以使用新硬盤來調整空間緊張的磁盤上的文件和目錄。此時,除了可以使用符號連接這種方式之外,還可以 直接將該新建的文件係統安裝到需要的目錄下。這也是推薦的方式,因為符號連接會對文件操作的性能造成少許影響。

# cd /usr

# mv local local.old

# mkdir local

# mount /dev/wd1s1e /usr/local

# mv /usr/local.old/* /usr/local/

最後更新:2017-01-04 22:34:39

  上一篇:go 博客快速被收錄應該注意的一些細節
  下一篇:go 未來集中管理之路:多維管理視角