2011年2月28日星期一

将 Ubuntu 系统从一台电脑迁移到另一台电脑

前提:

1. 已有电脑已经装好妥为配置的 Ubuntu 系统(驱动,软件安装齐全并好使)
2. 有一新电脑装了与已有电脑相同版本的新 Ubuntu 系统(干净系统,啥也没有)。

目的:

不想重新进行配置,安装,希望能将已有电脑上配置好的 Ubuntu 系统完整迁移到新电脑上。


方法:

1. 备份已有电脑资料,命令如下:


tar    -cvpzf    /home/backup/sysbak_2010-11-22_all-but-personal-data.tgz    --exclude=/dev    --exclude=/lost+found    --exclude=/media    --exclude=/mnt    --exclude=/proc    --exclude=/sys    --exclude=/tmp    --exclude=/home/wy/Desktop    --exclude=/home/wy/Disks    --exclude=/home/wy/Downloads    --exclude=/home/wy/Dropbox    --exclude=/home/wy/Eclipse_Workspace    --exclude=/home/wy/Mine    --exclude=/home/wy/PDF    --exclude=/home/wy/Personal    --exclude=/home/wy/Photos    --exclude=/home/wy/Software    --exclude=/home/wy/.dictionary    --exclude=/home/wy/.VirtualBox    --exclude=/home/wy/.mozilla-thunderbird    --exclude=/home/backup    /      >    /home/backup/sysbak-log.txt



2. 记录新电脑上的UUID与硬盘分区等资料, 有两种方法:

  1. 运行       ls /dev/disk/by-uuid/     看到相关分区的uuid信息,将其拷贝出来 或
  2. 备份新电脑上 /etc/fstab 文件,里面应该包含了足够的信息
运行          sudo fdisk -l        找到相关分区的sda*信息,也拷贝出来,然后和上面一样做,不过 就是 uuid 信息换 成了sda*


3. 将备份好的包拷贝到新电脑上,展开:(可在桌面环境下进行)
 
tar -xvpzf  /home/backup/sysbak_2010-11-22_all-but-personal-data    -C    /



4. 此刻新电脑无法正常启动,需修正 (从liveCD或USB或whatever什么玩意启动)

原因在于UUID不匹配,因此:

替换覆盖好的 /etc/fstab 中的内容为包含正确 UUID (新电脑)的值,如有其它想要自动加载的内容,也应一并修改成功

替换覆盖好的 /boot/grub/grub.cfg (menu.lst) 中的内容为正确的 UUID 以及 分区符号

以及可能的sd*错误 (按以上做法应该没有)

(完)




附录一:

备份还原系统命令详细说明

备份系统:


tar    -cvpzf    /home/backup/sysbak_2010-11-22_all-but-personal-data.tgz    --exclude=/dev    --exclude=/lost+found    --exclude=/media    --exclude=/mnt    --exclude=/proc    --exclude=/sys    --exclude=/tmp    --exclude=/home/wy/Desktop    --exclude=/home/wy/Disks    --exclude=/home/wy/Downloads    --exclude=/home/wy/Dropbox    --exclude=/home/wy/Eclipse_Workspace    --exclude=/home/wy/Mine    --exclude=/home/wy/PDF    --exclude=/home/wy/Personal    --exclude=/home/wy/Photos    --exclude=/home/wy/Software    --exclude=/home/wy/.dictionary    --exclude=/home/wy/.VirtualBox    --exclude=/home/wy/.mozilla-thunderbird    --exclude=/home/backup    /      >    /home/backup/sysbak-log.txt


'tar' 是用来备份的程序
  • c - 新建一个备份文档
  • v - 详细模式, tar程序将在屏幕上实时输出所有信息。
  • p - 保存许可,并应用到所有文件。
  • z - 采用‘gzip’压缩备份文件,以减小备份文件体积。
  • f <filename> - 说明备份文件存放的路径, /backup.tgz 是本例子中备份文件名。
  • 来 看看我们想要包含的目录。我们不想备份所有的东西,因为有些目录是没有多大用处的。 确认你不想包含的文件,否则您会得到一个很奇怪的结果。 您也不必备份 /mnt 目录下的东西,除非您有其他分区挂在它下面或者你坚持要备份。您还必须确保没有任何资源挂在 /media 目录下(比如,任何CD或者移动存储介质).否则,剔除/media。
  • 最後一个参数是我们想要保存的目录. 我们想要保存所有的东西,使用 / 作为根目录。


从备份中还原系统:

    tar -xvpzf  /media/Data/ubuntu.tgz -C /


参数x是告诉tar程序解压缩备份文件。 -C <directory> 参数是指定tar程序解压缩到的目录。 ( 在本例中是/ )

