ubuntu系統之難

聲明

   筆者最近意外的發現 筆者的我的網站 http://tiankonguse.com/ 的不少文章被其它網站轉載,可是轉載時未聲明文章來源或參考自 http://tiankonguse.com/ 網站,所以,筆者添加此條聲明。php

    鄭重聲明:這篇記錄《ubuntu系統之難》轉載自 http://tiankonguse.com/ 的這條記錄:http://tiankonguse.com/record/record.php?id=677ubuntu

 

前言

 

心中再次想起那句話,既然本身選擇了這樣作,就要準備好承受作這件事的一切代價。windows

一次錯誤的記憶和操做,使得整個boot分區被刪除。安全

一次無心的撤銷操做,使得系統依賴錯誤。ide

 

正文


背景

 

先說說背景吧。網站

個人電腦安裝了三個系統: ubuntu12.04, ubuntu14.04 和 centOS。this

其中 ubuntu12.04 是我一直使用的系統,上次裝完這個系統使用時長至少一年了吧。spa

ubuntu14.04 這個系統我把windows刪除的時候,使用這個系統覆蓋的。.net

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
相關文章
相關標籤/搜索