`kfed` (Kernel Filesystem Editor) 是 Oracle ASM 附帶的底層工具,可直接讀取 ASM 磁碟 Header,不需掛載 ASM 實例,適合災難恢復、元資料驗證、磁碟遷移驗證。
[oracle@rac2 ~]$ kfed read /dev/mapper/datap1
關鍵輸出欄位解讀:
| 欄位 | 範例值 | 含義 |
|---|---|---|
| kfbh.endian | 1 (0x01) | 位元序:1=Little Endian (x86),0=Big Endian |
| kfbh.type | KFBTYP_DISKHEAD (1) | 區塊類型:磁碟 Header |
| kfdhdb.driver.provstr | ORCLDISKDATA | 磁碟卷標 (Provisioning String) |
| kfdhdb.grptyp | KFDGTP_EXTERNAL (1) | 冗余類型:EXTERNAL / NORMAL / HIGH |
| kfdhdb.hdrsts | KFDHDR_MEMBER (3) | Header 狀態:MEMBER 表示已加入磁碟組 |
| kfdhdb.dskname | DATA | ASM 磁碟名稱 |
| kfdhdb.grpname | DATA | 磁碟組名稱 |
| kfdhdb.fgname | DATA | Failure Group 名稱 |
| kfdhdb.secsize | 512 | 磁區大小 (bytes) |
| kfdhdb.blksize | 4096 | ASM 區塊大小 (bytes) |
| kfdhdb.ausize | 1048576 (1MB) | Allocation Unit 大小 |
| kfdhdb.dsksize | 11993 | 磁碟大小 (單位:AU,即 11993 * 1MB ≈ 11.7 GB) |
| kfdhdb.pmcnt | 2 | Partner 數 (NORMAL 冗余為 2,HIGH 為 3) |
| kfdhdb.fstlocn / altlocn | 1 / 2 | File Directory / Alias Directory 起始 AU 位置 |
| kfdhdb.crestmp / mntstmp | 時間戳 | 建立時間 / 掛載時間 (含 hi/lo 解析至微秒) |
| kfdhdb.dbcompat | 0x0a100000 (10.1) | 相容版本 |
# 備份原 Header
kfed read /dev/mapper/datap1 > /tmp/disk1_header.txt
# 修復範例:修正磁碟名
kfed write /dev/mapper/datap1 dskname='DATA1'
# 修復群組名
kfed write /dev/mapper/datap1 grpname='DATA_GRP'
警告: `kfed write` 直接修改裝置原始資料,操作前必須完整備份 Header,且建議在 Oracle 支援工程師指導下進行。
`kfed` 是 ASM 管理員的「聽診器」,能在實例無法啟動時洞察磁碟元資料真相。熟練解讀 `kfdhdb.*` 核心欄位(群組名、磁碟名、冗余類型、AU 大小、容量、時間戳),並建立定期 `kfed read` 歸檔機制,可大幅縮短存儲層故障的診斷時間。