魅力博客

魅力Linux|魅力空间|魅力博客|学习Linux|ubuntu日记|电脑教程|手机软件

wubi安装的ubuntu从windows分区下的虚拟磁盘搬迁到硬盘真实的分区上



ubuntu为了增强windows用户的体验,拉拢windows用户加入到linux阵营,做了一些重要改进:允许直接在windows下安装ubuntu,就是运行安装盘中那个叫做wubi.exe的windows执行程序;允许windows用户在没有剩余未分区磁盘空间的情况下,将ubuntu安装在windows分区的一个文件内(类似vmware的虚拟硬盘)。

我当初也是直接在windows下安装的,用了一段时间后,觉得ubuntu8.04很不错,就想将它从虚拟文件中搬移出来,直接存放到我新建的分区下以提高ubuntu的磁盘访问性能。毕竟虚拟磁盘没有真正的磁盘快。经过了一天的研究,最终搬迁成功了,拿出来和大家一起分享。写此文的目的不是鼓励大家也和我一样也进行类似的搬迁行为,只是和大家一起学习,更能认识到linux操作系统的一些特长和技术。

步骤如下:
一、创建新分区
( 因为本人安装windows时将磁盘的最后50G没有分区,留作以后它用,所以有剩余空间创建新分区)
创建分区需要在ubuntu操作系统下进行,命令为:
sudo fdisk /dev/sda

具体操作见下边:
administrator@administrator-desktop:~$ sudo fdisk /dev/sda

The number of cylinders for this disk is set to 19457.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/2 FDISK)

Command (m for help): p

Disk /dev/sda: 160.0 GB, 160041885696 bytes
255 heads, 63 sectors/track, 19457 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x1e851e84

Device Boot Start End Blocks Id System
/dev/sda1 * 1 1275 10241406 7 HPFS/NTFS
/dev/sda2 1276 18355 137195100 f W95 Ext'd (LBA)
/dev/sda5 1276 2550 10241406 7 HPFS/NTFS
/dev/sda6 2551 6374 30716248+ 7 HPFS/NTFS
/dev/sda7 6375 8924 20482843+ b W95 FAT32

Command (m for help): n
Command action
l logical (5 or over)
p primary partition (1-4)
l
First cylinder (10750-18355, default 10750):
Using default value 10750
Last cylinder or +size or +sizeM or +sizeK (10750-18355, default 18355): +14G

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table.
The new table will be used at the next reboot.
Syncing disks.
administrator@administrator-desktop:~$

说明:
进入fdisk后,出现提示符Command (m for help):要求输入命令,常用命令如下:
p 显示已有分区
n 创建新分区
m 显示帮助
w 将改动写入磁盘
二、格式化新建分区
创建分区后使用fdisk 的p命令再次显示分区情况,如下:
/dev/sda1 * 1 1275 10241406 7 HPFS/NTFS
/dev/sda2 1276 18355 137195100 f W95 Ext'd (LBA)
/dev/sda5 1276 2550 10241406 7 HPFS/NTFS
/dev/sda6 2551 6374 30716248+ 7 HPFS/NTFS
/dev/sda7 6375 8924 20482843+ b W95 FAT32
/dev/sda8 8925 10749 14659281 83 Linux


可以看到新分区的设备号为/dev/sda8 ,格式化它!命令为 sudo mkfs -j /dev/sda8

格式化完成后重启一次。

