閱讀587 返回首頁    go 阿裏雲 go 技術社區[雲棲]


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

當Windows係統出現問題的時候,可能需要重裝係統,這個時候我們往往會使用係統盤將係統重新安裝在C盤上,其他盤上的文件都沒有受到重裝係統的影 響,這就是分區的好處之一。同樣,在Linux中也需要分區,但是Linux中對於分區的表示方式與Windows並不一樣。下麵將以我的電腦為例,講述 Liunx的分區方法並且通過講述Linux的啟動過程來了解Linux係統和掛載。(本文章適合初學Linux的同學學習)
1.基本概念
1.1.分區的概念
分區從實質上說就是對硬盤的一種格式化。當我們創建分區時,就已經設置好了硬盤的各項物理參數,指定了硬盤主引導記錄和引導記錄備份的存放位置。而對於文 件係統以及其他操作係統管理硬盤所需要的信息則是通過之後的高級格式化。安裝操作係統和軟件之前,首先需要對硬盤進行分區和格式化,然後才能使用硬盤保存 各種信息。各個分區之間是相對獨立的,你在一個分區上的操作不會影響到另一個分區。
之前我們都會認為C盤就是第一分區,D盤就是第二分區。其實這種看法是不恰當的,C盤,D盤等都是盤符號,是Windows賦予的名稱。在沒有啟動 Windows之前,它們就是一個個分區,而不是具體的盤符。這種盤符的概念,是Windows“內在”的,也就是說就算是硬盤上沒有安裝Windows 係統,硬盤上的分區還是存在的。所以可以這樣說:盤符-是軟件級的概念;分區-是硬件級的概念。
1.2.Linux文件係統的組織方式
Linux文件係統的組織方式稱做文件係統分層標準,即采用層次式的樹狀目錄結構。在此結構的最上層是根目錄“/”,然後在此根目錄下是其他的目錄和子目 錄。Linux和Windows一樣,采用“路徑”來表示文件或目錄在文件係統中所處的層次。路徑由以“/”為分隔符的多個目錄名字符串組成,分成絕對路 徑和相對路徑。Linux中所謂絕對路徑是指由根目錄“/”為起點來表示係統中的某個文件或者目錄的位置的方法;相對路徑則是以當前目錄為起點,表示係統 中某個文件或者目錄在文件係統中的位置的方法。例如(以我電腦為例):在終端輸入pwd(Linux中的顯示當前所在位置的命令),終端顯示了 “/home/csc”,這就是絕對路徑。假如csc文件夾下有一個test文件夾,在終端輸入"cdtest"(或者cd./test),test或 者./test就是相對於csc文件夾的相對路徑,其中“./”表示當前目錄,通常可以省略。下麵介紹一下Linux中部分目錄及其功能說明(以便後麵講 述Linux分區和啟動過程)
/:Linux文件係統的最上層目錄,其他所有目錄均是該目錄的子目錄
/bin:Binary的縮寫,存放用戶的可執行程序,例如cp和mv等;也存放Shell,如bash和csh。不應把該目錄放到一個單獨的分區中,否則LinuxRescue模式無法使用這些命令。
/boot:內核就放在這裏;操作係統啟動時所需的文件,包括vmlinuz和initrd.img等,這些文件若損壞常會導致係統無法正常啟動,因此最好不要做任意改動
/dev:設備文件目錄,例如/dev/sda表示第一塊SCSI設備,/dev/hda表示第一塊IDE設備(後麵會講到Linux中對SCSI和IDE接口硬盤的表示方法)
/home:普通用戶的主目錄或FTP站點目錄,一般存放在/home目錄下。(想要了解Linux中其他默認目錄中的功能,請查看:https://www.xtzj.com/read-htm-tid-69582.html)
1.3.Linux中的掛載點
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。
3.Linux的啟動過程(以我的電腦為例)
係統的啟動是從讀取grub.cfg開始的(grub一個來自GNU項目的多操作係統啟動程序。GRUB是多啟動規範的實現,它允許用戶可以在計算機內同 時擁有多個操作係統,並在計算機啟動時選擇希望運行的操作係統。GRUB可用於選擇操作係統分區上的不同內核,也可用於向這些內核傳遞啟動參數)。 grub.cfg文件的位置是在/boot/grub目錄下。(如果電腦上安裝的是雙係統的話,也可以通過修改grub文件,來改變係統的啟動順序,等待 時間等。)將文件打開後文件中有這麼一段:
menuentry'Ubuntu,Linux2.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那一行顯示了該項目的名稱,insmod是Linux下的指令,是加載模塊的意思。這裏涉及到了分區的命名,下麵就來了解一下:
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]X,X是一個從1開始的正整數;比如/dev/hda1,/dev/hda2.....,如果X的值是1到4,表示硬盤的主分區(包含擴展分區);邏輯分區從是從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)關於SATA和SCSI接口的硬盤的兩種表示方法
方法和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表示,SATA和SCSI接口都是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文件中的(hd0,8)代表的是第一塊硬盤上的第八個分區即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
#號開頭的行是注釋,是說明性的文字,在執行指令的時候並不會執行它。
linux掛載分區的時候將自上而下,順序執行。第一個起作用的行是proc,關於proc的介紹請查看https://www.2cto.com/os/201202/119553.html
首先要將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了。
 
參考文獻:
細說Linux掛載——mount:https://forum.ubuntu.org.cn/viewtopic.php?t=257333
Linuxproc:https://dqw19880428.blog.163.com/blog/static/2051131620093144735924/
Linux硬盤分區細節詳談: https://blog.csdn.net/freexploit/article/details/961330

最後更新:2017-04-03 16:48:37

  上一篇:go 矽穀的見證人:惠普公司(HP)
  下一篇:go 3.4 預讀機製