parted打开磁盘报错Invalid partition table on /dev/sdx -- wrong signature 0/gparted显示硬盘未分区

因为硬盘空间不足,所以对其中一个分区进行扩容(当然,本磁盘有空闲的空间才能扩容),使用gpared,以前的经验是本分区工具非常稳定,无损的分区调整。不过这次把一个swap分区往后移动时,报错了,分区调整失败。,gparted重新载入磁盘,但显示磁盘没有分区,所以分区都不见了。

这下麻烦了,不过在gome磁盘实用工具里还是正常的,其它分区也都能正常工作。然而gparted里显示有误,总令人不安心。

到windows里,使用diskgen也没有查出分区表有错误。再回到centos里,gparted仍没有分区。使用parted命令行工具,看到了如标题里的一行错误消息:

Invalid partition table on /dev/sda -- wrong signature 0

这样看,还是分区表有问题,通过万能的google搜索,看到老外有篇文章 http://techspalace.blogspot.com/2011/10/solved-invalid-partition-table-on.html,提到了这种情况下:

If you also encounter any of the above problem, simple run fdisk by sudo fdisk /dev/sda press p and then press w. You'll see a message "The partition table has been altered!".

只要用fdisk打开,什么都不用做,直接保存分区表,就可以了。保存时会提示消息说:"The partition table has been altered!"

半信半疑的,还是勇敢的尝试了一下(几百G的文件,很多没有备份,确实有点冒险),因为考虑到fdisk还是非常老牌的分区工具,况且没有做调整,还不至于造成分区表丢失。

操作如下:

fdisk_open_and_save_disk

果然,再次gparted打开,显示分区正常了。只是那个swap分区没了,测试用的ubuntu系统用的,无所谓,重新分个swap区好了。

国内开启google位置记录功能/android版google maps 7+上,恢复位置记录功能在国内使用(需root)

android版google 地图在 7以后的版本上,位置记录功能在国内不能用了,提示本功能不能在中国使用。

至少对本人,“位置记录”功能是非常有用的功能,尤其是骑车出行时记录自己的路线。目前还没找到替代产品。之前一段时间内恢复回旧版本,以使用该功能。后来使用shlug用户组的高手kernel老兄提供的方案,成功启用了本功能。

方法如下:

让andorid系统启动后加载下面这段脚本:

脚本fixsim

欺骗android系统,让它以为运行在美国运营商的服务下。

加载该脚本需要手机有root权限。个人使用 “固件工具箱” (rom toolbox) 实现启动加载,功能位于:

rom toolbox - 工具 - 脚本编写器 , 导入如上启用脚本(推荐将脚本改下名字,如init.fixsim.sh),并设置成开机自动启动,完成后重启手机。

Screenshot_2013-10-22-23-01-06 Screenshot_2013-10-22-23-01-20

可能得过一阵子才能在google地图里启用“位置记录”,估计是系统缓存的问题。

个人测试环境:galaxy nexus 手机, android 4.3(已root), 固件工具箱5.9.0 付费版,上述脚本。

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

当然用其它办法让该脚本执行也可以,个人没有尝试。kernel老兄的方案是:将上述脚本“自己扔 /etc/init.d/下面,记得改权限,当然内核得支持执行/etc/init.d下面的脚本才行”

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

另外:7以后版本的google地图上,有个很好用的缩放地图的方法,只要单指即可完美操作,比传统的缩放按钮更好用,比多指拉伸/缩小更方便:

折腾:vps上php环境升级为php5.5

php5.5出来很久了,一直没应用,vps上还是5.3,折腾一番尝试一下看5.5效果如何。

查阅了官方的升级说明,从5.3到5.5变化不大,而且vps上主要跑的wordpress,drupal,phpmyadmin等应用,它们的开发理论是是比较规范的,估计问题不大。

原环境,php-fpm, nginx, 其中php安装了apc, memcache两个附加模块。

下载php5.3源码,解压,参考5.3的配置参数,改了下安装目录到/usr/local/php55,编译安装,很顺利。

不过启动php-fpm进程时,还得加 -c参数指定php.ini目录才行,指定该参数重新配置编译了几次,都还是不行。那就带参数也无所谓了。

在一个测试站点上,修改nginx里fast-cgi端口为9005, 新开启一下fpm进程,php-fpm端口设置为9005,(php5.3工作在9000端口)这样不影响php5.3的正常工作。打开phpinfo页面,检查没有发现异常,打开phpMyAdmin,也正常。

编译附加模块apc,但编译失败,google到雪鸟(雪候鸟)的文章,说php5.5里集成了zend O+加速模块,这样就可以不要apc了。

到以前的memcache目录里,重新配置编译安装,正常。

加载,因为是偷懒从php5.3的php.ini里拷来加载模块的两行代码,没有改,在运行php-fpm时报错了,说是模块跟php的api版本不一致,一个是2009xxx版,一个是2012xxx版,以为编译错了。重新下载新版本memcache也一样。

纳闷中,突然意识到php.ini里最后加的加载memcache模块是以绝对路径调用的,这个路径没改,还是加载的php5.3目录下的,这不报错就没天理了。删掉路径,只保留文件名,杀死php-fpm进程,重新开启,正常了。这次安装模块是安装到extension_dir指定的目录下的,这样更简单。

运行wordpress站点,报错了:

syntax error, unexpected end of file

想起php.ini里没有开启short_open_tag, 以前安装5.3时也报了这个错误,一些不规范的插件,不想改它的源码,反正有其它一些php程序也这么干,那就打开short_open_tag好了。

重启php-fpm,运行wp又报错了