这会花一段时间。等它完成了,你就有了一个完全恢复的Ubuntu系统! 只需确保在你做其他任何事情之前,重新创建你剔除的目录: ( /proc, /lost+found, /mnt, /sys, 等等。)

    mkdir /proc /lost+found /mnt /sys


大功告成!!



附录二:

拷贝完系统后,可能需要让新硬盘能够启动,可参考以下 Grub 2 教程:

Ref: http://www.dedoimedo.com/computers/grub-2.html

Reinstall GRUB

GRUB 2 can be installed even while you are booted in the OS. You do not need a live environment for that. Just execute the install-grub command against the device or the partition you desire.

grub-install <target>

<target> can be /dev/hda, /dev/sdb, /dev/sdc4, and so forth.

It is important that you pay attention to the output produced by the command. If you have external disks connected at the time you run the command, it will add these disks to the list of mapped devices. There should be no big harm in that, but if some entries are incorrect, remove them.



附录三:


可在一个全空的硬盘上直接复制 Ubuntu 操作系统,见下面所附的文章:

-------------------------------------------------------------------------------------------------


(注,未验证)linux 硬盘迁移以及分区对考,用 cp -a 命令即可,cp-a 命令拷贝完后不用改权限,因为原有权限全部保留,只需处理下引导,同时 fstab 中的 uuid 改为新分区的  uuid即可,或者不用 uuid 参数进行挂载也 行。新的 swap 直接写在 fstab 中即可实现开机自动挂载。

-------------------------------------------------------------------------------------------------

Ref:http://forum.ubuntu.org.cn/viewtopic.php?f=86&t=62836&start=0


今天某人想试试Linux,于是偶鼓动帮着装一个,于是乎拿来了移动硬盘接到偶本本上。偶很BH,所以立马格式化出一块ext3分区,将tar拷贝所有内容过去;。。。。。

吃 了晚饭回来后,发现拷贝完成了。就检查fdisk -l 和/dev/disk/by-uuid,将分区相关信息改写到fstab和menu.lst上,终于来到最后一步,也就是将grub写到移动硬盘引导 mbr处。接到设好usb启动的机器上一试,perfect!!!

建议:要推广linux的朋友可以可以先在移动硬盘上装好系统,然后完全free地拷贝系统。 GNU就是copyleft的,不是么?

简单的攻略:
===================================
首先声明,我是在ubuntu 7.04下面装的,其他系统安装方式一样,和这里的唯一不同之处就是ubuntu使用uuid来标记分区,而其他版本一般都用/dev/sda*来标明分区。

好,现在开始按部就班走下面几个步骤:

1.目标分区

假设这里的目标分区为sda5,可以用fdisk -l查看是哪个数字
执行格式化mkfs.ext3 /dev/sda5;
新建目录mkdir /media/disk;
将其mount到目录下 mount /dev/sda5 /media/disk

2.复制文件

方法有很多种

我是采用逐个打包然后解压的方式,要求有空间放得下压缩包,
比如/bin目录 tar zcvf /back_bin.tgz /bin

对除了/dev /proc /sys /tmp /media目录外的其他目录都这么打包

然后 cd /media/disk
建立几个目录和文件 mkdir dev; mkdir proc; mkdir sys; mkdir tmp; mkdir meida;

cp /vmlinuz .; cp /initrd.img .;

解压那几个包到这个目录下面,也以/bin目录为例 tar zxvf /back_bin.tgz 然后将相关的压缩包删除

3.修改启动和过载选项(关键一步)

uuid情况:

ls /dev/disk/by-uuid/ 看到相关分区的uuid信息,将其拷贝出来
vi /media/disk/etc/fstab 用刚才的uuid代替根目录那行的uuid
vi /media/disk/boot/grub/menu.lst 也用uuid代替kernel行的root=后面的uuid,同时修改root行(hdx,y)信息,

*如果你是用第一块硬盘的sda5分区就要用(hd0,4),就是数字减去一来获得

非uuid情况:
sudo fdisk -l
找到相关分区的sda*信息,也拷贝出来,然后和上面一样做,不过就是uuid信息换 成了sda*

4.更新grub
因为新硬盘没法自己启动到linux上,要写入grub到相关分区上去
sudo grub; root (hdx,y); setup (hdx); quit

*如果新机器是不同的显卡配置,那么最好改写/etc/X11/xorg.conf为合适的显卡代码vesa, ati, nv, intel等.不然进不去图形界面。仔细看清楚每一步,大胆去试试,应该能成功!

-------------------------------------------------------------------------------------------------

Ref:http://xieshaohu.wordpress.com/2010/04/26/%E8%BF%81%E7%A7%BBubuntu%E7%B3%BB%E7%BB%9F%E5%88%B0%E6%96%B0%E7%A1%AC%E7%9B%98/

笔记本硬盘是120G的,用了这么长的时间,积累了一些数据,硬盘空间有点不够用了。所以买了一块西数500G的硬盘,准备更换笔记本的硬盘。