三、拷贝ubuntu操作系统的文件到新分区.
以下操作最好在维护模式下进行,就是进入ubuntu系统时在grub下选择recovery mode。本人在一般模式下试过,拷贝某些目录时报了一些错误,但是没有验证这些错误对搬迁后的系统有没有影响,就直接进入了维护模式进行搬迁。
我们看一下都有那些文件和目录需要拷贝,执行命令ls -l /,显示如下:
drwxr-xr-x 2 root root 4096 2008-06-06 08:48 bin
drwxrwxrwx 3 root root 4096 2008-06-17 09:00 boot
lrwxrwxrwx 1 root root 11 2008-06-13 18:09 cdrom -> media/cdrom
drwxr-xr-x 13 root root 14420 2008-06-17 08:29 dev
drwxr-xr-x 133 root root 12288 2008-06-17 10:18 etc
drwxr-xr-x 3 root root 4096 2008-04-28 16:51 home
drwxrwxrwx 2 root root 4096 2008-06-16 17:10 host
drwxr-xr-x 2 root root 4096 2008-04-23 01:48 initrd
lrwxrwxrwx 1 root root 33 2008-06-13 18:11 initrd.img -> boot/initrd.img-2.6.24-19-generic
drwxr-xr-x 16 root root 4096 2008-06-11 15:01 lib
drwx------ 2 root root 16384 2008-06-13 18:08 lost+found
drwxr-xr-x 5 root root 4096 2008-06-17 10:18 media
drwxr-xr-x 2 root root 4096 2008-06-13 18:12 mnt
drwxr-xr-x 5 root root 4096 2008-05-22 17:50 opt
drwxr-xr-x 2 oracle dba 4096 2008-05-05 09:45 oracle
dr-xr-xr-x 137 root root 0 2008-06-17 16:29 proc
drwxr-xr-x 18 root root 4096 2008-06-13 17:57 root
drwxr-xr-x 2 root root 4096 2008-06-13 18:55 sbin
drwxr-xr-x 2 root root 4096 2008-04-23 01:48 srv
drwxr-xr-x 12 root root 0 2008-06-17 16:29 sys
drwxrwxrwt 16 root root 4096 2008-06-17 10:55 tmp
drwxr-xr-x 13 root root 4096 2008-05-05 09:05 usr
drwxr-xr-x 15 root root 4096 2008-04-23 02:07 var
lrwxrwxrwx 1 root root 30 2008-06-13 18:13 vmlinuz -> boot/vmlinuz-2.6.24-19-generic

上边列出的文件和目录中,以下几个有特殊的用途,可以无须拷贝:
host目录 host目录实际上映射的是一个windows分区 ,这个分区下存放着ubuntu的虚拟磁盘文件。
lost+found 这个和文件系统维护有关,其下存放的是系统非法关闭后文件系统丢失的数据。
media 其他windows分区和移动磁盘一般映射到这个目录
mnt 我们将把新建的分区mount到这个目录
proc 内核维护的一个虚拟文件系统

下边我们以归档的方式拷贝所有其他文件和目录. 下边命令的参数-a表示归档方式。归档方式拷贝时会保留文件和目录的所有属性。
sudo mount /dev/sda8 /mnt
sudo cp -a /bin /mnt
sudo cp -a /boot /mnt
sudo cp -a /cdrom /mnt
sudo cp -a /dev /mnt
sudo cp -a /etc /mnt
sudo cp -a /home /mnt
sudo cp -a /initrd /mnt
sudo cp -a /initrd.img /mnt
sudo cp -a /lib /mnt
sudo cp -a /opt /mnt
sudo cp -a /oracle /mnt
sudo cp -a /root /mnt
sudo cp -a /sbin /mnt
sudo cp -a /srv /mnt
sudo cp -a /sys /mnt
sudo cp -a /tmp /mnt
sudo cp -a /usr /mnt
sudo cp -a /var /mnt
sudo cp -a /vmlinuz /mnt

sudo mkdir /mnt/media
sudo mkdir /mnt/mnt
sudo mkdir /mnt/proc

四、修改grub的配置信息
grub配置文件为/boot/grub/menu.lst ,新搬迁的系统 为 /mnt/boot/grub/menu.lst。
(如果你想彻底卸载windows下的ubuntu,就修改/mnt/boot/grub/menu.lst文件,并在卸载后在windows下安装grub for dos)

这两个文件的主要内容为:
title Ubuntu 8.04.1, kernel 2.6.24-19-generic
root (hd0,5)/ubuntu/disks
kernel /boot/vmlinuz-2.6.24-19-generic root=UUID=8200D1BB00D1B67F loop=/ubuntu/disks/root.disk ro quiet splash
initrd /boot/initrd.img-2.6.24-19-generic

