2013年10月22日 星期二

Linux 系統搬移至Software RAID

延續前一篇Linux Software RAID 介紹,已經將資料搬到RAID-1,接下來就是搬作業系統了。將作業系統放至RAID-1,如果硬碟壞了,可以不需要花費時間重新安裝環境,只要resync好了,又是一尾活龍。

要搬作業系統不止是將檔案複製過去就好了,還要更改設定檔與重寫開機磁區。步驟如下:
  • 關閉SELinux
  • 建立RAID
  • 備份原來的系統
  • 將系統還原至RAID
  • 修改 /etc/fstab
  • 修改 /boot/grub/grub.conf
  • 設定grub開機磁區
操作過程需要準備一片Linux Live CD,可到hinet mirror下載,網址: http://mirror01.idc.hinet.net/CentOS/,目前最新的是6.4版,下載32位元(i386)即可,下載後燒錄到CD。

本操作範例仍然在VMware環境下執行。
/dev/sda1為原始作業系統
/dev/sdb1 和 /dev/sdc1 建立RAID-1

由於每個人狀況可能會有所不同,還是要依自己的環境而有所調整,但步驟大致上都差不多。

關閉SELinux

  • 編輯/etc/selinux/config設定 SELINUX=disabled

一定要關閉SELinux,否則系統搬移後,使用者會無法登入。蕃薯為了無法登入的問題,找了好久,看到 /var/log/message 登入時有3行訊息:
Oct 14 11:57:12 localhost gnome-session[2136]: atk-bridge-WARNING: AT_SPI_REGISTRY was not started at session startup.
Oct 14 11:57:12 localhost gnome-session[2136]: atk-bridge-WARNING: IOR not set.
Oct 14 11:57:12 localhost gnome-session[2136]: atk-bridge-WARNING: Could not locate registry


atk-bridge是啥東東呀,最後才發現是SELinux在搞鬼。記得以前在移動PostgreSQL資料庫目錄時也遇到SELinux在搞鬼。

建立RAID

從這裡到最後,都是在Live CD開機的環境下,並且都要以root身分操作
  • 用Live CD開機

  • 開啟終端機並切換到root使用者
開啟終端機 Application -> System Tools -> Terminal 並下指令"su - root"切換成root,不需要輸入密碼即可切換。以下操作將略過此步驟。

  • 以指令方式建立Software RAID-1
根據蕃薯的測試,CentOS 6版的grub可以辨識到 metadata 1.0。若在系統安裝時建立的開機RAID也是1.0版,因此就以1.0版為主。Software RAID建立方式請參考前一篇Linux Software RAID 介紹,記得加上 --metadata=1.0 參數喔!

如果只有一顆新硬碟搭配原本的硬碟,可以先使用missing參數建立RAID,等系統備份好了再將原本的硬碟加入RAID。

  •  建立Ext4檔案系統
建立檔案系統,並指定Name(Label)為rootfs,這個名稱在後面mount會用到。記得要取消 "Take ownership of filesystem",否則開機會無法進入作業系統。


備份原來的系統

  • 掛載RAID與原系統(/dev/sda1) 分割區
mkdir /raid
mkdir /rootfs

mount /dev/md0 /raid
mount /dev/sda1 /rootfs

  • 使用tar建立系統備份檔到/raid目錄,以root使用者執行時會記錄檔案屬性,不需要再加-p參數。
cd /
tar -czvf /raid/rootfs.tgz rootfs

將系統還原至RAID

  • 解壓縮tar檔案,會產生/raid/rootfs目錄
tar -xzvf /raid/rootfs.tgz -C /raid

  • 將/raid/rootfs底下的所有目錄與檔案移到 /raid目錄,除了"."與".."
mv /raid/rootfs/* /raid
mv /raid/rootfs/.* /raid
rmdir /raid/rootfs

建議將/raid/rootfs.tgz備份起來,以備不時之需。

2013/10/25補充:
還有另一個方式,就是把raid重新mount 到 /rootfs,這樣直接解開rootfs.tgz 到根目錄底下就可以了,不需要再搬檔案,步驟如下:
umount /raid
umount /rootfs
mount /dev/md0 /rootfs
tar -xzvf /rootfs/rootfs.tgz -C /
使用這種方式,下面修改的fstab與grub.conf必須注意路徑。

修改 /etc/fstab

 將預設的UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx 改成 LABEL=rootfs,這個"rootfs"是我們前面建立Ext4時指定的。如果用UUID則每次搬移都要改一次/etc/fstab,使用LABEL會比較方便。
  • 將UUID改成LABEL,記得要編輯的是 /raid/etc/fstab而不是/etc/fstab喔!

修改 /boot/grub/grub.conf 

修改下圖紅色框框處,檔案一樣位於/raid/boot/grub/grub.conf而不是/boot/grub/grub.conf喔!

請注意如果CentOS有更新kernel則要全部修改,否則那個kernel將無法開機。

  • 指定開機磁區
將紅色框框中 (hd0,0)改成對應的開機磁碟機與分割區,hd0對應/dev/sda ,第0個分割區為/dev/sda1。為什麼是hd0呢? 因為完成後將原磁碟移除,RAID就變成hd0了。

    • 指定根目錄LABEL
    將紅色框框中 root=UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx改成root=LABEL=rootfs,理由與前面修改/etc/fstab一樣。
    • 指定RAID UUID
    將紅色框框中rd_NO_MD改成 rd_MD_UUID=xxxxxxxx:xxxxxxxx:xxxxxxxx:xxxxxxxx

    查詢UUID:  # mdadm --detail /dev/md0

    修改後的grub.conf

    設定grub開機磁區

    目前我們的2顆RAID硬碟分別為 /dev/sdb與 /dev/sdc,對應grub為hd1與hd2。開機分割區分別為/dev/sdb1與 /dev/sdc1,對應grub為第0個分割區。我們將在2顆磁碟上設定開機磁區。
    • 執行grub
    root (hd1,0)
    setup (hd1)

    root (hd2,0)
    setup(hd2)
    quit

    接下來關機並將原本的硬碟移除掉,就大功告成,可以用RAID開機了。

    沒有留言:

    張貼留言