FreeBSD連載(17):安裝文件系統
王波
安裝文件系統
FreeBSD將文件保存在磁盤等存儲設備上,由操作系統來具體處理訪問硬件設備的問題,用戶只需要面對操作
系統,就能進行具體的文件操作。操作系統首先將用于存儲的設備進行格式化之后,該設備才能用于存儲文件,這個設備可以
是軟盤,可以是一個硬盤分區,或者其他允許隨機存取的塊設備存儲介質。在Unix上將格式化后的存儲設備統稱為文件系
統,格式化的過程稱為創建文件系統。(由于磁帶是一種順序存取的設備,因此在磁帶上不能創建文件系統。)
對于不同介質、不同的操作系統對磁盤進行格式化和管理的方式也不同,這樣就形成了不同類型的文件系統。但操作
系統給用戶提供了一種標准的通用存取方式,這樣在存取文件時就不需要考慮是在對哪種文件系統進行操作。但是不同的文件
系統仍然有一些差異,例如光盤文件系統是只讀介質,還有一些文件系統并非為Unix系統而設計的,因此文件名、文件屬
性等標准就與Unix不同,FreeBSD在訪問這些文件系統時盡量轉換這些差別,補充這些文件系統沒有、但Unix
標准文件系統需要的屬性。這樣這些文件系統就與標准文件系統看起來完全相同,只是某些操作受文件系統本身的物理限制,
例如企圖將光盤上文件加上寫屬性,顯然無法完成。FreeBSD支持多種文件系統,其中最常見的有:
UFS文件系統:是FreeBSD上的標准文件系統,它實現了所有的標准文件屬性,如文件屬主和組、存取權限
等屬性。
cd9660文件系統:支持ISO 9660格式的CD-Rom,這種格式只支持8位基本長度3位擴展長度、
不區分大小寫的文件名,但FreeBSD支持它的Rock Ridge擴展,使其能使用Unix風格的長文件名。
NFS文件系統:網絡文件系統,通過它Unix能在網絡上共享文件系統。
msdos文件系統:DOS和Windows使用的FAT文件系統,基本上是使用8.3的文件名,Windows95
之后擴展了文件名的長度,但仍然不區分大小寫。FreeBSD支持Windows95的長文件名擴展和FAT
32格式的分區。
ext2fs文件系統:Linux使用的文件系統,這個類型不是缺省支持的文件系統,需要重新配置內核。
NTFS文件系統:Windows NT使用的文件系統,這個類型同樣需要重新配置內核。
在個人計算機的硬盤管理方式中,文件是直接放在硬盤的分區中,而FreeBSD使用的UFS文件系統則又在基
本分區中進行了划分,文件系統建立在BSD風格的子分區中。這樣每個UFS分區中能有多個文件系統,每個文件系統或交
換空間各有一個標簽(DiskLabel),來標識其本身的起始和結束。當真正要使用文件系統時,就需要獲得硬盤上文
件系統(UFS分區和分區內部各個文件系統的DiskLabel)的具體信息。這些硬盤上文件系統的信息應該由管理員
維護,同時也記錄在硬盤上,可以使用FreeBSD中的系統工具fdisk和disklabel,或者安裝程序Sysinstall
,來獲得保存在硬盤本身中的信息。
當使用Sysinstall中的Fdisk和Disklabel來分區和划分磁盤空間時,當用戶完成操作之后
,應該使用W命令將改變寫入磁盤之后再退出Fdisk或Disklabel。
與Sysinstall不同,命令行的fdisk和disklabel為交互模式,而非sysinstall
的全屏幕界面,因此較為難用一些。使用硬盤名稱作為fdisk的參數,fdisk將報告硬盤上所有四個分區的詳細信息
:
# fdisk wd0
******Working on device /dev/rwd0 ******
parameters extracted 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)
Media sector size is 512
Warning: BIOS sector numbering starts with sector 1
Information from DOS bootblock is:
The data for partition 1 is:
sysid 6,(Primary ‘big’ DOS (>32MB))
start 16065, size 2056320 (1004Meg), flag 80
beg: cyl 1/ sector 1/ head 0;
end: cyl 128/ sector 63/ head 254
The data for partition 2 is:
sysid 7,(OS/2 HPFS, QNX or Advanced UNIX)
start 2072385, size 1044225 (509Meg), flag 0
beg: cyl 1/ sector 1/ head 0;
end: cyl 128/ sector 63/ head 254
The data for partition 3 is:
sysid 165,(FreeBSD/NetBSD/386BSD)
start 3116610, size 2024190 (988Meg), flag 0
beg: cyl 1/ sector 1/ head 0;
end: cyl 128/ sector 63/ head 254
The data for partition 4 is:
sysid 5,(Extended DOS)
start 5140800, size 3293325 (1608Meg), flag 0
beg: cyl 1/ sector 1/ head 0;
end: cyl 128/ sector 63/ head 254
|
從這個fdisk的執行結果中可以看出這個硬盤的四個分區分別為不同的操作系統所占用,第一個分區為DOS基
本分區,第二個標識為HPFS,事實上它是NTFS分區,第三個分區wd0s3為BSD分區,而第四個分區為擴展分區
。因此就可以針對第三個FreeBSD系統分區,使用disklabel來檢查其上的BSD子分區信息。
# disklabel wd0s3
# /dev/rwd0s3c:
type: ESDI
disk: wd0s3
label:
flags:
bytes/sector: 512
sectors/track: 63
tracks/cylinder: 255
sectors/cylinder: 16065
cylinders: 126
sectors/unit: 2024190
rpm: 3600
interleave: 1
trackskew: 0
cylinderskew: 0
headswith: 0 # milliseconds
track-to-track seek: 0 # milliseconds
drivedata: 0
8 partitions:
# size offset fstype [fsize bsize bps/cpg]
a: 65536 0 4.2BSD 0 0 0 # (cyl. 0 - 4*)
b: 151248 65536 swap # (cyl. 4*- 13*)
c:2024190 0 unused 0 0 0 # (cyl. 0 - 125)
e: 61440 216784 4.2BSD 0 0 0 # (cyl. 13*- 17*)
f:1745966 278224 4.2BSD 0 0 0 # (cyl. 17*- 125*)
|
可以看出disklabel除了顯示各個子分區a-f之外,還顯示了硬盤的參數。事實上BSD的分區管理工具
要早于個人計算機的分區概念,而disklabel是BSD的分區管理工具,并不需要fdisk的幫助就能完成所有的
磁盤管理操作。fdisk是用于將FreeBSD與其他操作系統進行兼容的目的,它是使用個人計算機分區概念的系統工
具。如果一個硬盤不被其他個人計算機操作系統訪問,完全可以拋棄fdisk,而僅僅使用disklabel和BSD傳
統風格的設備文件,來運行FreeBSD。
在存儲設備上建立的文件系統必須安裝到Unix目錄樹上,用戶才能訪問上面的文件。目錄樹只是一種邏輯概念,
而具體的文件都保存在安裝到目錄樹上的各個文件系統中。由于每個文件都保存的自己的目錄中,這樣目錄中保存的是相對位
置,一旦將一個文件系統安裝到一個目錄下,則這個文件系統中的所有文件和目錄,都位于目錄樹中的這個目錄的下方,可以
選擇將這個文件系統安裝到不同的目錄下。
安裝文件系統要使用命令mount,這個命令必須以root身份執行,例如安裝光盤文件系統的命令(IDE光
驅)使用:
# mount -t cd9660 /dev/wcd0c /cdrom
|
參數指明了不同的選項,-t后面跟文件系統的類型,這個命令中使用cd9660,用于光盤使用的ISO 9660
文件系統,同樣也可以根據文件系統的不同而選用ufs、nfs、msdos等,其中ufs類型是缺省的文件系統類
型﹔根據文件系統的類型不同,可使用的選項也不同。/dev/wcd0c是指定CD-Rom設備文件,也可以使用/dev/wcd0
來安裝光盤,BSD的習慣做法是除了raw方式訪問設備之外,最好使用子設備c來表示整個設備,主要原
因是使用子設備c,那么就能通過訪問分區的disklabel,來獲得存儲設備的信息,雖然現代BSD下這個因素的影
響已經很小,但使用子設備更符合BSD習慣。/cdrom指定了安裝目錄,此后光盤上的所有文件都位于/cdrom目
錄下,但是在執行這個命令前必須創建這個/cdrom目錄。
Mount命令可以通過-o參數指定相關的安裝選項,例如-o ro指定了使用只讀(Read Only)選
項,由于CD-Rom是只讀介質,即使不使用這個選項指明這個介質是只讀類型的,系統也會將這個文件系統設置為只讀。
對于以只讀方式安裝的文件系統,任何時候企圖寫這個目錄下的文件都會得到錯誤信息。對于物理上可寫的文件系統,可以使
用ro選項將能保護數據不被改變,因而十分有用。
同樣安裝一個DOS格式的軟盤應該使用:
# mount -t msdos /dev/fd0 /floopy
|
如果安裝順利,則就可以訪問這個軟盤上的DOS文件了。同樣也可以訪問硬盤上FAT格式的文件系統,包括DOS基本分區和擴展分區上的邏輯盤(邏輯盤在FreeBSD下的設備文件從5開始,例如wd1擴展分區上的第一個邏輯盤為wd1s5)。
安裝一個其他計算機通過NFS共享出的文件系統應該使用:
# mount -t nfs remote:/directory /mnt |
與安裝其他文件系統的不同在于,本地硬盤上的文件系統使用設備文件,但NFS使用遠程主機的名字和目錄來確定
文件系統的位置,其格式為主機名與該主機上目錄名,中間使用 “:” 分隔開。
將文件系統安裝到目錄上之后,使用這個介質上的文件就非常簡單了。FreeBSD將假定存儲設備將一直停留在
這個安裝位置上由系統使用,因此FreeBSD使用內存來為這些文件系統建立緩沖區,以最高效的使用文件系統,這種方
式為異步模式的文件安裝方式(async)。這樣磁盤上的內容與內存中是非同步的,系統定期或在需要的時候,才去更新
磁盤上的物理信息。(sync命令將強迫系統更新磁盤)這種非同步的方式就使得管理員要移去文件系統必須通過系統來完
成卸載,而不應該直接取出(如軟盤等可移動介質)。如果直接移去軟盤,或者因為系統突然掉電而造成沒有正確卸載文件系
統,就會直接造成磁盤上的數據不正確,從而不得不使用fsck來檢查和修復這些文件系統。也可以在執行mount命令
的時候使用sync的安裝選項,使硬盤數據和內存緩沖區保持同步,這樣雖然降低了存取效率,但更適合對數據的完整性提
出較高要求的系統。
即使對于一個只讀類型的介質,FreeBSD仍然使用這種控制機制,直到卸載才釋放對文件系統的控制權。因此
在FreeBSD下使用mount命令安裝了光盤之后,光驅前面板上的eject鍵將不再起作用,直到將這個文件系統
卸載下來。
使用命令umount可以卸載一個安裝到確定目錄下的文件系統。
執行這個命令將文件系統與其安裝到的目錄相脫離,對于異步模式安裝的文件系統還將同步緩沖區和磁盤上的數據。
以后該目錄就能用來安裝另一個文件系統了。而直到此時才能使用eject鍵退出光盤,更換或拿開盤片。
# cd /cdrom
# umount /cdrom
umount: /cdrom : Device busy
# cd /
# umount /cdrom
|
在執行這個命令時如果系統報告 “Device busy” 錯誤信息,說明有其他程序仍然正在使用這個文件
系統中的文件,很可能是某個shell的當前路徑仍然位于這個文件系統的目錄中,造成這個文件系統的目錄文件沒有關閉
。檢查所有的登錄界面,保証沒有shell的當前目錄在/cdrom的目錄下。
在系統啟動時,系統將自動安裝上必需的文件系統。而管理員所要做的是告訴FreeBSD應該安裝那個文件系統
、安裝到那個目錄上和有關安裝參數選項。所有的這些信息都必須寫入文件/etc/fstab中。在安裝FreeBSD
時,這個文件已經具有必要的文件系統了,此后所需要作的只是這個文件中再增加其他的文件系統。
# 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/wcd0c /cdrom cd9660 ro,noauto 0 0
/dev/wd0s1 /dos msdos rw,noauto 0 1
|
這個文件中的每一行為一種文件系統或交換設備定義對應的設備文件及安裝選項。其中根文件系統具備一定的特殊之
處,因為這個文件/etc/fstab以及FreeBSD的內核文件,其實是在根文件系統中的,因此系統必須首先安裝
了根文件系統,才能正常訪問這些文件。事實上根文件系統在FreeBSD內核中已經有了設置,啟動時先以只讀方式安裝
根文件系統,并讀取根文件系統中相關文件的內容,然后再根據文件內容裝載各個文件系統。
這個文件的第一列為設備文件名字,或者NFS使用的遠程文件系統的名字。第二列為文件系統的安裝位置,第三列
為文件系統的類型,其中UFS是FreeBSD使用的標准本地文件系統的類型,procfs是FreeBSD用于管理
進程的進程文件系統。第四列為安裝的選項,rw表示該文件系統能進行讀寫操作,ro表示該文件系統是只讀的,sw用于
交換分區,noauto表示啟動時并不立即安裝這個文件系統,而是由管理員在以后手工安裝。第五列和第六列的數字是系
統程序dump和fsck程序使用的標志,通常不需要改變,這個標志對根文件系統都是1,而對其他UFS類型的文件系
統都是2,其他類型的文件系統為0。
注意,由于fstab文件非常重要,如果這個文件有錯誤,就有可能造成系統不能正常啟動,因此向fstab添
加數據應非常小心。不是必須安裝的文件系統就不應該進行自動裝載,例如上面將CDROM對應的行參數設置為noauto
,表示這個文件系統不是啟動時自動裝載的系統。
在使用了fstab文件之后,mount命令的寫法就可以簡化了。mount命令將查看fstab文件中的內
容以進行匹配,來選定正確的參數。例如,使用下列命令均可以安裝上CD-Rom。
# mount /dev/wcd0c /cdrom
# mount /dev/wcd0c
# mount /cdrom
|
在安裝了文件系統之后,可以使用不加參數的mount命令或df命令查看當前已安裝的文件系統信息。
# mount
/dev/wd0s3a on / (local, writes: sync 117 async 796)
/dev/wd0s3f on /usr (local, writes: sync 1189 async 4948)
/dev/wd0s3e on /var (local, writes: sync 362 async 1354)
procfs on /proc (local)
/dev/wd1s2e on /disk2 (local, writes: sync 4 async 41)
|
未完,待續。。。
|