全部博文(1015)
分类:
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系统从一个硬碟复制到另一个不同容量的硬碟。
現在我要談的就是這個主題。现在我要谈的就是这个主题。 但是在討論之前,我必須列出有關討論的一些資訊。但是在讨论之前,我必须列出有关讨论的一些资讯。
註解:注解:
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系统从一个硬碟复制到另一个硬碟之方法如下:
我們做這種工作算是蠻低階的工作。我们做这种工作算是蛮低阶的工作。 最好是在single user mode﹝一人模式﹞進行這種工作。最好是在single user mode﹝一人模式﹞进行这种工作。 下以下指令進入single user mode。下以下指令进入single user mode。
init 1 init 1
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
mke2fs -j /dev/sdb1 mke2fs -j /dev/sdb1
mke2fs -j /dev/sdb2 mke2fs -j /dev/sdb2
mkswap /dev/sdb3 mkswap /dev/sdb3
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
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
/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参数主要的目的是复制档案和目录时保持档案/目录的属性和拥有者的定义。 這樣,除了硬碟的大小不同,新硬碟就是舊硬碟的映像。这样,除了硬碟的大小不同,新硬碟就是旧硬碟的映像。
cd /new cd /new
chroot /new chroot /new
grub grub
root (hd1,0) # hd1:第二硬碟,0:第一分割區。 root (hd1,0) # hd1:第二硬碟,0:第一分割区。exit # 離開chroot。 exit #离开chroot。
setup (hd1) # 在第二硬碟的MBR 安裝grub。 setup (hd1) #在第二硬碟的MBR安装grub。
quit # 離開grub。 quit #离开grub。
很大的可能,在/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
halt halt
蔡由世神父蔡由世神父
2002/07/07 2002/07/07
更新:2008/12/04更新:2008/12/04