Chinaunix首页 | 论坛 | 博客

qsh

  • 博客访问: 4034800
  • 博文数量: 1015
  • 博客积分: 15904
  • 博客等级: 上将
  • 技术积分: 8572
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-04 19:16
文章分类

全部博文(1015)

文章存档

2019年(1)

2017年(1)

2016年(19)

2015年(27)

2014年(30)

2013年(95)

2012年(199)

2011年(72)

2010年(109)

2009年(166)

2008年(296)

分类:

2009-12-09 22:13:16

兩年以前你用20GB 的硬碟安裝了一台Linux server。两年以前你用20GB的硬碟安装了一台Linux server。 當時,你覺得20GB 的空間相當大,十年之內一定不會有問題。当时,你觉得20GB的空间相当大,十年之内一定不会有问题。

但是,在使用這Linux server 兩年的期間裡,因實際的需要,你不斷的增加與更新使用者所需要的網路服務軟体。但是,在使用这Linux server两年的期间里,因实际的需要,你不断的增加与更新使用者所需要的网路服务软体。 你公司的員工人數越來越多,使用者的帳號也繼續不斷的在增加。你公司的员工人数越来越多,使用者的帐号也继续不断的在增加。 兩年前你給每一位使用者20MB 硬碟空間,當時評估20MB 為一個使用者的私人資料應該很夠,沒有想到,兩年之後20MB 的硬碟空間實在不夠用了。两年前你给每一位使用者20MB硬碟空间,当时评估20MB为一个使用者的私人资料应该很够,没有想到,两年之后20MB的硬碟空间实在不够用了。

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

你可能想到一種可行的解決構想,就是將20GB 的整個硬碟,純粹給server 使用,另外加一個容量在40GB 以上的新硬碟,專門給使用者儲存私人的資料,應該是沒有問題了。你可能想到一种可行的解决构想,就是将20GB的整个硬碟,纯粹给server使用,另外加一个容量在40GB以上的新硬碟,专门给使用者储存私人的资料,应该是没有问题了。 做法是將所有使用者所使用的硬碟空間搬移到新的硬碟。做法是将所有使用者所使用的硬碟空间搬移到新的硬碟。 將/home 複製到新硬碟不是很難的事。将/home复制到新硬碟不是很难的事。

但是你要好好估計一下。但是你要好好估计一下。 你的Linux server 服務項目,會因需要陸續的增加與更新,兩年之後,是否20GB 給server使用,夠用嗎?你的Linux server服务项目,会因需要陆续的增加与更新,两年之后,是否20GB给server使用,够用吗? 想來想去,將整個Linux 系統搬移到一個大容量的硬碟是最好的辦法。想来想去,将整个Linux系统搬移到一个大容量的硬碟是最好的办法。

如何搬?如何搬?

你第一個反應可能是:在新40GB 的硬碟安裝一個新的Linux 系統。你第一个反应可能是:在新40GB的硬碟安装一个新的Linux系统。 然後將舊硬碟的所有使用者帳號和資料複製到新硬碟就應該能解決這個問題了。然后将旧硬碟的所有使用者帐号和资料复制到新硬碟就应该能解决这个问题了。 這樣你不需要在新的Linux 系統重新建立所有使用者的帳號。这样你不需要在新的Linux系统重新建立所有使用者的帐号。

這樣的想法,事實上不夠周到。这样的想法,事实上不够周到。 沒有錯,重新安裝一個Linux 系統是很簡單。没有错,重新安装一个Linux系统是很简单。 也不需要很多的時間。也不需要很多的时间。 不到二十分鐘就可以安裝一個新的Linux 系統了。不到二十分钟就可以安装一个新的Linux系统了。 然後從舊硬碟的使用者帳號和資料複製到新硬碟也只不過需要幾分鐘的時間。然后从旧硬碟的使用者帐号和资料复制到新硬碟也只不过需要几分钟的时间。

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

你要重新安裝一個Linux 系統,你安裝的是舊版本的軟体。你要重新安装一个Linux系统,你安装的是旧版本的软体。 你必須一個一個的更新這些軟体。你必须一个一个的更新这些软体。 但是你還記得你更新的是那一些軟体嗎?但是你还记得你更新的是那一些软体吗? 如果一個軟体更新了四次,你不能將舊版的軟体直接用第四個更新版來更新。如果一个软体更新了四次,你不能将旧版的软体直接用第四个更新版来更新。 可能第二更新版更改了一些設定值而第三和第四更新版已假設了這些更改,如果你從舊版的軟体直接更新到第四更新版就會發生問題。可能第二更新版更改了一些设定值而第三和第四更新版已假设了这些更改,如果你从旧版的软体直接更新到第四更新版就会发生问题。 意思是說,你要從第一更新版開始一個一個的更新以致到第四更新版。意思是说,你要从第一更新版开始一个一个的更新以致到第四更新版。 不能跳過去。不能跳过去。

