BigAdmin System Administration Portal
社群提交的文章
Print-friendly VersionPrint-friendly Version
This content is submitted by a BigAdmin user. It has not been reviewed for technical accuracy by Sun Microsystems, though it may have been lightly edited to improve readability. If you find an error or would like to comment on the article, please contact the submitter or use the comment field at the bottom of the article. Community submissions may not follow Sun trademark guidelines. For information on Sun trademarks, please see http://www.sun.com/suntrademarks/.
 
 

Solaris 作業系統中的「format」公用程式

Greg (shoe) Schuweiler,2004 年 11 月

對許多人而言,硬碟無異於「黑盒子」,是個可儲存資料、程式和 (或) 作業系統的小型裝置。若您所在乎的僅止於此,那麼這種想法當然是沒有問題。但若您是系統管理員,保護資料則是您的主要考量之一。另一件應優先考量的事情,應該是資料能否在記憶體與實體磁碟之間快速移動。在此文中,我將探討 Solaris 作業系統中可用的基本公用程式之一:format

format 公用程式可用於管理磁碟上的磁碟片段,其原本用意是要管理連接 SCSI 的磁碟,所以您的效能會隨著透過 IDE 連接的磁碟而有所不同。若您已安裝並配置正確的驅動程式,則應該能夠管理連接光纖通道的磁碟機或 RAID 引擎所呈現的 LUN。

除了 format 以外,我還會提到其他兩種指令:非破壞性與破壞性。破壞性指令將一律以粗體加斜體表示,並在開頭加上 Warning 文字。例如,以 Root 身份執行 «Warning: cd / ; rm –r * »,真的會破壞您的系統磁碟。

另一個警告字詞:即非破壞性指令,但是否要在系統上執行這類指令,由您自己決定。破壞性指令將會破壞磁碟上的資料;您必須確實瞭解自己在做什麼,才能執行這類指令。

我在此文中將使用下列指令:formatprtvtocddodcatfmthard。首先,我想要定義此處所用的某些磁碟術語。

磁碟標籤:
此特殊區域包含磁碟的相關資訊,例如幾何排列與磁碟片段。它也稱為磁碟區目錄 (VTOC)。磁碟標籤是磁碟上的前 512 個位元組。現今大部分的磁碟在出廠前即已加上標籤。

缺陷清單:
此為磁碟上無法寫入或讀取的區域清單。製造商必定會提供缺陷清單,而這份清單通常會越來越長,因為缺陷日漸日益增多的緣故。

分割區表:
磁碟 VTOC 中含有分割區表,其中包含磁碟上的磁碟片段 (亦稱為分割區)、磁碟片段的界限以及磁碟片段的大小等。磁碟片段是由磁碟上連續的區段範圍所構成。除非您為磁碟加上了可延伸韌體介面 (EFI) 標籤,否則磁碟上會有八個磁碟片段 (0-7),這點將於稍後詳述。我們通常不會使用磁碟片段 2,因為它代表整個磁碟。

閱讀此文時,請牢記下列事項:

  • 每個磁碟片段只能包含一個檔案系統。
  • 檔案系統無法橫跨多個磁碟片段 (假設未使用邏輯磁碟區管理員)。
  • 建立檔案系統後,若未重新分割整個磁碟,即無法變更檔案系統的大小。
  • 磁碟片段無法橫跨多個磁碟。(對於使用 n 個磁碟、但對系統呈現為一個磁碟的 RAID 引擎來說,format 公用程式只會看到一個磁碟)。

我希望您的系統已連結可供練習的磁碟,因為我希望這篇文章有互動效果。首先,請挑選即將執行 format 的磁碟。

r_gps@holstein: format
Searching for disks...done

AVAILABLE DISK SELECTIONS:
0.c0t0d0 <SUN36G cyl 24620 alt 2 hd 27 sec 107>  boot
  /pci@1f,4000/scsi@3/sd@0,0
1.c0t1d0 <SUN36G cyl 24620 alt 2 hd 27 sec 107>  home
  /pci@1f,4000/scsi@3/sd@1,0
2.c2t1d0 <SUN36G cyl 24620 alt 2 hd 27 sec 107>  trashme
  /pci@1f,4000/pci@5/SUNW,isptwo@4/sd@1,0
Specify disk (enter its number):

您可以鍵入「quit」以結束或備份某個功能表,或按下 <Ctrl-D> 以完全結束 format 公用程式。在此,我將使用「AVAILABLE DISK SELECTION 2」。如前面所述,若您是向 Sun 或銷售 Sun 設備的第三方供應商購買磁碟,您所購買的磁碟上應已貼有 Sun 標籤。但是,若您處於異質性環境中,而且必須四處移動 SCSI 磁碟,則很明顯地,HP、AIX 或 Windows 伺服器的 36 GB 磁碟機具有無法辨識 (至少對 Solaris 作業系統而言) 的磁碟標籤,而須由您加上標籤。為了從基本概念學起並增添學習樂趣,我將會破壞作業所在磁碟的磁碟標籤:

« Warning: echo "adios data" | dd of=/dev/dsk/c2t1d0s2 bs=1 count=512 »

此時 format 指令會顯示下列內容:

r_gps@holstein: format
Searching for disks...done

c2t1d0: configured with capacity of 33.92GB

AVAILABLE DISK SELECTIONS:
       0. c0t0d0 <SUN36G cyl 24620 alt 2 hd 27 sec 107>  boot
          /pci@1f,4000/scsi@3/sd@0,0
       1. c0t1d0 <SUN36G cyl 24620 alt 2 hd 27 sec 107>  home
          /pci@1f,4000/scsi@3/sd@1,0
       2. c2t1d0 <SUN36G cyl 24620 alt 2 hd 27 sec 107>
          /pci@1f,4000/pci@5/SUNW,isptwo@4/sd@1,0
Specify disk (enter its number): 2
selecting c2t1d0
[disk formatted]
Disk not labeled. Label it now?

在此若要為磁碟加上標籤,請鍵入「y」,如此 Solaris 作業系統即可使用此磁碟。接著,請結束 format 指令,並使用 prtvtoc 查看磁碟幾何排列與磁碟分割的資訊:

r_gps@holstein: prtvtoc /dev/dsk/c2t1d0s2                            
* /dev/dsk/c2t1d0s2 partition map
*
* Dimensions:
*       512 bytes/sector
*       107 sectors/track
*         27 tracks/cylinder
*     2889 sectors/cylinder
*   24622 cylinders
*   24620 accessible cylinders
*
* Flags:
*   1: unmountable
*  10: read-only
*
*                          First        Sector       Last
* Partition  Tag  Flags    Sector        Count       Sector     Mount Directory
   0	       2    00	   0		262899	     262898
   1	       3    01	   262899	262899	     525797
   2	       5    01	   0		71127180     71127179
   6	       4    00	   525798	70601382     71127179

您可以從 format 指令瞭解某些同樣的資訊,但透過此輸出我們可看見有四個分割區存在。[標記] 欄顯示我們有根 (2)、交換 (3)、備份 (5) 與使用者 (4) 四個分割區。[旗標] 欄顯示我們有兩個可掛載、具有讀寫權的分割區 (00),以及兩個無法掛載的分割區 (01)。對於每個分割區,[第一個磁區] 欄會顯示分割區的起始位置,[磁區計數] 會顯示磁區數目,而 [最後一個磁區] 則會顯示分割區中最後一個磁區的位置。在我們掛載檔案系統後,[掛載目錄] 將會顯示分割區的掛載位置。在深入拆解問題之前,我們先瞭解一下 format 指令在新增標籤的磁碟上有何顯示。執行下列指令:

r_gps@holstein: format /dev/rdsk/c2t1d0s2

在出現 format 提示時,鍵入 partition,然後在分割區功能表上,鍵入 print。此時會出現下列表格:

Current partition table (original):
Total disk cylinders available: 24620 + 2 (reserved cylinders)

Part    Tag     Flag     Cylinders        Size       Blocks
  0     root	  wm	0 - 90     	128.37MB  (91/0/0)        262899
  1        swap	  wu	91 - 181      	128.37MB  (91/0/0)        262899
  2       backup  wu	0 - 24619       33.92GB	  (24620/0/0)   71127180
  3   unassigned  wm	0      	0       (0/0/0)        	0
  4   unassigned  wm	0      	0       (0/0/0)         0
  5   unassigned  wm	0      	0       (0/0/0)         0
  6          usr  wm	182 - 24619      33.67GB   (24438/0/0)  70601382
  7   unassigned  wm	0      	0       (0/0/0)         0

partition>

有些資訊會與 prtvtoc 指令所提供的一樣。其格式略有不同,而我們會看見未使用的分割區。您可能已注意到,我在告知 format 將要使用的磁碟。之所以這麼做,是為了避免在我所試驗的系統上造成其他磁碟的問題。查看磁碟標籤還有另一種方式,即使用 dd 指令將其傾印出來:

r_gps@holstein: dd if=/dev/dsk/c2t1d0s2 of=wart.bin bs=512 count=1  
1+0 records in
1+0 records out

如此會產生可執行 od 指令的二進位檔案。