将其改为
title Ubuntu 8.04.1, kernel 2.6.24-19-generic

root (hd0,7)

kernel /boot/vmlinuz-2.6.24-19-generic root=UUID=b484f1e0-dc6c-40bf-9d0c-8a7bd9e080ac ro quiet splash

initrd /boot/initrd.img-2.6.24-19-generic

其中(hd0,7)新建对应新建的分区/dev/sda8; b484f1e0-dc6c-40bf-9d0c-8a7bd9e080ac表示新建分区的UUID编号.
另外可以看到删除了loop=/ubuntu/disks/root.disk,这句话指出了虚拟磁盘的文件名。搬迁后的系统不再使用虚拟文件,所以删除它。

分区的UUID编号可以通过以下方式查看: ls -l /dev/disk/by-uuid/
lrwxrwxrwx 1 root root 10 2008-06-17 16:29 1020A12220A11030 -> ../../sda1
lrwxrwxrwx 1 root root 10 2008-06-17 16:29 2E207485207455B5 -> ../../sda5
lrwxrwxrwx 1 root root 10 2008-06-17 16:29 5016-D49C -> ../../sda7
lrwxrwxrwx 1 root root 10 2008-06-17 16:29 8200D1BB00D1B67F -> ../../sda6
lrwxrwxrwx 1 root root 10 2008-06-17 16:29 b484f1e0-dc6c-40bf-9d0c-8a7bd9e080ac -> ../../sda8

五、修改fstab文件
文件路径为:/mnt/etc/fstab

将含root.disk和swap.disk的两行分别改动如下:
/dev/sda8 / ext3 defaults 0 0
/host/swap.disk none swap loop,sw 0 0

上边的第二行表示swap文件,我们需要将swap也搬迁过来,命令如下:
sudo mkdir /mnt/host
sudo cp -a /host/ubuntu/disks/swap.disk /mnt/host


至此,所有搬迁工作结束了,重新启动,试试看能进入新系统吗?
 
——————————————美丽分割线———————————
一点建议:

第三步 拷贝ubuntu操作系统的文件到新分区 ,可以在另外一个系统(比如 live cd )中操作,这样就没什么顾虑,直接全部拷贝即可

需以 loop 方式挂载磁盘映像文件,类似 mount root.disk /temp -o loop

然后 cp -a /temp/* /目标分区/

注意如果不只一个磁盘映像文件(如还有 usr.disk 等),需要分别挂载、拷贝

另外,swap 文件也可以丢弃不用,单独创建 swap 分区,这样迁移得更彻底
————————————我的个人建议是:————————————
分区可以用gparted,直观些,不太容易出错。有图形就不用字符,对一般用户来说比较容易操作。

cp也可以写到一起如 cp -a bin usr lib ... /

请教:cp这种情况应该怎么写就是 cp 除了这个文件夹以外的到 /

可以把操作做成像wubi那样的一个脚本,执行一次就行了。把繁琐的工作交给电脑不就是咱们要得效果?

上面的操作完全可以在正常ubuntu系统中使用,不用进别的模式。

双系统我建议/boot放在外面,这样修复、备份各种操作都方便,因为不是人人都有livecd,出错的时候就会发现好处多多,把备份的复制进去就好了,不用在busybox里搞,一般用户估计都不会用,只能重装了。
 
我的系统安装好了之后我就做了备份,从此以后就不怕系统弄坏。
系统备份可以看看这个帖子:http://www.58zn.cn/linux/blogview-linux-5_1.html
按后将备份的文件刻成了DVD数据光盘。系统坏了就拷贝备份文件到硬盘上从新恢复一下就又好了。


返回顶部

发表评论:

Powered By Z-BlogPHP 1.7.3


知识共享许可协议
本作品采用知识共享署名 3.0 中国大陆许可协议进行许可。
网站备案号粤ICP备15104741号-1