今天按wiki上的教程在虛擬機上安裝好了archlinux,但是它安裝的原理誰能給我解釋下?
02-02
之前一直在倒騰一些發行版(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 都一樣的么?
推薦閱讀: