Ubuntu调整Swap分区大小后,修复不能挂载Swap及执行睡眠功能的问题


我的电脑物理内存是4G,之前由于磁盘空间有限,只给了1.5G的swap,最近在执行睡眠功能的时候,提示no enough swap。

于是使用gparted调整了分区的大小,但是因为Ubuntu使用UUID挂载分区,所以调整完毕后,系统并没有正常挂载swap分区。

通过free命令可以看出swap的大小是0。
执行ls -l /dev/disk/by-uuid/命令可以得到分区的UUID,通过和/etc/fstab中的UUID比对可以发现,Gparted并没有更新/etc/fstab中的UUID。
手动更新/etc/fstab中的UUID之后,重启系统,系统已经可以正常挂载swap了。

然后测试睡眠(hibernate)功能是否正常。
执行Hibernate后,系统正常关闭了。但是在启动的时候,系统还是像新开机的时候一样,并且之前没有关闭的应用程序都没有恢复。
这个问题可以通过修改/etc/initramfs-tools/conf.d/resume文件中的UUID,将其更新为最新的Swap UUID,然后执行sudo update-initramfs -u即可。

Advertisements

Installing Oracle 11gR2 Enterprise Edition on Ubuntu 10.04 (Lucid Lynx)


最近因为工作的原因,需要在笔记本电脑上安装Oracle
数据库。由于Oracle并没有提供针对Ubuntu的安装软件或者手册,所以在Ubuntu上安装Oracle并不是很方便,用Ubuntu
9.04的时候安装成功过,不过从那以后一直没有关注这个问题了。今天花了一个下午的时候,总算数据库正常安装了。

Oracle版本:11gr2
Ubuntu版本:

[leo@leo-laptop:~]$ uname -a
Linux leo-laptop 2.6.32-24-generic#39-Ubuntu SMP Wed Jul 28 05:14:15 UTC 2010 x86_64 GNU/Linux

首先下载11g的两个压缩文件并且解压缩,然后合并解压缩之后的两个目录

在安装之前我们还要准备一些必要的软件包
sudo apt-get install unzip build-essential x11-utils rpm ksh lsb-rpm libaio1

由于Oracle 11g需要libstdc++5的库,而Ubuntu 10.04已经升级到了libstdc++6,所以我们还要准备libstdc++5的库。
$ wget http://mirrors.kernel.org/ubuntu/pool/universe/g/gcc-3.3/libstdc++5_3.3.6-17ubuntu1_amd64.deb
$ dpkg-deb -x libstdc++5_3.3.6-17ubuntu1_amd64.deb ia64-libs
$ sudo cp ia64-libs/usr/lib/libstdc++.so.5.0.7 /usr/lib64/
$ cd /usr/lib64/
$ sudo ln -s libstdc++.so.5.0.7 libstdc++.so.5

$ wget http://security.ubuntu.com/ubuntu/pool/universe/i/ia32-libs/ia32-libs_2.7ubuntu6.1_amd64.deb
$ dpkg-deb -x ia32-libs_2.7ubuntu6.1_amd64.deb ia32-libs
$ sudo cp ia32-libs/usr/lib32/libstdc++.so.5.0.7 /usr/lib32/
$ cd /usr/lib32
$ sudo ln -s libstdc++.so.5.0.7 libstdc++.so.5

然后在/etc/sysctl.conf文件中添加以下行,调整系统参数。

# Oracle
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152
kernel.shmmax = 536870912
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048586
net.ipv4.tcp_wmem = 262144 262144 262144
net.ipv4.tcp_rmem = 4194304 4194304 4194304

然后执行sudo sysctl -p命令,使刚刚的修改生效。

再在/etc/security/limits.conf文件中添加以下行

# Oracle
leo soft nproc 2047
leo hard nproc 16383
leo soft nofile 1023
leo hard nofile 65535

这里需要注意的是,leo是你要用来安装和运行Oracle的帐户名称,我决定不创建新的用户,使用当前登录系统的账户,所以写成了leo。现在可以进入解压缩之后的目录,然后开始安装了。

cd database
./runInstaller

在安装的过程中需要指定ORACLE_BASE以及ORACLE_HOME等参数,将ORACLE_BASE设置为/opt/Oracle 并且保证Oracle的owner是leo:leo,另外还需要在创建一个/opt/oraInventory/并且属于leo:leo
在安装的过程中,会提示系统环境check不能通过,直接忽略所有的错误继续;在我的电脑上还出现了在安装的过程中,从安装主窗口弹出来的窗口没有文字显示的问题,通过使用alt+n触发下一步解决。导致后来需要通过alter user sys

identified by “password”来修改密码。

安装完成了之后,在~/.bashrc中添加以下设置参数,为命令行方式管理数据库提供环境。

# Oracle
export ORACLE_HOME=/opt/Oracle/product/11.2.0/dbhome_1
export ORACLE_BASE=/opt/Oracle
export ORACLE_SID=orcl
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export PATH=$ORACLE_HOME/bin:$PATH
export EDITOR=/usr/bin/vim

在使用emctl的时候碰到了ulimit: 25: bad number.的错误
这是因为Ubuntu默认把/bin/sh指向了dash,通过修改emctl脚本的头部,将/bin/sh改成/bin/bash即解决问题。
其次还有/bin/awk无法找到的问题。Ubuntu也有安装awk,不过默认路径是/usr/bin/awk,通过ln /usr/bin/awk /bin/awk命令解决问题。wfti .
然后cp $ORACLE_HOME/install/oratab /etc/
再执行$ORACLE_HOME/root.sh
解决这些问题之后,我们就可以通过emctl stop dbconsole停止Oracle管理平台以及通过emctl start dbconsole启动Oracle管理平台了。
另外,关于监听器也碰到了一些问题,安装完成之后,监听器默认的状态是READY状态,在设置完成ORACLE_HOME等参数之后,通过lsnrctl stop listener停止监听器,然后lsnrctl start listener解决问题。
大功告成之后,可以通过https://localhost:1158/em登录管理控制台了。
登录之后是不是发现按钮是方框?
这个是因为Oracle自带的JDK没有能够显示中文的字体有关系
创建$ORACLE_HOME/jdk/jre/lib/fonts/fallback
然后复制一个simsun.ttc字体到该目录并改名为simsun.ttf,重启em,一切就OK了。

期间在em启动和停止的时候还碰到了一些其他的提醒,比如找不到$ORACLE_HOME/leo-laptop_orcl但其实在$ORACLE_HOME下有localhost_orcl,这个可能和em默认使用了主机名有关系,使用cp -r命令复制一下localhost_orcl就可以解决问题了。

关于创建数据库时弹出的确认窗口没有内容的问题,在关闭特效之后,确认窗口即能正常显示。

参考:
http://www.pythian.com/news/13291/installing-oracle-11gr2-enterprise-edition-on-ubuntu-10-04-lucid-lynx/
http://cn.forums.oracle.com/forums/thread.jspa?threadID=697814

迁移Ubuntu系统到新硬盘


笔记本硬盘是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系统成功迁移到新的硬盘。

VirtualBox 3.1.6 发布


这是一个维护版本,主要更新点如下:
* 修正内核版本为2.6.31及更高版本Linux主机的时间同步问题。(我还真碰到过虚拟机时间和主机时间不同步的问题,时间越走越慢。)
* 改进客户机SMP稳定性
* 允许在VM运行的时候切换网络接口
* vboxwebsrv多线程支持
* 修正内核版本为2.6.33或更高版本的Fedora12客户机启动X server时出现的挂起问题。
* 支持Mandriva speedboot runlevel。
* 支持Ubuntu 10.04

更多信息请参考官方网站:
http://forums.virtualbox.org/viewtopic.php?f=1&t=29296

Vostro 1500,解决Skype视频聊天时摄像头无法点亮


我的笔记本是Dell Vostro 1500,买的时候,要了一个摄像头套装。
设备信息:

leo@leo-laptop:~$ lsusb
Bus 002 Device 003: ID 05a9:2640 OmniVision Technologies, Inc. OV2640 Webcam

自从用了Ubuntu之后,视频聊天就依靠Skype了。但是在聊天的时候,偶尔发现视频不能被正常点亮,无法看到自己的图像。

之前用偷懒的办法,重启系统解决,今天重启了系统也没有解决。没办法检查了一下系统的日志。

leo@leo-laptop:~$ dmesg | grep video
[    0.702337] pci 0000:01:00.0: Boot video device
[   16.025157] Linux video capture interface: v2.00
[   16.027717] uvcvideo: Found UVC 1.00 device Laptop Integrated Webcam (05a9:2640)
[   16.052109] uvcvideo: UVC non compliance – GET_DEF(PROBE) not supported. Enabling workaround.
[   16.052706] uvcvideo: Failed to query (129) UVC probe control : -32 (exp. 26).
[   16.052709] uvcvideo: Failed to initialize the device (-5).
[   16.052758] usbcore: registered new interface driver uvcvideo

发现了错误,google之,得到一篇很老的日志。
http://ubuntuforums.org/archive/index.php/t-793513.html

看到5楼的时候,想到之前无线不能正常使用的时候,是把dell_laptop移除之后就可以了。那摄像头这个设备不能正常初始化,是不是可以通过重新加载模块的方法来再次初始化呢?这个和重启机器的道理一样。

使用以下命令重新激活了摄像头,Skype的聊天窗口都不用关闭。

sudo rmmod uvcvideo

sudo moprobe uvcvideo #这行命令如果能够看到摄像头的灯闪了一下,那就肯定是OK了。

 

一条命令解决ubuntu network-manager显示“无线网络已经禁用”


之前写了一篇ubuntu network-manager显示“无线网络已经禁用”的解决方法

但是上面的解决方法太复杂,而且连接网络之后Ubuntu One不能连接Ubuntu云服务器端。
所以,最近这段时间一直没有放弃查找这个问题的解决方法,最终在Debian的bug系统里找到相关的解决方法。
参考:http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=544217

我的笔记本是Dell的,默认会加载一个dell_laptop模块。正是这个模块导致rfkill返回值不正确,删除该模块之后,久违的无线网络图标终于出现了。

$ sudo rmmod dell_laptop

关于该Bug讨论的部分摘抄:

There are a few options for working around these bugs. I list them ehre
for the benefit of other users with the same problem:

1. Tell HAL to ignore all rfkill devices. I tried to do this by
setting the ‘info.ignore’ property on each of the killswitch
devices. Unfortunately, this didn’t stop NetworkManager from
seeing them. I guess info.ignore isn’t supposed to be used for
this purpose. Is there another way to deal with this at the HAL
level?
2. Patch NetworkManager to override the information coming from
HAL. The ‘nm-ignore-killswitches.patch’ is attached, and it does
work. Of course, it’s not suitable as anything other than a
crude hack to workaround the issue.
3. Fix the broken killswitch devices. The first broken device comes
from the kernel’s dell_laptop module, so that’s one bug. The
second comes from HAL’s device database, but is actually queried
with the dellWirelessCtl utility, which returns the wrong
result. I have filed separate bugs for these issues.
4. Work around the broken killswitch devices. The dell_laptop
kernel module can simply be blacklisted, and removing the
libsmbios-bin package that contains dellWirelessCtl causes
querying HAL for its status to return an error; which in turn
causes NetworkManager to assume that the radio is enabled.
5. Fix the hardware. Dell have posted a BIOS update for my laptop,
version A03, the release notes of which include “Fix kill switch
sttatus report fail”. Unfortunately, it is impossible to
actually install this update without installing Windows, so I
can’t test that out. 😦

在最新的Ubuntu 10.10中,这个问题已经不存在了。可以放心的加载dell_laptop了。

ubuntu network-manager显示“无线网络已经禁用”的解决方法


Ubuntu最近又出现了无线网络已经禁用wiress disabled的状况,上回出现这样的问题时,直接重新安装解决了,这次不想再重新安装了,找解决方案。 

Ubuntu版本:
$ uname -a
Linux leo-laptop 2.6.31-15-generic #50-Ubuntu SMP Tue Nov 10 14:53:52 UTC 2009 x86_64 GNU/Linux

网卡型号及驱动:
$ lspci | grep 3945
0c:00.0 Network controller: Intel Corporation PRO/Wireless 3945ABG [Golan] Network Connection (rev 02)

解决方法:
将下面的内容保存成文件,然后添加可执行权限即可
#!/bin/bash
#sudo iwlist wlan0 scanning essid Home
#sudo /etc/init.d/network-manager restart
sudo rmmod -f iwl3945
sudo modprobe iwl3945 disable_hw_scan=1
sudo ifconfig wlan0 up
sudo iwconfig wlan0 essid Home
sudo iwconfig wlan0 channel 12
sudo iwconfig wlan0 freq 2.467G
sudo iwconfig wlan0 key 访问无线网络的密钥
sudo iwconfig wlan0 ap 00:1E:58:12:6B:62
sudo iwconfig wlan0 rate auto
sudo iwconfig wlan0 rts 250
sudo dhclient wlan0
ifconfig wlan0

文件的最后多加一行空格
以下这些值都根据sudo iwlist wlan0 scanning essid Home命令所得的结果设定
essid是无线网络的名称
channel是无线网络使用的信道
freq是无线网络的频率
rate是指定无线网络的速率
rts是针对隐藏无线网络提高性能的,他的值是包的大小

解决问题的思路,卸载模块,然后重新加载模块,并且指定disabled_hw_scan=1,之后通过iwconfig来配置无线网卡。解决network-manager不能操作无线网卡的问题。

在我的电脑上,执行完上述操作之后,empathy还是不能上网,不过firefox已经能够正常打开网络了。
通过下面的方法能够解决:
1、运行sudo /etc/init.d/network-manager restart。执行完成后,wlan0断开了。
2、再次执行上面的脚本之后就OK了。