Linux 磁盤、分區、掛載和掛載點、邏輯卷管理 (Logical Volume Manager)等


inux用戶安裝 Linux操作系統 時遇到的一個常見的難以決定的問題就是如何正確地評估各分區大小,以分配合適的硬盤空間。普通的磁盤分區管理方式在邏輯分區划分好之后就無法改變其大小,當一個邏輯分區存放不下某個文件時,這個文件因為受上層文件系統的限制,也不能跨越多個分區來存放,所以也不能同時放到別的磁盤上。而遇到出現某個分區空間耗盡時,解決的方法通常是使用 符號鏈接 ,或者使用調整分區大小的工具,但這只是暫時解決辦法,沒有從根本上解決問題。隨着Linux的邏輯 卷管理 功能的出現,這些問題都迎刃而解,用戶在無需停機的情況下可以方便地調整各個分區大小。

1. 硬盤類型 /dev/sda VS /dev/hda

/dev/sda

    /dev/sda1
    /dev/sda2
    /dev/sda3
而又的安裝時硬盤驅動設備名為
/dev/hda
   /dev/hda1
 
Q:sda和hda有什么區別那?
A: HDA是使用了ide接口的硬盤的名稱.SDA是sata接口的硬盤的名稱.在最新的2.6.19內核里,所有的硬盤都叫SDA了.
硬盤接口分為:
  • ide  (integrated drive electronics)  把盤體和控制器集成在一起
  • sata (serial ATA(advanced technology attachment))
  • scsi (small computer system interface)
  • 光纖通道 fibre channel

其中hda、hdb分別代表第一個IDE、第二個IDE。假如你電腦上插有2個IDE硬盤,就會出現hda、hdb嗎?不一定,因為貌似IDE硬盤默認有兩個部分,Master和Slave,即主分區和擴展分區,而且a、b是根據IDE接口插槽順序來分的。這樣的話,第一IDE插槽主分區為hda,擴展分區為hdb,第二IDE插槽主分區為hdc,擴展分區為hdd。

但是SATA硬盤好像沒有擴展分區,而且Linux識別SATA等類型裝置的順序不是按插槽順序來的,是按照設備被偵測到的順序來定的,比如SATA的第1、5插槽分別插有硬盤,電腦上還插有一個USB,那么啟動Linux的時候,先后偵測到SATA的第1、5插槽的硬盤和USB設備,那么分配的名稱就分別是sda,sdb,sdc。

但貌似,Ubuntu自8.04起,所有硬盤都編號為“sdx”,即不管IDE還是SATA,一律認作SCIS硬盤。

2. 分區

計算機中存放信息的主要的存儲設備就是硬盤,但是硬盤不能直接使用,必須對硬盤進行分割,分割成的一塊一塊的硬盤區域就是磁盤分區。在傳統的磁盤管理中,將一個硬盤分為兩大類分區:主分區和擴展分區。主分區是能夠安裝操作系統,能夠進行計算機啟動的分區,這樣的分區可以直接格式化,然后安裝系統,直接存放文件。

       在一個MBR分區表類型的硬盤中最多只能存在4個主分區。如果一個硬盤上需要超過4個以上的磁盤分塊的話,那么就需要使用擴展分區了。如果使用擴展分區,那么一個物理硬盤上最多只能3個主分區和1個擴展分區。擴展分區不能直接使用,它必須經過第二次分割成為一個一個的邏輯分區,然后才可以使用。一個擴展分區中的邏輯分區可以任意多個。

       磁盤分區后,必須經過格式化才能夠正式使用,格式化后常見的磁盤格式有:FAT(FAT16)、FAT32、NTFS、ext2、ext3等。

那么sda1、sda2又分別代表什么呢?代表分區(Partition),比如

  • P1:/dev/hda1
  • P2:/dev/hda2
  • L1:/dev/hda5
  • L2:/dev/hda6
  • L3:/dev/hda7
  • L4:/dev/hda8
  • L5:/dev/hda9

為什么沒有hda3、4呢?因為P1~4保存給了Primary和Extended分區。一個硬盤的結構如下:

MBR|主分區1|主分區2|主分區3|主分區4(擴展分區)|, 其中擴展分區可以分為: |邏輯分區1|邏輯分區2|……|邏輯分區n|

 所以說上面的P1、2指明系統有兩個主分區,L1~5代表有5個邏輯分區。主分區(包括擴展分區)的總個數不能超過四個;也不能把擴展分區包圍在主分區之間。

參考: http://blog.csdn.net/zollty/article/details/7001950

 fdisk 命令

root@dev:/home/s1# fdisk -l

Disk /dev/sda: 250.1 GB, 250059350016 bytes //這個硬盤有250.1 GB的容量
255 heads, 63 sectors/track, 30401 cylinders, total 488397168 sectors //255個磁頭;63個扇區每磁道,30401個磁柱
Units = sectors of 1 * 512 = 512 bytes //每個 cylinder(磁柱)的容量是512字節
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000d7bf1

存儲容量=磁道(柱面)數×磁頭數×每道扇區數×每扇區字節數 = 30401 * 255 * 63 * 512 = 25396387380 bytes 

Device Boot Start End Blocks Id System //Start (開始)/End (結束):表示的一個分區從X cylinder(磁柱)開始/結束

/dev/sda1 * 2048 484298751 242148352 83 Linux //引導(Boot):表示引導分區,在上面的例子中 hda1 是引導分區
/dev/sda2 484300798 488396799 2048001 5 Extended //Blocks:表示的意思的確是容量的意思,其單位是K
/dev/sda3 484298752 484300797 1023 83 Linux
/dev/sda5 484300800 488396799 2048000 82 Linux swap / Solaris //大小,2048000/1024=2G

奇怪:這里start和end的磁柱怎么遠遠超過30401?

這里有一個主分區sda1,一個擴展分區sda2,sda2包括兩個邏輯分區sda3和sda4.

硬盤總容量=主分區(包括擴展分區)總容量

  • 主分區大小為 242148352 /1024 = 236473 M = 236 G
  • 擴展分區大小為:2014001 / 1024 = 2000M = 2G
  • 磁盤總容量大小為:236 + 2 = 238G

擴展分區容量=邏輯分區總容量

我們估算一個硬盤是否完全被划分,我們只要看 fdisk -l 輸出的內容中的 cylinders(柱體) 上一個分區的End 和 下一個分區的Start是不是一個連續的數字,另外要看一下每個硬盤設備的fdisk -l 的開頭部份,看一下他的 cylinders(柱體)的值。可見上圖中,擴展分區都分完了。

df -h 命令:

注: df 下沒有顯示swap分區

改變Linux分區大小

1. linux根分區容量是不允許改變的,一旦改變,掛載根分區就找不到磁盤首尾位置,導致啟動失敗

2.實在要改變,推薦用gparted-LiveCD進行調整

  一、准備
  1、下載最新版本的gparted鏡像文件:http://sourceforge.net/project/s ... p;package_id=173828
  2、將gparted鏡像文件刻錄成光盤或壓制在U盤上制成LiveUSB
  3、雖說是無損調整,但為了安全起見(萬一停電咋辦?),建議備份重要數據到移動硬盤上
  4、在BIOS中,將啟動順序設置為首先光驅啟動(如果是用LiveUSB,應設為USB-HDD)
  二、調整分區
  1、將光盤放入光驅(如果是用LiveUSB,插上U盤),重啟電腦
  2、進入gparted啟動界面,直接選Defalt settings
  3、第二個界面繼續按回車7 y: O. l3 A" E/ P  N0 L: j
  4、接下來選語言,輸入“26”回車(就是簡體中文,盡管漢化不全)
  5、接着提示將要進入X-Windows界面,回車
  6、進入gparted,就會發現和瘟到死的PQ相似的界面,實際操作也是一樣的,而且也支持瘟到死分區的調整
  7、點擊你要騰出空間的分區,彈出右鍵菜單選擇“Resize/Move”& Z) 

  8、用鼠標托動或數字精確調整要釋放的空間大小,若要釋放在分區頭部拉左側的控制條(輸入第一行數值),若要釋放在分區尾部拉右側的控制條(輸入第三行數值),調整好之后點“更改大小/移動”按鈕。
  9、點擊欲擴大容量的分區,彈出右鍵菜單選擇“Resize/Move”

  10、按照第8步的方法操作,只是現在變成擴大分區容量而已
  11、點擊“Edit”菜單,選擇“Apply All Operations”3
  12、再次確認要調整分區容量后,gparted開始調整分區,完成后點“Close”按鈕
  13、點“gparted”菜單,選“Quit”關閉gparted窗口,再雙擊左上角的“Exit”按鈕退出gparted系統
  14、在彈出的窗口中選“Reboot”重啟電腦,退出時系統會提示你取出光盤
  三、可能存在的問題
  可能會發生swap分區丟失的情況,可在終端中用“free -m”命令查看swap分區是否激活(是否顯示容量),如果未激活,可用“sudo mkswap /dev/sdaX”命令(X為swap分區的編號)進行激活,並將激活所得的UUID碼替換掉“/etc/fstab”文件(需要管理員權限)中原來 swap分區的UUID編碼,重啟后即可自動激活掛載
  具體操作方法,請進Ubuntu官方論壇中查找,有教程帖8 z. \0 s8 }- M& c
  警告:對swap分區的激活操作及對fstab文件的修改應謹慎,必需仔細核對修改的值

3. 掛載和掛載點

一個掛載點就是一個文件夾,將分區掛載到一個掛載點,掛載點就成了分區的入口。沒有掛載分區的掛載點將使用根目錄的空間,沒有掛載到掛載點的分區是無法訪問的,如上邊第四個邏輯分區。

例如,如果分區 /dev/hda5 被 掛載在 /usr 上,這意味着所有在 /usr 之下的文件和目錄在物理意義上位於 /dev/hda5 上。因此文件 /usr/share/doc/FAQ/txt/Linux-FAQ 被儲存在 /dev/hda5上,而文件 /etc/X11/gdm/Sessions/Gnome 卻不是。

   繼續以上的例子,/usr 之下的一個或多個目錄還有可能是其它分區的掛載點。例如,某個分區(假設為,/dev/hda7)可以被掛載到 /usr/local 下,這意味着 /usr/local/man/whatis 將位於 /dev/hda7 上而不是 /dev/hda5 上。

linux系統中每個分區都是一個文件系統,都有自己的目錄層次結構。linux會將這些分屬不同分區的、單獨的文件系統按一定的方式形成一個系統的總的目錄層次結構。將一個文件系統的頂層目錄掛到另一個文件系統的子目錄上,使它們成為一個整體,稱為掛載。把該子目錄稱為掛載點。

注意:1、掛載點必須是一個目錄。     
2、一個分區掛載在一個已存在的目錄上,這個目錄可以不為空,但掛載后這個目錄下以前的內容將不可用。對於其他操作系統建立的文件系統的掛載也是這樣。但是需要理解的是:光盤、軟盤、其他操作系統使用的文件系統的格式與linux使用的文件系統格式是不一樣的。光盤是ISO9660;軟盤是fat16或ext2;windows NT是fat16、NTFS;windows98是fat16、fat32;windows2000和windowsXP是fat16、fat32、NTFS。
掛載前要了解linux是否支持所要掛載的文件系統格式。   
掛載時使用mount命令:   

格式:mount [-參數] [設備名稱] [掛載點]   

其中常用的參數有     
-t<文件系統類型> 指定設備的文件系統類型,常見的有:    
minix linux最早使用的文件系統    
ext2 linux目前常用的文件系統    
msdos MS-DOS的fat,就是fat16     
vfat windows98常用的fat32     
nfs 網絡文件系統    
iso9660 CD-ROM光盤標准文件系統    
ntfs windows NT 2000的文件系統    
hpfs OS/2文件系統    
auto 自動檢測文件系統    
-o<選項> 指定掛載文件系統時的選項。有些也可用在/etc/fstab中。常用的有 
   codepage=XXX 代碼頁    
iocharset=XXX 字符集    
ro 以只讀方式掛載    
rw 以讀寫方式掛載    
nouser 使一般用戶無法掛載    
user 可以讓一般用戶掛載設備   

提醒一下,mount命令沒有建立掛載點的功能,因此你應該確保執行mount命令時,掛載點已經存在。(不懂?說白了點就是你要把文件系統掛載到哪,首先要先建上個目錄。這樣OK?)   

例子:windows98裝在hda1分區,同時計算機上還有軟盤和光盤需要掛載。     

# mk /mnt/winc     
# mk /mnt/floppy     
# mk /mnt/cdrom     
# mount -t vfat /dev/hda1 /mnt/winc     
# mount -t msdos /dev/fd0 /mnt/floppy     
# mount -t iso9660 /dev/cdrom /mnt/cdrom   

現在就可以進入/mnt/winc等目錄讀寫這些文件系統了。 

自動掛載:

在/etc/fstab文件里,第一列是掛載的文件系統的設備名,第二列是掛載點,第三列是掛載的文件系統類型,第四列是掛載的選項。添加新行實現自動掛載:

/dev/hdb1 /mnt/winc vfat defaults,codepage=936,iocharset=cp936 0 0     
/dev/hda5 /mnt/wind vfat defaults,codepage=936,iocharset=cp936 0 0 

4. LVM幾個基本概念

*物理存儲介質(PhysicalStorageMedia):指系統的物理存儲設備:磁盤,如:/dev/hda、/dev/sda等,是 存儲系統最底層的 存儲單元
*物理卷(Physical Volume,PV):指磁盤分區或從邏輯上與磁盤分區具有同樣功能的設備(如RAID),是LVM的基本存儲邏輯塊,但和基本的物理存儲介質(如分區、磁盤等)比較,卻包含有與LVM相關的管理參數。
*物理塊(Physical Extent,PE):每一個物理卷PV被划分為稱為PE(Physical Extents)的 基本單元,具有唯一編號的PE是可以被LVM尋址的最小單元。PE的大小是可配置的,默認為4MB。所以物理卷(PV)由大小等同的基本單元PE組成。
*卷組(Volume Group,VG):類似於非LVM系統中的物理磁盤,其由一個或多個物理卷PV組成。可以在卷組上創建一個或多個LV(邏輯卷)。
*邏輯卷(Logical Volume,LV):類似於非LVM系統中的磁盤分區,邏輯卷建立在卷組VG之上。在邏輯卷LV之上可以建立文件系統(比如/home或者/usr等)。
*邏輯塊(Logical Extent,LE):邏輯卷LV也被划分為可被 尋址的基本單位,稱為LE。在同一個卷組中,LE的大小和PE是相同的,並且一一對應。
LVM抽象模型
  •  

操作:

要創建一個LVM系統,一般需要經過以下步驟:
1、創建分區
使用 分區工具(如:fdisk等)創建LVM分區,方法和創建其他一般分區的方式是一樣的,區別僅僅是LVM的分區類型為8e。
2、創建物理卷
創建物理卷的命令為pvcreate,利用該命令將希望添加到卷組的所有分區或者磁盤創建為物理卷。將整個磁盤創建為物理卷的命令為:
#pvcreate /dev/hdb
將單個分區創建為物理卷的命令為:
#pvcreate /dev/hda5
3、創建卷組
創建卷組的命令為vgcreate,將使用pvcreate建立的物理卷創建為一個完整的卷組:
#vgcreate web_document /dev/hda5 /dev/hdb
vgcreate命令第一個參數是指定該卷組的邏輯名:web_document。后面參數是指定希望添加到該卷組的所有分區和磁盤。vgcreate 在創建卷組web_document以外,還設置使用大小為4MB的PE(默認為4MB),這表示卷組上創建的所有邏輯卷都以4MB為增量單位來進行擴充 或縮減。由於 內核原因,PE大小決定了邏輯卷的最大大小,4MB的PE決定了單個邏輯卷最大容量為256GB,若希望使用大於256G的邏輯卷則創建卷組 時指定更大的PE。PE大小范圍為8KB到512MB,並且必須總是2的倍數(使用-s指定,具體請參考manvgcreate)。(centos 6.2系統已發現沒有這種限制)
4、激活卷組
為了立即使用卷組而不是重新啟動系統,可以使用vgchange來激活卷組:
#vgchange -ay web_document
5、添加新的物理卷到卷組中
當系統安裝了新的磁盤並創建了新的物理卷,而要將其添加到已有卷組時,就需要使用vgextend命令:
#vgextend web_document /dev/hdc1
這里/dev/hdc1是新的物理卷。
6、從卷組中刪除一個物理卷
要從一個卷組中刪除一個物理卷,首先要確認要刪除的物理卷沒有被任何邏輯卷正在使用,就要使用pvdisplay命令察看一個該物理卷信息:
如果某個物理卷正在被邏輯卷所使用,就需要將該物理卷的數據備份到其他地方,然后再刪除。刪除物理卷的命令為vgreduce:
#vgreduce web_document /dev/hda1
7、創建邏輯卷
創建邏輯卷的命令為lvcreate:
#lvcreate -L1500 -n www1 web_document
該命令就在卷組web_document上創建名字為www1,大小為1500M的邏輯卷,並且設備入口為 /dev/web_document/www1(web_document為卷組名,www1為邏輯卷名)。如果希望創建一個使用全部卷組的邏輯卷,則需 要首先察看該卷組的PE數,然后在創建邏輯卷時指定:
#vgdisplay web_document | grep"TotalPE"
TotalPE45230
#lvcreate -l45230 web_document -n www1
8、創建文件系統
筆者推薦使用reiserfs文件系統,來替代ext2和ext3:
創建了文件系統以后,就可以加載並使用它:
#mkdir/data/wwwroot
#mount /dev/web_document/www1/data/wwwroot
如果希望系統啟動時自動加載文件系統,則還需要在/etc/fstab中添加內容:
/dev/web_document/www1/data/wwwrootreiserfsdefaults12
9、刪除一個邏輯卷
刪除邏輯卷以前首先需要將其 卸載,然后刪除:
#umount /dev/web_document/www1
#lvremove /dev/web_document/www1
lvremove--doyoureallywanttoremove"/dev/web_document/www1"?[y/n]:y
lvremove--doingautomaticbackupofvolumegroup"web_document"
lvremove--logicalvolume"/dev/web_document/www1"successfullyremoved
10、擴展邏輯卷大小
LVM提供了方便調整邏輯卷大小的能力,擴展邏輯卷大小的命令是lvextend:
#lvextend -L12G /dev/web_document/www1
lvextend--extendinglogicalvolume"/dev/web_document/www1"to12GB
lvextend--doingautomaticbackupofvolumegroup"web_document"
lvextend--logicalvolume"/dev/web_document/www1"successfullyextended
上面的命令就實現將邏輯卷www1的大小擴招為12G。
#lvextend -L +1G /dev/web_document/www1
lvextend--extendinglogicalvolume"/dev/web_document/www1"to13GB
lvextend--doingautomaticbackupofvolumegroup"web_document"
lvextend--logicalvolume"/dev/web_document/www1"successfullyextended
上面的命令就實現將邏輯卷www1的大小增加1G。
增加了邏輯卷的容量以后,就需要修改文件系統大小以實現利用擴充的空間。筆者推薦使用reiserfs文件系統來替代ext2或者ext3。因此這里僅 僅討論reiserfs的情況。Reiserfs文件工具提供了文件系統大小調整工具:resize_reiserfs。對於希望調整被加載的文件系統大 小:
#resize_reiserfs -f /dev/web_document/www1
一般建議最好將文件系統 卸載,調整大小,然后再加載:
#umount /dev/web_document/www1
#resize_reiserfs /dev/web_document/www1
#mount-treiserfs /dev/web_document/www1/data/wwwroot
對於使用ext2或ext3文件系統的用戶可以考慮使用工具
ext2resize。
11、減少邏輯卷大小
使用lvreduce即可實現對邏輯卷的容量,同樣需要首先將文件系統 卸載
#umount /data/wwwroot
#resize_reiserfs -s -2G /dev/web_document/www1
#lvreduce -L -2G /dev/web_document/www1
#mount-treiserfs /dev/web_document/www1/data/wwwroot

 


免責聲明!

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



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