Solaris下,一個磁盤包含8個分區,標記為0-7。此信息可以通過format命令,然後選擇一個硬盤來看到,例如,在我自己的系統中(Solaris 9,Ultra 60),顯示出來的信息如下:
# format
Searching for disks...done
AVAILABLE DISK SELECTIONS:
0. c0t0d0
/pci@1f,4000/scsi@3/sd@0,0
Specify disk (enter its number): 0
selecting c0t0d0
[disk formatted]
Warning: Current Disk has mounted partitions.
FORMAT MENU:
disk - select a disk
type - select (define) a disk type
partition - select (define) a partition table
current - describe the current disk
format - format and analyze the disk
repair - repair a defective sector
label - write label to the disk
analyze - surface analysis
defect - defect list management
backup - search for backup labels
verify - read and display labels
save - save new disk/partition definitions
inquiry - show vendor, product and revision
volname - set 8-character volume name
!
quit
format> p
PARTITION MENU:
0 - change `0' partition
1 - change `1' partition
2 - change `2' partition
3 - change `3' partition
4 - change `4' partition
5 - change `5' partition
6 - change `6' partition
7 - change `7' partition
select - select a predefined table
modify - modify a predefined partition table
name - name the current table
print - display the current table
label - write partition map and label to the disk
!
quit
partition>
不要看到內容這麼多,就被嚇住了,其實,format命令之後0. c0t0d0 <SUN18G cyl 7506 alt 2 hd 19 sec 248>/pci@1f,4000/scsi@3/sd@0,0所顯示出來的含義很簡單,0. c0t0d0就代表這台Ultra 60裡面只裝了一個硬盤(至於c0t0d0的具體含義,稍後會介紹),<SUN18G cyl 7506 alt 2 hd 19 sec 248>代表的是這個硬盤的大小和柱面信息,/pci@1f,4000/scsi@3/sd@0,0所代表的,就是這個硬盤的實際物理地址。這些信息看起來很復雜,其實一般都只需要看看format命令抓出來的硬盤數量,是不是我們裝在系統上的數量,例如你裝了兩個硬盤,但是這裡只有一個硬盤的信息,就需要認真面對了。
FORMAT MENU:
disk - select a disk
type - select (define) a disk type
partition - select (define) a partition table
current - describe the current disk
format - format and analyze the disk
repair - repair a defective sector
label - write label to the disk
analyze - surface analysis
defect - defect list management
backup - search for backup labels
verify - read and display labels
save - save new disk/partition definitions
inquiry - show vendor, product and revision
volname - set 8-character volume name
!
quit
format> p
這裡所列出來的,是可以使用的命令,比如我在最下面format>,就是用了p這個命令(慢點,上面沒有p這個命令啊?其實,這裡p就是partition的簡寫),然後,列出了以下內容:
PARTITION MENU:
0 - change `0' partition
1 - change `1' partition
2 - change `2' partition
3 - change `3' partition
4 - change `4' partition
5 - change `5' partition
6 - change `6' partition
7 - change `7' partition
select - select a predefined table
modify - modify a predefined partition table
name - name the current table
print - display the current table
label - write partition map and label to the disk
!
quit
partition>
OK,到這裡,我們的目的也達到了,這些信息應該很清楚的證明了:Solaris下,一個磁盤包含8個分區,標記為0-7。後面的仍然是一些可以用到的命令,這些命令的具體含義,大家可以看命令後面的英文介紹,至於怎麼使用,以後再說。下面我們將進入今天的重點:
向一塊硬盤寫入數據之前,首先需要將其分區和格式化,這個過程一般可以分為3個
步驟:
1. 物理格式化,也就是通常所說的低級格式化(Low-Level Formatting,LLF);
2. 分區;
3. 邏輯格式化,也就是通常所說的高級格式化(High-Level Formatting,HLF)
低級格式化的時候,硬盤被分成若干個磁道,這些磁道又被分成若干個扇區,每個扇區填充了隨機數據。幾乎所有的硬盤在出廠前都已經被低級格式化過,所以,用戶只要對硬盤進行下面兩個步驟(分區和邏輯格式化)就可以了。 分區的動作將硬盤分成幾個部分,成為分區或者是分片(注意:前面的“分區”是動詞,後面的是名詞)。每個分區/分片由若干個柱面組成。絕大多數情況下,Solaris中的一個分區一一對應一個文件系統。一個分區不能包含多個文件系統;同樣,一個文件系統也不能跨越多個分區。Solaris中,對硬盤進行分區,就是使用我們開始的時候使用過的format命令。
當Solaris進行高級格式化的時候,將每個分區分成許多柱面組,每個柱面組包括了幾個連續的柱面。文件系統在這些柱面組中建立文件和目錄,並盡量將同一個文件的數據保存在同一個柱面組中。這樣的機制能夠保證磁頭讀取數據的時候移動最少,從而加快數據的讀取速度。Solaris中使用newfs命令來實現高級格式化,默認的文件系統是UNIX文件系統(UFS:Unix File System),它使用下列類型的塊:
1. 引導塊:存儲系統啟動時所需的信息
2. 超級塊:存儲文件系統信息
3. 索引節點(i節點):存儲文件系統中的單個文件信息
4. 存儲塊/數據塊:存儲文件數據
下面來詳細介紹一下這幾種類型的塊。
引導塊:
引導塊存儲系統啟動時所需的信息。引導塊總是位於硬盤的第一個柱面組,占用分區的前8KB。
超級塊:
超級塊存儲文件系統信息,它包含了下列信息:
1. 文件系統中總塊數(文件系統大小)
2. 文件系統中數據塊的數目
3. 索引節點的數目
4. 柱面組的數目
5. 塊的大小
6. 磁盤碎片的大小
7. 空閒塊的個數
8. 空閒的索引節點的個數
超級塊對文件系統極其重要,所以Solairs系統采用多個備份來確保它的安全。偶爾,當沒有正常關閉系統或硬盤出現故障的時候,會造成默認超級塊不能正確讀取或者是和其備份的超級塊不一致。這時,就需要進行修復工作。通常在重新啟動系統的時候,系統會調用fsck命令來自動完成。當fsck發現默認的超級塊已經損壞而且無法自動修復的時候,會提示用戶手動進行修復。
手動進行修復的時候,可以根據以下幾個步驟進行:
1. 以單用戶的身份進入系統,例如在PROM的模式下(即ok狀態下)用命令boot -s可進入單用戶模式,或者在系統中sync;sync;sync;init 0也可進入單用戶模式(至於什麼是單用戶模式,以後會詳細介紹)
2. 如果損壞的文件已經安裝到文件樹中,可以進入另一個目錄,然後將損壞的文件系統卸載,例如:
#cd /
#umount /var
3. 使用newfs -N命令顯示超級塊的值,此命令會列出備用的超級塊在文件系統中的
位置:
# newfs -N /dev/dsk/c0t0d0s1
/dev/rdsk/c0t0d0s1: 961248 sectors in 204 cylinders of 19 tracks, 248 sectors
469.4MB in 13 cyl groups (16 c/g, 36.81MB/g, 17664 i/g)
super-block backups (for fsck -F ufs -o b=#) at:
32, 75680, 151328, 226976, 302624, 378272, 453920, 529568, 605216, 680864, 756512, 832160, 907808,
4. 從newfs -N命令列出的備用超級塊中選擇一個作為fsck命令的一個選項進行修復:
#fsck -F ufs -o b=453920 /dev/rdsk/c0t0d0s1
索引節點
索引節點包含了一個文件除去文件名以外的所有信息。一個索引節點占用128字節的磁盤空間,它包含了下列信息:
1. 文件類型:普通文件、目錄、塊設備文件、字符設備文件、鏈接等
2. 文件權限:讀、寫、執行權限的組合
3. 文件的硬鏈接數
4. 文件所有者的用戶ID
5. 文件所屬的組ID
6. 文件大小(字節數)
7. 一個包含15個磁盤塊地址的數組
8. 文件最近的訪問日期和時間
9. 文件最後一次修改的日期和時間
10. 文件創建的日期和時間
硬盤上的每個文件,都有一個描述它的信息的索引節點。文件系統創建的時候,一定數目的索引節點在硬盤柱面組中被同時創建。有時候,這些索引節點或許會不夠用,例如當一個程序產生大量小文件的時候,此時文件系統就需要增加索引節點。
同樣,如果我們事先知道此文件系統只用來存放少數大文件,我們就可以通過減少索引節點的數目來達到節省磁盤空間的目的——畢竟每個索引節點占用128字節。創建文件系統的時候,可以使用newfs命令的-i選項來增加或者減少索引節點的數目。
/usr/ucb目錄下的df命令可以查看文件系統中所引節點的狀況。例如:
# usr/ucb/df -i
Filesystem iused ifree %iused Mounted on
/dev/dsk/c0t0d0s0 131672 1929384 6% /
注意:文件系統一旦創建,就無法改變它的索引節點數目,因此,當索引節點不夠用的時候,首先應當備份此文件系統數據,然後創建一個包含更多索引節點的新的文件系統,然後將備份的數據恢復到新的文件系統就可以了。
存儲塊/數據塊
存儲塊,也叫做數據塊,它占用了文件系統的其他所有空間。這些塊包含了存放在磁盤上的數據文件。每個存儲塊的大小在創建文件系統的時候被確定。對一個普通文件來說,存儲塊存放了文件的內容,對一個目錄來說,存儲塊中存放了此目錄中所有文件的索引節點號和文件名的信息。
磁盤命名
這裡主要是詳細解釋我們最開始使用format命令的時候,看到的c0t0d0這個表示的詳細含義。在Solaris系統中用設備名來代表磁盤。磁盤設備名是類似cXtXdX格式的一系列字母和數字,比如我們看到的c0t0d0。設備名中的字母(c, t,d)都是一樣的,但X代表的數字表示特定的磁盤或者系統。例如c0t0d0表示0號控制器,0號磁盤,0號LUN,這通常指代系統中的第一個硬盤,往往也是系統的啟動磁盤(boot disk)。
Sun使用下列命名方式定義邏輯設備名:
/dev/[r]dsk/cXtXdXsX
c:邏輯控制器號(邏輯控制器)
t:物理總線目標號
d:磁盤或邏輯單元號(LUN)
s:分區號
cX : X指磁盤控制器。當SUN系統搜集安裝在系統中的磁盤控制器信息時,它給每個磁盤控制器一個數值,數值取決於系統監測控制器的先後順序。第一個被檢測到的控制器分配的數值是0,第二個控制器是1,依次類推。對IDE系統來說,第一個IDE通道為0,第二個(如果存在的話)通道為1。
tX : X指磁盤的目標號。這個數字有時候被稱為SCSI標識符,磁盤控制器上的每一個磁盤都有一個唯一的目標號。控制器通過這個目標號可以對每個磁盤獨立尋址。對IDE磁盤而言,主盤的目標號是0,從盤的目標號是1。
dX : X指磁盤的邏輯單元號(LUN)。在有些磁盤陣列中,LUN被用來區分系統中的各個磁盤。一個陣列可以用一個目標號來表示一組磁盤,然後用LUN來表示這個磁盤組中的單個磁盤。這種方式被廣泛應用於SCSI磁盤陣列和光盤轉換設備中。對單個磁盤或IDE磁盤,這個數字總是設定為0。
sX : X指磁盤上的分區號。它和磁盤的分區對應。就如我們前面所說的“Solaris下,一個磁盤包含8個分區,標記為0-7”,因為這裡X的數值只能是0——7。
以上的內容,就可以詳細說明出c0t0d0s0的含義了。