磁盤配額允許控制用戶或者組織對磁盤的使用,它能防止個人或者組織使用文件系統中超過自己使用的部分,或者造成系統完全擁堵。配額必須由root用戶或者具有root權限的用戶啟用和管理。
硬RAID以及軟RAID :RAID是Redundant Array of Independent Disks的簡寫,即獨立硬盤冗余陣列,簡稱磁盤陣列。通過實現的方式不同,可以分為硬RAID和軟RAID兩種;
LVM :LVM是Logical Volume Manager的簡稱,即邏輯卷。是一種可以使用在內核的邏輯分卷管理器。
配額的配置管理
磁盤配額的使用對象必須是整個文件系統,無法對單一的目錄進行設置,并且linux核心必須支持。只能對普通用戶用戶有效,對root賬戶無效。大多數開啟了SELinux的情況下,默認只對/home目錄有效。
配額實驗步驟
1、建立一個新的分區,將該分區格式化為ext系列文件系統,在這個實驗中我們使用的是ext4文件系統;
2、掛載分區到/home目錄下面并且啟用該目錄的配額功能;
3、指定用戶用戶,測試器功能;
查看系統磁盤分區情況
~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 120G 0 disk
├─sda1 8:1 0 500M 0 part /boot
├─sda2 8:2 0 40G 0 part /
├─sda3 8:3 0 20G 0 part /usr
├─sda4 8:4 0 1K 0 part
└─sda5 8:5 0 2G 0 part [SWAP]
sdb 8:16 0 20G 0 disk
sdc 8:32 0 200G 0 disk
sdd 8:48 0 120G 0 disk
sr0 11:0 1 1024M 0 rom
使用磁盤b分區并且格式化為ext4文件系統使用
~]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
Partition number (1-4, default 1):
First sector (2048-41943039, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): +10G
Partition 1 of type Linux and of size 10 GiB is set
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
[root:~]# mkfs.ext4 /dev/sdb1
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
655360 inodes, 2621440 blocks
131072 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2151677952
80 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
將磁盤sdb1掛載到/home下面
cp -a /home/* /mnt/home/
mount /dev/sdb1 /home/
cp -a /mnt/home/ /home/
cd /home/
ll
total 20
drwx------ 2 root root 4096 Nov 10 09:42 lost+found
drwx------ 3 mage mage 4096 Nov 10 09:48 mage
drwx------ 3 roger roger 4096 Nov 10 09:48 roger
drwx------ 3 wang wang 4096 Nov 10 09:48 wang
drwx------ 3 wangcai wangcai 4096 Nov 10 09:48 wangcai
啟用磁盤配額
mount -o remount,usrquota,grpquota /home/
quotacheck -cug /home/
quotaon /home/
啟用普通用戶的配額,設定配額參數
edquota -p wang
setquota wang 100000 150000 100 150 /home
repquota -a
*** Report for user quotas on device /dev/sdb1
Block grace time: 7days; Inode grace time: 7days
Block limits File limits
User used soft hard grace used soft hard grace
----------------------------------------------------------------------
root -- 8 0 0 2 0 0
wang -- 32 100000 150000 13 100 150
mage -- 32 0 0 8 0 0
roger -- 32 0 0 8 0 0
wangcai -- 32 0 0 8 0 0
上面的的Block limits和File limits兩項設置,其中used是現在已經使用的情況,soft是使用預警,當塊使用量或者文件個數達到該值的時候,系統將會預警,后面的hard是最大使用量,達到兩個值的任意一個,將無法創建文件或者增大文件的大小。
下面我們來驗證該功能
切換普通用戶wang
su - wang
pwd
/home/wang
創建文件驗證File limits功能
touch a{1..88}
sdb1: warning, user file quota exceeded.
wang用戶在創建文件之前以及有13個文件,現在創建88個文件剛好達到100預警數量,因此有了sdb1:warning,user file quota exceeded的提示。但是此時還能創建文件。
touch a{89..137}
touch a138
sdb1: write failed, user file limit reached.
touch: cannot touch ‘a138’: Disk quota exceeded
du -sh .
52K .
此時達到最大值150后,提示無法創建,此時磁盤的使用并沒有達到Block limits。
下面我用驗證容量限制
#查看wang用戶的配額限制,最大使用大小為150M左右,預警100M
edquota wang
Disk quotas for user wang (uid 1006):
Filesystem blocks soft hard inodes soft hard
/dev/sdb1 52 100000 150000 13 100 150
#在已經使用52K的情況下,建一個100M大小的文件a
dd if=/dev/zero of=a bs=1M count=100
sdb1: warning, user block quota exceeded. #可以看到系統已經預警了
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 0.319193 s, 329 MB/s
#再建一個50M大小的文件
dd if=/dev/zero of=aa bs=1M count=50
sdb1: write failed, user block limit reached.
dd: error writing ‘aa’: Disk quota exceeded #已經開始報錯
47+0 records in
46+0 records out
48689152 bytes (49 MB) copied, 0.2505 s, 194 MB/s
ll -h
total 147M
-rw-rw-r-- 1 wang wang 100M Nov 10 10:57 a
-rw-rw-r-- 1 wang wang 47M Nov 10 11:01 aa #沒有創建為50M,只有47M
配額實驗結果
由于hard的值為150000,換算后為146.68M,因此只能為大概為147M。以上實驗驗證磁盤配額quota效果。
RAID及其實現
RAID簡稱磁盤陣列,其基本思想就是把多個相對便宜的硬盤組合起來,成為一個硬盤 陣列組,使性能達到甚至超過一個價格昂貴、容量巨大的硬盤。由于RAID把多個硬盤組合成為一個邏輯扇區,因此對于電腦來說,只會把它當作一個硬盤或邏輯存儲單元。
根據選擇的版本不同,RAID比單顆硬盤有以下一個或多個方面的好處:1、增強數據集成度
2、增強容錯功能
3、增強處理量和容量
RAID的版本
RAID 技術最初由加利福尼亞大學伯克利分校(University of California-Berkeley)在1988年提出,經過多年發展已經擁有的眾多的版本,主要分為標準 RAID(RAID 0 、RAID1、RAID4、RAID5、 RAID 6)、混合 RAID(RAID 10、RAID01、RAID 50 等)。
RAID0
RAID0亦稱為條帶。它將兩個以上的磁盤并聯起來,成為一個大容量的磁盤。在存放數據時,分段后分散存儲在這些磁盤中,因為讀寫時都可以并行處理,所以在所有的級別中,RAID0的速度是最快的。但是RAID0既沒有冗余功能,也不具備容錯能力,如果一個磁盤(物理)損壞,所有數據都會丟失,危險程度與JBOD相當。 如下圖所示
RAID1
兩組以上的N個磁盤相互作鏡像,在一些多線程操作系統中能有很好的讀取速度,理論上讀取速度等于硬盤數量的倍數,另外寫入速度有微小的降低。只要一個磁盤正常即可維持運作,可靠性最高。其原理為在主硬盤上存放數據的同時也在鏡像硬盤上寫一樣的數據。當主硬盤(物理)損壞時,鏡像硬盤則代替主硬盤的工作。因為有鏡像硬盤做數據備份,所以RAID 1的數據安全性在所有的RAID級別上來說是最好的。但無論用多少磁盤做RAID 1,僅算一個磁盤的容量,是所有RAID中磁盤利用率最低的一個級別。
如果用兩個不同大小的磁盤建RAID 1,可用空間為較小的那個磁盤,較大的磁盤多出來的空間也可以分區成一個區來使用,不會造成浪費。 如下圖所示
RAID4
它與RAID 3不同的是它在分區時是以區塊為單位分別存在硬盤中,但每次的數據訪問都必須從同比特檢查的那個硬盤中取出對應的同比特數據進行核對,由于過于頻繁的使用,所以對硬盤的損耗可能會提高。(塊交織技術,Block interleaving) 如圖所示
RAID5
RAID5是一種儲存性能、數據安全和存儲成本兼顧的存儲解決方案。它使用的是Disk Striping(硬盤分區)技術。RAID5至少需要三塊硬盤,RAID5不是對存儲的數據進行備份,而是把數據和相對應的奇偶校驗信息存儲到組成RAID5的各個磁盤上,并且奇偶校驗信息和相對應的數據分別存儲于不同的磁盤上。當RAID5的一個磁盤數據發生損壞后,可以利用剩下的數據和相應的奇偶校驗信息去恢復被損壞的數據。RAID 5可以理解為是RAID 0和RAID 1的折衷方案。RAID 5可以為系統提供數據安全保障,但保障程度要比鏡像低而磁盤空間利用率要比鏡像高。RAID 5具有和RAID 0相近似的數據讀取速度,只是因為多了一個奇偶校驗信息,寫入數據的速度相對單獨寫入一塊硬盤的速度略慢,若使用“回寫緩存”可以讓性能改善不少。同時由于多個數據對應一個奇偶校驗信息,RAID 5的磁盤空間利用率要比RAID 1高,存儲成本相對較便宜。如圖所示
RAID6
與RAID 5相比,RAID 6增加第二個獨立的奇偶校驗信息塊。兩個獨立的奇偶系統使用不同的算法,數據的可靠性非常高,任意兩塊磁盤同時失效時不會影響數據完整性。RAID 6需要分配給奇偶校驗信息更大的磁盤空間和額外的校驗計算,相對于RAID 5有更大的IO操作量和計算量,其“寫性能”取決于具體的實現方案,因此RAID6通常不會通過軟件方式來實現,而更可能通過硬件/固件方式實現。
同一數組中最多容許兩個磁盤損壞。更換新磁盤后,數據將會重新算出并寫入新的磁盤中。依照設計理論,RAID 6必須具備四個以上的磁盤才能生效??墒褂玫娜萘繛橛脖P總數減去2的差,乘以最小容量,同理,數據保護區域容量則為最小容量乘以2。RAID 6在硬件磁盤陣列卡的功能中,也是最常見的磁盤陣列檔次 。如圖所示
RAID01以及RAID10
混合型RAID常見的有RAID01和RAID10,RAID01采用的分別是先組合成RAID0,然后用多個RAID0再次組合成RAID01;同理,RAID10是先組合成RAID1,然后用多個RAID1再次組合成RAID0。
RAID分類
通過不同的實現方式,RAID可以分為硬件RAID(簡稱硬RAID)和軟件RAID(簡稱軟RAID)。
硬RAID
簡單來說就是全部通過用硬件來實現RAID功能的就是硬RAID,比如:各種RAID卡,還有主板集成能夠做的RAID都是硬RAID。 所以硬 RAID 就是用專門的RAID控制器(RAID 卡)將硬盤和電腦連接起來,RAID控制器負責將所有的RAID成員磁盤配置成一個虛擬的RAID磁盤卷。
對于操作系統而言,他只能識別到由RAID控制器配置后的虛擬磁盤,而無法識別到組成RAID的各個成員盤硬RAID全面具備了自己的RAID控制/處理與I/O處理芯片,甚至還有陣列緩沖(Array Buffer),對CPU的占用率以及整體性能中最有優勢。
軟RAID
通過用操作系統來完成RAID功能的就是軟RAID,比如:在Linux操作系統下,用3塊硬盤做RAID5。 也就是不使用RAID控制器(業界稱其為RAID 協處理器―RAID Co-Processor )與I/O芯片,直接通過軟件層實現的RAID,所有功能都是操作系統(OS)與CPU來完成,可想而知這是效率最低的一種RAID。
與硬RAID不同的是,軟RAID的各個成員盤對于操作系統來說是可見的,但操作系統并不把各個成員盤呈現給用戶,而只是把通過軟件層配置好的虛擬RAID卷呈現給用戶,使用戶可以像使用一個普通磁盤一樣使用RAID卷。
RAID的實現
由于硬RAID的操作都是在服務器的啟動過程中,在BIOS程序中進行配置的,配置完成后,在操作系統層面只顯示RAID盤。因此,為了更好的顯示RAID盤建立,采用軟RAID的實現方式。
準備磁盤
采用兩塊磁盤,一個磁盤分區來創建軟RAID
創建分區
創建一個名為sdc1的、大小為20G的分區,注意分區類型為fd。
fdisk /dev/sdc
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
Partition number (1-4, default 1):
First sector (2048-419430399, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-419430399, default 419430399): +20G
Partition 1 of type Linux and of size 20 GiB is set
Command (m for help): t
Selected partition 1
Hex code (type L to list all codes): fd #更改分區類型
Changed type of partition 'Linux' to 'Linux raid autodetect'
Command (m for help): p
Disk /dev/sdc: 214.7 GB, 214748364800 bytes, 419430400 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x0002b4f1
Device Boot Start End Blocks Id System
/dev/sdc1 2048 41945087 20971520 fd Linux raid autodetect
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
創建RAID
用兩塊大小不一樣的磁盤/dev/sdb和/dev/sdd以及上面創建大小為20G的分區建立RAID5,并且用一個空閑盤當備用磁盤。當RAID中的一塊磁盤故障時,空閑盤能及時的補上去。
mdadm -C /dev/md0 -l 5 -n 3 -x 1 -a yes /dev/sdb /dev/sdc1 /dev/sdd /dev/sde
mdadm: /dev/sdb appears to be part of a raid array:
level=raid0 devices=0 ctime=Thu Jan 1 08:00:00 1970
mdadm: partition table exists on /dev/sdb but will be lost or
meaningless after creating array
mdadm: /dev/sdc1 appears to contain an ext2fs file system
size=31457280K mtime=Mon Nov 7 22:58:25 2016
mdadm: /dev/sdd appears to be part of a raid array:
level=raid0 devices=0 ctime=Thu Jan 1 08:00:00 1970
mdadm: partition table exists on /dev/sdd but will be lost or
meaningless after creating array
mdadm: largest drive (/dev/sdd) exceeds size (20955136K) by more than 1%
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Thu Nov 10 13:26:12 2016
Raid Level : raid5
Array Size : 41910272 (39.97 GiB 42.92 GB)
Used Dev Size : 20955136 (19.98 GiB 21.46 GB)
Raid Devices : 3
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Thu Nov 10 13:26:20 2016
State : clean, degraded, recovering
Active Devices : 2
Working Devices : 4
Failed Devices : 0
Spare Devices : 2
Layout : left-symmetric
Chunk Size : 512K
Rebuild Status : 10% complete
Name : localhost.localdomain:0 (local to host localhost.localdomain)
UUID : c3dee1ea:66cec595:3f78ede8:8e708b2c
Events : 2
Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb
1 8 33 1 active sync /dev/sdc1
4 8 48 2 spare rebuilding /dev/sdd
3 8 64 - spare /dev/sde #備用空閑盤
格式化并掛載該RAID,確認其可用
mkfs.ext4 /dev/md0 #####格式化
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=128 blocks, Stripe width=256 blocks
2621440 inodes, 10477568 blocks
523878 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2157969408
320 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
mkdir /mnt/md ####創建掛載點
mount /dev/md0 /mnt/md/ #####掛載
cd /mnt/md/ ####進入掛載目錄
ll
total 16
drwx------ 2 root root 16384 Nov 10 13:31 lost+found
cp /etc/issue . ####復制文件
cat issue ####查看文件
\S
Kernel \r on an \m
Mage Education Learning Services
http://www.magedu.com
驗證空閑盤的自動替代功能
空閑盤在整個RAID中具有很重要的功能,當陣列中的一塊磁盤出現故障的時候,共享盤能夠自動頂替,并且同步數據,保證RAID磁盤的正常使用。
mdadm -D /dev/md0 ####正常狀態下的磁盤情況
/dev/md0:
Version : 1.2
Creation Time : Thu Nov 10 13:26:12 2016
Raid Level : raid5
Array Size : 41910272 (39.97 GiB 42.92 GB)
Used Dev Size : 20955136 (19.98 GiB 21.46 GB)
Raid Devices : 3
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Thu Nov 10 13:36:04 2016
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)
UUID : c3dee1ea:66cec595:3f78ede8:8e708b2c
Events : 18
Number Major Minor RaidDevice State ###如下
0 8 16 0 active sync /dev/sdb
1 8 33 1 active sync /dev/sdc1
4 8 48 2 active sync /dev/sdd
3 8 64 - spare /dev/sde
mdadm /dev/md0 -f /dev/sdd ###標記/dev/sdd故障
mdadm: set /dev/sdd faulty in /dev/md0
mdadm -D /dev/md0 ###查看一塊磁盤故障是的情況
/dev/md0:
Version : 1.2
Creation Time : Thu Nov 10 13:26:12 2016
Raid Level : raid5
Array Size : 41910272 (39.97 GiB 42.92 GB)
Used Dev Size : 20955136 (19.98 GiB 21.46 GB)
Raid Devices : 3
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Thu Nov 10 13:41:34 2016
State : clean, degraded, recovering
Active Devices : 2
Working Devices : 3
Failed Devices : 1
Spare Devices : 1
Layout : left-symmetric
Chunk Size : 512K
Rebuild Status : 1% complete
Name : localhost.localdomain:0 (local to host localhost.localdomain)
UUID : c3dee1ea:66cec595:3f78ede8:8e708b2c
Events : 20
Number Major Minor RaidDevice State ###情況如下
0 8 16 0 active sync /dev/sdb
1 8 33 1 active sync /dev/sdc1
3 8 64 2 spare rebuilding /dev/sde
4 8 48 - faulty /dev/sdd
上面的實驗顯示,當一塊磁盤發生故障時,空閑盤會自動頂替上去并且同步數據。完成后RAID所有磁盤狀態如下:
mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Thu Nov 10 13:26:12 2016
Raid Level : raid5
Array Size : 41910272 (39.97 GiB 42.92 GB)
Used Dev Size : 20955136 (19.98 GiB 21.46 GB)
Raid Devices : 3
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Thu Nov 10 13:43:21 2016
State : clean
Active Devices : 3
Working Devices : 3
Failed Devices : 1
Spare Devices : 0
Layout : left-symmetric
Chunk Size : 512K
Name : localhost.localdomain:0 (local to host localhost.localdomain)
UUID : c3dee1ea:66cec595:3f78ede8:8e708b2c
Events : 37
Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb
1 8 33 1 active sync /dev/sdc1
3 8 64 2 active sync /dev/sde
4 8 48 - faulty /dev/sdd
此時顯示的是/dev/sdd為故障狀態,而/dev/sde已經頂替上了/dev/sdd的位置,而且整個/dev/md0正常。
驗證其文件是否正常
cat issue
\S
Kernel \r on an \m
Mage Education Learning Services
http://www.magedu.com
由此可見,設備正常,文件沒有受到破壞。
此時在標記一塊磁盤故障,則會對整個設備造成降級運行甚至破壞。
mdadm /dev/md0 -f /dev/sdc1 ###標記/dev/sdc1故障
mdadm: set /dev/sdc1 faulty in /dev/md0
mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Thu Nov 10 13:26:12 2016
Raid Level : raid5
Array Size : 41910272 (39.97 GiB 42.92 GB)
Used Dev Size : 20955136 (19.98 GiB 21.46 GB)
Raid Devices : 3
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Thu Nov 10 13:55:55 2016
State : clean, degraded ###顯示為降級運行
Active Devices : 2
Working Devices : 2
Failed Devices : 2
Spare Devices : 0
Layout : left-symmetric
Chunk Size : 512K
Name : localhost.localdomain:0 (local to host localhost.localdomain)
UUID : c3dee1ea:66cec595:3f78ede8:8e708b2c
Events : 39
Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb
2 0 0 2 removed
3 8 64 2 active sync /dev/sde
1 8 33 - faulty /dev/sdc1
4 8 48 - faulty /dev/sdd
cat issue ###正常顯示文件內容
\S
Kernel \r on an \m
Mage Education Learning Services
http://www.magedu.com
以上說明,RAID5最少需要3塊磁盤,當不足3塊時,會降級運行。
移除設備
mdadm /dev/md0 -r /dev/sdc1 ###將/dev/sdc1從RAID中移除
mdadm: hot removed /dev/sdc1 from /dev/md0
刪除RAID
mdadm /dev/md0 -r /dev/sdb #### 移除設備/dev/sdb
mdadm: hot removed /dev/sdb from /dev/md0
umount /mnt/md/ #### 移除掛載
mdadm --zero-superblock /dev/sdb /dev/sdc1 /dev/sdd /dev/sde ###移除RAID信息
LVM
什么是LVM
LVM利用Linux內核的device-mapper來實現存儲系統的虛擬化。 通過LVM,你可以實現存儲空間的抽象化并在上面建立虛擬分區,可以更簡便地擴大和縮小分區,可以增刪分區時無需擔心某個硬盤上沒有足夠的連續空間. LVM是用來方便管理的,不會提供額外的安全保證。
LVM的組成
LVM的基本組成塊(building blocks)如下:
物理卷Physical volume (PV):可以在上面建立卷組的媒介,可以是硬盤分區,也可以是硬盤本身或者回環文件。物理卷包括一個特殊的header,其余部分被切割為一塊塊物理區域.
卷組Volume group (VG):將一組物理卷收集為一個管理單元。
邏輯卷Logical volume (LV):虛擬分區,由物理區域組成。
物理區域Physical extent (PE):硬盤可供指派給邏輯卷的最小單位(通常為4MB)。
優點
1、比起正常的硬盤分區管理,LVM更富于彈性:
2、使用卷組(VG),使眾多硬盤空間看起來像一個大硬盤。
3、使用邏輯卷(LV),可以創建跨越眾多硬盤空間的分區。
4、可以創建小的邏輯卷(LV),在空間不足時再動態調整它的大小。
5、在調整邏輯卷(LV)大小時可以不用考慮邏輯卷在硬盤上的位置,不用擔心沒有可用的連續空間。
6、可以在線(online)對邏輯卷(LV)和卷組(VG)進行創建、刪除、調整大小等操作。LVM上的文件系統也需要重新調整大小,某些文件系統也支持這樣的在線操作。
7、無需重新啟動服務,就可以將服務中用到的邏輯卷(LV)在線(online)/動態(live)遷移至別的硬盤上。
8、允許創建快照,可以保存文件系統的備份,同時使服務的下線時間(downtime)降低到最小。
這些優點使得LVM對服務器的管理非常有用,對于桌面系統管理的幫助則沒有那么顯著,你需要根據實際情況進行取舍。
缺點
在系統設置時需要更復雜的額外步驟,并且不提供容錯功能。
LVM的創建
創建LVM可以采用分區,也可以用磁盤。在采用分區創建的話,分區類型須指定為8e。
創建一個分區類型為8e的分區
fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
Partition number (1-4, default 1):
First sector (2048-41943039, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): +10G
Partition 1 of type Linux and of size 10 GiB is set
Command (m for help): t
Selected partition 1
Hex code (type L to list all codes): 8e
Changed type of partition 'Linux' to 'Linux LVM'
Command (m for help): p
Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x00000005
Device Boot Start End Blocks Id System
/dev/sdb1 2048 20973567 10485760 8e Linux LVM
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
創建PV
lsblk ##查看當前磁盤情況
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
md0 9:0 0 40G 0 raid5
sda 8:0 0 120G 0 disk
├─sda1 8:1 0 500M 0 part /boot
├─sda2 8:2 0 40G 0 part /
├─sda3 8:3 0 20G 0 part /usr
├─sda4 8:4 0 512B 0 part
└─sda5 8:5 0 2G 0 part [SWAP]
sdb 8:16 0 20G 0 disk
└─sdb1 8:17 0 10G 0 part
sdc 8:32 0 200G 0 disk
sdd 8:48 0 120G 0 disk
sde 8:64 0 20G 0 disk
sr0 11:0 1 1024M 0 rom
#創建pv
pvcreate /dev/sdd /dev/sdc /dev/sdb1
Physical volume "/dev/sdd" successfully created
Physical volume "/dev/sdc" successfully created
Physical volume "/dev/sdb1" successfully created
創建VG
####創建名為myvg的vg,且PE為8M
vgcreate -s 8M myvg /dev/sdd /dev/sdc /dev/sdb1
Volume group "myvg" successfully created
創建LV
##創建名為mylv,大小為20G的LV
lvcreate -L 20G -n mylv myvg
Logical volume "mylv" created.
格式化LV,創建掛載點掛載,并且復制文件
mkfs.ext4 /dev/myvg/mylv ###格式化LV
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
1310720 inodes, 5242880 blocks
262144 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2153775104
160 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
mkdir /mnt/mylv ####創建分區并掛載
mount /dev/myvg/mylv /mnt/mylv/
cd /mnt/mylv/
cp -r /etc/issue .
cp -r /etc/rc.d/ .
cp -r /etc/rc.d/init.d/functions .
cp -r /etc/fstab .
擴展LV為30G
lvextend -r -L 30G /dev/myvg/mylv
Size of logical volume myvg/mylv changed from 20.00 GiB (2560 extents) to 30.00 GiB (3840 extents).
Logical volume mylv successfully resized.
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/mapper/myvg-mylv is mounted on /mnt/mylv; on-line resizing required
old_desc_blocks = 3, new_desc_blocks = 4
The filesystem on /dev/mapper/myvg-mylv is now 7864320 blocks long.
[root:mylv]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 40G 804M 40G 2% /
devtmpfs 223M 0 223M 0% /dev
tmpfs 237M 0 237M 0% /dev/shm
tmpfs 237M 8.9M 229M 4% /run
tmpfs 237M 0 237M 0% /sys/fs/cgroup
/dev/sda3 20G 4.4G 16G 22% /usr
/dev/sda1 497M 140M 358M 29% /boot
tmpfs 48M 0 48M 0% /run/user/0
/dev/mapper/myvg-mylv 30G 45M 28G 1% /mnt/mylv
###檢查文件時候損壞
cat issue
\S
Kernel \r on an \m
Mage Education Learning Services
http://www.magedu.com
cat fstab
#
# /etc/fstab
# Created by anaconda on Tue Oct 11 16:36:27 2016
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=f9533b2d-c82f-42bd-98ba-14095370099a / xfs defaults 0 0
UUID=3f97a107-e4f2-426a-839e-b7a696b540c3 /boot xfs defaults 0 0
UUID=55427c3c-2ab2-45c5-8913-f755a5d79497 /usr xfs defaults 0 0
UUID=4c1a5b7d-13b5-4031-8da4-f745c32ad04f swap
縮減LV的大小
縮減LV的大小分為5步:
a、卸載LV
umount /mnt/mylv/
b、檢測文件系統
e2fsck -f /dev/myvg/mylv # 須強制檢測
e2fsck 1.42.9 (28-Dec-2013)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/myvg/mylv: 14/1966080 files (0.0% non-contiguous), 167448/7864320 blocksc、縮減文件系統大小
resize2fs /dev/myvg/mylv 10G
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/myvg/mylv to 2621440 (4k) blocks.
The filesystem on /dev/myvg/mylv is now 2621440 blocks long.d、縮減LV大小
lvreduce -L 10G /dev/myvg/mylv
WARNING: Reducing active logical volume to 10.00 GiB
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce mylv? [y/n]: y
Size of logical volume myvg/mylv changed from 30.00 GiB (3840 extents) to 10.00 GiB (1280 extents).
Logical volume mylv successfully resized.e、重新掛載LV
mount /dev/myvg/mylv /mnt/mylv/
此時,查看該LV的大小
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 40G 805M 40G 2% /
devtmpfs 223M 0 223M 0% /dev
tmpfs 237M 0 237M 0% /dev/shm
tmpfs 237M 8.9M 229M 4% /run
tmpfs 237M 0 237M 0% /sys/fs/cgroup
/dev/sda3 20G 4.4G 16G 22% /usr
/dev/sda1 497M 140M 358M 29% /boot
tmpfs 48M 0 48M 0% /run/user/0
/dev/mapper/myvg-mylv 9.8G 37M 9.2G 1% /mnt/mylv #大小為9.8G
查看此時文件是否正常
cat /mnt/mylv/issue
\S
Kernel \r on an \m
Mage Education Learning Services
http://www.magedu.com
cat /mnt/mylv/f
fstab functions
[root:~]# cat /mnt/mylv/fstab
#
# /etc/fstab
# Created by anaconda on Tue Oct 11 16:36:27 2016
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=f9533b2d-c82f-42bd-98ba-14095370099a / xfs defaults 0 0
UUID=3f97a107-e4f2-426a-839e-b7a696b540c3 /boot xfs defaults 0 0
UUID=55427c3c-2ab2-45c5-8913-f755a5d79497 /usr xfs defaults 0 0
UUID=4c1a5b7d-13b5-4031-8da4-f745c32ad04f swap swap defaults 0 0
磁盤或者分區故障的處理
通過pvmove命令轉移空間數據
pvdisplay ###查看pv占用情況
--- Physical volume ---
PV Name /dev/sdd
VG Name myvg
PV Size 120.00 GiB / not usable 8.00 MiB
Allocatable yes
PE Size 8.00 MiB
Total PE 15359
Free PE 14079
Allocated PE 1280
PV UUID o0R5Im-C8R4-hep8-18jL-qwtB-S69T-vRvEDo
--- Physical volume ---
PV Name /dev/sdc
VG Name myvg
PV Size 200.00 GiB / not usable 8.00 MiB
Allocatable yes
PE Size 8.00 MiB
Total PE 25599
Free PE 25599
Allocated PE 0
PV UUID FmF3cU-Xsn4-ha5f-TZmc-ioMj-kOmG-lppdcx
--- Physical volume ---
PV Name /dev/sdb1
VG Name myvg
PV Size 10.00 GiB / not usable 8.00 MiB
Allocatable yes
PE Size 8.00 MiB
Total PE 1279
Free PE 1279
Allocated PE 0
PV UUID wEZ2zm-jM1m-VPg7-N7PI-JMLw-q4XM-dycCsH
##將/dev/sdd上面的數據遷移到/dev/sdc上面
pvmove /dev/sdd /dev/sdc
/dev/sdd: Moved: 0.0%
/dev/sdd: Moved: 99.7%
/dev/sdd: Moved: 100.0%通過vgreduce命令將即將壞的磁盤或者分區從卷組myvg里面移除除去。
vgreduce myvg /dev/sdd
Removed "/dev/sdd" from volume group "myvg"通過pvremove命令將即將壞的磁盤或者分區從系統中刪除掉。
pvremove /dev/sdd
Labels on physical volume "/dev/sdd" successfully wiped手工拆除硬盤或者通過一些工具修復分區。
為LV創建快照
為mylv創建大小為1G,名字為mylv-snap的快照,并查看文件
##創建快照
lvcreate -L 1G -n mylvsnap -p r -s /dev/myvg/mylv
Logical volume "mylvsnap" created.
##掛載快照
mkdir /mnt/mylvsnap
mount /dev/myvg/mylv /mnt/mylvsnap/
##查看文件
cd /mnt/mylvsnap/
[root:mylvsnap]# ll
total 40
-rw-r--r-- 1 root root 595 Nov 10 15:42 fstab
-rw-r--r-- 1 root root 13948 Nov 10 15:42 functions
-rw-r--r-- 1 root root 79 Nov 10 15:42 issue
drwx------ 2 root root 16384 Nov 10 15:39 lost+found
cat fstab issue
#
# /etc/fstab
# Created by anaconda on Tue Oct 11 16:36:27 2016
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=f9533b2d-c82f-42bd-98ba-14095370099a / xfs defaults 0 0
UUID=3f97a107-e4f2-426a-839e-b7a696b540c3 /boot xfs defaults 0 0
UUID=55427c3c-2ab2-45c5-8913-f755a5d79497 /usr xfs defaults 0 0
UUID=4c1a5b7d-13b5-4031-8da4-f745c32ad04f swap swap defaults 0 0
\S
Kernel \r on an \m
Mage Education Learning Services
http://www.magedu.com
##快照創建成功
刪除LV
在確保數據備份完畢,LV沒有存在的必要時,可以刪除LV。刪除LV的步驟和創建的步驟剛好相反。
umount /dev/myvg/mylv ##卸載LV
lvremove /dev/myvg/mylv ##刪除LV
Do you really want to remove active logical volume mylv? [y/n]: y
Logical volume "mylv" successfully removed
vgremove myvg ##刪除VG
Volume group "myvg" successfully removed
pvs
PV VG Fmt Attr PSize PFree
/dev/sdb1 lvm2 --- 10.00g 10.00g
/dev/sdc lvm2 --- 200.00g 200.00g
pvremove /dev/sdc /dev/sdb1 ##刪除PV
Labels on physical volume "/dev/sdc" successfully wiped
Labels on physical volume "/dev/sdb1" successfully wiped
##上傳完畢
原創文章,作者:王更生,如若轉載,請注明出處:http://www.www58058.com/60587