1. 程式人生 > >Linux分割槽和掛載(mount命令的學習)

Linux分割槽和掛載(mount命令的學習)

Windows系統出現問題的時候,可能需要重灌系統,這個時候我們往往會使用系統盤將系統重新安裝在C盤上,其他盤上的檔案都沒有受到重灌系統的影響,這就是分割槽的好處之一。同樣,在Linux中也需要分割槽,但是Linux中對於分割槽的表示方式與Windows並不一樣。下面將以我的電腦為例,講述Liunx的分割槽方法並且通過講述Linux的啟動過程來了解Linux系統和掛載。(本文章適合初學Linux的同學學習)

1.基本概念

1.1.分割槽的概念

分割槽從實質上說就是對硬碟的一種格式化。當我們建立分割槽時,就已經設定好了硬碟的各項物理引數,指定了硬碟主引導記錄和引導記錄備份的存放位置。而對於檔案系統以及其他作業系統管理硬碟所需要的資訊則是通過之後的高階格式化。安裝作業系統和軟體之前,首先需要對硬碟進行分割槽和格式化,然後才能使用硬碟儲存各種資訊。各個分割槽之間是相對獨立的,你在一個分割槽上的操作不會影響到另一個分割槽。

之前我們都會認為C盤就是第一分割槽,D盤就是第二分割槽。其實這種看法是不恰當的,C盤,D盤等都是碟符號,是Windows賦予的名稱。在沒有啟動Windows之前,它們就是一個個分割槽,而不是具體的碟符。這種碟符的概念,是Windows“內在”的,也就是說就算是硬碟上沒有安裝Windows系統,硬碟上的分割槽還是存在的。所以可以這樣說:碟符-是軟體級的概念;分割槽-是硬體級的概念。

1.2Linux檔案系統的組織方式

Linux檔案系統的組織方式稱做檔案系統分層標準,即採用層次式的樹狀目錄結構。在此結構的最上層是根目錄“/”,然後在此根目錄下是其他的目錄和子目錄。LinuxWindows一樣,採用“路徑”來表示檔案或目錄在檔案系統中所處的層次。路徑由以“/”

為分隔符的多個目錄名字串組成,分成絕對路徑和相對路徑。Linux中所謂絕對路徑是指由根目錄“/”為起點來表示系統中的某個檔案或者目錄的位置的方法;相對路徑則是以當前目錄為起點,表示系統中某個檔案或者目錄在檔案系統中的位置的方法。例如(以我電腦為例):在終端輸入pwdLinux中的顯示當前所在位置的命令),終端顯示了“/home/csc”,這就是絕對路徑。假如csc資料夾下有一個test資料夾,在終端輸入"cdtest"(或者cd./test),test或者./test就是相對於csc資料夾的相對路徑,其中“./”表示當前目錄,通常可以省略。下面介紹一下Linux中部分目錄及其功能說明(以便後面講述Linux
分割槽和啟動過程)

/Linux檔案系統的最上層目錄,其他所有目錄均是該目錄的子目錄

/binBinary的縮寫,存放使用者的可執行程式,例如cpmv等;也存放Shell,如bashcsh。不應把該目錄放到一個單獨的分割槽中,否則LinuxRescue模式無法使用這些命令。

/boot:核心就放在這裡;作業系統啟動時所需的檔案,包括vmlinuzinitrd.img等,這些檔案若損壞常會導致系統無法正常啟動,因此最好不要做任意改動

/dev:裝置檔案目錄,例如/dev/sda表示第一塊SCSI裝置,/dev/hda表示第一塊IDE裝置(後面會講到Linux中對SCSIIDE介面硬碟的表示方法)

