【血的教训】玩 Ubuntu 遇到的致命问题(进不了系统)及 解决方案
【问题1】
按照文章“U盘安装Windows 7 + Ubuntu 14 双系统笔记”在 Windows 7 基础上安装了 Ubuntu 14 系统,实现双系统切换,某一天,
通过如下命令行
sudo apt-get remove sogoupinyin
删除“搜狗输入法”,结果重启系统后,再也进不了桌面,最可恶的是,按快捷键“Ctrl + Alt + F1” 也进不了终端命令行。
系统崩溃了,顿时感觉 Ubuntu 系统的各种不靠谱。
后来,把 Ubuntu 系统删除了,决定到 VirtualBox 中去折腾 Ubuntu。
再后来,发现 删除“搜狗输入法”得这样删:
$sudo dpkg -l so* # 找到“搜狗输入法”得 安装名
$sudo apt-get purge sogoupinyin # 卸载搜狗拼音输入法
$sudo dpkg -r sogoupinyin # 防止登陆不了桌面
详细删除操作,请参考:[百度经验]Ubuntu彻底卸载搜狗拼音输入法
【问题2】
在 VirtualBox 中安装了 Ubuntu 14,发现 桌面窗口的 3D 效果特别不好,有一种 用 3D 的技术去跑出 2D 效果的感觉,结果还没有Ubuntu老版本的 2D 显示效果好,特别卡。貌似 Ubuntu 14 已经移除了 2D 桌面,所以只能勉为其难地使用上了 3D 桌面。
无奈,重新安装了低版本得 Ubuntu 12,它自带了 2D、3D 版本的桌面,在虚拟机中,自动使用上了 2D 桌面,一点也不卡的感觉。
【问题3】
在 VirtualBox 中安装了 Ubuntu 12,并且每成功安装好了一个软件,都会习惯性地备份下虚拟机,当误操作导致系统崩溃了,好还原系统。貌似系统崩溃这块找到了很好得解决方案,结果某一天:
我打算安装QQ,按照“Ubuntu12.04安装QQ2012教程”安装的 QQ 启动失败,到“Ubuntu 软件中心”的“已安装”列表中又没有找到 QQ 的安装记录。看到没有用的 QQ 想关文件,我又觉得烦,好吧,直接 rm 删除,结果历史悲剧重演,重启系统后,进不了Ubuntu系统,终端也打不开,最最大的问题是,我辛辛苦苦加班写得 代码 又因为未及时提交SVN,彻底丢失了!
后来,为了预防出现 系统崩溃问题造成“数据/代码”文件丢失得现象,决定把 重要得“数据/代码”文件放到 Windows 系统磁盘上,通过“共享文件夹”的形式共享给 VirtualBox 中的 Ubuntu。
如何设置“共享文件夹”,可参考这篇文章:
Windows 7 共享文件夹 给 VirtualBox 中的 Ubuntu 14
但是,文章提到的“自动挂载”有点不爽的是,挂载路径为 /media/sf_ubuntu/。我想 自定义“自动挂载”、“挂载目录” 及“挂载目录的用户”,如何实现?
操作方式如下:
1、去掉 勾选“自动挂载”,如下图所示