r_gps@holstein: od -x wart.bin
0000000 5355 4e33 3647 2063 796c 2032 3436 3230
0000020 2061 6c74 2032 2068 6420 3237 2073 6563
0000040 2031 3037 0000 0000 0000 0000 0000 0000
0000060 0000 0000 0000 0000 0000 0000 0000 0000
*
0000200 0000 0001 0000 0000 0000 0000 0008 0002
0000220 0000 0003 0001 0005 0001 0000 0000 0000
0000240 0000 0000 0000 0004 0000 0000 0000 0000
0000260 0000 0000 0000 0000 0000 0000 600d deee
0000300 0000 0000 0000 0000 0000 0000 0000 0000
*
0000640 0000 0000 2729 602e 0000 0000 0000 0001
0000660 602c 0002 001b 006b 0000 0000 0000 0000
0000700 0004 02f3 0000 005b 0004  02f3  0000 0000
0000720 043d 508c 0000 0000 0000 0000 0000 0000
0000740 0000 0000 0000 0000 0000 0000 0000 00b6
0000760 0435 4aa6 0000 0000 0000 0000 dabe 4297
0001000

八進制傾印中有許多資訊,而且已有很好的 Sun 文件加以討論 — 我不想在此贅述。請至 SunSolve 搜尋文件 ID 74087。值得注意的是,od 一律會略過重複行 (*),VTOC_SANE 在偏移 0xbc 上一律為 0x600ddeee,而 DKL_MAGIC 在偏移 0x1fc 上一律為 0xdabe,就在總和檢查之前。現在已經幫磁碟加上標籤了,我們 (以及 format 指令) 可以做什麼?首先查看下面的功能表清單。除了 volname 選項以外,我將先說明非破壞性格式化功能表選項。這些選項以粗體文字顯示如下。

r_gps@holstein: format /dev/rdsk/c2t1d0s2
selecting /dev/rdsk/c2t1d0s2
[disk formatted]

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
        !<cmd>     	- execute <cmd>, then return
        quit
format>

我很喜歡為每個磁碟指定磁碟區名稱,使系統較與眾不同。若您有多個系統使用相同的磁碟機 (在高可用性叢集中可能會出現此情況),這麼做會有很大的幫助。我已發現由一對 RAID 引擎所顯示的 120 餘個磁碟,在 VERITAS 叢集中有 15 個系統可看到這些磁碟。為每個磁碟指定磁碟區名稱,有助於識別已使用的磁碟。沒有磁碟區名稱的磁碟為未使用的磁碟。使用 volname 功能表選項時應注意一件事,如下列範例所示:

format> volname
Enter 8-character volume name (remember quotes)[""]:"pigsnot"
Ready to label disk, continue? y

format>

volname 選項會寫出至磁碟標籤。我已對具有已掛載檔案系統且檔案系統上具有有效資料的磁碟,執行此動作。我第一次是在意外的情況下執行此動作的。世界不會因此而毀滅,地心引力仍然存在。因此我對磁碟機做了一些測試,對具有已掛載檔案系統與具有已卸載檔案系統的磁碟,變更了磁碟區名稱。雖然標籤有所變更,但資料並未因此遺失。當然,我還是要做出標準的免責聲明:「效果因人而異 (作業風險自負),打字錯誤概不負責,諸如此類」。

disk 選項可讓您在 format 公用程式內變更磁碟,但由於我已選擇所要處理的磁碟,因此只會顯示此磁碟。

format> disk

AVAILABLE DISK SELECTIONS:
       0. /dev/rdsk/c2t1d0s2 <SUN36G cyl 24620 alt 2 hd 27 sec 107> pigsnot
          /pci@1f,4000/pci@5/SUNW,isptwo@4/sd@1,0
Specify disk (enter its number)[0]:

current 選項會顯示在啟動 format 指令後所選取的現行磁碟。我在此文中處理的是磁碟 2,因此 current 選項顯示如下:

Current Disk = c2t1d0: pigsnot
<SUN36G cyl 24620 alt 2 hd 27 sec 107>
/pci@1f,4000/pci@5/SUNW,isptwo@4/sd@1,0

current 選項會在最後一行顯示磁碟的實際位置。您必須在實際位置前面加上 /devices,而且會以字母表示分割區編號。

r_gps@holstein: ls /devices/pci@1f,4000/pci@5/SUNW,isptwo@4/sd@1,0*

