使用 VirtualBox 在 Win7 系统上安装 Ubuntu
为了跑一份开源代码,在电脑上安装了一个Ubuntu虚拟机。安装过程有小坑如下,写出来与newbie诸君共勉。
简介
VirtualBox是Oracle旗下的开源免费虚拟机软件。与上学时曾用过的VMware相比,个人感觉VirtualboxBox操作更为简洁方便。
Ubuntu是基于Linux的Debian分支开发的跨平台的、开源的操作系统。关于Linux不同版本的特性比较,可以参看这门课程LFS101x.2 Introduction to Linux。
安装Ubuntu
在Ubuntu官网根据自己电脑的配置和需求选择相应版本下载。我选择的是Ubuntu Desktop 32-bit。在虚拟机里跑操作系统,一般不会分配大于2GB的内存,建议选择32-bit的版本下载。
新建一个虚拟机的过程很简单,如果命名时就起名为Ubuntu 32bit或类似的名字,VirtualBox会自动设置好一些配置选项,基本就是一直使用默认就可以。一些优化的配置一会儿再提。
双击打开新建的虚拟机,会提示选择启动盘,这时选择刚才下载的安装包(比如ubuntu-14.04.2-desktop-i386.iso)就可以了。
Ubuntu的安装过程也很简单,按照引导一步一步安装即可。因为是安装在虚拟机内,也不用担心系统分区与覆盖的问题。如果需要可以看前面提到的课程关于Ubuntu安装的视频。
更改分辨率
安装完成后重启,已经可以进入Ubuntu系统。但此时系统的分辨率是800*600,且虚拟机关于调整分辨率的按钮是灰色的。
此时需要在该系统安装VirtualBox的增强功能包,在窗口主菜单的设备->安装增强功能,增强包会自动加载运行。建议使用VirtualBox的最新版本,我最开始安装时用的是老版本,未能成功。运行结束后重启Ubuntu,桌面上可以看到光盘图表的增强包,系统的分辨率已经随你的窗口自动调节了。
提升性能不再卡
此时的Ubuntu系统运行时卡顿无比,尤其在操作图形界面时。鼠标走位飘忽,打开一个Terminal也要费好大劲。如果不是电脑本身配置太差,就是设置的问题。要进行下面几步:
- 开启CPU的硬件虚拟化功能。
现在的CPU几乎都支持硬件虚拟化功能,英特尔称之为VT-x技术,AMD称之为AMD-V技术。在百度搜索你的笔记本型号或主板型号+开启虚拟化,就可以找到相应的开启方法。一般是开机进入bios,然后找到Virtualization Technology之类的选项,将disabled改为enabled。
BIOS中开启硬件虚拟化功能成功后,在虚拟机设置->系统->硬件加速中,启用硬件加速。如果开启成功,虚拟机窗口右下角会显示一个蓝色V图标。
- 给虚拟机分配足够的内存。
既然本机有4GB的内存,那么可以分配1GB供虚拟机上的Ubuntu使用。在虚拟机设置->系统->主板处。
- 开启3D加速,分配足够显存。在虚拟机设置->显示->显卡处。
重启,此时虚拟机运行流畅多了。
设置共享文件夹
手动挂载
在虚拟机设置->数据空间处,新增共享文件夹,为该数据空间命名如code_ref,设置为固定分配。
重新启动系统,在Terminal里执行如下命令,会挂载该数据空间到指定目录,就可以看到共享文件夹下面的文件了。
sudo mount -t vboxsf code_ref code/code_share/
注意这个命令要在根目录也就是刚进Terminal时所在的目录下执行,code_ref是之前我们命名好的数据空间,code/code_share是我想要加载到的本地目录。新建文件夹请用mkdir
指令。
如果想卸载,执行命令:sudo umount -f code/code_share
自动挂载
以上这种方式是手动将共享文件夹挂载在自己指定的地方。如果对目标目录没有特殊要求,使用virtualbox提供的自动挂载就可以。
首先,在virtualbox的共享文件夹处设置自动挂载。系统会自动在/media里建立以sf_为前缀并加上共享名的挂载点,启动时就会自动挂载。
这个挂载点默认的权限是给vbox创建的用户组vboxsf的,要想查看,需要把自己的用户名加入到vboxsf组。
在Terminal中执行命令sudo gedit /etc/group
。
打开group文件,将自己的用户名添加到vboxsf组。
重启,可以看到在/media目录中已经出现了名为sf_code_ref的文件夹。
使用中文输入法
我安装的ubuntu14.04默认安装了ibus-pinyin输入法,如果没有请到Software Center去安装。
点击系统右上角语言小图标,选择Text Entry Settings,如图添加Chinese(Pinyin)这一项。
之后使用Super+Space就可以切换输入法了,这个Super键,默认就是左边Ctrl与Alt之间的Windows键…(*´Д`)
此时使用这个输入法有些怪怪的,是因为默认开启简拼模式。仍然在右上角“拼”图标处点击,选择Preferences,在Pinyin mode处取消对Incomplete pinyin的勾选,重启就可以了。
替换软件源
官方源对于国内用户比较慢,最好替换成国内镜像。
打开Ubuntu软件中心,点击顶部面板Edit->Software Sources…
在弹出窗口中Download from处,选择Other,在之后的列表中选择163的镜像源。
之后更新一下sudo get-apt update
,快多了。
用命令行增加VirtualBox分配空间大小
使用到一定程度会觉得当初分配的最大8G硬盘太小了,而界面上并没有扩容的选项,此时需要安装VirtualBox Extension Pack,使用其中的VBoxManage命令行工具扩容。
安装后用管理员权限打开cmd.exe
,执行命令cd /d C:\Program Files\Oracle\VirtualBox\
,进入扩展包的安装目录。
再执行脚本VBoxManage.exe modifyhd YOUR_VIRTUAL_MACHINE_VDI_PATH --resize SIZE_IN_MB
。其中YOUR_VIRTUAL_MACHINE_VDI_PATH
是虚拟机vdi文件的完整路径,如D:\VirtualMachine\Ubuntu\Ubuntu.vdi
;SIZE_IN_MB
则是尺寸大小,如20480。
关于VBoxManage的更多用法可以参看官网Manual。
解决权限不足导致的符号连接错误问题
在虚拟机共享目录(形如sf_xxx
的目录)中进行符号连接时,有时会提示错误ln: creating symbolic link 'foo': Read-only file system
。
这是权限不足造成的。还是使用前文提到的扩展包解决。
用管理员权限打开cmd.exe
。如前文所述到VBoxManage所在目录执行VBoxManage.exe setextradata VM_NAME VBoxInternal2/SharedFoldersEnableSymlinksCreate/SHARE_NAME 1
。其中VN_NAME
是vdi的名字,如Ubuntu;SHARE_NAME
是共享目录没有sf_
前缀的名字。
然后用管理员权限打开VirtualBox开始使用。注意一定要用管理员权限打开,不然符号连接时仍会遇到错误ln: failed to create symbolic link '': Protocal error
。
更新gcc到4.9版本
安装:
1 | sudo add-apt-repository ppa:ubuntu-toolchain-r/test |
链接:
1 | cd /usr/bin |
生成core文件
程序遇到错误异常退出时,会希望用gdb对core文件进行调试。而ubuntu14.04默认是不生成core文件的,需要做一些设置。
在命令行输入ulimit -c unlimited
取消对core文件大小的限制,再执行ulimit -a
即可查看设置结果。
另外,通过查看/usr/src/linux/Documentation/sysctl/kernel.txt
文件我们还发现,在[/proc/sys/kernel/]core_pattern
配置文件中如果第一个字符是|
,那么core dump不会生成独立文件,而是传输给程序的标准输出。
kernel.txt文件中对core_pattern的解释如下。
1 | core_pattern: |
可以通过sudo sysctl -w kernel.core_pattern=/tmp/core.%E.%p
修改此配置。
如果你在共享文件夹sf_xxx
中生成core文件,由于权限问题,大小可能为0字节。建议还是生成在/tmp
目录里。
[1] https://courses.edx.org/courses/course-v1:LinuxFoundationX+LFS101x.2+1T2015/info
[2] http://imcn.me/html/y2011/4053.html
[3] http://www.xuzefeng.com/post/85.html
[4] http://www.cnblogs.com/huanghuang/archive/2011/09/23/2185968.html
[5] http://forum.ubuntu.org.cn/viewtopic.php?p=3074035
[6] http://www.linuxidc.com/Linux/2014-04/100476.htm
[7] http://hajuria.blogspot.com/2013/12/how-to-increase-virtualbox-disk-size-in.html
[8] http://serverfault.com/questions/345341/cant-create-symlinks-in-virtualbox-shared-folders
[9] http://askubuntu.com/questions/428198/getting-installing-gcc-g-4-9-on-ubuntu
[10] http://stackoverflow.com/questions/2065912/core-dumped-but-core-file-is-not-in-current-directory
[11] https://www.sourceware.org/ml/gdb/2011-09/msg00009.html