今天按wiki上的教程在虛擬機上安裝好了archlinux,但是它安裝的原理誰能給我解釋下?

之前一直在倒騰一些發行版(centos,ubuntu),然後在VMware上裝的archlinux,一開始分區還能理解,後來分好區將根目錄掛載到/mnt就不理解了,再後來chroot到/mnt去設置hostname,修改root密碼,安裝配置grub,最後卸載/mnt並重啟就能進系統了,有點一頭霧水的感覺。。。。為什麼要掛載到/mnt,為什麼卸載後重啟就能進系統了。。。


安裝一個操作系統,簡單的說主要就要干兩件事,一是把操作系統的文件弄到硬碟上,二是安裝引導程序。其它一切步驟都是為這兩個主要目的服務的。

掛載/mnt後的操作,首先是把操作系統相應的文件從網上down下來,當然網上的系統文件是通用的,你還需要根據自己機器的情況修改一下,所以要chroot進去,chroot的目的是讓剛才down下那個系統成為主目錄,然後好方便修改配置文件和更新軟體包。這些做完後,安裝一個引導程序(grub)就ok了,再一重啟系統就已經可以自己從硬碟引導了。

其它的linux比如ubuntu,安裝時基本也類似,只不過用圖形的嚮導界面把這些操作給隱藏了而已。


這個問題比較麻煩啊= =既然題主能明白分區前面的過程,那我就從掛載開始說吧

分區完成後此時的硬碟和正在使用的系統有啥關係呢?答案是沒有直接關係,此時的硬碟對於系統來說就像我們隔著老遠看見個箱子,雖然可以看到但是沒法從里拿東西也沒法從往裡面放東西(這個比喻似乎無法解釋分區的過程= =但是我是在說掛載啊喂)。為了能夠對這個箱子進行操作,我們需要走到箱子跟前,這個操作就是掛載。掛載之後,通過掛載點系統和磁碟就建立了聯繫,此時通過這個掛載點我們就可以操作磁碟了。

之後我們就會在這個掛載點上安裝基本系統,這樣不就到硬碟上啦?

再說說chroot。

一開始我們使用liveCD啟動,使用的實際是liveCD的系統,這個系統是放在你的ISO介質中的,一般對這個系統的更改都不會寫入到ISO介質中,也就是說它是只讀的。想像你要安裝vim,你在liveCD中打pacman -S vim只會在liveCD中安裝(沒試過干這事,但估計是安裝在內存中了),這樣一重啟剛才的事情就白乾了,也無法安裝到我們指定的分區。因此我們需要想法子運行硬碟上的系統(注意,此時硬碟上已經有了基本系統,否則切過去也沒用),這時就需要chroot了。

chroot,按manual的說法是以特定根目錄運行命令或shell,你可以簡單的理解為切換到另一個系統。安裝完基本系統後,我們的磁碟上就有一個不完整的系統(雖然有一些工具,但是卻缺少一些必要的東西導致無法直接啟動),此時我們從liveCD且過去就是跳過了那個不完整系統無法進行的部分。接下在我們就會在這個不完成的系統里安裝各種軟體把它修補完整(比如你說的改root密碼安grub等等)。注意,此時你是在chroot環境下的,而你的chroot是切換到了你掛載的硬碟下的,所以你的操作是可以寫入到硬碟的,就像你進入了原先隔著老遠看見的大箱子在裡面搞建設一樣,即使將來出來了你建設的東西還在。就這樣,當你卸載再重啟之後,之前安裝的東西還在裡面可以讓你使用,這樣不就是成功安裝了嗎?


根目錄是你的硬碟對吧

你在安裝過程中所在的bash是啟動盤iso上的bash,你要將系統安裝到硬碟上,所以需要一個路徑把文件下載進去,這個時候你把根掛到/mnt下,就可以把文件下載進去了。

- 而為什麼是/mnt,只是習慣,你要掛成/mynewarch 這樣也是可以的,但要先建目錄就是了。

chroot,就是從iso的bash 切換到你的硬碟上,這個時候的一切設置都是針對你硬碟上的新系統做的設置,包括安裝的grub是為新系統裝的引導。

系統裝好了,引導裝好了開機就能進入系統了。所以關電腦重啟就進系統了。


為啥覺得無從下指呢……不掛載本地硬碟,怎麼寫目標系統的文件呢;內核裝了,grub配了,為啥就不能重啟進系統呢……

別折騰了,先把Linux啟動過程學了吧……

https://wiki.archlinux.org/index.php/Boot_process


把所有文件系統掛載到/mnt以後,你記不記得跑了個pacstrap命令?這個命令後面跟的base和base-devel就是「魔法」。pacstrap收到base和base-devel以後會去官方源尋找這兩個「軟體組」,對他們都是一組軟體。這裡面不僅僅包括了常用軟體,如bash,vi等,還包括了內核,你有沒有看見它下載了一個叫「linux」的軟體包?這就是內核了。pacstrap會把這些軟體包一個個安放到自己正確的位置,linux內核的正確位置是在/mnt/boot(也就是你掛載的文件系統,而/mnt是由-i參數傳入的,也不一定是mnt,只不過默認是這樣)。之後pacstrap功成身退,你通過chroot把/mnt當成根目錄。現在,之前安裝的軟體包就派上用場了,你可以用它們安裝grub,而grub可以在硬碟上寫入引導信息,並在/boot(此時根目錄已經是mnt了)裡面寫入引導程序。這樣,重啟以後,系統自然就能啟動了。

其實系統能啟動的要求就是個內核和引導程序而已,其他的軟體包是為了讓你能夠正常地使用系統。


base僅安裝基礎系統,base-devel安裝基本的開發工具


pacstrap 後面的 參數 base 或 base-devel 都一樣的么?


推薦閱讀:

TAG:Linux | 虛擬機 | ArchLinux |