/devices/pci@1f,4000/pci@5/SUNW,isptwo@4/sd@1,0:a
/devices/pci@1f,4000/pci@5/SUNW,isptwo@4/sd@1,0:a,raw
/devices/pci@1f,4000/pci@5/SUNW,isptwo@4/sd@1,0:b
/devices/pci@1f,4000/pci@5/SUNW,isptwo@4/sd@1,0:b,raw
/devices/pci@1f,4000/pci@5/SUNW,isptwo@4/sd@1,0:c
/devices/pci@1f,4000/pci@5/SUNW,isptwo@4/sd@1,0:c,raw
/devices/pci@1f,4000/pci@5/SUNW,isptwo@4/sd@1,0:d
/devices/pci@1f,4000/pci@5/SUNW,isptwo@4/sd@1,0:d,raw
/devices/pci@1f,4000/pci@5/SUNW,isptwo@4/sd@1,0:e
/devices/pci@1f,4000/pci@5/SUNW,isptwo@4/sd@1,0:e,raw
/devices/pci@1f,4000/pci@5/SUNW,isptwo@4/sd@1,0:f
/devices/pci@1f,4000/pci@5/SUNW,isptwo@4/sd@1,0:f,raw
/devices/pci@1f,4000/pci@5/SUNW,isptwo@4/sd@1,0:g
/devices/pci@1f,4000/pci@5/SUNW,isptwo@4/sd@1,0:g,raw
/devices/pci@1f,4000/pci@5/SUNW,isptwo@4/sd@1,0:h
/devices/pci@1f,4000/pci@5/SUNW,isptwo@4/sd@1,0:h,raw

含有「原始」一詞的實體裝置名稱為字元裝置,另一個則是區段裝置。字母「a」為分割區 0,字母「b」為分割區 1,依此類推。

defect 選項會開啟 [缺陷功能表],此功能表可讓您瞭解磁碟在出廠時有多少缺陷。請使用主要選項加以檢視。我的電腦所使用的三個磁碟含有 72 至 2922 的基此缺陷。但我們較感興趣的是 grown 選項。磁碟上的「成熟」缺陷會隨著時間而增加,而我們所關心的是增加速度。很顯然地,若缺陷的增加速度很快,磁碟可能馬上就會故障。

print 選項會產生一份缺陷及其在磁碟上位於何處的清單。您也可以將磁碟的缺陷清單傾印 (儲存) 到檔案中。我對可疑的磁碟會經常執行此動作。

verify 選項所產生的資訊,有許多是我們過去使用 prtvtoc 指令以及透過 format 指令而顯示分割區所能看見的資訊。

format> verify

Primary label contents:

Volume name 	= < pigsnot>
ASCII name  	= <SUN36G cyl 24620 alt 2 hd 27 sec 107>
pcyl        	= 24622
ncyl        	= 24620
acyl        	=    2
nhead       	=   27
nsect       	=  107
Part   Tag   	 Flag   Cylinders       Size       	Blocks
  0        root  wm	0 - 90        128.37MB	 (91/0/0)         262899
  1        swap  wu	91 - 181      128.37MB	 (91/0/0)         262899
  2      backup  wu	0 - 24619      33.92GB	 (24620/0/0) 	71127180
  3  unassigned  wm	0      	0     (0/0/0)    0
  4  unassigned  wm	0      	0     (0/0/0)    0
  5  unassigned  wm	0      	0     (0/0/0)    0
  6         usr  wm	182 - 24619    33.67GB   (24438/0/0)    70601382
  7   unassigned wm	0      	0     (0/0/0)    0

save 選項會寫出 format.dat 檔案 (您可以自行命名)。此 dat 檔案是可供 format 指令用於磁碟機配置的資訊(如需此檔案的更多資訊,請參閱 man -s4 format.dat)。若您在某個視窗中將新建立的 format.dat 檔案 cat 出去,然後在另一個視窗中使用 verify 指令,您將會看見許多相同的資訊,但格式不同,或對某些人而言可能更容易讀取的格式。在透過 save 選項所建立的 format.dat 檔案中,您會發現多一點資訊:磁碟的 rpm。

#
# New disk/partition type  saved on Fri Aug  6 06:34:05 2004
#
disk_type = "SUN36G" \
         : ctlr = SCSI : ncyl = 24620 : acyl = 2 : pcyl = 24622 \
         : nhead = 27 : nsect = 107 : rpm = 10025
...

最後,在我們用於收集磁碟資訊的選項清單中,會有 inquiry 選項。它可提供以下所述的基本資訊。

format> inq
Vendor:   FUJITSU 
Product:  MAN3367M SUN36G 
Revision: 1502
format>

您必須注意的是修訂版等級。磁碟機的確會有韌體更新。此選項可讓您比較磁碟上的修訂版等級與磁碟供應商所提供的等級。我曾要求供應商針對大型 RAID 陣列的磁碟更新磁碟機韌體,但他們只有在別人要求時才肯做。很久以前,我曾更新過 SCSI 磁碟上的韌體一次或兩次。我不再做這種麻煩事了 — 主要是因為現今環境中的磁碟數目眾多,而且必要的停機時間過長(古諺有云:「沒壞掉的東西就不要修理」,有時候很有道理)。我還沒想出如何在不停機的情況下進行升級。我正在努力當中。

format 指令的好處之一,在於您可以對其饋送指令檔。例如,我們可以使用下列指令檔將缺陷清單傾出至某個檔案:

defect
both
dump /disks/c2t1d0-defect.dat

r_gps@holstein: format -f c2t1d0.cmd /dev/rdsk/c2t1d0s2

但由於 format 指令具有破壞性,若磁碟已掛載分割區,我們就無法將指令檔傳送給它。若您認為此指令有所幫助,建議您使用 Perl 與 Expect 取得這項資訊。

警告:我已重製 format 功能表,我們查看其餘選項時,會發現有些選項可能會破壞磁碟上的資料。請切記一定要謹慎作業,因為您破壞的可是自己的資料。

r_gps@holstein: format /dev/rdsk/c2t1d0s2
selecting /dev/rdsk/c2t1d0s2
[disk formatted]

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
        !<cmd>     	- execute <cmd>, then return
        quit
format>

type 選項現在已很少使用。過去在磁碟 (主要是非 SCSI 磁碟) 並不一定載有本身相關資訊時,經常使用此選項。較年長的系統管理員記得過去他們必須輸入磁柱數目、替代磁柱、實體磁柱、磁頭數目、實體磁頭數目、資料磁區/磁軌數目,以及其他許多項目等資訊。對於這些項目,我們大多採用預設值,因為有時我們就是找不到相關資訊。磁碟供應商 (過去的數目要多很多) 對於其專有資訊十分保護。我們有時候會嘗試不同的值,直到正確為止。您也可以採用此方式,但在此之前,您必須儲存您前面所收集的所有磁碟相關資訊。這項資訊確實應該在磁碟上的某個唯讀裝置中,但安全點總是比較好,免得到時得挑燈夜戰。若要將磁碟參數設回正確的值,則可能需要這項資訊,您在對照此文實驗時如果用較舊的磁碟,則這一點更是重要。

IPI 與 SMD 磁碟機,是過去我們必須執行此動作的磁碟機。請嘗試在 Google 上搜尋「ipi smd disk」磁碟機以找出些許相關資料,並瞭解有需要時可以在哪裡購買這些類型的磁碟機。

partition 選項應該是 format 公用程式內最常使用的選項。選取此選項可啟動 [分割區功能表],而我們可以透過此功能表修改磁碟上的分割區。切記,第二個分割區 (分割區編號 2,一般稱為備份分割區) 就是整個磁碟。備份分割區不需進行任何修改。但在少數情況下,您會在備份分割區上建立檔案系統,並僅掛載此檔案系統 — 通常是針對資料庫。但應留意的是,這其實不是理想的作法。若您所使用的軟體將本身連結到磁碟上的分割區,即可能發生問題。我曾使用過某個有此特徵的應用程式,結果後來在維護、升級等作業上,都讓我苦不堪言。若供應商未加留意,當他們要求產品使用磁碟片段 2 時,軟體即可能破壞 VTOC。

而這就牽扯到我對 Sun 非常不認同的一個領域。舉例來說,我所認識的 Sun 以及 Sun Systems Engineer (SE) ,近來不斷鼓吹系統磁碟應使用一個根分割區,並以另一個分割區處理其他的項目。真是胡說八道!對作業系統而言,磁碟上的每個磁碟片段都是獨立的磁碟,因此在我們切割測試磁碟之前,讓我們先瞭解一下為何我不認同 Sun 的這項觀點。您也可以不同意我的觀點,甚至自己另闢文章討論!

/ (root) 因應用程式故障而爆滿 (進而使 /var/tmp 爆滿),會有何後果?這不會對作業系統造成傷害,甚至可能對有問題的應用程式也沒有影響。但再次重申,這可能會使各項作業無法進一步處理,除非先更正有問題的應用程式。因此,我們需要一個分割區,以建置檔案系統並掛載 /。Sun 和我有一個共識:分割區只要一個最好。但我們也必須讓 /var 在別的檔案系統上。因此,對於 /var,我們需要另一個分割區。兩個分割區。此外,我也在另一個分割區中放入 /usr/usr 檔案系統應僅包含可執行檔與 ASCII 檔案。三個分割區。由於我在 /opt 中放入的並非執行系統所需的項目,因此我也將此設為個別的檔案系統。四個分割區。我還為 /tmp 建立了檔案系統,其中僅應包含系統產生的暫存檔案。五個分割區。這是我們的系統磁碟,因此我們需要一個交換分割區。這是第六個分割區。如此我們就有一個分割區可用於任何用途。如果我基於安全考量而封鎖了系統,我會將 /tmp/var/tmp 以外的所有檔案系統設為唯讀。

作業系統會將每個分割區視為個別的檔案系統。這表示它會分別為這些檔案系統建立快取與緩衝區。這些額外的快取與緩衝區會略為分散 I/O 負載。而您確實會受到備份、互連速度與磁碟控制器的限制。但在大量 I/O 的時候,就比較不會發生問題。

個人意見發表結束,現在繼續討論 [分割區功能表]。它會開啟另一個功能表,如下所示:

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
        !<cmd>	- execute <cmd>, then return
        quit

我認為處理磁碟分割最簡單的方式莫過於此:在 [分割區功能表] 中,按「P」鍵以選取 print 選項。如此可清楚顯示我們的作業起點。畫面上會出現下列先前出現過的輸出。

Current partition table (original):
Total disk cylinders available: 24620 + 2 (reserved cylinders)

Part    Tag     Flag     Cylinders     Size       	Blocks
  0        root	wm	0 - 90     128.37MB	(91/0/0)      	  262899
  1        swap	wu	91 - 181   128.37MB 	(91/0/0)     	  262899
  2      backup	wu	0 - 24619   33.92GB	(24620/0/0) 	71127180
  3  unassigned	wm	0     0    (0/0/0)        0
  4  unassigned	wm	0     0    (0/0/0)        0
  5  unassigned	wm	0     0    (0/0/0)        0
  6         usr	wm	182 - 24619 33.67GB	(24438/0/0) 	70601382
  7  unassigned	wm	0     0    (0/0/0)        0

此為預設分割區表,而我們必須加以變更;別忘了我們不希望出現重疊的分割區。修改分割區時,使用 modify 選項是最安全的方式。這與 Free Hog Slice 有關,這是一個宛如魔術般可自動縮放的暫存分割區,用以容納磁碟分割選項。只有在執行 format 公用程式時,才會出現 Free Hog Slice。

當您輸入 modify 時,您可選取分割區庫,並且可修改目前的分割區或 All Free Hog 分割區。

partition> modify
Select partitioning base:
        0. Current partition table (original)
        1. All Free Hog
Choose base (enter number) [0]?

根據預設,您會修改目前的分割區,這點沒有問題。此動作執行與否並沒有多大的差別。當您選取目前的分割區表時,format 公用程式會先顯示目前的磁碟分割。若您選取 All Free Hog,您會發現備份分割區將是唯一具有配置空間的分割區。使用 modify 選項時,您可以選擇修改備份分割區以外的所有分割區。我對 modify 選項較不滿意的一點是,我無法為我所建立的分割區指定「標記」,或設定「旗標」。我可以在稍後個別選取每個分割區以完成此動作,但這未免有點多餘。

若我選擇不使用 modify 選項,即可個別變更每個分割區。我所使用的是 36 GB 的磁碟機,因此倒不如將根分割區設得大一點。首先,我選取所要修改的分割區、設定此分割區的權限,然後為其指定起始磁柱,最後指定大小。

partition> 0
Part      Tag    Flag     Cylinders         Size      		Blocks
  0       root    wm       0 -    90      128.37MB    (91/0/0)      262899

Enter partition id tag[root]: 
Enter partition permission flags[wm]: 
Enter new starting cyl[0]: 
Enter partition size [262899b, 91c, 90e, 128.37mb, 0.13gb]: 256mb

您也可以在分割區 ID 標記與權限旗標問題中輸入「?」,以取得可接受的回應。若再次按下「P」鍵,就會發現我有一個問題必須處理。

Part      Tag   Flag     Cylinders      Size          		Blocks
  0      root	wm	0 - 181      	256.74MB	(182/0/0)   525798
  1      swap	wu	91 - 181      	128.37MB	(91/0/0)    262899
		...

分割區 0 與分割區 1 重疊。在您建立分割區的過程中,請確定您所建立的分割區沒有重疊的現象。您所建立的分割區數目及其大小,實際上取決於您的站點、需求、經驗等。作業完成後,產生了下列項目:

Current partition table (original):
Total disk cylinders available: 24620 + 2 (reserved cylinders)

Part      Tag   Flag     Cylinders         Size    		Blocks
  0        root	wm	0 -  181      	56.74MB		(182/0/0)        525798
  1        swap	wu	182 - 272      128.37MB		(1452/0/0)     	4194828
  2      backup	wu	0 - 24619      	33.92GB		(24620/0/0)    71127180
  3  unassigned	wm	3540 - 4265      1.00GB   	(726/0/0)      	2097414
  4  unassigned	wm	0      0    	(0/0/0)   	0
  5  unassigned	wm	4266 - 4991      1.00GB   	(726/0/0)      	2097414
  6         usr	wm	273 - 2087     	 2.50GB		(1815/0/0) 	5243535
  7         var	wm	2088 -	3539     2.00GB   	(1452/0/0)   	4194828

我們仍須寫出分割區表。只要鍵入 label,並且對是否繼續的問題回答「Y」,即可完成此動作。您可能想知道 /home 位於何處。我很少將使用者內容放在系統磁碟上。因為這會讓不同作業系統層級間的切換過於容易。

若您的磁碟購自 Sun,通常不太需要使用 format 選項。若您購買二手磁碟,或是磁碟從其他作業系統轉移,或擁有許多缺陷的磁碟,則可利用 format 選項進行 Solaris 作業系統的磁碟準備工作。對於具有多項缺陷的磁碟,可能會進行磁碟清除。使用此選項的原因之一,在於您的系統所連線的 RAID 引擎若不夠「聰明」,則無法呈現已建立的 LUN,讓 Solaris 作業系統能夠辨識。若手邊有此類硬體,您可能需要尋找較新的設備。您最好在下班前或一早上班時開始進行磁碟的格式化工作,視磁碟大小而定。就 Ultra Enterprise 工作站 (UE-60) 上的 36 GB 磁碟機而論,估計需要 332 分鐘才可完成此工作。

repair 選項可用以修復磁碟上有缺陷的區段 — 但不見得修得好。我已經好幾年沒使用此選項。在撰寫此文前,我根本忘了有這一個選項。現在磁碟機成本如此低廉,與其花好幾個小時東弄西弄、試圖回復某個區段,還不如換個新的磁碟來得安全甚至更便宜。您可能覺得這樣很無趣,但提醒您,這樣比較安全。

我想之前針對 label 選項談得夠多了,因此現在我將略過它而直接跳到 analyze 選項。如同缺陷選項,analyze 選項也會開啟另一個功能表。除了玩玩看或寫文章以外,我現在已經很少使用 analyze 選項。您可以使用 [分析功能表] 中的項目進行磁碟分析。您會注意到有些選項指出它們會損毀資料。

backup 選項可搜尋備份標籤。它會先搜尋主要標籤,若有的話,format 會詢問您是否要繼續作業。若繼續作業,backup 選項即會以它所找到的備份標籤取代主要標籤。到目前為止我還沒有必要這麼做,而我也懷疑其適用性 — 據我所知,若沒有主要標籤,您就無法使用 format 指令中的備份選項。我猜想 Sun 支援人員或許可告訴您如何使用 dd 指令,將備份標籤移至磁碟上的主要標籤位置,但這純屬個人猜測。

這不是很有趣嗎?在兩、三個磁碟上進行分割區的格式化與設定並不成問題 — 雖然需要輸入些許資料,但還可忍受。但若您在連接到大型 RAID 陣列後,而需要以相同方式配置 10 個甚或 200 個磁碟,該怎麼辦?我有個好朋友曾在一個大型影像專案中面臨此問題。她使用了 fmthard 並寫了程序檔,就一口氣全部搞定。

一如既往,man -s1m fmthard 可讓您獲得較多的資訊,但簡言之,fmthard 的使用方式如下。首先,您必須要有 ASCII 資料檔,以告知 fmthard 如何設定目標磁碟上的分割區。您可以使用慣用的編輯器建立此檔案,或直接以 fmthard 指令加以建立。查看文字檔時,您會發現您在每個磁碟上所需的每個分割區上,必須為第一個磁區與磁區計數指定哪些項目。如之前所述,我們絕對不希望有磁碟區重疊的現象發生。

* Partition    Tag     		Flag   		First Sector  Sector Count
  0		2		00		4194828		1048707
  1		7		00		5243535		4145715
  2		5		00		0		71127180
  3		3		01		0		4194828
  4		0		00		9389250		2097414
  5		0		00		11486664	8389656
  6		4		00		19876320	6292242

因此,最理想的方式是使用 format 公用程式根據您所需要的配置分割其中一個磁碟,再使用 fmthard 指令建立資料檔,以便用於其餘磁碟的分割作業。

fmthard -i -n "" /dev/rdsk/c2t1d0s2 > ./mypartition.dat
 

前述指令會將 c2t1d0 上的磁碟分割區寫出至 mypartition.dat 檔案。接著,您可以將此 dat 檔案送入 fmthard 指令中,以相同的方式處理您要分割的所有磁碟。

« fmthard -s mypartition.dat -n "volumename" /dev/rdsk/cxtydzs2 »

fmthard 指令的缺點是,它會更新 VTOC。因此,若您的磁碟沒有有效的標籤可起始作業,fmthard 即無法運作。若您要透過 fmthard 指令使用或設定磁碟區名稱,您的程序檔可能就必須有 200 行內容 (或您所要修改的磁碟數)。但與透過 format 公用程式慢慢設定一堆磁碟的分割區相比,這還是好多了。

現在,若您已確實閱讀 format 的線上手冊,您將會發現:

-e    Enable SCSI expert  menu.  Note  this  option  is  not
      recommended for casual use.

我不知道你怎麼想啦,但我就是想試試這個選項。當您進入 format 公用程式時,功能表中會另外出現兩行:

scsi	- independent SCSI mode selects
cache	- enable, disable or query SCSI disk cache

在您進入 scsi 選項時,甚至還會出現一段完整的警告!事實上,若您不瞭解 SCSI 協定,您大概會想要有一本說明 SCSI 協定的好書,特別是有關可在 format 公用程式的 scsi 選項下變更的模式選擇。我個人推薦 Friedhelm Schmidt 撰寫的「The SCSI Bus and IDE Interface: Protocols, Applications, and Programming」。雖然我曾經試著用過,但我從未真正在生產伺服器中使用。有時候保留原狀就是上策。

若您想要試看看 scsi 選項區域,在此提出一點忠告:先以記錄選項啟動 format 公用程式 (-l c2t1d0.log),然後完成 format 公用程式中每個顯示畫面的作業;如此可將所有項目儲存在記錄檔中。其次,scsi 選項下的格式化選項,與上一層功能表的格式化選項並不相同。

此時,快取選項會顯示可提供磁碟讀寫快取的功能表。並非所有的 SCSI 磁碟皆有快取,而有快取的磁碟也並非全都允許您變更其快取選項。此快取乃是磁碟上的少量記憶體 — 與系統記憶體毫無關係。這表示,當您使用這些磁碟時,每個磁碟本身及其運作方式都會略有不同。我發現讀取快取通常為開啟狀態,我認為這很合理,因為在讀取期間才不會因電力中斷而遺失資料。資料仍應位於磁碟上。同樣地,我發現寫入快取一律為關閉狀態。這也合理,因為當電力中斷時,寫入快取中的所有資料都將遺失。當我加以開啟,並使用 IOzone 比較 I/O 負載時,寫入作業的提升不盡相同,有的微乎其微,有的則非常顯著。提升的程度會隨著磁碟型號與供應商而有所不同。

此時我們位於具有 -e 選項的 format 公用程式中,讓我們看看另一個項目。鍵入 label,您會獲得下列回應:


format> label
[0] SMI Label
[1] EFI Label
Specify Label type[0]:

我想 SMI 表示 Sun Microsystems。此為預設選項,當您進入不具 -e 選項的 format 公用程式時,就會看見此選項。SMI 選項可為您提供八個分割區的標準分割區配置,其中分割區 2 是備份分割區。

若您選取 EFI (可延伸韌體介面) 標籤,則會出現另一個分割區,如下所示。


ascii name  = <FUJITSU  MAN3367M SUN36G  1502 43d671f>
bytes/sector    =  512
sectors = 71132958
accessible sectors = 71132925
Part      Tag    Flag     First Sector        Size            Last Sector
  0	   root    wm               34     128.35MB         	  262898    
  1	   swap    wu           262899     128.37MB         	  525797    
  2  unassigned    wm                0         0                     0  
  3  unassigned    wm                0         0                     0    
  4  unassigned    wm                0         0                     0    
  5  unassigned    wm                0         0                     0    
  6         usr    wm           525798      33.66GB         	71116540    
  7  unassigned    wm                0         0                     0   
  8    reserved    wm         71116541       8.00MB         	71132924    

format>

您可以在 Intel 網站的可延伸韌體介面頁面上,找到有關 EFI 的詳細資訊。

到目前為止我們有何收穫?我希望已經讓您瞭解 format 公用程式的幾項功能,並瞭解 format 公用程式對您的用處。

關於作者

Greg (shoe) Schuweiler 在人人皆好客的美國中西部擔任顧問已有 20 年的歷史,他是 Oracle DBA 的內嵌式軟體設計人員,除此之外還有很多奇怪的頭銜。過去八年來,他一直擔任 UNIX SA 這個崇高的工作。若想與他連絡,請透過 gshoe [at] xadd.org

The information and links on this page have been provided by a BigAdmin user. The submitter is solely responsible for such information and links. Sun is not responsible for the availability of external sites or resources, and does not endorse and is not responsible or liable for any content, advertising, products, or other materials on or available from such sites or resources. Sun will not be responsible or liable, directly or indirectly, for any actual or alleged damage or loss caused by or in connection with use of or reliance on the information posted here, or goods or services available on or through any external site or resource.
 
 

Comments (latest comments first)

Discuss and comment on this resource in the BigAdmin Wiki

Unless otherwise licensed, code in all technical manuals herein (including articles, FAQs, samples) is provided under this License.


BigAdmin