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
至此,所有搬迁工作结束了,重新启动,试试看能进入新系统吗?