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平台下 ...
随机推荐
- MongoDB YAML格式的配置文件
根据官网的提示内容,默认的配置文件内容为 systemLog: verbosity: 0 quiet: false # traceAllExceptions: <boolean> sysl ...
- yum使用,使用rpm指令安装rpm,使用dpkg指令安装deb
yum安装时如果报错提示安装失败,缺少库文件,可以使用: yum whatprovides 库名 之后安装提供的程序 yum remove xxx卸载 yum update 更新 解决 Require ...
- TunnelBroker for EdgeRouter 后记
最近入手了UBNT EdgeRouter X, 想着用 IPv6在路由上FQ,经过两天折腾,终于正常使用,留下点标记 供后来同学借鉴. TUNNEL的注册和配置,可以完全按这篇文章来: TunnelB ...
- .net Timer定时执行
System.Timers.Timer可以实现数据库定时更新的功能 Global.asax void Application_Start(object sender, EventArgs e) { / ...
- 转载:RabbitMQ常用命令
RabbitMQ常用命令 RabbitMQ常用命令 rabbitmqctl命令http://www.rabbitmq.com/man/rabbitmqctl.1.man.html# 1). 服务器启动 ...
- Java之static静态代码块
Java之static静态代码块 构造代码块 使用{}包裹的代码区域,这里的代码区域特指位于class{}下面的而不是存在于其他type method(){}这类函数下面的代码区域 public cl ...
- 514. Freedom Trail
In the video game Fallout 4, the quest "Road to Freedom" requires players to reach a metal ...
- “全栈2019”Java第六十六章:抽象类与接口详细对比
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- ASP.NET Core中使用自定义验证属性控制访问权限
在应用中,有时我们需要对访问的客户端进行有效性验证,只有提供有效凭证(AccessToken)的终端应用能访问我们的受控站点(如WebAPI站点),此时我们可以通过验证属性的方法来解决. 一.publ ...
- Python2和Python3共存,pip共存
使用python开发,环境有Python2和 python3 两种,有时候需要两种环境切换使用,下面提供详细教程一份. 1.下载python3和python2 进入python官网,链接https:/ ...