關於Linux磁盤分區與雙系統


Linux是一個很大的東西,而且稍微按照鳥哥的書做點網絡上的擴展就會有很多很多的東西,常常會使得自己迷失,所以我認為在學習的時候,還是應該有自己的目標,寫出關於目標的博客,不要什么都講,卻什么都不精確。

背景:家里電腦壞了,就重裝系統,既然重裝系統,就順便裝了win7+ubuntu雙系統,既然重裝系統就離不開:

MBR、grub2、硬盤分區、磁盤連接方式與裝置文件名之類的東西。

關於裝雙系統的電腦首先,也是最重要的是:先裝windows系統,再裝linux系統。

Linux下硬件與系統文件的映射關系:

在Linux系統中,每個硬件都被當做了一個文件來對待。IDE接口(Integrated Drive Electronics)的硬件都被命名為/dev/sd[a-p]:

root@ssozh-Inspiron-530:/dev# ls sd* -al
brw-rw---- 1 root disk 8, 0 6月  12 07:34 sda
brw-rw---- 1 root disk 8, 1 6月  12 07:34 sda1
brw-rw---- 1 root disk 8, 2 6月  12 07:34 sda2
brw-rw---- 1 root disk 8, 5 6月  12 07:34 sda5
brw-rw---- 1 root disk 8, 6 6月  12 07:34 sda6

注:IDE接口是把“硬盤控制器”與“盤體”集成在一起的硬盤驅動器。模式包括PIO、DMA。

注:由於SATA/USB/SAS等磁盤接口都是使用SCSI模塊來驅動的,因此這些接口的磁盤裝置文件名都是/dev/sd[a-p]格式。(IDE、SATA、SCSI、FC、SAS簡介與區別)

注:sd*都是塊設備,文件屬性是“b”開頭,在Ubuntu中字體顏色是黃色。黃色字體的還有字符設備。

當我把自己的U盤插入:

root@ssozh-Inspiron-530:/dev# ls sd* -al
brw-rw---- 1 root disk 8,  0 6月  12 07:34 sda
brw-rw---- 1 root disk 8,  1 6月  12 07:34 sda1
brw-rw---- 1 root disk 8,  2 6月  12 07:34 sda2
brw-rw---- 1 root disk 8,  5 6月  12 07:34 sda5
brw-rw---- 1 root disk 8,  6 6月  12 07:34 sda6
brw-rw---- 1 root disk 8, 16 6月  12 13:30 sdb
brw-rw---- 1 root disk 8, 17 6月  12 13:30 sdb1

很明顯,我的U盤是sdb 和sdb1。

另外,其他硬件在Linux下的文件名:

/dev/vd[a-p]    用於虛擬機內

/dev/fd[0-7]     fd:file description文件描述符,在/dev中描述軟盤驅動器

/dev/lp[0-2]     25針打印機(我的電腦上沒有打印機,無法實)

/dev/input/mice 和/dev/psaux   鼠標(鳥哥書上是/dev/input/mouse[0-15])