2、查看当前用户(jianbao)的 uid、gid
$ cat /etc/passwd
...
saned:x:114:123::/home/saned:/bin/false
jianbao:x:1000:1000:jianbao,,,:/home/jianbao:/bin/bash
vboxadd:x:999:1::/var/run/vboxadd:/bin/false
mysql:x:1002:1002::/home/mysql:/usr/sbin/nologin
...
3、设置开机“自动挂载”
$ sudo mkdir /www # 新建挂载目录
$ sudo vim /etc/rc.local
在 exit 0 代码前添加如下代码:
mount -t vboxsf ubuntu /www -o uid="1000",gid="1000"
表示把“共享文件夹”ubuntu 挂载到 /www 目录,并且 /www 目录的用户名及用户组分别为 1000,1000,即 jianbao,jianbao。
注意:如果不指定挂载目录 /www 的用户名的话,默认为 root。
以后SVN项目的代码文件统一放到 /www 目录下,再也不用担心 代码文件 因 Ubuntu 系统崩溃而造成数据丢失的问题了。
[温馨提示]
后面我把 Virtual Box 换成了 VMware Workstation,VMware默认挂载路径为 /mnt/hgfs/ubuntu/。没有用自定义挂载,而是采用 软链接 的方式,自定义访问目录!参考命令如下:
sudo ln -s /mnt/hgfs/ubuntu ~/www
sudo ln -s /mnt/hgfs/ubuntu /www
【问题4】
[问题3] 解决了 预防“代码文件”丢失的问题,但是 还有个 MySQL 数据库,如何处理?
1、把 MySQL 的 data 目录移到 /www 目录下(注意:配置文件中得 data 目录也得调整);
2、把 MySQL 的 运行用户名 由 mysql 改为 当前用户(jianbao)
后来,我干脆把 MySQL 的安装位置给整体调整了,由先前的 /opt/software/mysql 拷贝 一份为 /www/mysql 。
注意:有些生成的静态库拷贝不过去,即使是 root 权限也不行。主要是在编译安装PHP时,用到了编译参数:
--mysql=/opt/software/mysql --with-pdo-mysql=/opt/software/mysql --with-mysqli=/opt/software/mysql/bin/mysql_config
编译PHP时,会在 /opt/software/mysql 目录生成一些不可移动的(只读的),PHP(php-fpm)自身又需要用到的 MySQL 相关类库。
所以,不要删除 /opt/software/mysql 目录,也不要删除 mysql 用户。
另外,/www/mysql 中的数据库也不要重新“初始化安装”,即不要执行 “/www/mysql/scripts/mysql_install_db”等命令,只需要把类似 basedir,datadir 配置改下即可!
安装 MySQL 可参考:Ubuntu 12 安装 MySQL 5.6.26 及 问题汇总
【问题5】
[问题4]解决了 MySQL 数据存储位置转移问题,但是当我重启系统后,发现设置得 MySQL“自启动”没有生效,即启动失败。
“自启动”是通过以下命令安装服务实现的:
sudo update-rc.d mysqld defaults
通过查看 MySQL 的错误日志,提示说 /www/mysql 目录不存在。很显然,在开机后内核执行“service mysqld start”时,Windows下的“共享文件夹”ubuntu 还未开始(或还未成功)挂载到 /www 目录,所以导致 MySQL "自启动"失败。
同理,Nginx 也“自启动”失败。最后的解决方案如下:
$ sudo vim /etc/rc.local
在 exit 0 代码前添加如下代码:
service nginx start
service mysqld start
删除通过工具 update-rc.d 设置的 Nginx、MySQL 开机自启动服务:
sudo update-rc.d -f mysqld remove
sudo update-rc.d -f nginx remove
注意:系统服务 service nginx start|stop|restart 是不会受影响的,只是开机的时不会去调用 service nginx start 罢了。
【问题6】
宿主主机 Windows 7 系统中装了 TortoiseSVN,在虚拟机 Ubuntu 系统中也安装了 SVN,当通过 PhpStorm 的 SVN 插件检出 SVN 项目时,拉取了几个文件后,报如下错误:

再次拉取时,提示 SVN 被锁定。猜想,应该是和宿主主机中的 TortoiseSVN 发生冲突了。当 Ubuntu 在拉取文件时,SVN 会更新项目目录下的 “.svn/wc.db”文件,它是个 sqlite 数据库文件,而此时,宿主主机中的 TortoiseSVN 也检测到了 SVN 项目目录在更新,也会去更新这个“.svn/wc.db”文件,两边同时更新同一文件,肯定会出现“文件锁竞争”问题,所以会报错:
svn:E200030:Additional errors:
svn:E200030:sqlite[S10]:disk I/O error
最后的解决方案是:卸载 Windows 7 中的 TortoiseSVN,以后直接在 Ubuntu 中管理SVN。
延伸阅读:
Ubuntu 管理开机自启动工具 update-rd.d 使用详解
【血的教训】玩 Ubuntu 遇到的致命问题(进不了系统)及 解决方案的更多相关文章
- HttpClient -- 血的教训
HttpClient -- 血的教训 千万别用httpClient 不支持httpVersion2.0 因为这个导致项目重做
- 血的教训 password写成passward,教训应该从首页赋值 参数名
血的教训 password写成passward,教训应该从首页赋值 参数名
- LCD屏背光驱动调试心得---血的教训
开发板:明远智睿MY-IMX6-EK140 内核源码:linux-3.14.52 背光驱动IC:MP3202 调光原理:通过开发板的核心板PWM4引脚控制MP3202的EN脚,输出不同的占空比从而达到 ...
- 血的教训--如何正确使用线程池submit和execute方法
血的教训之背景:使用线程池对存量数据进行迁移,但是总有一批数据迁移失败,无异常日志打印 凶案起因 听说parallelStream并行流是个好东西,由于日常开发stream串行流的场景比较多,这次 ...
- Ubuntu进不入系统,一直停留在ubuntu图标画面(转)
Ubuntu进不入系统,一直停留在ubuntu图标画面(转) 在VMware中对Ubuntu进行“关闭电源”后,再次进入,一直停留在ubuntu的图标画面,无法进入系统了!网上也有别的网友碰到这个问题 ...
- Linux(Ubuntu) 下自然码加辅助码双拼输入的解决方案
Linux(Ubuntu) 下自然码加辅助码双拼输入的解决方案 环境: Ubuntu 14.04 LTS 解决方案是 ibus-Rime 输入法, 再加上搭配自然码的配置表 (1) ibus 首先安装 ...
- 用前端姿势玩docker【五】快速构建中类Unix系统与Windows系统的差异化处理
目录 用前端姿势玩docker[一]Docker通俗理解常用功能汇总与操作埋坑 用前端姿势玩docker[二]dockerfile定制镜像初体验 用前端姿势玩docker[三]基于nvm的前端环境构建 ...
- ubuntu 下修改文件访问权限chmod 777 -R *血的教训!没事别乱开权限!用谁开谁的就行。。。最后不要用这个命令,文件操作全部改用终端
本文转自: 个人建议 Ubuntu下修改目录权限命令如下:chmod 600 name (只有所有者有读和写的权限)chmod 644 name (所有者有读和写的权限,组用户只有读的权限)chmod ...
- FPGA笔试题集锦(血的教训)
1.名词解释: FPGA:现场可编程门阵列,一般工艺SRAM(易失性),所以要外挂配置芯片. CPLD:复杂可编程逻辑器件,一般工艺Flash(不易失). ASIC:专用集成电路 SOC:片上系统 S ...
随机推荐
- C#最简单最完整的webservice实例
http://fyinthesky.blog.163.com/blog/static/3555251720110115227337/ 我做java,但最近接触crm所以必须研究一下C#中的webser ...
- 服务器配置ssl证书支持苹果ATS方法
服务器配置ssl证书支持苹果ATS方法 发布日期:2016-12-14 苹果安全工程&架构部门主管Ivan Kristic表示ATS将在今年底成为App Sotre app的必要条件,这将大幅 ...
- C#读写文本和连接数据库
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- Axure7.0汉化方法
下载汉化包 AxureRP7CN_汉化包.rar 首先退出正在运行中的 Axure (如果您正在使用). 将 汉化包.rar 文件解压, 得到 lang 文件夹, 然后将其复制到 Axure 安装目 ...
- C#读取Excel,DataTable取值为空的解决办法
连接字符串这么些就行了 string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + opnFileName ...
- Java数据结构——容器总结
4大容器——List.Set.Queue.Map List 1.ArrayList 优点:随机访问元素 缺点:插入和移除元素时较慢 2.LinkedList 优点:插入和删除元素 缺点:随机访问方面相 ...
- Java 命令行运行参数大全
Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOME"bin"java –option 来启动,-option为虚拟 ...
- 第4章 jQuery的事件和动画(二)
二. jQuery中的动画 动画在前面几章案例中是回避不了的问题.此处结合一些简便的写法稍作系统的分析. 1. show()和hide()(1)介绍——不用过多的介绍了jQuery最基本的方法.本质是 ...
- CentOS 7学习手册
CentOS 7与之前版本有较大变动,查阅资料,整理得到如下手册(未完~). 一.安装 1.使用哪种方式安装 (1).虚拟机安装,推荐:VM,功能齐全,强大(Virtual Box也可以). (2). ...
- nuget包管理器控制台下的powershell脚本介绍
http://personball.com/powershell/2016/07/15/powershell-tips 定制自己的powershell,减少重复工作 安装一系列自己的常用nuget包 ...