操作系统版本:Ubuntu 9.10
文件系统类型:Ext4
Grub版本:Grub2

事前查了一些资料。大概的思路如下

  1. 用硬盘盒挂载新的硬盘,然后用gparted分区,创建好文件系统。
  2. 用live cd启动电脑,挂载新旧硬盘。
  3. 迁移数据。tar/dd/cp -a
  4. 安装grub,并修改grub配置文件中的uuid。
  5. 修改/etc/fstab中的uuid

思路清晰了就开始动手吧。

  1. 挂载新的硬盘,以及格式化都很顺利。
    提示:在创建分区表的时候使用默认的msdos格式就可以了。
  2. live cd启动电脑,使用fdisk –l查看硬盘的分区情况。(一下所有操作均已root身份执行,所以请先执行sudo -s获得一个带有root权限的shell环境,避免频繁敲入sudo)
    比如我的电脑分了四个区,其中三个是数据分区(/ /boot /home),一个是交换分区。
    数据分区对应关系是/ 对应/dev/sda6;/boot 对应/dev/sda1;/home对应/dev/sda7,新硬盘分区相同,不过显示为/dev/sdbX
  3. 在/mnt目录下分别创建对应硬盘分区的文件夹。
    $ sudo –s
    $ cd /mnt
    $ mkdir oldboot newboot oldroot newroot oldhome newhome
  4. 挂载相关的分区到/mnt目录下
    $ mount /dev/sda1 /mnt/oldboot
    $ mount /dev/sdb1 /mnt/newboot
    其他的分区使用类似的命令挂载
  5. 挂载完了之后就可以开始动手转移文件了。在Linux系统迁移的时候,要注意保持文件的所有者和权限不变,所以也查了不少资料,网上有说用tar的,也有说用dd的,当然还有说用cp –a 的,这三者都用过,绕了不少弯路,现在把一些心得写下来。
    tar——使用这个命令的时候需要注意的就是需要首先进入相应的目录,然后再执行,参数部分要包含-p,最终执行成功就是使用了这个命令。具体命令如下:
    $ cd /mnt/oldboot
    $ tar cpf – . | (cd /mnt/newboot; tar xpf –)

    不需要-v参数减少不必要的输出,另外在这个在迁移socket类型的文件时出错,不过在我的电脑上只出现在/tmp文件夹以及/home目录下adobe的设置文件中,而adobe我已不用,所以问题忽略。
    dd—— 在用这个进行COPY的时候,参考了一些网上的资料,命令为dd if=/dev/sda1 of=/dev/sdb1 conv=noerror,sync。复制完了之后,文件权限都对了。但是磁盘空间的容量不对了,变成了和老的硬盘一样大小的容量,不知道是不是conv 参数的文件,看man文档,sync是填充数据,不足的部分使用空白替代。或许是这个问题,现在也不调查了。
    cp -a——COPY完了之后的文件权限不正确,放弃。
  6. 文件全部转移完了之后,确认文件数量是否一样,然后umount全部分区,并删除/mnt下创建的目录,关机,把新的硬盘安装到笔记本。
  7. 然后用live cd开机,挂载全部分区到/mnt,准备修复grub。挂载的时候需要注意,比如我有三个分区,需要首先挂载/分区,然后分别挂载/home和/boot。
    $ mount /dev/sda6 /mnt/
    $ mount /dev/sda7 /mnt/home
    $ mount /dev/sda1 /mnt/boot
  8. 然后挂载本机的一些设备。
    $ mount –bind /dev/ /mnt/dev
  9. 都挂载完了之后使用chroot命令进入我们自己的系统
    $ chroot /mnt
  10. 开始重新安装grub2。我的是直接安装到硬盘MBR中。
    $ grub-install /dev/sda
  11. 如果上面的安装没有提示error,使用下面的命令再次验证安装。
    $ grub-install –recheck /dev/sda
  12. 安装完成了之后,执行以下update-grub命令更新grub.cfg文件中的UUID。
    $ update-grub
  13. grub.cfg可以通过update-grub命令直接修改成功,/etc/fstab文件就没有那么幸运了,只能手动修改。先获取新硬盘UUID
    $ blkid > uuid
  14. 现在可以通过vim把刚刚获得的UUID一一设置到/etc/fstab文件中。
  15. 修改完了之后,退出chroot。按下键盘Ctrl + D。
  16. 卸载硬盘硬盘分区:
    $ sudo umount /mnt/home
    $ sudo umount /mnt/boot
    $ sudo umount /mnt/
  17. sudo reboot

至此,Ubuntu系统成功迁移到新的硬盘。

1 条评论:

  1. 收藏了,最近要买个新笔记本,想着怎么把自己的双系统转过去呢. tUbuntu的方案可以参考你的了. Thx

    回复删除