root@ssozh-Inspiron-530:/dev# ll /dev/input/mice
crw-rw---- 1 root input 13, 63 6月  12 07:34 /dev/input/mice
注:其他關於設備文件/dev/*詳解、查詢(包括字符設備和塊設備區別)

 

雙系統與磁盤分區

MSDOS(MBR)與GPT磁盤分區表(partition table)

Windows的MBR(master boot record主引導記錄)放在第一個扇區。

這個扇區通常大小為512Bytes,包括兩個數據:

MBR:可以安裝開機管理程序的地方,有446bytes.

分區表(partition table):記錄整個硬盤分區的狀態,有64bytes。

由於分區表所在的區塊只有64bytes容量,因此最多僅能有四組記錄區(每個16bytes),每組記錄區記錄了該區段的起始和結束的磁柱號碼。而所謂的分區只是對分區表進行了分區,分區槽的最小單位是磁柱。由於第一個扇區所在的分區表只能記錄四個數據,所以如果想多分區,我們可以利用額外的扇區來記錄更多的分區信息。

具體而言,sda1 sda2 sda3 sda4這前四個號碼都是保留給Primary或extended用的。(這個也叫主分區,放在MBR)

而延伸分區持續切割出來的分區槽叫做邏輯分區,用sda5 sda6....表示。

 

說這么多有什么用呢?

1、放置問題:假設你已經安裝了win7的CDEF盤,作為四個主分區,然后企圖把Linux放在F盤中,這個時候Linux系統是win7系統中主分區的一部分(即Linux是win7的一個硬盤了),這樣是沒有辦法使用雙系統的,因為MBR中只有一個win7和4個主分區。正確的做法是,留出至少一個主分區給Linux(就是刪除一個添加卷)把空閑的磁盤裝入Linux系統,並把MBR寫入。

2、順序問題:對於第一磁盤來說,先安裝win7系統,然后給他分主分區(C,D,E盤)。那么Linux就只有一個分區了,這個時候這個分區應該是extended。從而構成P+P+P+E的形式,E=Linux的全部分區。但是如果你把“/”這個更目錄填入了主分區則直接變成了p+p+p+p的形式,那么即使剩下了磁盤容量,也無法再分區,這些剩余容量會被浪費。所以正確的分發,是先給/home /boot進行邏輯分區,把剩下的這個分區變成extended,最后再進行“/”更目錄分區。

 

 

MBR的局限性:

1、操作系統無法抓取到2.2T以上的磁盤容量;2、MBR僅有一個區塊,若被破壞后,經常無法或難以恢復;3、MBR內只能存放446bytes,無法容納較多程序代碼。

因此引入了GPT(GUID partition table)

過去一個扇區大小是512bytes,現在已經有4K,為了兼容以前的磁盤,因此在扇區的定義上面,大多會使用邏輯區塊地址(logical block address,LBA)來處理。GPT將所有區塊以此LBA(512bytes)來規划,從第一個LBA0到LBA33,來記錄分區信息。整個磁盤的后33個LBA也拿來做備份!詳細結構如下:

LBA0(MBR相容塊),LBA1(GPT表頭記錄,記錄分區表本身大小和位置,且放置CRC32驗證碼)LBA2-33(實際記錄分區信息處)

 

 

 

具體開機情況:開機-->BIOS(找到可以開機的硬盤)-->MBR(內含開機管理程序,load核心文件)

【-->開機管理程序(boot loader)-->核心文件】

注:如果是GPT格式的話,BIOS是可以從LBA0讀取開機管理程序,但是如果開機管理程序不懂GPT的話,就無法開機(如XP系統)

 

boot loader:1、提供選單,用戶可以選擇不同的開機項目,這也是多重引導的重要功能;

       2、載入核心文件,直接指向可開機的程序區段來開始操作系統;

         3、轉交其他loader,將開機管理功能轉交給其他Loader負責(重要)。

 

每個分區槽都有自己的啟動扇區(boot sector);圖中的系統槽為第一及第二分區槽,實際可開機的核心文件是放置到各分區槽內的;loader只會認識自己的系統槽內的可開機核心文件以及其他loader;Loader可直接指向或者是間接將管理權轉給另外一個管理程序。

 

之所以先安裝Windows再安裝Linux是因為Linux可以將開機管理程序安裝在MBR或者其他分區槽的啟動扇區(boot sector)且Linux可以手動選單,即 你可以在Linux的boot Loader里面加入Windows開機選項。但是Windows會在安裝的時候直接覆蓋掉MBR以及自己所在分區槽的啟動扇區,你沒有選擇的機會。

即后裝的系統覆蓋前面的MBR,而后裝的linux在MBR中提供了Windows開機選項,但是Windows則不會提供,所以要先裝Windows。

而Linux在MBR中的boot Loader是需要回到/boot目錄下的grub讀取配置文件來找到Windows。

所以對雙系統來講,如果刪除了(格式化了)Linux從而導致無法直接進入Windows(其實你可以從BIOS進入或者大白菜PE進入),你需要再次進入Windows系統病使用MBRfix重建mbr。

 

2018.10.24更新:

現在的windows系統可以安裝Ubuntu了,大概有時候不需要在安裝雙系統了,至少是不需要安裝虛擬機了,具體的請自行百度bash ubuntu for windows。

我們想說的是,這個Ubuntu系統下,很容易找到你的Windows下的硬盤,更目錄還是更目錄,電腦的c d e等等盤,顯然在/mnt/下面

最后,在安裝軟件的時候,一定要換個好源。至少得是你對應的Ubuntu版本,不要隨便找,不然依賴關系常常出現問題,如:

ssozh@DESKTOP-6JARN2S:/etc/apt$ sudo apt-get install g++ 
>>Reading package lists... Done
>>Building dependency tree
>>Reading state information... Done
>>Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created or been moved out of Incoming. >>The following information may help to resolve the situation: The following packages have unmet dependencies: >>g++ : Depends: g++-5 (>= 5.3.1-3~) but it is not going to be installed >>E: Unable to correct problems, you have held broken packages.

  

這里我推薦的源是:

deb https://mirrors.ustc.edu.cn/ubuntu/ bionic main restricted universe multiverse deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic main restricted universe multiverse deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-security main restricted universe multiverse deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-security main restricted universe multiverse deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse 
鏈接:https://www.jianshu.com/p/97c35d569aa3
來源:簡書


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM