'format' 詳解
轉載--
對於很多人來說,硬碟就是一個“黑匣子”,可以將其看作是以某種方式儲存資料、程式和/或作業系統的小型裝置。當然,只要您關心的就是這些,此種看法並沒有什麼不妥。但作為系統管理員,您關心的一個主要問題應該是資料保護。另一個優先考慮的問題應該是,如何有效地在記憶體和物理磁碟之間移動資料。在本文中,我將詳細介紹一個可在 Solaris 作業系統中使用的基本實用程式:format。
format 實用程式用於管理磁碟上的分片,它最初是為了管理與 SCSI 連線的磁碟而編寫的,因此,如果磁碟是透過 IDE 連線的,其效能可能會有所不同。如果已安裝並正確配置了相應的驅動程式,您應該可以管理光纖通道連線的驅動器以及 RAID 引擎提供的 LUN。
除了 format 以外,我還介紹了一些其他命令,它們分為兩種型別:非破壞性和破壞性。我始終以粗斜體顯示破壞性命令,並在這些命令前面加上 Warning(警告)一詞。例如:如果以超級使用者身份執行 ?Warning: cd / ; rm –r * ?,實際上會破壞系統磁碟。
儘管非破壞性命令應該是沒有破壞性的,但是否在系統中執行這些命令完全由您決定。破壞性命令將破壞磁碟上的資料,因此,只有在您確實瞭解所執行的操作時,才能執行這些命令。
以下是在本文中使用的命令:format、prtvtoc、dd、od、cat 和 fmthard。
磁碟術語:
磁碟標籤:
該特殊區域包含磁碟的相關資訊,例如,幾何引數和分片。它還稱為卷目錄 (Volume Table Of Contents, VTOC)。磁碟標籤是磁碟上的前 512 個位元組。目前,大多數磁碟在出廠時都已加上了標籤。
缺陷列表:
這是無法執行寫入或讀取操作的磁碟區域列表。製造商總是會提供一個缺陷列表,而且我們將會看到,這是一個“增長型”(grown)列表,即它會隨著時間的推移而不斷變大。
分割槽表:
分割槽表是磁碟 VTOC 的一部分,其中包含磁碟上的分片(亦稱分割槽)、分片邊界以及分片大小。分片由磁碟上一系列連續的塊組成。磁碟上有 8 個分片 [0-7],但使用可擴充套件韌體介面標籤 (Extensible Firmware Interface Label, EFI) 標記磁碟時除外;我們將在後面對此稍加說明。在大多數情況下,我們不使用第 2 個分片,因為它表示整個磁碟。
閱讀本文時,請記住以下幾點:
* 每個磁碟分片只能儲存一個檔案系統。
* 一個檔案系統不能跨多個分片(假定未使用邏輯卷管理器)。
* 在建立檔案系統後,除非對整個磁碟進行重新分割槽,否則無法更改檔案系統的大小。
* 分片不能跨多個磁碟。(對於使用 n 個磁碟並在系統中將其表示為一個磁碟的 RAID 引擎,format 實用程式只能看到一個磁碟。)
首先,選擇要使用 format 執行操作的磁碟:
r_gps@holstein: format
Searching for disks...done
AVAILABLE DISK SELECTIONS:
0.c0t0d0 boot
/pci@1f,4000/scsi@3/sd@0,0
1.c0t1d0 home
/pci@1f,4000/scsi@3/sd@1,0
2.c2t1d0 trashme
/pci@1f,4000/pci@5/SUNW,isptwo@4/sd@1,0
Specify disk (enter its number):
您可以鍵入 'quit' 退出或返回上一級選單,或者按 徹底退出 format 實用程式。在本例中,我將使用 "AVAILABLE DISK SELECTION 2"。正如以前提到的,如果從 Sun 或出售 Sun 裝置的第三方供應商處購買磁碟,則購買的磁碟上應該已帶有 Sun 標籤。但是,如果在異構環境中挪用 SCSI 磁碟,則很明顯,用在 HP、AIX 或 Windows 伺服器中的 36 GB 驅動器會具有無法識別的標籤(至少對 Solaris 作業系統來說是這樣),這時您需要新增一個標籤。從最基本的操作入手會比較有趣一些,因此我打算先刪除所使用的磁碟上的標籤:
? Warning: echo "adios data" | dd f=/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 boot
/pci@1f,4000/scsi@3/sd@0,0
1. c0t1d0 home
/pci@1f,4000/scsi@3/sd@1,0
2. c2t1d0
/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 命令瞭解上述一些資訊,但從該輸出中我們可以看到存在四個分割槽。Tag(標記)列顯示存在根 (2)、交換 (3)、備份 (5) 以及使用者 (4) 分割槽。Flags(標誌)列顯示存在兩個可掛載(可讀寫)的分割槽 (00) 和兩個無法掛載的分割槽 (01)。對於每個分割槽,First Sector(第一個扇區)列顯示分割槽的起始位置;Sector Count(扇區數)顯示扇區的數量;Last Sector(最後一個扇區)顯示分割槽中最後一個扇區的位置。如果掛載了一個檔案系統,Mount Directory(掛載目錄)將顯示分割槽的掛載位置。在繼續執行一些修改操作之前,讓我們先看一下,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 f=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
! - execute , 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 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
/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
帶有 "raw" 字樣的物理裝置名稱指的是字元裝置,其他名稱指的是塊裝置。字母 'a' 指的是分割槽 0;字母 'b' 指的是分割槽 1,依此類推。
defect 選項可開啟 Defect Menu(缺陷選單),該選單用於檢視磁碟出廠時的缺陷數目。請使用 primary 選項來檢視此資訊。我的臺式計算機具有三個磁碟,它們的主要缺陷數從 72 到 2922 不等。不過,我們更感興趣的是 grown 選項。磁碟上的 "grown" 缺陷會隨著時間的推移而增加,我們所關心的是其增加速率。顯然,如果缺陷以較高的速率增加,則磁碟很快就會出現故障。
print 選項顯示缺陷及其在磁碟上的位置的列表。您還可以將磁碟缺陷列表轉儲(儲存)到檔案中。我曾經在一個懷疑有缺陷的磁碟上執行了此操作,只花了很少一點時間。
verify 選項顯示的很多資訊與前面 prtvtoc 命令顯示的資訊相同,並且使用 format 命令顯示分割槽時也會顯示這些資訊。
format> verify
Primary label contents:
Volume name = < pigsnot>
ASCII name =
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 檔案(或指定的任意名稱)中。format 命令可以使用此 dat 檔案中的資訊來配置驅動器。(有關該檔案的詳細資訊,請參見 man -s4 format.dat。)如果使用 cat 在一個視窗中顯示新建立的 format.dat 檔案,然後在另一個視窗中執行 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
! - execute , then return
quit
format>
現在,已經很少有人使用 type 選項了。人們過去經常使用該選項,當時磁碟(主要是非 SCSI 磁碟)並非始終包含有關其自身的資訊。較舊系統的管理員需要記得輸入以下資訊:柱面數、替代柱面數、物理柱面數、磁頭數、物理磁頭數、每個磁軌的資料扇區數以及很多其他項。對於其中的許多資訊,我們使用預設值,因為有時根本找不到這些資訊。以前,磁碟供應商的數目眾多,他們對自己的專有資訊採取了嚴格的保護措施。有時,我們需要不斷地對這些值進行試驗,直到找到正確的值。您可以嘗試修改這些值,但在執行此操作之前,應儲存前面收集的所有磁碟相關資訊。的確,這些資訊應該儲存在磁碟上的某種只讀裝置中,保證安全比加班加點工作要重要得多。您可能需要使用這些資訊將磁碟引數設回到正確值,特別是在使用舊磁碟執行本文的操作時。
過去,我們必須為稱作 IPI 和 SMD 的驅動器執行上述操作。如果您感興趣的話,請嘗試在 Google 上搜尋 'ipi smd disk' 驅動器,以瞭解有關這些驅動器的一些歷史資訊,從而查明仍然可以在哪裡買到這些型別的驅動器。
partition 選項可能是 format 實用程式中使用最多的選項。選擇該選項時將啟動 Partition Menu(分割槽選單),我們可以從中修改磁碟上的分割槽。切記,第二個分割槽(分割槽編號為 2)稱為備份分割槽,它是整個磁碟。我們不希望修改備份分割槽。但是,在極少數情況下,您需要在備份分割槽上建立檔案系統,並且只掛載該檔案系統(通常還包含資料庫)。然而,要注意的是,這並非是一種好的做法。如果使用的軟體將其自身繫結到磁碟上的某個分割槽,則可能會出現問題。我使用的一個應用程式就是這樣的,要對其進行維護和升級等操作,簡直是難上加難。如果供應商考慮不周,而要求其產品使用第 2 個分片,則該軟體可能會破壞 VTOC。
下面介紹的內容是我與 Sun 的觀點大不一致的地方。例如,最近 Sun 和我熟悉的一些 Sun 系統工程師 (System Engineer, SE) 建議使用一個根分割槽,並透過另一個分割槽來儲存系統磁碟的所有其他內容。簡直是一派胡言!作業系統將磁碟上的每個分片都看作是單獨的磁碟,因此,在測試磁碟上建立分片之前,讓我們看一下我在這一點上為什麼與 Sun 存在分歧。如果您願意,您可以不同意我的觀點,但最好寫文章反駁我!
如果由於應用程式發生故障而導致填滿 /(根目錄),進而又填充 /var/tmp,那該怎麼辦呢?這不會損壞作業系統,甚至也不會對發生故障的應用程式造成破壞。但在另一方面,它可能會阻止任何程式繼續進行任何處理,直到糾正了發生故障的應用程式。因此,我們需要使用一個分割槽來建立檔案系統和掛載 /。在這一點上,Sun 與我的看法是一致的:使用一個分割槽。但是,我們還需要將 /var 放在單獨的檔案系統中。因此,我們需要使用另一個分割槽來放置 /var。現在有兩個分割槽。我還要將 /usr 放在單獨的分割槽中。/usr 檔案系統應該只包含可執行檔案和 ASCII 檔案。現在有三個分割槽。由於執行系統時並不需要 /opt 中儲存的資訊,因此,我也將其設定為單獨的檔案系統。現在有四個分割槽。我還要為 /tmp 建立一個檔案系統,它應該只包含系統生成的臨時檔案。現在有五個分割槽。由於這是系統磁碟,因此需要建立一個交換分割槽。現在有六個分割槽。這樣還剩下一個分割槽,可以將其用於任何用途。當出於安全方面的原因而將系統鎖定時,我會將 /tmp 和 /var/tmp 之外的所有檔案系統都設定為只讀。
作業系統將每個分割槽視為一個單獨的檔案系統。這意味著,作業系統為其中的每個檔案系統都建立快取記憶體和緩衝區。這些額外的快取記憶體和緩衝區會略微增 大 I/O 負載。當然,您還會受到備份、互連速度和磁碟控制器的限制。但在進行大量 I/O 操作時,出現問題的可能性會有所減少。
好了,這個主題先告一段落,下面繼續介紹 Partition Menu(分割槽選單)。它將開啟另一個選單,如下所示:
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
! - execute , then return
quit
我發現使用分割槽的最簡便方法是:在進入 Partition Menu(分割槽選單)後,只需按 '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 選項進行修改。這需要使用一個稱為“浮動片”的分割槽,它是一個臨時分割槽,可以神奇地自動擴大和縮小以滿足分割槽選項的需要。只有在執行 format 實用程式時,浮動片才會存在。
輸入 modify 後,將顯示選擇分割槽基準的選項,您可以對當前分割槽或 All Free Hog(所有浮動)分割槽進行修改。
partition> modify
Select partitioning base:
0. Current partition table (original)
1. All Free Hog
Choose base (enter number) [0]?
預設情況下,將對當前分割槽進行修改,這樣做是可以的。事實上,執行操作後,結果並沒有多大差別。如果選擇 Current partition table(當前分割槽表),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 選項與 defect 選項類似,它也會開啟另一個選單。除了進行一些試驗或是寫文章,我平常很少使用 analyze 選項。當然,您可以使用 Analyze Menu(分析選單)上的項來分析磁碟。您會注意到,某些選項指出它們會破壞資料。
backup 選項將搜尋備份標籤。但是,它會首先檢查主標籤,如果找到主標籤,format 將詢問您是否繼續。如果繼續,這將導致 backup 選項將主標籤替換為找到的備份標籤。我從未遇到過必須執行此操作的情況,並且我也想知道如何使用此選項;據我所知,如果沒有主標籤,則無法在 format 命令中使用 backup 選項。我想 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 匯流排與 IDE 介面:協議、應用程式以及程式設計)。我試過這個選項,但從未將我所做的修改應用於生產伺服器。有時,能不改最好還是別改。
如果打算試一試 scsi 選項,我要提醒您的是:先使用日誌選項 (-l c2t1d0.log) 啟動 format 實用程式,然後執行 format 實用程式中顯示的各項操作,這樣會將所有資訊儲存到日誌檔案中。此外,scsi 選項下面的 format 選項不同於上一級選單中的 format 選項。
現在,cache 選項顯示了磁碟讀寫快取記憶體選單。並非所有 SCSI 磁碟都使用快取記憶體,而且並非所有使用快取記憶體的 SCSI 磁碟都允許更改 cache 選項。這裡的快取記憶體是指磁碟上的少量儲存器,它與系統記憶體無關。這意味著,每個磁碟可能會略有不同,因而在執行操作時,每個磁碟的行為也會隨之有所差異。我發現讀快取記憶體通常是處於開啟狀態的,這樣設定不無道理,因為在讀取操作過程中即使斷電也不會丟失任何內容。資料仍然會儲存在磁碟上。同樣,我還發現寫快取記憶體通常是處於關閉狀態的。這樣設定也是有道理的,因為如果斷電,寫快取記憶體中的所有資料將會丟失。我曾經將寫快取記憶體開啟並使用 IOzone 比較 I/O 負載,寫入操作提高的幅度從非常小到很顯著,不一而足。這種提高因磁碟型號和供應商而異。
由於使用的 format 實用程式帶有 -e 選項,因此,還可以看到另一項內容。鍵入 label 時,將會獲得以下響應:
format> label
[0] SMI Label
[1] EFI Label
Specify Label type[0]:
我確信 SMI 表示 Sun Microsystems。這是預設選項,如果進入的 format 實用程式不帶有 -e 選項,則會看到該選項。SMI 選項將顯示 8 個分割槽的標準分割槽配置,其中第 2 個分割槽為備份分割槽。
如果選擇 EFI(Extensible Firmware Interface,可擴充套件韌體介面)標籤,則會顯示另一個分割槽,如下所示。
ascii name =
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 Web 站點的 Extensible Firmware Interface(可擴充套件韌體介面)頁中找到有關 EFI 的更多資訊。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/196700/viewspace-750852/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- date_format(date,frm) 詳解ORM
- 詳解Python中的str.format方法PythonORM
- Error format not a string literal and no format arguments解決方案ErrorORM
- 問題解決:TypeError: unsupported format string passed to NoneType.__format__ErrorORMNone
- 一文秒懂!Python字串格式化之format方法詳解Python字串格式化ORM
- Python中對字串格式化的方法:%、format()、以及f+字串詳解Python字串格式化ORM
- Format and un-format money/currency in JavaScriptORMJavaScript
- tar包解壓not in gzip format的解決辦法ORM
- MySQL錯誤Incorrect file format解決方案薦MySqlORM
- Mysql date_format 與 Oracle to_char(date,’format’)MySqlORMOracle
- SUN format命令ORM
- Json formatJSONORM
- set excel formatExcelORM
- 求助:TypeError: unsupported format string passed to NoneType.__format__ErrorORMNone
- oracle工具 awr formatOracleORM
- vim Google style formatGoORM
- MYSQLDUMP TABLE IN SQL FORMATMySqlORM
- [Ruby]format xml with RubyORMXML
- Nginx配置中的log_format用法梳理(設定詳細的日誌格式)NginxORM
- spring.jackson.date-format失效原因及解決方案SpringORM
- 音訊編解碼·格式篇(1)Wave PCM audio format(WAV)音訊ORM
- jQuery Validate的format()用法jQueryORM
- mysql DATE_FORMAT函式MySqlORM函式
- C# String.FormatC#ORM
- C# string Format示例C#ORM
- Microsoft Windows Bitmap File Format SummaryROSWindowsORM
- row header format (157)HeaderORM
- Format of Index Blocks (207)ORMIndexBloC
- linux解壓報錯gzip: stdin: invalid compressed data--format violatedLinuxORM
- http協議/cookie詳解/session詳解HTTP協議CookieSession
- JAVA中String format的用法JavaORM
- 針對python錯誤 format()PythonORM
- Unexpected Date format in BroadcastingORMAST
- Mysql的DATE_FORMAT()應用MySqlORM
- Java MessageFormat.format和ChoiceFormatJavaORM
- v$transportable_platform.endian_formatPlatform
- OAF export data from VO in xlsx formatExportORM
- Clang-format格式標準化ORM