/home:普通使用者的主目錄或FTP站點目錄,一般存放在/home目錄下。(想要了解Linux中其他預設目錄中的功能,請檢視:http://www.xtzj.com/read-htm-tid-69582.html

1.3Linux中的掛載點

Windows系統下的分割槽很明瞭,一個分割槽就是一個碟符。如果有可以相容的檔案系統,系統也可以讀寫那個分割槽。如果是不相容的檔案系統,Windows就會忽略這個分割槽。

Linux就是把所有的一切都放到一顆“大樹”下。如果你有另外的分割槽或者硬碟,它們就會“掛載”到枝幹的子目錄中,例如/media或者/mnt目錄,這個子目錄就是所謂的掛載點,你可以將分割槽掛載到任意的目錄中。

2.分割槽的建議

分割槽關係到一個系統的安全性和健壯性,當系統出現問題的時候,我們應該以最小的改動來完成系統的修復,這樣就能減少不必要的損失。

在安裝Linux系統時候,我將硬碟分為四個分割槽:第一個分割槽掛載在“/”目錄下,第二個分割槽掛載在“/boot”,第三個分割槽掛載在“/home”下,第四個分割槽是交換分割槽(Swap分割槽)

理由:

(1)一個根分割槽。根分割槽是掛載在“/”目錄上的。用來存放系統檔案。

(2)“/home”分割槽:這是使用者的home目錄所在地;它的大小取決於你的Linux系統有多少使用者,以及這些使用者將存放多少資料。當你係統受損需要重新安裝的時候,不會影響到“/home”分割槽下的檔案。

(3)“/boot”分割槽:包含了作業系統的核心和在啟動系統過程中所要用到的檔案。獨立掛載/boot的好處是可以讓多個Linux共享一個/boot。“/boot”目錄的大小通常都很小,20MB左右。可以根據自己的硬碟空間分配一塊給/boot分割槽,但是不要太大,否則是種浪費。

(4)一個交換(swap)分割槽。交換分割槽用來支援虛擬記憶體。如果你的計算機記憶體小於16MB,就必須建立交換分割槽。即使你有更多的記憶體,仍然推薦使用交換分割槽。實體記憶體小於或等於512MB,建議分配實際實體記憶體容量2倍大小的swap;實體記憶體大於512MB,建議分配與實體記憶體等容量的swap

3Linux的啟動過程(以我的電腦為例)

系統的啟動是從讀取grub.cfg開始的(grub一個來自GNU專案的多作業系統啟動程式。GRUB是多啟動規範的實現,它允許使用者可以在計算機內同時擁有多個作業系統,並在計算機啟動時選擇希望執行的作業系統。GRUB可用於選擇作業系統分割槽上的不同核心,也可用於向這些核心傳遞啟動引數)grub.cfg檔案的位置是在/boot/grub目錄下。(如果電腦上安裝的是雙系統的話,也可以通過修改grub檔案,來改變系統的啟動順序,等待時間等。)將檔案開啟後文件中有這麼一段:

menuentry'UbuntuLinux2.6.32-33-generic' --class ubuntu --class gnu-linux --class gnu--class os {

recordfail

insmodext2

setroot='(hd0,8)'

search--no-floppy --fs-uuid --set 089b3e37-bf9b-4811-94f8-b2f73fc313f6

linux /vmlinuz-2.6.32-33-genericroot=UUID=abdb3fa2-45cd-447d-8cc5-83cf326195bd ro quiet splash

initrd /initrd.img-2.6.32-33-generic

}

這是一個標準的ubuntu引導選單,menuentry那一行顯示了該專案的名稱,insmodLinux下的指令,是載入模組的意思。這裡涉及到了分割槽的命名,下面就來了解一下:

Linux系統中儲存裝置的兩種表示方法

(1)對於IDE介面的硬碟的兩種表示方法

IDE介面中的整塊硬碟在Linux系統中表示為/dev/hd[a-z],比如/dev/hda/dev/hdb... ... 以此類推。另一種表示方法是hd[0-n],其中n是一個正整數,比如hd0,hd1,hd2... hdn ;如果機器中只有一塊硬碟,無論(fdisk-l命令可檢視硬碟及硬碟上的分割槽情況)列出的是/dev/hda還是/dev/hdb,都是hd0;如果機器中存在兩個或兩個以上的硬碟,第一個硬碟/dev/hda另一種方法表示為hd0,第二個硬碟/dev/hdb,另一種表示是hd1

(2)IDE介面硬碟分割槽的兩種表示方法

硬碟分割槽的第一種表示方法/dev/hd[a-z]XX是一個從1開始的正整數;比如/dev/hda1/dev/hda2.....,如果X的值是14,表示硬碟的主分割槽(包含擴充套件分割槽);邏輯分割槽從是從5開始的,比如/dev/hda5肯定是邏輯分割槽。

硬碟分割槽的第二種表示方法(hd[0-n],y),前面已經說過了整塊硬碟也有兩種表示方法,一種是/dev/hd[a-z]的,另一種方法是hd[0-n];一個硬碟分割槽首先要確認在哪個硬碟,然後再確認它所在的位置;所以我們要知道一個硬碟分割槽,除了知道/dev/hd[a-z]以外,還要知道他在哪個位置,確認了分割槽在/dev/hd[a-z]後,還要通過X來確認具體位置;y的值是/dev/hd[a-z]X中的X-1

(3)關於SATASCSI介面的硬碟的兩種表示方法

方法和IDE介面的硬碟相同,只是把hd換成sd

下面通過例項來認識一下:在終端下輸入fdisk-l命令(要在超級使用者下檢視):

Disk/dev/sda: 500.1 GB, 500107862016 bytes

255heads, 63 sectors/track, 60801 cylinders

Units= cylinders of 16065 * 512 = 8225280 bytes

Sectorsize (logical/physical): 512 bytes / 512 bytes

I/Osize (minimum/optimal): 512 bytes / 512 bytes

Diskidentifier: 0x48000000

DeviceBoot Start End Blocks Id System

/dev/sda1 * 1 13054 104856223+ 7 HPFS/NTFS

/dev/sda2 13055 60802 383529250+ f W95 Ext'd (LBA)

/dev/sda5 13055 32635 157284351 7 HPFS/NTFS

/dev/sda6 32636 52216 157284351 7 HPFS/NTFS

/dev/sda7 55329 55578 1998848 82 Linux swap / Solaris

/dev/sda8 55578 55640 498688 83 Linux

/dev/sda9 55640 60802 41459712 83 Linux

/dev/sda10 52217 55328 24996864 83 Linux

檔案中的第一行:Disk/dev/sda: 500.1 GB, 500107862016 bytes,這個就是表示機器中只有一個硬碟裝置/dev/sda,大小為500G;下面的就是硬碟的分割槽,每個分割槽都有詳細的資訊。

講到這裡,我們都會有點奇怪,既然上面說了IDE介面是hd表示,SATASCSI介面都是sd表示,那為什麼grub檔案有一行“setroot='(hd0,8)'”程式碼呢?不應該是“sd”嗎?通過在網上查詢的相關資料,對於grub檔案來說,硬碟都是用hd表示的,磁碟號是從0開始計算的,分割槽號是則是從1開始計算的(grub2是從1開始計算的,grub1是從0開始計算的),而對於Linux核心來說,IDE硬碟是hd表示的,SATA硬碟是用sd表示的,磁碟序號從a開始計算的,分割槽號是從1開始計算的。我電腦中的Linux系統是Ubuntu10.04LTS版本,grub檔案是grub2版本。所以grub檔案中的(hd08)代表的是第一塊硬碟上的第八個分割槽即sda8

繼續講解上面的grub.cfg檔案,search指令是尋找核心的意思,這就真正進入了Linux系統的引導過程,核心的存放位置是在/boot目錄下。下面一行中的linux是一個指令,它告訴grub程式使用後面給出的核心,於是這個名為“vmlinuz-2.6.32-33-generic”的核心就被載入記憶體,並讀取“root=UUID=abdb3fa2-45cd-447d-8cc5-83cf326195bd”這個分割槽的一些必要的檔案。上段程式碼中的最後一行的命令的意思是:用名為“/initrd.img-2.6.32-33-generic”的檔案先在記憶體中構造一個“虛擬”的根檔案系統,以便於核心檢測完硬體資訊後載入必需的模組等等。grub的工作到此結束,下面將由Linux核心接管電腦的控制權,開始初始化階段。到目前為止還沒有掛載根分割槽。然後Linux系統會讀取一個名為fstab的檔案,並按照其中的指令逐行的執行,下面來看一下fstab檔案(/etc/fstab)。以下是我的電腦中的fstab檔案:

#/etc/fstab: static file system information.

#

#Use 'blkid -o value -s UUID' to print the universally uniqueidentifier

#for a device; this may be used with UUID= as a more robust way toname

#devices that works even if disks are added and removed. See fstab(5).

#

#<file system> <mount point> <type> <options> <dump> <pass>

proc /proc proc nodev,noexec,nosuid 0 0

#/ was on /dev/sda10 during installation

UUID=abdb3fa2-45cd-447d-8cc5-83cf326195bd/ ext4 errors=remount-ro 0 1

#/boot was on /dev/sda8 during installation

UUID=089b3e37-bf9b-4811-94f8-b2f73fc313f6/boot ext4 defaults 0 2

#/home was on /dev/sda9 during installation

UUID=11ec48a8-5ca9-4e39-9bff-fd56b811d58e/home ext4 defaults 0 2

#swap was on /dev/sda7 during installation

UUID=2c80ec4a-769c-40c5-8d87-39a2332661cfnone swap sw 0 0

#號開頭的行是註釋,是說明性的文字,在執行指令的時候並不會執行它。

首先要將sda10掛載到”/”下,這就是linux最先被掛載的根分割槽;然後繼續把sda8掛載到“/boot”sda9掛載到“/home”下,sda7“掛載”到交換分割槽,這個交換分割槽有點特殊,因為他並沒有被“附屬”於/,而是獨立使用的。

到此為止,Linux中系統用到的分割槽都已經掛載完畢。可以使用系統了。

4.手動掛載分割槽

有人會問,當我需要使用Windows下的分割槽時怎麼辦?能不能在Linux下掛載Windows分割槽呢?答案是肯定的,如果你使用的是桌面版的Ubuntu,並且是雙系統,那麼點選Linux中的“位置”->"計算機",裡面就列出了Windows中的分割槽,點選右鍵,選擇“掛載”就可以了,預設是掛載在media目錄下,我們可以通過命令設定想要掛載的分割槽及其要掛在到的位置,比如,我想要掛載/dev/sda5分割槽,其檔案系統格式是NTFS,把它掛載在/home/csc/music目錄下。具體命令如下:

mount/dev/sda5 /home/csc/music

cd/home/csc/music

ls

執行上述命令,可以在music目錄下檢視sda5分割槽中的檔案了。

解除安裝的命令也很簡單,執行命令:umount/dev/sda(或者/home/csc/music)就OK了。

參考文獻: