第十一章 Linux高級文件系統管理(二)
九、Linux如何判斷磁盤配額是否生效?
我們的磁盤配額已經生效,接下來測試一下是否會限制我們的用戶。以 lamp1 用戶為例,
因為 lamp1 用戶除容量被限制外,也限制了文件個數。先測試文件個數是否被限制了,命令如下:
[root@1ocalhost ~]# chmod 777 /disk/
#給/disk目錄賦予權限,lamp1用戶要擁有寫權限
[root@localhost ~]# su - lamp1
#切換成lamp1用戶
[lamp1@1ocalhost ~]$ cd /disk/
#進入/disk目錄
[lamp1@1ocalhost disk]$ touch 11
#建立文件
[lamp1@localhost disk]$ touch 22
[lamp1@localhost disk]$ touch 33
[lamp1@localhost disk]$ touch 44
[lamp1@1ocalhost disk]$ touch 55
[lamp1@localhost disk]$ touch 66
[lamp1@localhost disk]$ touch 77
[lamp1@localhost disk]$ touch 88
[lamp1@1ocalhost disk]$ touch 99
sdb1: warning, user file quota exceeded.
#有警告信息了,因為軟限制是 8 個
[lamp1@localhost disk]$ ls
11 22 33 44 55 66 77 88 99 aquota. group aquota.user lost+found
#雖然警告了,但是第9個文件依然建立
[lamp1@localhost disk]$ touch 10
[lamp1@localhost disk]$ touch 111
sdb1: write failed, user file limit reached.
touch:無法創建"111":超出磁盤配額
#超出磁盤配額
[lamp1@localhost disk]$ ls
10 11 22 33 44 55 66 77 88 99 aquota. group aquota.user lost+found
#第11個文件沒有建立
還記得嗎?磁盤配額的概念是指定的普通用戶在指定的分區中使用磁盤空間和文件個數的限制。所以一定要記得切換用戶和建立文件的目錄,否則默認全部寫入 / 分區,而我們并沒有在 / 分區上設定配額。
我們切換到 root 身份,使用 repquota 命令查看一下:
[root@localhost ~]# repquota -uvs /disk/
*** Report for user quotas on device /dev/sdbl Block grace time: 8days; Inode grace time: 8days
Block limits File limits
User used soft hard grace used soft hard grace
root -- 13 0 0 2 0 0
lampl -+ 0 40000 50000 10 8 10 7days
lamp2 -- 0 245M 293M 0 0 0
lamp3 -- 0 245M 293M 0 0 0
Statistics:
Total blocks: 7
Data blocks: 1
Entries: 4
Used average: 4.000000
看到了嗎? lamp1 用戶的文件個數的 grace 字段開始倒數了。
刪除一個文件,然后建立一個大于 50MB 的文件,看看磁盤容量是否被限制了。命令如下:
[lamp1@localhost disk]$ rm -rf 10 #刪除文件10,空出文件個數
[lamp1@localhost disk]$ dd if=/dev/zero of=/disk/tesffile bs=1M count=60
#建立tesffile文件,指定文件大小為60MB
sdb1: warning, user block quota exceeded.
sdb1: write failed, user block limit reached.
dd:正在寫入"/disk/111":超出磁盤配額
#報錯,超出磁盤配額
記錄了 49+0的讀入
記錄了 48+0的寫出
51200000字節(51 MB)已復制,0.538582 秒,95.1 MB/秒
[lamp1 @localhost disk]$ ll -h tesffile
-rw-rw-r-- 1 lamp1 lamp1 49M 4月 17 02:52 tesffile
#查看一下tesffile文件的大小,并沒有超出50MB的硬限制
在 dd 命令中,if 用于指定輸入項,這里我們用 /dev/zero 作為輸入項,會不停地向目標文件中寫 0;of 用于指定輸出項,這里用 /disk/testfilef 作為目標文件;bs 指定每次復制 1MB 數據;count 指定復制 60 次。也就是建立一個大小為 60MB 的 testfile 文件,但是這個文件大小超出了磁盤容量硬限制,所以只建立了 49MB,證明容量限制也生效了。
十、Linux LVM邏輯卷管理機制(硬盤分區管理機制)
我們在實際使用 Linux 服務器的時候,總會有一個讓人頭疼的問題,隨著業務的增加,文件系統負載會越來越大,當到了空間不足的情況時,如果我們還在使用傳統的分區方式管理硬盤,就不得不將現有的所有分區全部刪除,并重新規劃新的存儲方案。
不僅如此,分區到底應該分多大呢?分得太大,會浪費硬盤空間;分得太小,又會面臨不夠使用的情況。如果在安裝系統時規劃不合理,這種困擾就會經常出現。如果真出現了分區不夠用的情況,應該怎么解決呢?
在以往(2.4 內核以前)要想調整分區大小,要么先新建立一個更大的分區,然后復制舊分區中的內容到新分區,最后使用軟鏈接來替代舊分區;要么使用調整分區大小的工具(如 parted),parted 雖然可以調整分區大小,但是它需要卸載分區之后才可以進行,也就是說需要停止服務。
其實,從一開始,我們就需要有一種管理機制來幫助我們動態地管理存儲,LVM 就提供了這種功能。LVM 最大的好處就是可以隨時調整分區的大小,分區中的現有數據不會丟失,并且不需要卸載分區、停止服務。
LVM 是 Logical Volume Manager 的簡稱,譯為中文就是邏輯卷管理。它是 Linux 下對硬盤分區的一種管理機制。LVM 適合于管理大存儲設備,并允許用戶動態調整文件系統的大小。此外,LVM 的快照功能可以幫助我們快速備份數據。LVM 為我們提供了邏輯概念上的磁盤,使得文件系統不再關心底層物理磁盤的概念。
Linux LVM 允許我們在邏輯卷在線的狀態下將其復制到另一設備上,此成功被稱為快照功能。快照允許我們在復制的同時,保證運行關鍵任務的 Web 服務器或數據庫服務繼續工作。
LVM 是在硬盤分區之上建立一個邏輯層,這個邏輯層讓多個硬盤或分區看起來像一塊邏輯硬盤,然后將這塊邏輯硬盤分成邏輯卷之后使用,從而大大提高了分區的靈活性。我們把真實的物理硬盤或分區稱作物理卷(PV);由多個物理卷組成一塊大的邏輯硬盤,叫作卷組(VG);將卷組劃分成多個可以使用的分區,叫作邏輯卷(LV)。而在 LVM 中最小的存儲單位不再是 block,而是物理擴展塊(Physical Extend,PE)。我們通過圖 1 看看這些概念之間的聯系。
圖 1 LVM 示意圖
- 物理卷(Physical Volume,PV):就是真正的物理硬盤或分區。
- 卷組(Volume Group,VG):將多個物理卷合起來就組成了卷組。組成同一個卷組的物理卷可以是同一塊硬盤的不同分區,也可以是不同硬盤上的不同分區。我們可以把卷組想象為一塊邏輯硬盤。
- 邏輯卷(Logical Volume,LV):卷組是一塊邏輯硬盤,硬盤必須分區之后才能使用,我們把這個分區稱作邏輯卷。邏輯卷可以被格式化和寫入數據。我們可以把邏輯卷想象為分區。
- 物理擴展(Physical Extend,PE):PE 是用來保存數據的最小單元,我們的數據實際上都是寫入 PE 當中的。PE 的大小是可以配置的,默認是 4MB。
也就是說,我們在建立 LVM 的時候,需要按照以下步驟來進行:
- 把物理硬盤分成分區,當然也可以是整塊物理硬盤;
- 把物理分區建立為物理卷(PV),也可以直接把整塊硬盤都建立為物理卷。
- 把物理卷整合為卷組(VG)。卷組就已經可以動態地調整大小了,可以把物理分區加入卷組,也可以把物理分區從卷組中刪除。
- 把卷組再劃分為邏輯卷(LV),當然邏輯卷也是可以直接調整大小的。我們說邏輯卷可以想象為分區,所以也需要格式化和掛載。
創建 LVM 的過程,會按照以上步驟,在后續章節中逐個講解。
其實,在安裝 Linux 系統時,我們采用的圖形安裝界面就可以直接把硬盤配置成 LVM(RAID 也可以在安裝時直接配置),但當時我們只分配了基本分區。那是因為 LVM 最主要的作用是調整分區大小,所以就算在安裝時已經安裝了 LVM,我們還是需要學習 LVM 的命令(后續章節會詳解介紹)。
十一、Linux PV物理卷(創建、查看和刪除)詳解
雖然使用圖形界面方式建立 LVM 更加方便,但是 LVM 最主要的作用是在不丟失數據合不停機的情況下調整分區大小,所以我們一定會在系統安裝完成之后,使用命令模式進行 LVM 調整。
第一步,就是要建立所需的物理分區,創建方式就是使用?fdisk 交互命令。需要注意的是,分區的系統 ID 不再是 Linux 默認的分區 ID 83,而要改成 LVM 的 ID 8e。在 /dev/sdb 硬盤中還有空閑空間,在這塊硬盤中新建立 3 個分區,每 個分區的大小為 1GB。命令如下:
[root@localhost ~]# fdisk /dev/sdb #建立分區的命令省略
Command {m for help): p
Disk /dev/sdb: 21.5 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000ebd
Device Boot Start End Blocks Id System
/dev/sdbl 1 65 522081 83 Linux
/dev/sdb2 66 2610 20442712+ 5 Extended
/dev/sdb5 66 197 1060258+ 83 Linux
/dev/sdb6 198 329 1060258+ 83 Linux
/dev/sdb7 330 461 1060258+ 83 Linux
#建立了/dev/sdb5 ~ 7三個分區
Command (m for help): t
Partition number (1-7): 5
Hex code (type L to list codes): 8e
Changed system type of partition 5 to 8e (Linux LVM)
#把/dev/sdb5的分區ID改為8e,其他兩個分區照做,改好后,查詢結果如下:
Command (m for help): p
Disk /dev/sdb: 21.5 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000ebd
Device Boot Start End Blocks Id System
/dev/sdb1 1 65 52.2081 83 Linux
/dev/sdb2 66 2610 20442712+ 5 Extended
/dev/sdb5 66 197 1060258+ 8e Linux LVM
/dev/sdb6 198 329 1060258+ 8e Linux LVM
/dev/sdb7 330 461 1060258+ 8e Linux LVM #保存退出
[root@localhost ~]# partprobe #記得重新讀取分區表,否則重啟系統
1、建立物理卷
建立物理卷的命令如下:
[root@localhost ~]# pvcreate [設備文件名]
在建立物理卷時,我們既可以把整塊硬盤都建立成物理卷,也可以把某個分區建立成物理卷。如果要把整塊硬盤都建立成物理卷,則命令如下:
[root@localhost ~]# pvcreate /dev/sdb
在我們的使用中要把分區建立成物理卷,所以執行以下命令:
[root@localhost ~]# pvcreate /dev/sdb5
Writing physical volume data to disk "/dev/sdb5" Physical volume "/dev/sdb5" successfully created
[root@localhost ~]# pvcreate /dev/sdb6
Writing physical volume data to disk "/dev/sdb6" Physical volume "/dev/sdb6" successfully created
[root@localhost ~]# pvcreate /dev/sdb7
Writing physical volume data to disk "/dev/sdb7" Physical volume 7dev/sdb7' successfully created
2、查看物理卷
查看物理卷的命令有兩個,第一個是?pvscan,用來查詢系統中哪些硬盤或分區是物理卷。命令如下:
[root@localhost ~]# pvscan
PV /dev/sdb5 Ivm2 [1.01 GiB]
PV /dev/sdb6 Ivm2 [1.01 GiB]
PV /dev/sdb7 Ivm2 [1.01 GiB]
Total: 3 [3.03 GiB] /in no VG: 0 [0 ] / in no VG: 3 [3.03 GiB]
可以看到,在我們的系統中,/dev/sdb5~7 這三個分區是物理卷。最后一行的意思是:共有 3 個物理卷[大小]/使用了 0 個卷[大小]/空閑 3 個卷[大小]。
第二個查詢命令是?pvdisplay,它可以查看到更詳細的物理卷狀態,命令如下:
[root@localhost ~]# pvdisplay
"/dev/sdb5" is a new physical volume of "1.01 GiB"
—NEW Physical volume 一
PV Name /dev/sdb5
#PV名
VG Name
#屬于的VG名,還沒有分配,所以空白
PV Size 1.01 GiB
#PV 的大小
Allocatable NO
#是否已經分配
PE Size 0
#PE大小,因為還沒有分配,所以PE大小也沒有指定
Total PE 0
#PE總數
Free PE 0
#空閑 PE數
Allocated PE 0
#可分配的PE數
PV UUID CEsVz3-t0sD-e1w0-wkHZ-iaLq-06aV-xtQNTB
#PV的UUID
…其它兩個PV省略…
3、刪除物理卷
如果不再需要物理卷,則使用?pvremove 命令刪除,命令如下:
[root@localhost ~]# pvremove /dev/sdb7
Labels on physical volume "/dev/sdb7" successfully wiped
#當然,在我們的使中還要用到/dev/sdb7物理卷,所以實驗完成后,記得把它再添加回來
在刪除物理卷時,物理卷必須不屬于任何卷組,也就是需要先將物理卷從卷組中刪除,再刪除物理卷。其實所有的刪除就是把創建過程反過來,建立時不能少某個步驟,刪除時也同樣不能跳過某一步直接刪除。
十二、Linux VG卷組(創建、激活、查看、擴容、減小及刪除)詳解
前面章節中,物理分區已經建立,同時也把物理分區建立成了邏輯卷,按照步驟,接下來就建立卷組了。
前面說過,可以把卷組想象成基本分區中的硬盤,是由多個物理卷組成的。卷組就已經可以動態地調整空間大小了,當卷組空間不足時,可以向卷組中添加新的物理卷。
1、建立卷組
建立卷組使用的命令是?vgcreate,具體命令格式如下:
[root@localhost ~]# vgcreate [-s PE 大小] 卷組名 物理卷名
[-s PE 大小] 選項的含義是指定 PE 的大小,單位可以是 MB、GB、TB 等。如果不寫,則默認 PE 大小是 4MB。這里的卷組名指的就是要創建的卷組的名稱,而物理卷名則指的是希望添加到此卷組的所有硬盤區分或者整個硬盤。
我們有三個物理卷 /dev/sdb5~7,先把 /dev/sdb5 和 /dev/sdb6 加入卷組,留著 /dev/sdb7 一會實驗調整卷組大小,命令如下:
[root@localhost ~]# vgcreate -s 8MB scvg /dev/sdb5 /dev/sdb6
Volume group "scvg" successfully created
我們把/dev/sdb和/dev/sdb6兩個物理卷加入了卷組scvg,并指定了PE的大小是8MB
2、激活卷組
卷組創建完畢后,可以通過?vgchange 命令來激活卷組,而無法重啟系統。
vgchange 命令的基本格式如下:
#激活卷組
[root@localhost ~]# vgchange -a y 卷組名
#停用卷組
[root@localhost ~]# vachange -a n 卷組名
通過使用 vgchange 命令,我們可以激活 scvg 卷組。
3、查看卷組
查看卷組的命令同樣有兩個:vgscan 命令主要用于查看系統中是否有卷組;而?vgdisplay 命令則用于查看卷組的詳細狀態。命令如下:
[root@1ocalhost ~]# vgscan
Reading all physical volumes. This may take a while...
Found volume group "scvg" using metadata type lvm2 #scvg卷組確實存在
[root@localhost ~]# vgdisplay
---Volume group ---
VG Name scvg 卷組名
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 1
VG Access read/write
#卷組訪問狀態
VG Status resizable
#卷組狀態
MAX LV 0
#最大邏輯卷數
Cur LV 0
Open LV 0
Max PV 0
#最大物理卷數
Cur PV 2
#當前物理卷數
Act PV 2
VG Size 2.02 GiB
#卷組大小
PE Size 8.00 MiB
#PE大小
Total PE 258
#PE總數
Alloc PE / Size 0/0
#已用 PE 數量/大小
Free PE / Size 258 / 2.02GiB
#空閑PE數量/大小
VG UUID Fs0dPf-LV7H-0Ir3-rthA-3UxC-LX5c-FLFriJ
4、增加卷組容量
我們現在要把 /dev/sdb7 加入卷組,使用的命令是?vgextend。命令如下:
[root@localhost ~]# vgextend scvg /dev/sdb7
Volume group "scvg" successfully extended
#把/dev/sdb7物理卷也加入scvg卷組
[root@localhost ~]# vgdisplay
---Volume group ---
VG Name scvg
System ID
Format lvm2
Metadata Areas 3
Metadata Sequence No 2
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 3
Act PV 3
VG Size 3.02 GiB
#卷組容量增加
PE Size 8.00 MiB
Total PE 387
#PE 總數增加
Alloc PE / Size 0/0
Free PE / Size 387 / 3.02 GiB
VG UUID Fs0dPf-LV7H-0Ir3-rthA-3UxC-LX5c-FLFriJ
5、減少卷組容量
既然可以增加卷組容量,當然也可以減少卷組容量,我們使用?vgreduce 命令在卷組中刪除物理卷。命令如下:
[root@localhost ~]# vgreduce scvg /dev/sdb7
Removed "/dev/sdb7" from volume group "scvg"
#在卷組中刪除/dev/sdb7物理卷
[root@localhost ~]# vgreduce -a
#刪除所有未使用的物理卷
當然,刪除之后記得再添加回來,以便下面再用于實驗。
6、刪除卷組
刪除卷組的命令是?vgremove。命令如下:
[root@localhost ~]# vgremove scvg
Volume group "scvg" successfully removed
只有在刪除卷組之后,才能刪除物理卷。還要注意的是,scvg 卷組中還沒有添加任何邏輯卷,如果擁有了邏輯卷,則記得先刪除邏再刪除卷組。再次強調,刪除就是安裝的反過程,每一步都不能跳過。
當然,刪除之后記得再建立回來,否則邏輯卷的實驗無法完成。命令如下:
[root@localhost ~]# vgcreate -s 8MB scvg /dev/ sdb5 /dev/sdb6 /dev/sdb7
Volume group "scvg" successfully created
#這次三個物理卷就一起加入卷組了
十三、Linux LV邏輯卷(創建、查看、調整大小及刪除)詳解
本節講解如何將卷組劃分為邏輯卷,我們可以把邏輯卷想象成分區,那么這個邏輯卷當然也需要被格式化和掛載。另外,邏輯卷也是可以動態調整大小的,而且數據不會丟失,也不用卸載邏輯卷。
1、建立邏輯卷
我們現在已經建立了 3GB 大小的卷組 scvg,接下來需要在卷組中建立邏輯卷。命令格式如下:
[root@localhost ~]# lvcreate [選項] [-n 邏輯卷名] 卷組名
選項:
- -L 容量:指定邏輯卷大小,單位為 MB、GB、TB 等;
- -l 個數:按照 PE 個數指定邏輯卷大小,這個參數需要換算容量,太麻煩;
- -n 邏輯卷名:指定邏輯卷名;
我們建立一個 1.5GB 大小的 lamplv 邏輯卷,命令如下:
[root@localhost ~]# lvcreate -L 1.5G -n lamplv scvg
Logical volume "lamplv" created
#在scvg卷組中建立一個1.5GB大小的lamplv邏輯卷
建立完邏輯卷,還要在格式化和掛載之后才能正常使用。格式化和掛載命令與操作普通分區時是一樣的,不過需要注意的是,邏輯卷的設備文件名是"/dev/卷組名/邏輯卷名",如邏輯卷 lamplv 的設備文件名就是"/dev/scvg/lamplv"。具體命令如下:
[root@localhost ~]# mkfs -t ext4 /dev/scvg/lamplv
#格式化
[root@localhost ~]# mkdir /disklvm
[root@localhost ~]# mount /dev/scvg/lamplv /disklvm/
#建立掛載點,并掛載
[root@localhost ~]# mount
…省略部分輸出…
/dev/mapper/scvg-lamplv on /disklvm type ext4(rw)
#已經掛載了
當然,如果需要開機后自動掛載,則要修改 /etc/fstab 文件。
2、查看邏輯卷
查看命令同樣有兩個,第一個命令?lvscan?只能看到系統中是否擁有邏輯卷,命令如下:
[root@localhost ~]# lvscan
ACTIVE '/dev/scvg/lamplv' [1.50 GiB] inherit
#能夠看到激活的邏輯卷,大小是1.5GB
第二個命令?lvdisplay?可以看到邏輯卷的詳細信息,命令如下:
[root@localhost ~]# lvdisplay
---Logical volume---
LV Path /dev/scvg/lamplv
邏輯卷的設備文件名
LV Name lamplv
#邏輯卷名
VG Name scvg
#所屬的卷組名
LV UUID 2kyKmn-Nupd-CldB-8ngY-NsI3-b8hV-QeUuna
LV Write Access read/write
LV Creation host, time localhost, 2013-04-18 03:36:39 +0800
LV Status available
# open 1
LV Size 1.50 GiB
#邏輯卷大小
Current LE 192
Segments 2
Allocation inherit
Read ahead sectors auto
-currently set to 256
Block device 253:0
3、調整邏輯卷大小
我們可以使用 lvresize 命令調整邏輯卷的大小,不過我們一般不推薦減少邏輯卷的空間,因為這非常容易導致邏輯卷中的文件系統的數據丟失。所以,除非我們已經備份了邏輯卷中的數據,否則不要減少邏輯卷的空間。
lvresize 命令格式如下:
[root@localhost ~]# lvresize [選項] 邏輯卷的設備文件名
選項:
- -L 容量:安裝容量調整大小,單位為 KB、GB、TB 等。使用 + 増加空間,- 代表減少空間。如果直接寫容量,則代表設定邏輯卷大小為指定大小;
- -l 個數:按照 PE 個數調整邏輯卷大小;
我們先在 /disklvm 分區中建立一些測試文件,一會兒調整完大小,再看看數據是否丟失了。
[root@localhost ~]# cd /disklvm/
[root@localhost disklvm]# touch testf
[root@localhost disklvm]# mkdir testd
[root@localhost disklvm]# ls
lost+found testd testf
lamplv 邏輯卷的大小是 1.5GB,而 scvg 卷組中還有 1.5GB 的空閑空間,那么增加 lamplv 邏輯卷的大小到 2.5GB。命令如下:
[root@localhost disklvm]# lvresize -L 2.5G /dev/scvg/lamplv
Extending logical volume lamplv to 2.50 GiB Logical volume lamplv successfully resized
#增加lamplv邏輯卷的大小到2. 5GB,當然命令也可以這樣寫
[roots localhost disklvm] # lvresize -L +1G /dev/scvg/lamplv
[root@localhost disklvm]# lvdisplay
---Logical volume ---
LV Path /dev/scvg/lamplv
LV Name lamplv
VG Name scvg
LV UUID 2kyKmn-Nupd-CldB-8ngY-Ns13-b8hV-QeUuna
LV Write Access read/write
LV Creation host, time localhost, 2013-04-18 03:36:39 +0800 LV Status available
# open 1
LV Size 2.50 GiB
#大小改變了
Current LE 320
Segments 3
Allocation inherit
Read ahead sectors auto
-currently set to 256
Block device 253:0
邏輯卷的大小已經改變了,但是好像有如下一些問題:
[root@localhost disklvm]# df -h /disklvm/
文件系統 容量 已用 可用 已用% %掛載點
/dev/mapper/scvg-lamplv 1.5G 35M 1.4G 3%/ disklvm
怎么 /disklvm 分區的大小還是 1.5GB 啊?剛剛只是邏輯卷的大小改變了,如果要讓分區使用這個新邏輯卷,則還要使用?resize2fs 命令來調整分區的大小。不過這里就體現出了 LVM 的優勢:我們不需要卸載分區,直接就能調整分區的大小。
resize2fs命令的格式如下:
[root@localhost ~]# resize2fs [選項] [設備文件名] [調整的大小]
選項:
- -f:強制調整;
- 設備文件名:指定調整哪個分區的大小;
- 調整的大小:指定把分區調整到多大,要加 M、G 等單位。如果不加大小,則會使用整個分區;
我們已經把邏輯卷調整到 2.5GB,這時就需要把整個邏輯卷都加入 /disklvm 分區中,命令如下:
[root@localhost ~]# resize2fs /dev/scvg/lamplv
resize2fs 1.41.12(17-May-2010)
Filesystem at /dev/scvg/lamplv is mounted on/ disklvm; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of/dev/scvg/lamplv to 655360 (4k) blocks.
The filesystem on /dev/scvg/lamplv is now 655360 blocks long.
#已經調整了分區大小
[root@localhost ~]# df -h /disklvm/
文件系統 容量 已用 可用 已用% %掛載點
/dev/mapper/scvg-lamplv 2.5G 35M 2.4G 2% /disklvm
#分區大小已經是2.5GB 了
[root@localhost ~]# ls /disklvm/
lost+found testd testf
#而且數據并沒有丟失
如果要減少邏輯卷的容量,則只需把增加步驟反過來再做一遍就可以了。不過我們并不推薦減少邏輯卷的容量,因為這有可能導致數據丟失。
4、刪除邏輯卷
刪除了邏輯卷,其中的數據就會丟失,所以要確定你真的需要刪除這個邏輯卷。命令格式如下:
[root@localhost ~]#lvremove 邏輯卷的設備文件名
我們刪除 lamplv 邏輯卷,記得在刪除時要先卸載。 命令如下:
[root@localhost ~]# umount /dev/scvg/lamplv
[root@localhost ~]# Ivremove /dev/scvg/lamplv
Do you really want to remove active logical volume lamplv? [y/n]: n
#如果這里選擇y,就會執行刪除操作,邏輯卷內的所有數據都會被清空
Logical volume lamplv not removed
十四、Linux LVM(邏輯卷管理)的刪除
創建好 LVM 之后,如果經過一段時間的運行,我們發現 LVM 技術并未像有些人吹噓的那樣為系統的管理和維護工作帶來很大的方便,可以手動刪除它。
與創建 LVM 的順序恰好相反,在釋放 LVM 所占磁盤空間的操作中,首先要刪除卷組上所定義的邏輯卷(LV),之后刪除這個卷組(VG),最后才能刪除所有的物理卷(PV)。接下來,還是通過個實例來演示這些操作的全過程。
首先,要刪除一個邏輯卷,就必須先將這個邏輯卷從系統中卸載掉。例如,使用 umount 命令卸載掛載在 /disklvm 目錄上的邏輯卷,執行命令如下:
[root@localhost ~]# umount /disklvm
隨后,你需要使用如下的 df 系統再次列出所有掛載的文件系統信息:
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 8.7G 7.0G 1.3G 85% /
......
/dev/md0 1004M 18M 936M 2% /oradata
從顯示結果中可以看到,再也找不到任何掛載的邏輯卷了,這表明掛載在 /disklvm 目錄上的邏輯卷 lamplv 已經被卸載了。
現在,就可使用 lvremove 命令移除設備文件 /dev/scvg/lamplv 所對應的邏輯卷了。在系統提示處輸入 【y】 確認要移除 lamplv 邏輯卷,執行命令如下所示:
[root@localhost ~]# lvremove /dev/scvg/lamplv
Do you really want to remove active logical volume "lamplv"? [y/n]:y
Logical volume "lamplv" successfully removed
之后,你可以使用 vgdisplay 命令再次列出 scvg 卷組的詳細信息:
[root@localhost ~]# vgdisplay scvg
---Volume group ---
VG Name scvg
......
Cur LV 0
Open LV 0
Max PV 0
......
通過對比你會發現,Cur LV 和 Open LV 的值,都從原來的 1 變為了 0,這就進一步證實了原來在 scvg 卷組上定義的邏輯卷已經全都被刪除了。
接下來, 可以使用 vgremove 命令刪除 scvg 卷組,執行命令如下:
[root@localhost ~]# vgremove scvg
Volume group "scvg" successfully removed
可以看到,vgdog 卷組己經被成功地刪除了,但是為了慎重起您可以使用 vgdisplay 再次列出 vgdog 卷組的詳細信息,如下所示:
[root@localhost ~]# vgdisplay scvg
Volume group "scvg" not found
顯示結果表明,系統已經找不到 scvg 卷組了,這就進一步證實了 scvg 卷組已經被刪除了。
注意,一些 Linux 教程認為在刪除了卷組之后就算完成了全部所需的操作,但是最好還是要移除所有分區上的物理卷的卷標。因此,最好使用 pvremove 命令同時移除 /dev/sdb5、 /dev/sdb6 和 /dev/sdb7 這 3 個分區上的物理卷的卷標,執行命令如下:
[root@localhost ~]# pvremove /dev/sdb5 /dev/sdb6 /dev/sdb7
Labels on physical volume "/dev/sdb5" successfully wiped
Labels on physical volume "/dev/sdb6" successfully wiped
Labels on physical votume "/dev/sdb7" successfuily wiped
完成了以上操作之后,我們不但刪除了邏輯卷和卷組,而且還釋放了物理卷所使用的所有磁盤空間,即將這些磁盤空間歸還給了 Linux 系統。
十五、Linux RAID(磁盤陣列)完全攻略
LVM 最大的優勢在于可以在不卸載分區和不損壞數據的情況下進行分區容量的調整,但是萬一硬盤損壞了,那么數據一定會丟失。 本節講的?RAID(磁盤陣列)的優勢在于硬盤讀寫性能更好,而且有一定的數據冗余功能。
RAID 功能已經內置在 Linux 2.0及以后的內核中,為了使用這項功能,還需要特定的工具來管理 RAID,在絕對多數 Linux 發行版本中,更多的是使用 mdadm,讀者可以自行下載并安裝這個工具。
1、RAID 簡介
RAID(Redundant Arrays of Inexpensive Disks,磁盤陣列),翻譯過來就是廉價的、具有冗余功能的磁盤陣列。其原理是通過軟件或硬件將多塊較小的分區組合成一個容量較大的磁盤組。這個較大的磁盤組讀寫性能更好,更重要的是具有數據冗余功能。
那什么是數據冗余呢?從字面上理解,冗余就是多余的、重復的。在磁盤陣列中,冗余是指由多塊硬盤組成一個磁盤組,在這個磁盤組中,數據存儲在多塊硬盤的不同地方,這樣即使某塊硬盤出現問題,數據也不會丟失,也就是磁盤數據具有了保護功能。
讀者也可以這樣理解,RAID 用于在多個硬盤上分散存儲數據,并且能夠“恰當”地重復存儲數據,從而保證其中某塊硬盤發生故障后,不至于影響整個系統的運轉。RAID 將幾塊獨立的硬盤組合在一起,形成一個邏輯上的 RAID 硬盤,這塊“硬盤”在外界(用戶、LVM 等)看來,和真實的硬盤一樣,沒有任何區別。
RAID 的組成可以是幾塊硬盤,所以我們在講解原理時使用硬盤舉例,但是大家要知道不同的分區也可以組成 RAID。
RAID 根據組合方式的不同,有多種設計解決方案,以下介紹幾種常見的 RAID 方案(RAID級別)。
2、RAID 0
RAID 0 也叫 Stripe 或 Striping(帶區卷),是 RAID 級別中存儲性能最好的一個。RAID 0 最好由相同容量的兩塊或兩塊以上的硬盤組成。如果組成 RAID 0 的兩塊硬盤大小不一致,則會影響 RAID 0 的性能。
這種模式下會先把硬盤分隔出大小相等的區塊,當有數據需要寫入硬盤時,會把數據也切割成相同大小的區塊,然后分別寫入各塊硬盤。這樣就相當于把一個文件分成幾個部分同時向不同的硬盤中寫入,數據的讀/寫速度當然就會非常快。
從理論上講,由幾塊硬盤組成 RAID 0,比如由 3 塊硬盤組成 RAID 0,數據的寫入速度就是同樣的數據向一塊硬盤中寫入速度的3倍。我們畫一張 RAID 0 的示意圖,如圖 1 所示。
圖 1 RAID 0 示意圖
解釋一下這張示意圖。我們準備了 3 塊硬盤組成了 RAID 0,每塊硬盤都劃分了相等的區塊。當有數據要寫入 RAID 0 時,首先把數據按照區塊大小進行分割,然后再把數據依次寫入不同的硬盤。每塊硬盤負責的數據寫入量都是整體數據的 1/3,當然寫入時間也只有原始時間的 1/3。所以,從理論上講,由幾塊硬盤組成 RAID 0,數據的寫入速度就是數據只寫入一塊硬盤速度的幾倍。
RAID 0 的優點如下:
- 通過把多塊硬盤合并成一塊大的邏輯硬盤,實現了數據跨硬盤存儲。
- 通過把數據分割成等大小的區塊,分別存入不同的硬盤,加快了數據的讀寫速度。數據的讀/寫性能是幾種 RAID 中最好的。
- 多塊硬盤合并成 RAID 0,幾塊小硬盤組成了更大容量的硬盤,而且沒有容量損失。RAID 0 的總容量就是幾塊硬盤的容量之和。
RAID 0 有一個明顯的缺點,那就是沒有數據冗余功能,RAID 0 中的任何一塊硬盤損壞,RAID 0 中所有的數據都將丟失。也就是說,由幾塊硬盤組成 RAID 0,數據的損毀概率就是只寫入一塊硬盤的幾倍。
我們剛剛說了,組成 RAID 0 的硬盤的大小最好都是一樣的。那有人說我只有兩塊不一樣大小的硬盤,難道就不能組成 RAID 0 嗎?
答案是可以的。假設有兩塊硬盤,一塊大小是 100GB,另一塊大小是 200GB。由這兩塊硬盤組成 RAID 0,那么當最初的 200G 數據寫入時,是分別存放在兩塊硬盤當中的;但是當數據大于 200GB 之后,第一塊硬盤就寫滿了,以后的數據就只能寫入第二塊硬盤中,讀/寫性能也就隨之下降了。
一般不建議企業用戶使用 RAID 0,因為數據損毀的概率更高。如果對數據的讀/寫性能要求非常高,但對數據安全要求不高時,RAID 0 就非常合適了。
3、RAID 1
RAID 1也叫 Mirror 或 Mirroring(鏡像卷),由兩塊硬盤組成。兩塊硬盤的大小最好一致,否則總容量以容量小的那塊硬盤為主。RAID 1 就具備了數據冗余功能,因為這種模式是把同一份數據同時寫入兩塊硬盤。
比如有兩塊硬盤,組成了 RAID 1,當有數據寫入時,相同的數據既寫入硬盤 1,也寫入硬盤 2。這樣相當于給數據做了備份,所以任何一塊硬盤損壞,數據都可以在另一塊硬盤中找回。RAID 1 的示意圖如圖 2 所示。
圖 2 RAID 1 示意圖
RAID 1 具有了數據冗余功能,但是硬盤的容量卻減少了 50%,因為兩塊硬盤當中保存的數據是一樣的,所以兩塊硬盤際上只保存了一塊硬盤那么多的數據,這也是我們把 RAID 1 稱作鏡像卷的原因。
RAID 1 的優點如下:
- 具備了數據冗余功能,任何一塊硬盤出現故障,數據都不會丟失。
- 數據的讀取性能雖然不如RAID 0,但是比單一硬盤要好,因為數據有兩份備份在不同的硬盤上,當多個進程讀取同一數據時,RAID會自動分配讀取進程。
RAID 1 的缺點也同樣明顯:
- RAID 1 的容量只有兩塊硬盤容量的 50%,因為每塊硬盤中保存的數據都一樣。
- 數據寫入性能較差,因為相同的數據會寫入兩塊硬盤當中,相當于寫入數據的總容量變大了。雖然 CPU 的速度足夠快,但是負責數據寫入的芯片只有一個。
4、RAID 10 或 RAID 01
我們發現,RAID 0 雖然數據讀/寫性能非常好,但是沒有數據冗余功能;而 RAID 1 雖然具有了數據冗余功能,但是數據寫入速度實在是太慢了(尤其是軟 RAID)。
那么,我們能不能把 RAID 0 和 RAID 1 組合起來使用?當然可以,這樣我們就即擁有了 RAID 0 的性能,又擁有了 RAID 1 的數據冗余功能。
我們先用兩塊硬盤組成 RAID 1,再用兩塊硬盤組成另一個 RAID 1,最后把這兩個 RAID 1組成 RAID 0,這種 RAID 方法稱作?RAID 10。那先組成 RAID 0,再組成 RAID 1 的方法我們作?RAID 01。我們通過示意圖 3 來看看 RAID 10。
圖 3 RAID 10 示意圖
我們把硬盤 1 和硬盤 2 組成了第一個 RAID 1,把硬盤 3 和硬盤 4 組成了第二個 RAID 1,這兩個 RAID 1組成了 RAID 0。因為先組成 RAID 1,再組成 RAID 0,所以這個 RAID 是 RAID 10。
當有數據寫入時,首先寫入的是 RAID 0(RAID 0 后組成,所以數據先寫入),所以數據 1 和數據 3 寫入了第一個 RAID 1,而數據 2 和數據 4 寫入了第二個 RAID 1。當數據 1 和數據 3 寫入第一個 RAID 1 時,
因為寫入的是 RAID 1,所以在硬盤 1 和硬盤 2 中各寫入了一份。數據 2 和數據 4 也一樣。
這樣的組成方式,既有了 RAID 0 的性能優點,也有了 RAID 1 的數據冗余優點。但是大家要注意,雖然我們有了 4 塊硬盤,但是由于 RAID 1 的缺點,所以真正的容量只有 4 塊硬盤的 50%,另外的一半是用來備份的。
5、RAID 5
RAID 5 最少需要由 3 塊硬盤組成,當然硬盤的容量也應當一致。當組成 RAID 5 時,同樣需要把硬盤分隔成大小相同的區塊。當有數據寫入時,數據也被劃分成等大小的區塊,然后循環向 RAID 5 中寫入。
每次循環寫入數據的過程中,在其中一塊硬盤中加入一個奇偶校驗值(Parity),這個奇偶校驗值的內容是這次循環寫入時其他硬盤數據的備份。當有一塊硬盤損壞時,采用這個奇偶校驗值進行數據恢復。通過示意圖來看看 RAID 5 的存儲過程,如圖 4 所示。
圖 4 RAID 5 示意圖
在這張示意圖中,我們使用三塊硬盤組成了 RAID 5。當有數據循環寫入時,每次循環都會寫入一個奇偶校驗值(Parity),并且每次奇偶校驗值都會寫入不同的硬盤。這個奇偶校驗值就是其他兩塊硬盤中的數據經過換算之后產生的。因為每次奇偶校驗值都會寫入不同的硬盤,所以任何一塊硬盤損壞之后,都可以依賴其他兩塊硬盤中保存的數據恢復這塊損壞的硬盤中的數據。
需要注意的是,每次數據循環寫入時,都會有一塊硬盤用來保存奇偶校驗值,所以在 RAID 5 中可以使用的總容量是硬盤總數減去一塊的容量之和。
比如,在這張示意圖中,由三塊硬盤組成了 RAID 5,但是真正可用的容量是兩塊硬盤的容量之和,也就是說,越多的硬盤組成 RAID 5,損失的容量占比越小,因為不管由多少塊硬盤組成 RAID 5,奇偶校驗值加起來只占用一塊硬盤。而且還要注意,RAID 5 不管是由幾塊硬盤組成的,只有損壞一塊硬盤的情況才能恢復數據,因為奇偶校驗值加起來只占用了一塊硬盤,如果損壞的硬盤超過一塊,那么數據就不能再恢復了。
RAID 5 的優點如下:
- 因為奇偶校驗值的存在,RAID 5 具有了數據冗余功能。
- 硬盤容量損失比 RAID 1 小,而且組成 RAID 5 的硬盤數量越多,容量損失占比越小。
- RAID 5的數據讀/寫性能要比 RAID 1 更好,但是在數據寫入性能上比 RAID 0 差。
RAID 5 的缺點如下:
- 不管由多少塊硬盤組成 RAID 5,只支持一塊硬盤損壞之后的數據恢復。
- RAID 5 的實際容量是組成 RAID 5 的硬盤總數減去一塊的容量之和。也就是有一塊硬盤用來保存奇偶校驗值,但不能保存數據。
從總體上來說,RAID 5 更像 RAID 0 和 RAID 1 的折中,性能比 RAID 1 好,但是不如 RAID 0;數據冗余比 RAID 0 好,而且不像 RAID 1 那樣浪費了 50% 的硬盤容量。
6、軟 RAID 和硬 RAID
我們要想在服務器上實現 RAID,可以采用磁盤陣列卡(RAID 卡)來組成 RAID,也就是硬 RAID。RAID 卡上有專門的芯片負責 RAID 任務,因此性能要好得多,而且不占用系統性能,缺點是 RAID 卡比較昂貴。
如果我們既不想花錢又想使用 RAID,那就只能使用軟 RAID 了。軟 RAID 是指通過軟件實現 RAID 功能,沒有多余的費用,但是更加耗費服務器系統性能,而數據的寫入速度比硬 RAID 慢
十六、使用圖形界面來配置RAID
RAID 配置起來要比 LVM 方便,因為它不像 LVM 那樣分了物理卷、卷組和邏輯卷三層,而且每層都需要配置。我們在圖形安裝界面中配置 RAID 1和 RAID 5,先來看看 RAID 1 的配置方法。
1、RAID 1 配置
配置 RAID 1 時同樣需要啟動圖形安裝程序,在分區界面進行配置,如圖 1 所示。
圖 1 選擇驅動器
我們已經知道,可以使用相同大小的硬盤配置 RAID,也可以使用相同大小的分區配置 RAID,方法都是一樣的。我們在實驗中就使用相同大小的兩個分區創建 RAID 1 吧。
在選擇驅動器界面單擊"創建"按鈕,進入"生成存儲"界面,如圖 2 所示。
圖 2 生成存儲
在"生成存儲"界面中,在"創建軟件 RAID"選項組中選擇"RAID 分區"單選按鈕,單擊"創建"按鈕,進入"添加分區"界面,如圖 3 所示。
圖 3 添加分區
我們要創建兩個 2GB 大小的分區,用來組成 RAID 1。所以,在"添加分區"界面中,文件系統類型選擇"software RAID (軟RAID)",分區大小指定為 2GB。單擊"確定"按鈕后,第一個 RAID 分區就建立完成了。同樣,第二個 RAID 分區也這樣建立。兩個 RAID 分區都建立完成后,如圖 4 所示。
圖 4 RAID分區建立完成
這時再單擊"創建"按鈕,進入"生成存儲"界面,如圖 5 所示。
圖 5 生成 RAID 存儲
這時我們發現剛剛是灰色的不能選擇的"RAID 設備"單選按鈕已經可以選擇了,證明我們現有的 RAID 分區具備了組成 RAID 設備的條件。我們選擇"RAID 設備"單選按鈕,然后單擊"創建"按鈕,就進入"創建 RAID 設備"界面,如圖 6 所示。
圖 6 創建RAID設備
在這里,掛載點選擇"/"分區,也就是說 / 分區是由兩個等大小的分區組成的 RAID 1 設備,文件系統類型 選擇"ext4",RAID設備選擇"md0"(第一個 RAID 設備),RAID 級別選擇"RAID1",同時記得勾選組成 RAID 1的兩個分區 sda1 和 sda2。單擊"確定"按鈕,RAID 1 就建立完成了,如圖 7 所示。
圖 7 RAID 1建立完成
這里需要注意,只有 / 分區是 RAID 1,其他分區還沒有分配。而且要想正確地安裝 Linux,最少還需要分配 swap 分區。
2、RAID 5配置
RAID 5 分配置和 RAID 1 的配置一致,只不過 RAID 1 只需要兩個等大小的 RAID 分區,而 RAID 5 卻需要最少三個等大小的 RAID 分區。我們先建立三個等大小的 RAID 分區,如圖 8 所示。
圖 8 選擇驅動器
接下來單擊"創建"按鈕,進入"生成存儲"界面,如圖 9 所示。
圖 9 生成存儲
在這里同樣需要選擇"RAID 設備"單選按鈕,然后單擊"創建"按鈕,進入"創建 RAID 設備"界面,如圖 10 所示。
圖 10 創建 RAID 設備
在"創建 RAID 設備"界面中,掛載點仍然選擇 / 分區,不過 RAID 級別選擇的是 RAID 5,同時勾選組成 RAID 5 的三個分區,單擊"確定"按鈕,RAID 5 的 / 分區就建立完成了。
十七、使用mdadm命令來配置RAID
圖形界面確實方便,不過 RAID 和 LVM 一樣,主要的應用還是在命令行當中,因為如果硬盤出現了數據損壞,總不能重新安裝吧!
本節,我們學習在命令行界面中如何分配和使用 RAID,這次我們仍然使用相同大小的分區配置最為常見的 RAID 5。
1、建立分區
建立三個 2GB 大小的分區,構建 RAID 5。不過我們多建立了一個 2GB 大小的分區,這個分區用作備份分區。
備份分區的作用是什么呢? RAID 最大的好處就是具有數據冗余功能,當有一塊硬盤或分區損壞時,數據不會丟失,只要插入新的硬盤或分區,依賴其他分區就會主動重建損壞的硬盤或分區中的數據。不過這仍然需要關閉服務器,手工插拔硬盤。
如果在組成 RAID 的時候就加入了備份硬盤或備份分區,那么當硬盤或分區損壞時,RAID 會自動用備份硬盤或備份分區代替損壞的硬盤或分區,然后立即重建數據,而不需要人為手工參與。這樣就避免了服務器停機和人為手工參與,非常方便,唯一的問題就是需要多余的硬盤或分區作為備份設備。
也就是說,我們在這個實驗中需要 4 個 2GB 大小的分區,其中 3 個組成 RAID 5,1 個作為備份分區。建立分區的過程這里不再詳細解釋,建立完分區之后,可以使用 fdisk -l 命令査看。命令如下:
[root@localhost ~]#fdisk -l
...省略部分輸出...
Disk /dev/sdb: 21.5 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xba384969
Device Boot Start End Blocks ld System
/dev/sdb1 1 2610 20964793+ 5 Extended
/dev/sdb5 1 262 2104452 83 Linux
/dev/sdb6 263 524 2104483+ 83 Linux
/dev/sdb7 525 786 2104483+ 83 Linux
/dev/sdb8 787 1048 2104483+ 83 Linux
我們建立了 /dev/sdb5、/dev/sdb6、/dev/sdb7 和 /dev/sdb8 共 4 個 2GB 大小的分區。
2、mdadm命令建立 RAID 5
建立 RAID 使用 mdadm 命令,命令格式如下:
[root@localhost ~]# mdadm [模式] [RAID設備文件名] [選項]
模式:
- Assemble:加入一個已經存在的陣列;
- Build:創建一個沒有超級塊的陣列;
- Create:創建一個陣列,每個設備都具有超級塊;
- Manage:管理陣列,如添加設備和刪除損壞設備;
- Misc:允許單獨對陣列中的設備進行操作,如停止陣列;
- Follow or Monitor:監控RAID狀態; Grow:改變RAID的容量或陣列中的數目;
選項:
- -s,-scan:掃描配置文件或/proc/mdstat文件,發現丟失的信息;
- -D,-detail:查看磁盤陣列詳細信息;
- -C,-create:建立新的磁盤陣列,也就是調用 Create模式;
- -a,-auto=yes:采用標準格式建立磁陣列
- -n,-raicklevices=數字:使用幾塊硬盤或分區組成RAID
- -l,-level=級別:創建RAID的級別,可以是0,1,5
- -x,-spare-devices=數字:使用幾塊硬盤或分區組成備份設備
- -a,-add 設備文件名:在已經存在的RAID中加入設備
- -r,-remove 設備文件名名:在已經存在的RAID中移除設備
- -f,-fail設備文件名:把某個組成RAID的設備設置為錯誤狀態
- -S,-stop:停止RAID設備
- -A,-assemble:按照配置文件加載RAID
我們準備創建的是 RAID 5,所以使用以下命令創建:
[root@localhost ~]# mdadm -create -auto=yes /dev/md0-level=5 \
-raid-devices=3 -spare-devices=1 /dev/sdb5/dev/sdb6 /dev/sdb7 /dev/sdb8
其中,/dev/md0 是第一個 RAID 設備的設備文件名,如果還有 RAID 設備,則可以使用 /dev/md[0~9] 來代表。我們建立了一個 RAID 5,使用了三個分區,并建立了一個備份分區。先查看一下新建立的 /dev/md0,命令如下:
[root@localhost ~]# mdadm --detail /dev/md0
/dev/md0:
#設備文件名
Version : 1.2
Creation Time : Tue Apr 23 23:13:48 2013
#創建時間
Raid Level : raid5
#RAID 級別
Array Size : 4206592 (4.01 GiB 4.31 GB) +RAID #總容量
Used Dev Size : 2103296 (2.01 GiB 2.15 GB)
#每個分區的容量
Raid Devices : 3
#組成 RAID 的設備數
Total Devices : 4
#總設備數
Persistence : Superblock is persistent
Update Time : Tue Apr 23 23:14:52 2013 State : clean
Active Devices : 3
#激活的設備數
Working Devices : 4
#可用的設備數
Failed Devices : 0
#錯誤的設備數
Spare Devices : 1
#備份設備數
Layout : left-symmetric
Chunk Size : 512K
Name : localhost.localdomain:0 (local to host localhost.localdomain) UOID : 15026b78:126a4930:89d8cf54:5bcb7e95 Events : 18
Number Major Minor RaidDevice State
0 8 21 0 active sync /dev/sdb5
1 8 22 1 active sync /dev/sdb6
4 8 23 2 active sync /dev/sdb7
#三個激活的分區
3 8 24 - spare /dev/sdb8
#備份分區
再查看一下 /proc/mdstat 文件,這個文件中也保存了 RAID 的相關信息。命令如下:
[root@localhost ~]# cat /proc/mdstat
Personalities:[raid6] [raid5] [raid4]
md0:active raid5 sdb9[4](S) sdb5[0] sdb8[3] sdb6[1]
#RAID名 級別 組成RAID的分區,[數字]是此分區在RAID中的順序
#(S)代表備份分區
4206592 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]
#總block數 等級是5 區塊大小 陣列算法 [組成設備數/正常設備數]
unused devices: <none>
3、格式化與掛載RAID
RAID 5 已經創建,但是要想正常使用,也需要格式化和掛載。格式化命令如下:
[root@localhost ~]# mkfs -t ext4 /dev/md0
掛載命令如下:
[root@localhost ~]# mkdir /raid
#建立掛載點
[root@localhost ~]# mount /dev/md0 /raid/
#掛載/dev/md0
[root@localhost ~]# mount
…省略部分輸出…
/dev/md0 on /raid type ext4(rw)
#查看一下,已經正常掛載
4、生成mdadm配置文件
在 CentOS 6.x 中,mdadm 配置文件并不存在,需要手工建立。我們使用以下命令建立 /etc/mdadm.conf 配置文件:
[root@localhost ~]# echo Device /dev/sdb[5-8] >>/etc/mdadm.conf
#建立/etc/mdadm.conf配置立件,并把組成RAID的分區的設備文件名寫入
#注意:如果有多個RAID,則要把所有組成RAID的設備都放入配置文件中;否則RAID設備重啟后會丟失
#比如組成RAID 10,就既要把分區的設備文件名放入此文件中,也翻組成RAID 0的RAID 1設備文件名放入
[root@localhost ~]# mdadm -Ds >>/etc/mdadm.conf
#查詢和掃描RAID信息,并追加進/etc/mdadm.conf文件
[root@localhost ~]# cat /etc/mdadm.conf
Device /dev/sdb5 /dev/sdb6 /dev/sdb7 /dev/sdb8
ARRAY /dev/md0 metadata: 1.2 spares=1 name=l(xalhost.localdomain:0 UUID=dd821fe5:8597b126:460a3afd:857c7989
#查看文件內容
5、設置開機后自動掛載
自動掛載也要修改 /etc/fstab 配置文件,命令如下:
[root@localhost ~]# vi /etc/fstab
/dev/mdO /raid
ext4 defaults 12
#加入此行
如果要重新啟動,則一定要在這一步完成之后再進行,否則會報錯。
6、啟動或停止RAID
RAID 設備生效后,不用手工啟動或停止。但是,如果需要卸載 RAID 設備,就必須手工停止 RAID。這里我們學習一下啟動和停止 RAID 的方法。先看看停止命令:
[root@localhost ~]# mdadm -S /dev/md0
#停止/dev/md0設備
當然,如果要刪除 RAID,則要非常小心,要把所有和 RAID 相關的內容全部刪除,才能保證系統不報錯。需要進行的步驟如下:
[root@localhost ~]# umount /dev/md0
#卸載RAID
[root@localhost ~】# vi /etc/fstab
/dev/md0 /raid ext4 defaults 12
#刪除此行
[root@localhost ~]# mdadm -S /dev/md0
mdadm: stopped /dev/md0
#停止RAID
[root@localhost ~]# vi /etc/mdadm.conf
ARRAY /dev/md0 metadata: 1.2 spares=1 name=localhost.localdomain:0 UUID=dd821fe5:8597b126:460a3afd:857c7989
#刪除或者注釋此行
如果僅僅是停止,而不是刪除,就沒有這么麻煩了,只需先下載,再停止即可。那停止完成之后,怎么再啟動呢?啟動 RAID 的命令如下:
[root@localhost ~]# mdadm -As /dev/md0
mdadm: /dev/md0 has been started with 3 drives and 1 spare.
#啟動/dev/md0
[root@localhost ~]# mount /dev/md0 /raid/
#啟動RAID后,記得掛載
7、模擬分區出現故障
我們的 RAID 雖然配置完成了,但是它真的生效了嗎?我們模擬磁盤報錯,看看備份分區是否會自動代替錯誤分區。mdadm 命令有一個選項 -f,這個選項的作用就是把一塊硬盤或分區變成錯誤狀態,用來模擬 RAID 報錯。命令如下:
[root@localhost ~]# mdadm /dev/mdO -f /dev/sdb7 mdadm: set /dev/sdb7 faulty in /dev/mdO、
#模擬/dev/sdb7分區報錯
[root@1ocalhost ~】# mdadm -D /dev/mdO /dev/mdO:
...省略部分輸出...
Active Devices : 2
Working Devices : 3
Failed Devices : 1
#1個設備報錯了
Spare Devices : 1
...省略部分輸出...
Number Major Minor RaidDevice State
0 8 21 0 active sync /dev/sdb5
1 8 22 1 active sync /dev/sdb6
3 8 24 2 spare rebuilding /dev/sdb8
#/dev/sdb8分區正在準備修復
4 8 23 - faulty spare /dev/sdb7
#/dev/sdb7已經報錯了
要想看到上面的效果,査看時要快一點,否則修復就可能完成了。因為有備份分區的存在,所以分區損壞了,是不用管理員手工的。如果修復完成,再查看,就會出現下面的情況:
[root@localhost ~]# mdadm /dev/mdO
Number Major Minor RaidDevice State
0 8 21 0 active sync /dev/sdb5
1 8 22 1 active sync /dev/sdb6
3 8 24 2 active sync /dev/sdb8
4 8 23 - faulty spare /dev/sdb7
備份分區/dev/sdb8已經被激活,但是 /dev/sdb7分區失效。
8、移除錯誤分區
既然分區已經報錯了,我們就把 /dev/sdb7 分區從 RAID 中刪除。如果這是硬盤,就可以進行更換硬盤的處理了。
移除命令如下:
[root@localhost ~]# mdadm /dev/md0
-remove/dev/sdb7
mdadm: hot removed /dev/sdb7 from /dev/mdO
9、添加新的備份分區
既然分區已經報錯,那么我們還需要加入一個新的備份分區,以備下次硬盤或分區出現問題。既然要加入新的備份分區,當然還需要再劃分出一個 2GB 大小的分區出來,命令如下:
[root@localhost ~]#fdisk -l
Disk /dev/sdb: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 *512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes 1512 bytes
Disk identifier: 0x151a68a9
Device Boot Start End Blocks Id System
/dev/sdb1 1 2610 20964793+ 5 Extended
/dev/sdb5 1 262 2104452 83 Linux
/dev/sdb6 263 524 2104483+ 83 Linux
/dev/sdb7 525 786 2104483+ 83 Linux
/dev/sdb8 787 1048 2104483+ 83 Linux
/dev/sdb9 1049 1310 2104483+ 83 Linux我們新建了 /dev/sdb9 分區,然后把它加入 /dev/md0 作為備份分區,命令如下:
[root@localhost ~]# mdadm /dev/md0 -add /dev/sdb9
mdadm: added /dev/sdb9
#把/dev/sdb9加入/dev/md0
[root@localhost ~]# mdadm -D /dev/md0
...省略部分輸出...
Number Major Minor RaidDevice State
0 8 21 0 active sync /dev/sdb5
1 8 22 1 active sync /dev/sdb6
3 8 24 2 active sync /dev/sdb8
4 8 25 - spare /dev/sdb9
#查看一下,/dev/sdb9已經變成了備份分區