Call-time pass-by-reference has been removed

又是一个插件的问题:wp-related-posts,其源码 wp-related-posts/wp-relatedposts.php 里有这样的行 wp_relatedposts_ontags(&$options), 删除调用参数时的&号,即wp_relatedposts_ontags($options) 这就好了。

测试运行没有发现问题。

杀死php5.3的fpm进程。修改php5.5的fpm到9000端口上,并启动。

再测试一番,正常。

修改/etc/rc.local里的php-fpm开机启动命令为5.5版本。

完成。

记录一下,算是这个中秋节做的一点有意义的事情。

原计划一大早睡觉,结果又0:18了——

---- 130923 补 --------------------

原来 opcache并没有自动加载,虽然它会被安装到php扩展的目录下,默认在 {$PREFIX}/lib/php/extensions/no-debug-non-zts-20121212

在php.ini里加入以下两行

[opcache]
zend_extension=opcache.so

opcache.so是个zend扩展模块,要用zend_extension=xx加载。

重启php-fpm生效

CentOS6.x下安装python2.7

CentOS6.x自带的python是2.6.x版,一直没有更新到2.7,其上游发行版redhat太过保守了。goagent的新版本已经要求python2.7以上版本了,为了升级goagent,决定安装python2.7.

一个原则:不要去改动系统自带的东西,除非你知道所有不得影响。

考虑到默认位置下的python是系统运行所需,覆盖升级有可能影响一些功能;并且yum update时,可能新装的python会被再次覆盖。所以计划将python2.7装到/opt/python2.7目录下。

在普通用户下下载编译python2.7,个人习惯,软件包都在 ~/optdata/software/build下编译,原源tar包放在 ~/optdata/software/source/下

cd ~/optdata/software/build/
wget http://www.python.org/ftp/python/2.7.5/Python-2.7.5.tar.bz2  #下载python2.7源码
tar xvf Python-2.7.5.tar.bz2         #解压
mv Python-2.7.5.tar.bz2 ../source/   #将源码移到~/optdata/software/source/下
mv Python-2.7.5/ python-2.7.5/       #不喜欢文件名里带大写,改首字母为小写
cd python-2.7.5/
./configure --help                   #查看配置参数,其中主要看--prefix参数,即配置安装目标位置
./configure --prefix=/opt/python2.7  #运行配置。如果你的系统缺少部分开发包,可能会报错,按错误提示yum install 相应的包
make

完成后,su切换到root下,make install安装。

现在python2.7即安装好了,如需使用python2.7,就要指定其完整的路径/opt/python2.7./bin/python

但,这个python只是个基本环境,可能要装一些新模块。pip是个很好用的工具,我们先安装它,有了pip,就可以自动安装了,跟yum一样方便的工具。

下载,个人的python包一般是放在~/optdata/software/python/里

cd ~/optdata/software/python/
wget https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py
/opt/python2.7/bin/python ez_setup.py
wget https://raw.github.com/pypa/pip/master/contrib/get-pip.py
/opt/python2.7/bin/python get-pip.py

查看下pip版本号,安装pyOpenSSL试试,goagent客户端要用这个包的

/opt/python2.7/bin/pip -V
/opt/python2.7/bin/pip install pyOpenSSL

没问题,完成。

这样如果需要使用python2.7就这样指定/opt/下完整路径运行。而对系统自带的python2.7没有任何影响。

windows远程桌面remote desctop连接到服务器的console控制台会话

If you need to connect to the console, start Remote Desktop from start run and use the console switch:

mstsc /console  /v 192.168.100.200:3389

详细的说明:运行 mstsc /? 得如下的用法说明

reffer: http://social.technet.microsoft.com/Forums/windowsserver/en-US/19a188a7-cafd-403a-b5e3-77e7c82dfbb2/can-vnc-server-run-on-windows-server-2008

一系列git技巧:bash下让git支持命令自动完成etc

bash下让git支持命令自动完成

下载git-completion 的脚本 https://github.com/git/git/blob/master/contrib/completion/git-completion.bash 放到一个符合你习惯的位置,我个人放在 ~/script/git/ 里。(事实上该文件是 git源码中的文件 contrib/completion/git-completion.bash

个人习惯在把一些供个人使用的脚本放在家目录下的script目录,这里为git建一个单独的目录,将上述文件放进去。

然后修改~/.bashrc文件,加入一行

. ~/script/git/git-completion.bash

重新登录,在bash下,你的git就支持自动补完了,输入 git com,然后按两次tab键,即见效。

不重新登录,也可以立即生效。当前的bash里运行上述命令. ~/script/git/git-completion.bash即可。

其他小技巧

git diff 忽略dos与unix换行符的差异:git diff  --ignore-space-at-eol

Hyper-V虚拟机启动报错:IDE/ATAPI 帐户没有足够的权限

使用windows hyper-v虚拟机,因一个虚拟机机出了点问题,又没有做快照。于是把硬盘文件改名,然后把以前备份的硬盘文件拷过来,改成虚拟机用的硬盘文件的名。

但启动时报错:“ide/atapi 账号没有足够的权限”。比对两个硬盘文件的权限,发现新拷过来的文件少了一个用户的权限,这个用户没有名字,显示为一大串字符串。想找到这个用户赋权限给他,但找不到。

经过google查询得知,在hyper-v 管理里,将该硬盘文件从本虚拟机上删除,然后“应用”,再加上该硬盘文件,“确定”即可。这样hyper-v就为该文件赋上了这个“幽灵用户”的权限。

猜测,这应该是hyper自己搞的一个隐藏用户(或用户组),正常情况下在windows里看不到,所以...