ubuntu系统之难
声明
笔者最近意外的发现 笔者的个人网站http://tiankonguse.com/ 的很多文章被其它网站转载,但是转载时未声明文章来源或参考自 http://tiankonguse.com/ 网站,因此,笔者添加此条声明。
郑重声明:这篇记录《ubuntu系统之难》转载自 http://tiankonguse.com/ 的这条记录:http://tiankonguse.com/record/record.php?id=677
前言
心中再次想起那句话,既然自己选择了这样做,就要准备好承受做这件事的一切代价。
一次错误的记忆和操作,使得整个boot分区被删除。
一次无意的撤销操作,使得系统依赖错误。
正文
背景
先说说背景吧。
我的电脑安装了三个系统: ubuntu12.04, ubuntu14.04 和 centOS。
其中 ubuntu12.04 是我一直使用的系统,上次装完这个系统使用时长至少一年了吧。
ubuntu14.04 这个系统我把windows删除的时候,使用这个系统覆盖的。
centOS安装也有半年了。
现在我的ubuntu12.04这个系统的磁盘不足了,于是我想删除其它两个系统。
于是我做了一个U盘版的GParted软件。
查看分区情况
sda1 是主分区(以前是windows7,现实在 ubuntu14.04了)。
sda3是我的D盘,ntfs格式。
sda4是一个ext4格式分区(boot分区)。
sda5是一个swap分区。
sda6是一个ext4格式的分区(ubuntu 12.04 分区)
sda7是一个ext4格式的分区(Home分区)。
sda8是一个swap分区。
sda9是一个ext4格式的分区(centOS系统)。
sda10是一个swap分区
第一次误操作
看到这些分区,我想起一件事,当时安装 ubuntu14.04的时候,为了系统的安全,我把boot,home和根分开了,分了三个分区。
于是我就果断的把sda8和sda4删了,后来想交换分区也没算什么用,于是把三个交换分区也删了。对于home分区,我想再看看到底是不是,毕竟里面可能有重要的文件。
于是关机重启,然后出现了久违的 grub rescue 错误。
新的grub错误
第一行有个错误
/grub/i386pc/normal.mod not found.
还好,以前我遇到这个错误好多次,于是找到曾经的记录http://tiankonguse.com/record/record.php?id=194。
但是执行到 insmod /boot/grub/normal.mod 时竟然提示找不到 normal.mod。
还好,我尝试使用 insmod normal 试试,竟然成功了,原来现在的系统,改成 /boot/grub/i386-pc/normal.mod 了。
然后我兴高采烈的执行 normal 命令。
但是执行后,提示
error symbol 'grub_term_highlight_color' not found。
怎么会这样呢?
于是使用360搜索一下。
找到这个论坛(http://forum.ubuntu.org.cn/viewtopic.php?t=458570).
说是系统的一个 bug, 需要使用 live 系统重装 grub2 .
我做了一个ubuntu 系统的U盘。
然后把U盘里的boot复制到我的那个 ubuntu 12.04 系统。
开机后还是 grub rescue, 然后使用上面的方法后竟然进去到U盘系统了。
原来grub还没有更新。
然后更新的时候提示下面错误:
ubuntu@ubuntu:~$ sudo update-grub
/usr/sbin/grub-probe: error: failed to get canonical path of /cow.
ubuntu@ubuntu:~$ sudo grub-install /dev/sda
Path `/boot/grub' is not readable by GRUB on boot. Installation is impossible. Aborting.
然后我在ubuntu的一个论坛上找到一个方法(http://askubuntu.com/questions/197833/recovering-from-grub-rescue-crash)
核心命令时
sudo mount /dev/sdXY /mnt
sudo grub-install --root-directory=/mnt /dev/sdX Where /dev/sdX is the disk where Ubuntu is installed, and /dev/sdXY is the partition on the disk where Ubuntu is installed. In other words, /dev/sdXY contains /boot and so on. Use fdisk -l to verify the Ubuntu installation location.
但是我执行的时候,提示
ubuntu@ubuntu:~$ sudo mount /dev/sda /mnt
mount: /dev/sda already mounted or /mnt busy
在bug论坛看到各种解决方法,大家可以去看看(https://bugs.launchpad.net/ubuntu/+source/grub2/+bug/1289977)。
sudo fdisk -l
And find your Ubuntu partition (should be /dev/sda1 if it is the first partition) sudo mount /dev/sda1 /mnt
sudo mount --bind /sys /mnt/sys
sudo mount --bind /proc /mnt/proc
sudo mount --bind /dev /mnt/dev
sudo chroot /mnt
Now reinstall Grub2 sudo apt-get install --reinstall grub2
blkid 查看各个分区的UUID
此时我突然意识到一个问题,我这是U盘,不是 live 系统,里面的文件自然不全了。
于是我尝试先修复另一个系统,结果可以了。
然后进入那个系统,把boot目录全部拷贝过去。
重启选择这个系统,竟然进入的是新的系统。
手动设置分区
此时我意识到一个问题,我的这个旧的系统有三个分区:根分区, boot 分区, home 分区。
那一定有一个地方来储存这三个分区在那里储存,还真找到了。
执行这个命令
tiankonguse@tiankonguse:~$ sudo vi /etc/fstab
可以看到分区的挂载点
下面的是我修复完的内容
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point> <type> <options> <dump> <pass>
# / was on /dev/sda1 during installation
UUID=65a7fc16-a481-4f77-97b6-59731143f930 / ext4 errors=remount-ro 0 1
# swap was on /dev/sda12 during installation
#UUID=7b08a45e-34f2-4ea2-900e-579c5a3bddca none swap sw 0 0
# swap was on /dev/sda6 during installation
#UUID=99d228d4-f996-4970-ba48-f6950e3a0b69 none swap sw 0 0 # /home was on /dev/sda7 during installation
UUID=aef790b3-32e8-4060-8542-bafeedcbac98 /home ext4 defaults 0 2
关于 UUID 可以使用上面提到的blkid来查询
tiankonguse@tiankonguse:~$ sudo blkid
/dev/sda1: UUID="65a7fc16-a481-4f77-97b6-59731143f930" TYPE="ext4"
/dev/sda5: LABEL="E" UUID="3816A47016A43134" TYPE="ntfs"
/dev/sda6: UUID="aef790b3-32e8-4060-8542-bafeedcbac98" TYPE="ext4"
配置为自己需要的,旧的系统的home目录就挂到新的系统上去了。
按照这个方法,我把旧的系统挂载的/mnt上后,修改 /mnt/etc/fstab的内容,修改对应的项。
然后执行
sudo update-grub2
然后重启竟然好了。
好吧,最起码现在我可以进去 ubuntu12.10 系统了。
新系统的问题
等等,不是ubuntu12.04 系统吗?怎么变成 ubuntu12.10 了。
好吧,背景介绍不完整。
起初是 ubuntu12.04 系统,删除分区之前的那段时间,我使用命令行升级了一下,本以为会升级到 ubuntu14.04 的,谁知只是升级到 ubuntu12.10 了。
那个 grub 新问题也是这个新系统导致的。
进入新系统,第一感觉是好不爽。
分辨率竟然比较大,电脑竟然很卡。
好吧,我再次升级,应该会升级为 ubuntu13.04 吧。
于是我再次执行升级命令。
取消系统升级的问题
网速还是很给力的,需要的文件包很快就下载完了,但是安装的时候好慢好慢,记得我从 ubuntu12.04 升到 ubuntu12.10 用了好几个小时的,现在又中午了,于是我残忍的把那个窗口关闭了。
然后我关闭电脑睡午觉。
一觉醒来,电脑不能进入桌面了,登陆后屏幕一片黑,只有一个鼠标。
然后我使用 ctrl + alt + F1 进入终端,还好可以登陆。悲剧的是我执行了几条清理命令。
sudo apt-get autoremove
sudo apt-get autoclean
再然后就出现了大量依赖的问题,幸好我之前有三篇关于依赖的记录。
源的问题:下列的软件包有不能满足的依赖关系
各种解决方法:软件包没有被完全安装或卸载问题
按照那个方法依次尝试,都是失败。
然后我就尝试手动安装没有的依赖包。
于是先把错误信息导向文件
tiankonguse@tiankonguse:~$ sudo apt-get -f install > error 2>&1
然后找一台电脑,在 packages.ubuntu.com 上搜对应的包,然后存在U盘上。
然后用下面命令安装
sudo dpkg -i *.deb
对于依赖版本不对的,我就在 /var/lib/dpkg/status 把它们的版本修改为合适的值。
最后竟然提示没错了。
然后我升级一下安装了几个文件,终于可以进去桌面了。
回头是岸
实际上这个时候已经是第二天了。
我突然问自己,为什么执着与这个旧的系统,我有一个新的 ubuntu14.04 系统, 而且可以把 home 目录挂过来,我还想要什么呢?
我心里默默的说因为我安装了很多软件。
好吧,于是执行
dpkg --get-selections > installed-software.log
然后进入新的系统,果断的把旧的系统卸载了。
然后恢复备份
sudo dpkg --set-selections < ~/installed-software.log && apt-get dselect-upgrade
然后更新源,发现提示 NO_PUBKEY 。
然后找到对应的方法
简单的说只需要三步,假设key是C2518248EEA14886。
sudo gpg --keyserver keyserver.ubuntu.com --recv C2518248EEA14886 sudo gpg --export --armor C2518248EEA14886 | sudo apt-key add - sudo apt-get update
然后我倒入包的时候,竟然要卸载一些文件,我赶紧看看 installed-software.log ,发现有些是 deinstall , 于是我使用vi的替换替换了
:%s/deinstall/install/
导入的时候还提示
dpkg: warning: package not in database at line 1086: lynx
sudo apt-get install dselect
$ sudo dselect
-> Update
-> Install
ubuntu系统之难的更多相关文章
- 怎样用U盘安装Ubuntu系统/ubuntu系统怎么安装
Linux一直以来都是比较小众的系统,特别是在国内,用户相对Windows来说,更是少,甚至给人一种高端,复杂的印象,不过这些年来,使用 linux的人越来越多了,基本用的都是程序猿,而Ubuntu作 ...
- Win10 + Ubuntu双系统,删除Ubuntu系统
之前在电脑上装了win10 + ubuntu的双系统,偶尔会出问题,所以还是选择将ubuntu系统删掉. 正所谓“请神容易送神难”,安装ubuntu的时候,过程还算顺利,但是在删除Ubuntu的过程中 ...
- 使用U盘安装Ubuntu系统
-----------------------note by shanql-------------------------- 注:在windows下可用EasyBCD安装引导文件来引导Ubuntu( ...
- Ubuntu安装及ubuntu系统使用菜岛教程
Ubuntu是一款广受欢迎的开源Linux发行版,和其他Linux操作系统相比,Ubuntu非常易用,和Windows相容性很好,非常适合Windows用户的迁移,在其八年的成长过程中已经获得了两千多 ...
- Ubuntu系统---C++之Eclipse IDE 编译器安装
Ubuntu系统---C++之Eclipse IDE 编译器安装 Eclipse是一个基于Java的.开放源码的.可扩展的应用开发平台,它为编程人员提供了一流的Java集成开发环境(Integrate ...
- ubuntu系统下如何修改host
Ubuntu系统的Hosts只需修改/etc/hosts文件,在目录中还有一个hosts.conf文件,刚开始还以为只需要修改这个就可以了,结果发现是需要修改hosts.修改完之后要重启网络.具体过程 ...
- 如何查看当前Ubuntu系统的版本
如何查看当前Ubuntu系统的版本 说来也惭愧,用Ubuntu差不多快1个月了,双系统是让朋友安的,只知道自己使用的是什么12版本的,具体怎么看还不知道,下面写一下查看当前Linux系统的版本的方法 ...
- ubuntu系统虚拟机下共享文件夹
一般情况 1.安装: sudo apt-get install open-vm-dkms 2.挂载: sudo mount -t vmhgfs .host:/ /mnt/hgfs 用以上命令安 ...
- 感悟:搞了整整一天,拯救一个Ubuntu系统
最开始,我在windows平台上,准备打开计算机组成原理的实验工程,突然来了一个想法:每次要用windows的时候,都要切换系统(win8以上的系统必须在关闭快速开机的状态下才能正常在Linux平台下 ...
随机推荐
- opencv—读取一张图片并滤波
#include <opencv2\opencv.hpp> #include <iostream> #include <string> using namespac ...
- [LeetCode 题解]: Flatten Binary Tree to Linked List
Given a binary tree, flatten it to a linked list in-place. For example,Given 1 / \ 2 5 / \ \ 3 4 6 T ...
- CLion编译的exe文件无法在windows下正常运行
The program cannot start because libgcc_s_dw2-1.dll is missing from your computer. Try reinstalling ...
- 腾讯云通信UserSig生成.Net实现
腾讯云通信后台生成usersig只有java实现代码.以下是根据java代码转换为net实现,java版GitHub地址:https://github.com/TencentVideoCloudMLV ...
- Ubuntu的中文乱码问题
目标:使系统/服务器支持中文,能够正常显示. 1.首先,安装中文支持包language-pack-zh-hans: $ sudo apt-get install language-pack-zh-ha ...
- “全栈2019”Java第七十六章:静态、非静态内部类访问权限
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- “全栈2019”Java第三十章:数组详解(下篇)
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- Alluxio学习
介绍 Alluxio(之前名为Tachyon)是世界上第一个以内存为中心的虚拟的分布式存储系统.它统一了数据访问的方式,为上层计算框架和底层存储系统构建了桥梁.应用只需要连接Alluxio即可访问存储 ...
- Saiku2.6 保存查询后,重新打开报 Error Loading Query错误。
发现Saiku2.6的查询保存后重新打开就会报如下错误,同等的Schema文件和数据库环境在3.15环境里面打开是一切正常的. 后面对比了一下2.6和3.15的启动环境,发现有些差异的地方. 2.6启 ...
- Mondrian Schema Workbench 概念及常用参数
Schema Schema 定义了一个多维数据库.包含了一个逻辑模型,而这个逻辑模型的目的是为了书写 MDX 语言的查询语句.这个逻辑模型实际上提供了这几个概念: Cubes (立方体).维度( Di ...