建立文件系統
當系統負載逐步增加,僅僅依靠原有文件系統的空間是不夠的,更有效的方式是增加新的硬盤設備。這首先需要改動硬盤及其控制器的硬件設置,以及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中可以修改的數據有硬盤映射數據,以及四個分區的起始位置和類型。
QUOTE:# 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略過這個設置。
QUOTE: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,然後再進行修改。
QUOTE:# 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的最後一部分。
QUOTE:# 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命令。
QUOTE:# newfs /dev/rwd1s1e執行fsck檢查剛建立的磁盤分區有無錯誤
QUOTE:# fsck -y /dev/rwd1s1e然後就可以將這個建立好的文件系統安裝到系統中了,如果建立的是交換空間,可以使用swapon命令可使該交換分區立即生效。
# mount /dev/wd1s1e /mnt
# swapon /dev/wd1s1b
為了在啟動時自動安裝上這個文件系統,需要編輯/etc/fstab文件,將文件系統和交換設備加入系統,那麼下次系統啟動之後,就能使用新的磁盤分區和新的交換設備了。例如新磁盤為wd1,相應FreeBSD的分區為wd1s3e (文件系統)和wd1s3b(交換分區),文件系統要安裝到系統的/disk2目錄下,則fstab應為:
QUOTE:# 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 然後就可以使用新硬盤來調整空間緊張的磁盤上的文件和目錄。此時,除了可以使用符號連接這種方式之外,還可以直接將該新建的文件系統安裝到需要的目錄下。這也是推薦的方式,因為符號連接會對文件操作的性能造成少許影響。
QUOTE:# cd /usr
# mv local local.old
# mkdir local
# mount /dev/wd1s1e /usr/local
# mv /usr/local.old/* /usr/local/