複製 Linux 系統

来源:互联网 发布:php跟java哪个好学 编辑:程序博客网 时间:2024/06/05 14:17
 

兩年以前你用 20GB 的硬碟安裝了一台 Linux server。當時,你覺得 20GB 的空間相當大,十年之內一定不會有問題。

但是,在使用這 Linux server 兩年的期間裡,因實際的需要,你不斷的增加與更新使用者所需要的網路服務軟体。你公司的員工人數越來越多,使用者的帳號也繼續不斷的在增加。 兩年前你給每一位使用者 20MB 硬碟空間,當時評估 20MB為一個使用者的私人資料應該很夠,沒有想到,兩年之後 20MB 的硬碟空間實在不夠用了。

以現在的需求,20GB 的硬碟空間實在太小了。你想換一個比較大容量的硬碟。你如何去做?

你可能想到一種可行的解決構想,就是將 20GB 的整個硬碟,純粹給 server 使用,另外加一個容量在 40GB 以上的新硬碟,專門給使用者儲存私人的資料,應該是沒有問題了。做法是將所有使用者所使用的硬碟空間搬移到新的硬碟。 將 /home複製到新硬碟不是很難的事。

但是你要好好估計一下。你的 Linux server 服務項目,會因需要陸續的增加與更新,兩年之後,是否 20GB 給 server 使用,夠用嗎?想來想去,將整個 Linux 系統搬移到一個大容量的硬碟是最好的辦法。

如何搬?

你第一個反應可能是:在新 40GB 的硬碟安裝一個新的 Linux 系統。然後將舊硬碟的所有使用者帳號和資料複製到 新硬碟就應該能解決這個問題了。這樣你不需要在新的 Linux 系統重新建立所有使用者的帳號。

這樣的想法,事實上不夠周到。沒有錯,重新安裝一個 Linux 系統是很簡單。也不需要很多的時間。不到二十分鐘就 可以安裝一個新的 Linux 系統了。然後從舊硬碟的使用者帳號和資料複製到新硬碟也只不過需要幾分鐘的時間。

但是你可能沒有想到一個很重要的事。在這兩年的時間內,因了軟体的 bug 或安全的漏洞你已經更新了幾種軟体、 更新了多少次?核心﹝kernel﹞應該也更新了三、四次,不是嗎?

你要重新安裝一個 Linux 系統,你安裝的是舊版本的軟体。你必須一個一個的更新這些軟体。但是你還記得你更新的是那一些軟体嗎?如果一個軟体更新了四次,你不能將舊版的軟体直接用第四個更新版來更新。可能第二更新版更改了一些設定值而第三和第四更新版已假設了這些更改,如果你從舊版的軟体直接更新到第四更新版就會發生問題。意思是說,你要從第一更新版開始一個一個的更新以致到第四更新版。不能跳過去。

這樣做是很花時間的。如果你曾將所有的更新都紀錄下來,它對你會有很大的幫助。但是一個一個的更新所有需要更新 的軟体,仍然會花相當多的時間。

你現在的 Linux 系統不是已經很穩嗎?你對現在這個系統不是很滿意嗎?如果可以把這 Linux 系統複製到新的硬碟那 該有多好!

在 Windows,我不敢說,但是在 Linux 我可以很確定的說一定可以把 Linux 系統從一個硬碟複製到另一個不同容量的硬碟。

現在我要談的就是這個主題。但是在討論之前,我必須列出有關討論的一些資訊。

  • 使用 RedHat/Fedora
  • Bootloader: grub
  • 現在使用的硬碟﹝以後稱謂「舊硬碟」﹞

20GB,分割為:

hda1 : 50MB /boot partition
hda2 : 19.5GB / (root) partition
hda3 : 512MB swap partition
  • 新硬碟:

40GB,分割為:

hda1 : 50MB /boot partition
hda2 : 39.5GB / (root) partition
hda3 : 512MB swap partition

請注意,雖然舊和新硬碟的 partition 結構可以不一樣,但是會比較麻煩。你必須編輯新硬碟的 /etc/fstab 來反映出新的分割區,複製的方式也有一點不一樣,也要設為新分割區的掛點。最好還是保持同樣的 partition 結構。Partition 的大小不一樣沒有關係。

將 Linux 系統從一個硬碟複製到另一個硬碟之方法如下:

  1. 將新硬碟連接到 EIDE1,primary﹝Linux 稱謂 hdc﹞。這樣接法不需要調硬碟的 jumpers,省一點麻煩。舊硬碟仍 然接在 EIDE0,primary﹝hda﹞。
  2. 啟動 Linux。登入為 root。
  3. 我們做這種工作算是蠻低階的工作。最好是在 single user mode﹝一人模式﹞進行這種工作。下以下指令進入 single user mode。

    init 1
  4. 我們使用 fdisk 來分割新硬碟。請注意新硬碟的分割結構應該與舊硬碟相同。執行 fdisk:
  5. fdisk /dev/hdc

    我們分割時會用到以下指令:

    m: 顯示指令目錄
    p:    列出硬碟分割表
    n:    建立新分割區
    a:    切換可啟動旗標
    t:     改變分割系統編號
    w: 將分割表儲存﹝寫入﹞到硬碟
    q:    離開 fdisk

    現在把新硬碟分割為:

    /dev/hdc1      50MB       為 Linux,編號 83
    /dev/hdc2      39.5GB     為 Linux,編號 83
    /dev/hdc3      512MB      為 linux swap,編號 82
  6. 分割之後就必須格式化﹝format﹞新硬碟才可以使用。我們使用 ext3 檔案系統格式化與舊硬碟相同。
  7. mke2fs    -j   /dev/hdc1
    mke2fs    -j   /dev/hdc2
  8. 格式化 swap
  9. mkswap    /dev/hdc3
  10. 格式化之後,我們可以開始將舊硬碟的內容複製到新硬碟。我們現在建立新硬碟的掛點﹝mount point﹞, 然後掛﹝mount﹞新硬碟。
  11. mkdir    /new
    mount    /dev/hdc2 /new
    mkdir    /new/boot
    mount    /dev/hdc1 /new/boot
  12. 新硬碟掛好了我們就可以開始複製的工作。請注意,不要複製以下檔案或目錄:
    • /proc 這是一個虛擬檔案系統。再啟動時 Linux 會建立 /proc 下所有的檔案和目錄。但是我們需要在新硬 碟的根目錄建立掛點:
    • mkdir    /new/proc
      使用 Fedora ﹝從 Fedora Core 2 開始﹞也需要加:
      mkdir    /new/selinux
      mkdir    /new/sys
    • /lost+found 每一個分割區有自己的 /lost+found
    • /new 這是新硬碟的掛點
    • /.journal 和 /SWAP 如果有的話,請不要複製
  13. /boot 的複製方式是有一點不一樣因為 /boot 事實上是一個獨立的分割區﹝hdc1﹞掛在 /new/boot。 在上面我們以掛了,我們只 /boot 下所有檔案和目錄複製過去。

    cp    -a    /boot/*    /new/boot/

    在標準 RedHat/Fedora 的安裝,以下檔案和目錄必須複製到新硬碟:

    cp    -a    /aquota.user    /new/
    cp    -a    /bin    /new/
    cp    -a    /dev    /new/
    cp    -a    /etc    /new/
    cp    -a    /home    /new/
    cp    -a    /initrd    /new/
    cp    -a    /lib    /new/
    cp    -a    /mnt    /new/
    cp    -a    /root    /new/
    cp    -a    /sbin    /new/
    cp    -a    /tmp    /new/
    cp    -a    /usr    /new/
    cp    -a    /var    /new/

    在你的 Linux 系統,可能還有其它的檔案和目錄必須複製到新硬碟。你可以下「ls -l /」指令看看。

    我們用 cp 的 -a 參數主要的目的是複製檔案和目錄時保持檔案/目錄的屬性和擁有者的定義。這樣,除了硬碟的 大小不同,新硬碟就是舊硬碟的映像。

  14. 從 Red Hat 7.2 開始,使用的標準啟動載入程式﹝bootstrap loader﹞已經是 GRUB 而不是 LILO。使新硬碟可以 啟動,現在我們必須將 GRUB 安裝到新硬碟的 MBR﹝Master Boot Record﹞。
  15. cd    /new
    chroot    /new
    grub
    root (hd1,0) # hd1:第二硬碟,0:第一分割區。
    setup (hd1) # 在第二硬碟的 MBR 安裝 grub。
    quit # 離開 grub。
    exit # 離開 chroot。

    要注意的事是 GRUB 和 Linux 的硬碟名稱不一樣。GRUB 不區分 IDE 和 SCSI 硬碟。GRUB 也不管硬碟是接在那裡 。對GRUB 來說,第一個硬碟就是 (hd0),第二個硬碟是 (hd1)。是故,雖然新硬碟對 Linux 是 hdc ﹝接在EIDE1,primary﹞而不是 hdb,但是對 GRUB 新硬碟是第二個硬碟所以叫它為 (hd1)。

    很大的可能,在 /etc/fstab 和 /boot/grub/grub.conf 分割區的掛點已經使用 LABEL 而不用裝置名稱。如果這樣 就需要命名新硬碟的分割區。

    e2label /dev/hdc2 /
    e2label /dev/hdc1 /boot

    或者,你仍然可以用裝置名稱。

    編輯 /new/boot/grub/grub.conf,更改:
    kernel /vmlinuz... ro root=LABEL=/ ==> kernel /vmlinuz... ro root=/dev/hda2
    編輯 /new/etc/fstab,更改:
    LABEL=/    ==> /dev/hda2
    LABEL=/boot ==> /dev/hda1
  16. 現在可以關機了。
  17. halt
  18. 電源關掉之後,將舊硬碟拿掉。新硬碟連接到舊硬碟的位置﹝EIDE0,primary﹞。接好了就把電源打開。
  19. 現在應該可以正常的啟動 Linux 系統了。現在這 Linux 系統,除了硬碟空間比較大,與舊硬碟是完全一樣。
原创粉丝点击