close

有備無患-備份 MBR 及磁碟分割表(Partition Table)

有備無患?没錯,今天差一點和存放在第一顆硬碟的資料說再見。故事是-

註:雖然有另一份使用 ZFS 複寫的資料在別台機器,真的有問題的話也只是最近尚未複寫過去的資料而已。 不好意思,一不小心又把 ZFS 的好處告訴大家了。
今天協助同事測試一個開機姆指碟,後來知道這個開機姆指碟會在開機時會自動將第一顆硬碟的磁碟分割表全部清掉,並將所有的空間全部劃為一個 Solaris 分割區。 聽起來也很正常,因為我的第二顆硬碟就是全部劃為一個 Solaris 的分割區,如此 ZFS 就可以使用全部的空間。 問題是我的第一顆硬碟有兩個分割區,一個是約 30GB 的分割區用來安裝 OpenSolaris,另一個則是用來放資料的。 於是重新開機後發現:用來開機的 rpool (ZFS Root Pool)沒事,雖然第一個分割區及切片 s0 比原來設定的大很多。但是放在第二個分割區的 ZFS 儲存池則是無法使用,原因是現在硬碟已經沒有第二個分割區。

在使用 zpool、format 及 fdisk 指令了解情況後,研判應該只是磁碟分割表的問題。 於是分別使用 OpenSolaris 及 System Rescure CD 開機,想利用 fdisk 指令試著重做出一個與以前一樣的磁碟分割表。最後是利用 OpenSolaris 上的 fdisk 以 20% 及 80% 的分割重做出來。 還好 zpool list 的指令提供我關於第一個分割區大小的資訊。另外是 OpenSoarlis 的 fdisk 百分比分割法,讓我猜第二次就答對了。以前應該是使用 OpenSolaris 的 fdisk 來分割硬碟的。如下是復原後的情形:

root@X-Wing:/ # zpool list
NAME    SIZE  ALLOC   FREE    CAP  DEDUP  HEALTH  ALTROOT
rpool  29.8G  22.3G  7.43G    75%  1.00x  ONLINE  -
        
root@X-Wing:/ # fdisk /dev/rdsk/c0t0d0p0
             Total disk size is 19457 cylinders
             Cylinder size is 16065 (512 byte) blocks

                                               Cylinders
      Partition   Status    Type          Start   End   Length    %
      =========   ======    ============  =====   ===   ======   ===
          1       Active    Solaris2          1  3891    3891     20
          2                 Other OS       3892  19456    15565     80



SELECT ONE OF THE FOLLOWING:
   1. Create a partition
   2. Specify the active partition
   3. Delete a partition
   4. Change between Solaris and Solaris2 Partition IDs
   5. Edit/View extended partitions
   6. Exit (update disk configuration and exit)
   7. Cancel (exit without updating disk configuration)
Enter Selection:
        

雖然配合 installgrub 將 GRUB 安裝到 s0 切片並且重新開機後資料全部都沒有損傷,為了防患未然,我也做了以下的動作備份 MBR 及磁碟分割表:

註:利用姆指碟(c4t0d0)做為範例

# 備份 MBR
dd if=/dev/rdsk/c4t0d0p0 of=c4t0d0.mbr bs=512 count=1

# 備份磁碟分割表
fdisk -W c4t0d0.txt /dev/rdsk/c4t0d0p0

# 檢視目前的磁碟分割表
fdisk -W - /dev/rdsk/c4t0d0p0

# 故意將硬碟的前 512 位元組全部填為零
dd if=/dev/zero of=/dev/rdsk/c4t0d0p0 bs=512 count=1

# 檢視目前的磁碟分割表
fdisk -W - /dev/rdsk/c4t0d0p0

# 還原磁碟分割表
fdisk -F c4t0d0.txt /dev/rdsk/c4t0d0p0

# 檢視目前的磁碟分割表
fdisk -W - /dev/rdsk/c4t0d0p0
        

參考資料:

  1. en.wikipedia.org > Master boot record
  2. en.wikipedia.org > GUID Partition Table
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 小宇哥 的頭像
    小宇哥

    小宇哥的CS學習筆記

    小宇哥 發表在 痞客邦 留言(0) 人氣()