@怪盜kidou 原創(chuàng)文章虱而,轉(zhuǎn)載需在明顯位置保留原文鏈接
基本情況:
我電腦上裝了deepin+win10雙系統(tǒng),平時(shí)使用Deepin谁榜,偶爾手癢想玩兩把跑跑卡丁車的時(shí)候就會切到Win10,所以為了兩個(gè)系統(tǒng)共享方便叉寂,就分一個(gè)FAT32的分區(qū),用EFI什么的也更方便一點(diǎn)女揭,所以音樂文件也放在該分區(qū)下,前不久也重裝了Deepin 15.1.1(吐槽一下:有點(diǎn)失望栏饮,桌面上的內(nèi)容不顯示)吧兔,所以也就沒有及時(shí)配置自動(dòng)掛載,今天配置的時(shí)候直接搬了上面的ext4分區(qū)的參數(shù)袍嬉,結(jié)果就起不來了境蔼。
不過這次文章所介紹的核心原理很簡單:把/etc/fstab改正確就行了,系統(tǒng)都起不來怎么改?繼續(xù)往下看伺通。
方案一:有root賬號的情況
有root賬號這個(gè)比較好辦箍土,啟動(dòng)不了的話,直接就會讓你輸入root密碼罐监,登錄成功后就進(jìn)入字符模式吴藻,可以直接修改/etc/fstab
,然后reboot即可笑诅。
當(dāng)然如果你的Linux沒有這個(gè)提示也可以手動(dòng)進(jìn)入恢復(fù)模式(Recovery Mode)疮鲫。
一般Linux啟動(dòng)菜單最少有兩個(gè)選項(xiàng):一個(gè)正常啟動(dòng)吆你,另一個(gè)是高級模式(Advance)。而高級模式中的包含了恢復(fù)模式(基本上是放在最后俊犯,畢竟很少使用)妇多,其它的菜單都是備份內(nèi)核升級前的啟動(dòng)菜單。
例如我的啟動(dòng)菜單:
Deepin 15.1.1 GNU/Linux
Advanced options for Deepin 15.1.1 GNU/Linux
|---- Deepin 15.1.1 GNU/Linux, with Linux 4.2.0-1-amd64
|---- Deepin 15.1.1 GNU/Linux, with Linux 4.2.0-1-amd64 (recovery mode)
|---- 假裝是其它內(nèi)核的選項(xiàng)
Windows Boot Manager
System setup
所以我們?nèi)芜x帶有recovery mode
字樣的選項(xiàng)會出現(xiàn)這樣的一個(gè)界面
可以看到最上面提示filesystem state:read-only
燕侠,即文件系統(tǒng)是只讀的者祖,不過這都不是問題,有了root賬號绢彤,一切都是浮云七问。
選擇 root,會提示輸入root密碼茫舶,登錄后先輸入
mount -o remount,rw / # 將根文件系統(tǒng)重新掛載為讀寫狀態(tài)
不然是無法修改文件的械巡,如果沒有任何提示信息的話用mount
查看根目錄的狀態(tài)應(yīng)該已經(jīng)是讀寫狀態(tài)
mount | grep " / " # 查看根文件系統(tǒng)是否變
這時(shí)就可以修改 /etc/fstab 文件啦。
方案二:沒有root賬號(今日采用)
我的情況就比較特殊,平時(shí)沒有開root賬號讥耗,都是用sudo
,要切換到root賬號時(shí)也是直接sudo su
就行了有勾,所以啟動(dòng)時(shí)和恢復(fù)模式也提示root賬號已被鎖,所以方案一行不通古程。本方案的主要內(nèi)容就是:如何弄出一個(gè)root賬號
我們知道linux將賬號密碼都存在/etc/passwd或/etc/shadow中蔼卡,所以只要不讓kernel掛載我們根文件系統(tǒng)就OK了。
1挣磨、重啟計(jì)算機(jī)雇逞,在Grub啟動(dòng)菜單上按“E”進(jìn)入編輯模式。
2趋急、定位到 linux
開頭的行(grub 1.x為kernel開頭)喝峦,如:
linux /boot/vmlinuz-4.2.0-1-amd64 root=UUID=57c612a5-984b-4b14-bd1d-6c91f528cf9e ro splash quiet
3、刪除其余的參數(shù)呜达,主要是root
參數(shù)谣蠢,如下:
linux /boot/vmlinuz-4.2.0-1-amd64
4、按F10或ctrl+x啟動(dòng)修改后的菜單查近。
注:這里的編輯模式不會修改文件眉踱,如果改錯(cuò)了按ESC
返回,重新走第一步就行了霜威。
當(dāng)你出現(xiàn)下圖時(shí)說明成功繞過系統(tǒng)提供的賬號體系
此時(shí)輸入命令id
驗(yàn)證
需要注意的是此時(shí)kernel使用文件系統(tǒng)為內(nèi)存模擬的磁盤谈喳,所以我們所作的任何操作不會影響我們真正的系統(tǒng),要想修改我們原本系統(tǒng)中的文件必須掛載原系統(tǒng)的根目錄到我們現(xiàn)在使用的系統(tǒng)下戈泼。
mkdir /tmp/root # 創(chuàng)建一個(gè)目錄用于掛載真正系統(tǒng)的根目錄
mount /dev/sda3 /tmp/root # 掛載設(shè)備到我們創(chuàng)建的文件夾下婿禽,我系統(tǒng)的磁盤設(shè)備為sda3,sda1和sda2分別為ESP、MSR
vi /tmp/root/etc/fstab # 注意busybox沒有提供vim,還有文件路徑的變化大猛,不在是/etc/fstab了
修改完保存后直接reboot
就ok了扭倾。
方案二原理:
上面介紹方案二的時(shí)候第2步提到 “定位到 linux
開頭的行”,其實(shí)在linux
命令下面一般還有以initrd
開頭的一行挽绩,如:
linux /boot/vmlinuz root=/dev/sda3
initrd /boot/initrd.img
這里的vmlinuz
就是Linux kernel內(nèi)核膛壹,而initrd.img
實(shí)際上是一個(gè)經(jīng)過gzip或lzma壓縮的cpio歸檔文件,initrd(initial RAM disk,初始化內(nèi)存磁盤) 是最開始使用的根文件系統(tǒng)里面也有/etc唉堪,/bin模聋,/usr,/dev等目錄還包含了一些基本配置唠亚、驅(qū)動(dòng)链方、命令等,等磁盤設(shè)備加載完后灶搜,再將指定的磁盤分區(qū)掛載為根文件系統(tǒng)祟蚀,去執(zhí)行該根文件系統(tǒng)下的初始化操作完成啟動(dòng)(不一定完全準(zhǔn)確共啃,大致流程應(yīng)該是這樣),不然你想想掛載要mount命今暂题,而mount在/bin下移剪,而這時(shí)候還 / 都還沒有,如此循環(huán)薪者。纵苛。
由于沒有加載我們真正的根文件系統(tǒng),所以賬號密碼都沒有言津,但我們可以手動(dòng)掛載攻人,并以達(dá)到修改fstab的目的,是不是有一種PE的感覺呢?只想你想當(dāng)然也可以干點(diǎn)別的悬槽,就看你怎么發(fā)揮了怀吻,不要拿去干壞事喲。
該initrd.img是可以自定義的初婆,網(wǎng)上有很多文章蓬坡,以前做過一個(gè),給root賬號加上密碼磅叛,用來放在U盤里屑咳,這樣別人想使用你的 ramfs也是不行的,只不過系統(tǒng)提供的肯定是沒有的弊琴。
本文完