背景
先介绍下背景。赶时间的同学可以直接略过看正文。
我在外工作,离家有几百公里。家中有联通6M公网宽带,这样的网络资源不用白不用,所以家里有搭建了一个小服务器。这个服务器是一个二手的FIC GE2准系统。配置是Core2 T5500, 945GM, 2G DDR3, 500G SATA2。这套准系统不带CPU和内存硬盘只花了不到300元(2013年初),加上购买二手CPU和二手内存条花了不到200元,配上一个自用闲置的500G硬盘,总共不到500元的花费性价比巨高。而今它终于大限已到,在不间断稳定工作了2年半后,CPU风扇开始频繁出现问题,导致时常的强制关机。搜了下,如果换风扇,可能要花上百元,而且也不是换来的新风扇,虽然其他部件都能正常使用,可能换完一段时间还会有问题。于是在女朋友的支持下(鸣谢!鼓掌!啪啪啪啪啪——),购置了一台新的准系统。这次选择了在某宝上购置了一台无风扇的准系统,从某东上购买了内存和硬盘,配置是Celeron 1037U, NM70, 4G DDR3, 500G SATA3。这次所有配件都是全新的,总共花费不到1000元,也算是比较超值了。
背景介绍完毕,是不是点儿长。。。
正文
现在有这样一个需求,有一台在几百公里外用6M联通宽带(实测上下行对称,都能跑到700K多)连接的Ubuntu旧服务器(很不稳定,随时可能挂掉),现在要把它在最短的时间内把系统和数据全部转移到本地的一台空白的新服务器上。旧服务器上有大约60G的数据,但是有将近50G都是本地的照片备份,在本地有一份完整的数据。如果可以的话,尽量不要传输这部分数据但是要保证文件系统结构的完整性。
所以最后选择的方案是使用tar压缩整个文件系统,但排除不需要保存的文件夹。然后放到HTTP服务器下面,用wget断点续传拉回到本地,md5验证完整性,然后解压恢复到新的硬盘上。
tar压缩文件系统
这一步没太有坑,但是稍微麻烦,有一些细节问题。机器上/boot,/,和/home是分三个区挂载的,这样比较安全。所以压缩的时候,也分成了三个包。首先新建一个存放压缩文件的目录~/backup,这里直接放到了www目录,便于直接用HTTP去拉取。
1 2 |
mkdir ~/www/backup cd ~/www/backup |
然后先压缩/boot
1 2 |
sudo tar -jpcvf ~/www/backup/ubuntu_boot.tar.bz2 /boot md5sum ubuntu_boot.tar.bz2 |
再压缩根目录/,注意排除掉系统目录和挂载的目录
1 2 3 4 5 6 |
sudo tar --exclude /proc --exclude /mnt --exclude /dev --exclude /run --exclude /tmp --exclude /media --exclude /sys --exclude /lost+found --exclude /boot --exclude /home -jpcvf ~/www/backup/ubuntu_root.tar.bz2 / md5sum ubuntu_root.tar.bz2 |
最后压缩/home,注意排除本地备份和存放压缩好的文件目录
1 2 3 4 |
sudo tar --exclude ~/www/backup --exclude [本地有备份的文件的路径] -jpcvf ~/www/backup/ubuntu_home.tar.bz2 /home md5sum ubuntu_home.tar.bz2 |
这样就做好了压缩的工作。最终/分区压缩完有2GB,/home压缩完有3.4GB,/boot压缩完有53M,传输远小于原始数据量。
传输&验证
然后就到本地机器上,使用wget下载,加上断点续传参数
1 2 3 4 5 6 7 8 |
mkdir ~/backup cd ~/backup wget -c -t 0 https://[家中服务器域名及路径]/ubuntu_boot.tar.bz2 md5sum ubuntu_boot.tar.bz2 wget -c -t 0 https://[家中服务器域名及路径]/ubuntu_root.tar.bz2 md5sum ubuntu_root.tar.bz2 wget -c -t 0 https://[家中服务器域名及路径]/ubuntu_home.tar.bz2 md5sum ubuntu_home.tar.bz2 |
对比本地下载的文件的md5与家中机器上的是否相同。如果有误,则重新下载。
恢复到本地文件系统
把新硬盘挂载到本地,按照原始硬盘的布局分好区,设置好启动分区和主引导记录,并用Ubuntu14.04的”磁盘工具”挂载。
首先切换到新的root分区,恢复数据,挂载好/boot和/home,然后挨个恢复。
1 2 3 4 5 6 7 8 |
cd /media/[用户名]/[新硬盘root分区uuid] sudo tar -xf ~/backup/ubuntu_root.tar.bz2 -C . sudo mkdir boot sudo mount --bind ../[新硬盘boot分区uuid] boot sudo tar -xf ~/backup/ubuntu_boot.tar.bz2 -C . sudo mkdir home sudo mount --bind ../[新硬盘home分区uuid] home sudo tar -xf ~/backup/ubuntu_home.tar.bz2 -C . |
还有拷贝备份的文件到相应的目录,并修正到目标所有者
1 2 |
cp -R [本地照片备份路径] home/[目标照片备份路径] chown -R [目标用户]:[目标组] home/[目标照片备份路径] |
重建根下所需的目录
没有打包进来的目录需要重建。另外tmp目录必须设置权限为777
1 2 3 4 5 6 7 8 9 |
sudo mkdir sys sudo mkdir dev sudo mkdir proc sudo mkdir run sudo mkdir proc sudo mkdir mnt sudo mkdir media sudo mkdir tmp sudo chmod 777 tmp |
修正启动所需文件
因为更换了硬盘,所以/boot下grub中搜寻的启动盘和挂在盘的uuid都变化了,另外/etc/fstab映射也变化了,所以这里要修复好才能正常启动。
1 2 3 4 5 |
sudo sed -i "s/[旧硬盘boot分区uuid]/[新硬盘boot分区uuid]/g" boot/grub/grub.cfg sudo sed -i "s/[旧硬盘root分区uuid]/[新硬盘root分区uuid]/g" boot/grub/grub.cfg sudo sed -i "s/[旧硬盘boot分区uuid]/[新硬盘boot分区uuid]/g" etc/fstab sudo sed -i "s/[旧硬盘root分区uuid]/[新硬盘root分区uuid]/g" etc/fstab sudo sed -i "s/[旧硬盘home分区uuid]/[新硬盘home分区uuid]/g" etc/fstab |
验证并收尾
到这里需要修改的就完成了,接下来卸除挂载准备拆下新硬盘。
1 2 |
sudo umount root sudo umount home |
在系统”磁盘”工具中,卸除分区挂载并给硬盘断电。然后拔下硬盘,连接到新的准系统上。
通电测试,成功启动。登陆后发现唯一的问题是eth0变成了eth1。此时修改/etc/udev/rules.d/xx-persistent-net.rules文件,把里面过去的eth0删掉,把eth1改为eth0,保存后重启,问题修复。这个原因是网卡设备和MAC有变化,系统就添加了新的项目。
克隆完成