這樣做是很花時間的。这样做是很花时间的。 如果你曾將所有的更新都紀錄下來,它對你會有很大的幫助。如果你曾将所有的更新都纪录下来,它对你会有很大的帮助。 但是一個一個的更新所有需要更新的軟体,仍然會花相當多的時間。但是一个一个的更新所有需要更新的软体,仍然会花相当多的时间。

你現在的Linux 系統不是已經很穩嗎?你现在的Linux系统不是已经很稳吗? 你對現在這個系統不是很滿意嗎?你对现在这个系统不是很满意吗? 如果可以把這Linux 系統複製到新的硬碟那該有多好!如果可以把这Linux系统复制到新的硬碟那该有多好!

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

現在我要談的就是這個主題。现在我要谈的就是这个主题。 但是在討論之前,我必須列出有關討論的一些資訊。但是在讨论之前,我必须列出有关讨论的一些资讯。

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

註解:注解:

kernel-2.6.20 到來時,所有的硬碟裝置名稱為/dev/sdx。 kernel-2.6.20到来时,所有的硬碟装置名称为/dev/sdx。 以前ide 硬碟裝置名稱為/dev/dhx,SCSI 硬碟裝置名稱為/dev/sdx。以前ide硬碟装置名称为/dev/dhx,SCSI硬碟装置名称为/dev/sdx。 以下是以前舊的硬碟裝置名稱:以下是以前旧的硬碟装置名称:

EIDE0 primary EIDE0 primary /dev/hda /dev/hda
EIDE0 secondary EIDE0 secondary /dev/hdb /dev/hdb
EIDE1 primary EIDE1 primary /dev/hdc /dev/hdc
EIDE1 secondary EIDE1 secondary /dev/hdd /dev/hdd

在新裝置名稱規矩,第一個硬碟裝置名稱為/dev/sda,第二個硬碟(不管是接在哪裡是) 裝置名稱為/dev/sdb,等。在新装置名称规矩,第一个硬碟装置名称为/dev/sda,第二个硬碟(不管是接在哪里是)装置名称为/dev/sdb,等。

想看看所有連接的硬碟裝置:想看看所有连接的硬碟装置:

fdisk   -l fdisk -l

20GB,分割為: 20GB,分割为:

sda1 : 50MB /boot partition sda1 : 50MB /boot partition
sda2 : 19.5GB / (root) partition sda2 : 19.5GB / (root) partition
sda3 : 512MB swap partition sda3 : 512MB swap partition

40GB,分割為: 40GB,分割为:

sda1 : 50MB /boot partition sda1 : 50MB /boot partition
sda2 : 39.5GB / (root) partition sda2 : 39.5GB / (root) partition
sda3 : 512MB swap partition sda3 : 512MB swap partition

請注意,雖然舊和新硬碟的partition 結構可以不一樣,但是會比較麻煩。请注意,虽然旧和新硬碟的partition结构可以不一样,但是会比较麻烦。 你必須編輯新硬碟的/etc/fstab 來反映出新的分割區,複製的方式也有一點不一樣,也要設為新分割區的掛點。你必须编辑新硬碟的/etc/fstab来反映出新的分割区,复制的方式也有一点不一样,也要设为新分割区的挂点。 最好還是保持同樣的partition 結構。最好还是保持同样的partition结构。 Partition 的大小不一樣沒有關係。 Partition的大小不一样没有关系。

將Linux 系統從一個硬碟複製到另一個硬碟之方法如下:将Linux系统从一个硬碟复制到另一个硬碟之方法如下:

  1. 先關機電腦,然後連接新硬碟。先关机电脑,然后连接新硬碟。

  2. 啟動Linux。启动Linux。 登入為root。登入为root。

    我們做這種工作算是蠻低階的工作。我们做这种工作算是蛮低阶的工作。 最好是在single user mode﹝一人模式﹞進行這種工作。最好是在single user mode﹝一人模式﹞进行这种工作。 下以下指令進入single user mode。下以下指令进入single user mode。

    init 1 init 1
  3. 我們使用fdisk 來分割新硬碟。我们使用fdisk来分割新硬碟。 請注意新硬碟的分割結構應該與舊硬碟相同。请注意新硬碟的分割结构应该与旧硬碟相同。 執行fdisk:执行fdisk:
    fdisk /dev/sdb fdisk /dev/sdb

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

    m:   顯示指令目錄 m:显示指令目录
    p:    列出硬碟分割表 p:列出硬碟分割表
    n:    建立新分割區 n:建立新分割区
    a:    切換可啟動旗標 a:切换可启动旗标
    t:     改變分割系統編號 t:改变分割系统编号
    w:   將分割表儲存﹝寫入﹞到硬碟 w:将分割表储存﹝写入﹞到硬碟
    q:    離開fdisk q:离开fdisk

    現在把新硬碟分割為:现在把新硬碟分割为:

    /dev/sdb1      50MB       為Linux,編號83 /dev/sdb1 50MB为Linux,编号83
    /dev/sdb2      39.5GB     為Linux,編號83 /dev/sdb2 39.5GB为Linux,编号83
    /dev/sdb3      512MB      為linux swap,編號82 /dev/sdb3 512MB为linux swap,编号82
  4. 分割之後就必須格式化﹝format﹞新硬碟才可以使用。分割之后就必须格式化﹝format﹞新硬碟才可以使用。 我們使用ext3 檔案系統格式化與舊硬碟相同。我们使用ext3档案系统格式化与旧硬碟相同。
    mke2fs    -j   /dev/sdb1 mke2fs -j /dev/sdb1
    mke2fs    -j   /dev/sdb2 mke2fs -j /dev/sdb2
  5. 格式化swap格式化swap
    mkswap    /dev/sdb3 mkswap /dev/sdb3
  6. 格式化之後,我們可以開始將舊硬碟的內容複製到新硬碟。格式化之后,我们可以开始将旧硬碟的内容复制到新硬碟。 我們現在建立新硬碟的掛點﹝mount point﹞,然後掛﹝mount﹞新硬碟。我们现在建立新硬碟的挂点﹝mount point﹞,然后挂﹝mount﹞新硬碟。
    mkdir    /new mkdir /new
    mount    /dev/sdb2   /new mount /dev/sdb2 /new
    mkdir    /new/boot mkdir /new/boot
    mount    /dev/sdb1   /new/boot mount /dev/sdb1 /new/boot
  7. 新硬碟掛好了我們就可以開始複製的工作。新硬碟挂好了我们就可以开始复制的工作。 請注意,不要複製以下檔案或目錄:请注意,不要复制以下档案或目录:
    • /proc 這是一個虛擬檔案系統。 /proc这是一个虚拟档案系统。 再啟動時Linux 會建立/proc 下所有的檔案和目錄。再启动时Linux会建立/proc下所有的档案和目录。 但是我們需要在新硬碟的根目錄建立掛點:但是我们需要在新硬碟的根目录建立挂点:
      mkdir    /new/proc mkdir /new/proc
      使用Fedora ﹝從Fedora Core 2 開始﹞也需要加:使用Fedora ﹝从Fedora Core 2开始﹞也需要加:
      mkdir    /new/selinux mkdir /new/selinux
      mkdir    /new/srv mkdir /new/srv
      mkdir    /new/sys mkdir /new/sys
    • /lost+found   每一個分割區有自己的/lost+found /lost+found每一个分割区有自己的/lost+found
    • /new   這是新硬碟的掛點 /new这是新硬碟的挂点
    • /.journal 和/SWAP 如果有的話,請不要複製 /.journal和/SWAP如果有的话,请不要复制

    /boot 的複製方式是有一點不一樣因為/boot 事實上是一個獨立的分割區﹝sdb1﹞掛在/new/boot。 /boot的复制方式是有一点不一样因为/boot事实上是一个独立的分割区﹝sdb1﹞挂在/new/boot。 在上面我們以掛了,我們只/boot 下所有檔案和目錄複製過去。在上面我们以挂了,我们只/boot下所有档案和目录复制过去。

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

    在標準RedHat/Fedora 的安裝,以下檔案和目錄必須複製到新硬碟:在标准RedHat/Fedora的安装,以下档案和目录必须复制到新硬碟:

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

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

    我們用cp 的-a 參數主要的目的是複製檔案和目錄時保持檔案/目錄的屬性和擁有者的定義。我们用cp的-a参数主要的目的是复制档案和目录时保持档案/目录的属性和拥有者的定义。 這樣,除了硬碟的大小不同,新硬碟就是舊硬碟的映像。这样,除了硬碟的大小不同,新硬碟就是旧硬碟的映像。

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

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

    e2label     /dev/sdb2     / e2label /dev/sdb2 /
    e2label     /dev/sdb1     /boot e2label /dev/sdb1 /boot
    mkswap   -L   swap   /dev/sdb3 mkswap -L swap /dev/sdb3
  9. 現在可以關機了。现在可以关机了。
    halt halt
  10. 電源關掉之後,將舊硬碟拿掉。电源关掉之后,将旧硬碟拿掉。 新硬碟連接到舊硬碟的位置。新硬碟连接到旧硬碟的位置。 接好了就把電源打開。接好了就把电源打开。

  11. 現在應該可以正常的啟動Linux 系統了。现在应该可以正常的启动Linux系统了。 現在這Linux 系統,除了硬碟空間比較大,與舊硬碟是完全一樣。现在这Linux系统,除了硬碟空间比较大,与旧硬碟是完全一样。

蔡由世神父蔡由世神父
2002/07/07 2002/07/07
更新:2008/12/04更新:2008/12/04

阅读(868) | 评论(0) | 转发(0) |
0

上一篇:複製 Linux 系統

下一篇:系统状态runlevel

给主人留下些什么吧!~~