《Linux-基礎篇筆記》 Linux高級文件系統管理(七)
Quota磁盤配額
由於Linux是一個多用戶管理的操作系統,而Linux默認情況下並不限制每個用戶使用磁盤空間的大小.
假如某個用戶疏忽或者惡意占滿磁盤空間將導致系統磁盤無法寫入甚至崩潰.為了保證系統磁盤的有足夠的剩余空間,我們需要對用戶和組進行磁盤空間使用限制.
磁盤配額限制類型:
1.限制用戶和組對磁盤空間的使用量
2.限制用戶和組在磁盤內創建文件的個數
磁盤配額限制級別:
1.軟限制:低級限制,此限制可以突破,突破時會被警告,超出部分會有寬限天數,寬限天數到期後超出部分被清空,軟限制不能超過硬限制
2.硬限制:絕對限制此限制不會被突破,達到指定限制後無法使用更多空間
註:磁盤配額是針對分區進行設置的,無法實現 "某用戶在系統中共計只能使用50MB磁盤空間" 只能設置某用戶在/home分區能使用30M這樣的限制.
切記:磁盤配額是針對分區的!
磁盤配額常用選項
※檢查內核是否支持磁盤配額※
[root@localhost ~]# cat /boot/config-3.10.0-693.el7.x86_64 |grep "CONFIG_QUOTA" CONFIG_QUOTA=y CONFIG_QUOTA_NETLINK_INTERFACE=y # CONFIG_QUOTA_DEBUG is not set CONFIG_QUOTA_TREE=y CONFIG_QUOTACTL=y CONFIG_QUOTACTL_COMPAT=y
※檢查是否安裝QUOTA※
root@localhost ~]# rpm -q quota quota-4.01-17.el7.x86_64 [root@localhost ~]# [root@localhost ~]# yum install -y quota Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile Package 1:quota-4.01-17.el7.x86_64 already installed and latest version Nothing todo
※檢查指定分區的掛載屬性是否滿足條件※
[root@localhost ~]# dumpe2fs -h /dev/vdb |grep "Default mount options" dumpe2fs 1.42.9 (28-Dec-2013) Default mount options: user_xattr acl #檢查結果中是否包含,usrquota,grpquota兩個掛載屬性
※生成用戶和組的配置文件※
quotacheck 選項 分區名 -a #掃描/etc/mtab文件中所有啟用磁盤配額功能的分區.如果加入此參數,命令後面就不需要加入分區名了 -u #建立用戶配額的配置文件,即生成aquota.user -g #建立組配額的配置文件,即aquota.group -v #顯示掃描過程 -c #清除原有的配置文件,重新建立新的配置文件 註:若報錯沒有權限生成文件,則需要關閉SELinux
※編輯配置文件,設置指定限制大小※
edquota 選項 用戶名或組名 -u #用戶名 -g #組名 -t #設定寬限時間 -p #復制磁盤配額規則,不需要每一個用戶或者組都手動設置一遍 #edquota -p 模板用戶 -u 目標用戶 註:配置文件中所寫大小默認單位KB
※啟動Quota配額管理※
quotaon 選項 分區名 -a #根據/etc/mtab文件啟動所有分區的磁盤配額(不寫分區名) -u #啟動用戶的磁盤配額 -g #啟動組的磁盤配額 -v #顯示啟動過程信息
※關閉Quota配額管理※
quotaoff 選項 分區名 -a #根據/etc/mtab文件關閉所有分區的磁盤配額(不寫分區名) -u #關閉用戶的磁盤配額 -g #關閉組的磁盤配額 -v #顯示關閉過程信息
※查看指定用戶和組的配額信息※
quota 選項 用戶或組名 -u #用戶名 -g #組名 -v #顯示詳細信息 -s #以常見單位顯示大小
※查看指定分區的磁盤配額※
repquota 選項 分區名 -u #查詢用戶配額 -g #查詢組配額 -v #顯示詳情 -s #以常見單位顯示
※非交互設置磁盤配額命令※
setquota -u 用戶名 軟(容) 硬(容) 軟(數) 硬(數) 分區名
註:這樣的非交互式的命令更適合寫入腳本,而且假如有很多用戶的磁盤配額配置相同也可以用復制來實現。
磁盤配額小實驗
這裏有一塊未分區的磁盤,請手動分區並格式化.
將磁盤配額開啟,並寫入開機自啟動列表
配置lyshark1的軟限制200M,硬限制500M,配置temp組軟限制100M,硬限制200M
1.檢查系統是否支持配額
[root@localhost ~]# cat /boot/config-3.10.0-862.el7.x86_64 |grep "CONFIG_QUOTA" CONFIG_QUOTA=y CONFIG_QUOTA_NETLINK_INTERFACE=y # CONFIG_QUOTA_DEBUG is not set CONFIG_QUOTA_TREE=y CONFIG_QUOTACTL=y CONFIG_QUOTACTL_COMPAT=y
2.查看磁盤
[root@localhost ~]# ll /dev/sd* brw-rw---- 1 root disk 8, 0 6月 24 09:14 /dev/sda brw-rw---- 1 root disk 8, 1 6月 24 09:14 /dev/sda1 brw-rw---- 1 root disk 8, 2 6月 24 09:14 /dev/sda2 brw-rw---- 1 root disk 8, 16 6月 24 09:14 /dev/sdb
3.磁盤分區/dev/sdb
[root@localhost ~]# parted /dev/sdb GNU Parted 3.1 使用 /dev/sdb Welcome to GNU Parted! Type ‘help‘ to view a list of commands. (parted) mklabel gpt 警告: The existing disk label on /dev/sdb will be destroyed and all data on this disk will be lost. Do you want to continue? 是/Yes/否/No? Yes (parted) (parted) mkpart 分區名稱? []? lyshark 文件系統類型? [ext2]? 起始點? 0M 結束點? 20000M 警告: The resulting partition is not properly aligned for best performance. 忽略/Ignore/放棄/Cancel? Ignore (parted)
4.格式化分好的分區/dev/sdb
[root@localhost ~]# mkfs.ext4 /dev/sdb1 mke2fs 1.42.9 (28-Dec-2013) warning: 376 blocks unused. 文件系統標簽= OS type: Linux 塊大小=4096 (log=2) 分塊大小=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 1222992 inodes, 4882432 blocks 244121 blocks (5.00%) reserved for the super user 第一個數據塊=0 Maximum filesystem blocks=2153775104 149 block groups 32768 blocks per group, 32768 fragments per group 8208 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000 Allocating group tables: 完成 正在寫入inode表: 完成 Creating journal (32768 blocks): 完成 Writing superblocks and filesystem accounting information: 完成
5.在/下創建掛載點test,並將/dev/sdb1掛載到指定分區
[root@localhost ~]# mkdir /test [root@localhost ~]# mount /dev/sdb1 /test/
6.檢查分區是否支持配額 (主要看有沒有usrquota,grpquota)
[root@localhost ~]# dumpe2fs -h /dev/sdb1 |grep "Default mount options" dumpe2fs 1.42.9 (28-Dec-2013) Default mount options: user_xattr acl [root@localhost ~]# [root@localhost ~]# cat /proc/mounts |grep "/dev/sdb1" /dev/sdb1 /test ext4 rw,relatime,data=ordered 0 0 [root@localhost ~]#
7.設置開機自動掛載分區,並開啟配額
[root@localhost ~]# ls -l /dev/disk/by-uuid/ 總用量 0 lrwxrwxrwx 1 root root 9 6月 24 09:14 2018-05-03-20-55-23-00 -> ../../sr0 lrwxrwxrwx 1 root root 10 6月 24 09:23 6f96b2e8-f378-4443-ad3f-45eee1b88738 -> ../../sdb1 lrwxrwxrwx 1 root root 10 6月 24 09:14 93ec1c5f-e924-4b52-809b-9e48255beeeb -> ../../dm-0 lrwxrwxrwx 1 root root 10 6月 24 09:14 ac51de25-b3d1-4aba-ab06-0ba772fa7a95 -> ../../dm-1 lrwxrwxrwx 1 root root 10 6月 24 09:21 f78783de-5115-41cf-a57e-24ee3e69e4ac -> ../../sda1 [root@localhost ~]# [root@localhost ~]# cat /etc/fstab # # /etc/fstab # Created by anaconda on Wed Jun 6 17:36:24 2018 # # 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 # /dev/mapper/centos-root / xfs defaults 0 0 UUID=f78783de-5115-41cf-a57e-24ee3e69e4ac /boot xfs defaults 0 0 /dev/mapper/centos-swap swap swap defaults 0 0 UUID=2018-05-03-20-55-23-00 /test ext4 defaults,usrquota,grpquota 0 0 #寫入這一條就足夠了
[root@localhost ~]# mount -o remount,usrquota,grpquota /dev/sdb1
8.配置Quota配額命令
quotacheck -ugv [分區名] #生成配額文件 edquota -ugtp [用戶名/組名] #編輯限制 quota on/off -augv #開啟配額 quota -ugvs #查看指定用戶或組的配額 repquota -ugvs #查看所有配額
LVM邏輯卷管理器
LVM (Logical Volume Manager)邏輯卷管理,它是Linux環境下對磁盤分區進行管理的一種機制.
普通的磁盤分區管理方式在分區劃分好之後就無法改變其大小,當一個邏輯分區存放不下某個文件時,解決的方法通常是使用符號鏈接,或者使用調整分區大小的工具,但這只是暫時解決辦法,沒有從根本上解決問題.
簡單來說LVM就是將物理磁盤融合成一個或幾個大的虛擬磁盤存儲池,按照我們的需求去存儲池劃分空間來使用,由於是虛擬的存儲池,所以劃分空間時可以自由的調整大小.
LVM的組成部分:
物理卷 (PV | Physical Volume) #由磁盤或分區轉化而成
卷組 (VG | Volume Group) #將多個物理卷組合在一起組成了卷組
邏輯卷 (LV | Logical Volume) #把卷組理解為硬盤的話,那麽我們的邏輯卷則是硬盤上的分區,邏輯卷可以進行格式化存儲數據.
物理擴展 (PE | Physical Extend) #PE卷組的最小存儲單元,PE所在的位置是VG卷組,即硬盤上,那麽我們可以把PE理解為硬盤上的扇區,默認是4MB,可自由配置.
LVM邏輯卷小實驗
1.這裏準備好4塊硬盤,以下我準備了橙色部分,無需分區與格式化.
[root@localhost ~]# ll /dev/sd* brw-rw---- 1 root disk 8, 0 6月 24 09:45 /dev/sda brw-rw---- 1 root disk 8, 1 6月 24 09:45 /dev/sda1 brw-rw---- 1 root disk 8, 2 6月 24 09:45 /dev/sda2 brw-rw---- 1 root disk 8, 16 6月 24 09:45 /dev/sdb brw-rw---- 1 root disk 8, 32 6月 24 09:45 /dev/sdc brw-rw---- 1 root disk 8, 48 6月 24 09:45 /dev/sdd brw-rw---- 1 root disk 8, 64 6月 24 09:45 /dev/sde
2.創建PV,這裏我們使用3塊來創建
格式:pvcreate [分區路徑],[分區路徑][.......] [root@localhost ~]# pvcreate /dev/sdb /dev/sdc /dev/sdd Physical volume "/dev/sdb" successfully created. Physical volume "/dev/sdc" successfully created. Physical volume "/dev/sdd" successfully created.
卸載PV,只需要執行pvremove
格式:pvremove [分區路徑] [root@localhost ~]# pvs PV VG Fmt Attr PSize PFree /dev/sda2 centos lvm2 a-- <19.00g 0 /dev/sdb lvm2 --- 20.00g 20.00g /dev/sdc lvm2 --- 20.00g 20.00g /dev/sdd lvm2 --- 20.00g 20.00g [root@localhost ~]# [root@localhost ~]# pvremove /dev/sdd Labels on physical volume "/dev/sdd" successfully wiped.
3.創建VG卷組,在PV中選擇
格式:vgcreate -s [指定PE大小] [VG卷組名] [分區路徑] [分區路徑][.....] [root@localhost ~]# vgcreate -s 4M my_vg /dev/sdb /dev/sdc /dev/sdd Volume group "my_vg" successfully created [root@localhost ~]# vgs VG #PV #LV #SN Attr VSize VFree centos 1 2 0 wz--n- <19.00g 0 my_vg 3 0 0 wz--n- <59.99g <59.99g
在PV中添加一個新分區進入VG卷組(添加VG)
格式:vgextend [卷組名] [物理卷分區] [root@localhost ~]# vgextend my_vg /dev/sde Volume group "my_vg" successfully extended [root@localhost ~]# vgs VG #PV #LV #SN Attr VSize VFree centos 1 2 0 wz--n- <19.00g 0 my_vg 4 0 0 wz--n- 79.98g 79.98g
在VG卷組裏移除一個PV(移除單個VG)
格式:vgreduce [卷組名] [物理卷分區] [root@localhost ~]# vgreduce my_vg /dev/sde Removed "/dev/sde" from volume group "my_vg"
移除整個卷組
格式:vgremove [卷組名]
移除空的物理卷VG
格式:vgreduce -a [卷組名]
4.LV的創建擴容縮小以及快照
a.創建LV
格式:lvcreate -L [指定大小] -n [LV名字] [VG卷組:從哪個卷組裏劃分] [root@localhost ~]# lvcreate -L 10G -n my_lv my_vg Logical volume "my_lv" created. [root@localhost ~]# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert root centos -wi-ao---- <17.00g swap centos -wi-ao---- 2.00g my_lv my_vg -wi-a----- 10.00g
b.格式化並掛載
[root@localhost ~]# mkfs.ext4 /dev/my_vg/my_lv mke2fs 1.42.9 (28-Dec-2013) 文件系統標簽= OS type: Linux 塊大小=4096 (log=2) 分塊大小=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 655360 inodes, 2621440 blocks 131072 blocks (5.00%) reserved for the super user 第一個數據塊=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: 完成 正在寫入inode表: 完成 Creating journal (32768 blocks): 完成 Writing superblocks and filesystem accounting information: 完成 [root@localhost ~]# mount /dev/my_vg/my_lv /lyshark/ [root@localhost ~]# df -h 文件系統 容量 已用 可用 已用% 掛載點 /dev/mapper/centos-root 17G 1.2G 16G 7% / devtmpfs 98M 0 98M 0% /dev tmpfs 110M 0 110M 0% /dev/shm tmpfs 110M 5.5M 104M 6% /run tmpfs 110M 0 110M 0% /sys/fs/cgroup /dev/sda1 1014M 130M 885M 13% /boot tmpfs 22M 0 22M 0% /run/user/0 /dev/mapper/my_vg-my_lv 9.8G 37M 9.2G 1% /lyshark
c.LV的擴容 (將LV的容量擴展5G的空間)
[root@localhost ~]# df -h 文件系統 容量 已用 可用 已用% 掛載點 /dev/mapper/centos-root 17G 1.2G 16G 7% / devtmpfs 98M 0 98M 0% /dev tmpfs 110M 0 110M 0% /dev/shm tmpfs 110M 5.5M 104M 6% /run tmpfs 110M 0 110M 0% /sys/fs/cgroup /dev/sda1 1014M 130M 885M 13% /boot tmpfs 22M 0 22M 0% /run/user/0 /dev/mapper/my_vg-my_lv 9.8G 37M 9.2G 1% /lyshark [root@localhost ~]# [root@localhost ~]# lvextend -L +5G /dev/my_vg/my_lv Size of logical volume my_vg/my_lv changed from 10.00 GiB (2560 extents) to 15.00 GiB (3840 extents). Logical volume my_vg/my_lv successfully resized. [root@localhost ~]# resize2fs -f /dev/my_vg/my_lv resize2fs 1.42.9 (28-Dec-2013) Filesystem at /dev/my_vg/my_lv is mounted on /lyshark; on-line resizing required old_desc_blocks = 2, new_desc_blocks = 2 The filesystem on /dev/my_vg/my_lv is now 3932160 blocks long. [root@localhost ~]# df -h 文件系統 容量 已用 可用 已用% 掛載點 /dev/mapper/centos-root 17G 1.2G 16G 7% / devtmpfs 98M 0 98M 0% /dev tmpfs 110M 0 110M 0% /dev/shm tmpfs 110M 5.5M 104M 6% /run tmpfs 110M 0 110M 0% /sys/fs/cgroup /dev/sda1 1014M 130M 885M 13% /boot tmpfs 22M 0 22M 0% /run/user/0 /dev/mapper/my_vg-my_lv 15G 41M 14G 1% /lyshark
d.LV的縮小(將LV的容量縮小5G的空間)
[root@localhost ~]# df -h 文件系統 容量 已用 可用 已用% 掛載點 /dev/mapper/centos-root 17G 1.2G 16G 7% / devtmpfs 98M 0 98M 0% /dev tmpfs 110M 0 110M 0% /dev/shm tmpfs 110M 5.5M 104M 6% /run tmpfs 110M 0 110M 0% /sys/fs/cgroup /dev/sda1 1014M 130M 885M 13% /boot tmpfs 22M 0 22M 0% /run/user/0 /dev/mapper/my_vg-my_lv 15G 41M 14G 1% /lyshark [root@localhost ~]# [root@localhost ~]# umount /dev/my_vg/my_lv [root@localhost ~]# [root@localhost ~]# e2fsck -f /dev/my_vg/my_lv e2fsck 1.42.9 (28-Dec-2013) 第一步: 檢查inode,塊,和大小 第二步: 檢查目錄結構 第3步: 檢查目錄連接性 Pass 4: Checking reference counts 第5步: 檢查簇概要信息 /dev/my_vg/my_lv: 11/983040 files (0.0% non-contiguous), 104724/3932160 blocks [root@localhost ~]# [root@localhost ~]# resize2fs -f /dev/my_vg/my_lv 10G(減小後的大小) resize2fs 1.42.9 (28-Dec-2013) Resizing the filesystem on /dev/my_vg/my_lv to 2621440 (4k) blocks. The filesystem on /dev/my_vg/my_lv is now 2621440 blocks long. [root@localhost ~]# lvreduce -L 10G(減小後的大小) /dev/my_vg/my_lv WARNING: Reducing active logical volume to 10.00 GiB. THIS MAY DESTROY YOUR DATA (filesystem etc.) Do you really want to reduce my_vg/my_lv? [y/n]: y Size of logical volume my_vg/my_lv changed from 15.00 GiB (3840 extents) to 10.00 GiB (2560 extents). Logical volume my_vg/my_lv successfully resized. [root@localhost ~]# [root@localhost ~]# mount /dev/my_vg/my_lv /lyshark/ [root@localhost ~]# df -h 文件系統 容量 已用 可用 已用% 掛載點 /dev/mapper/centos-root 17G 1.2G 16G 7% / devtmpfs 98M 0 98M 0% /dev tmpfs 110M 0 110M 0% /dev/shm tmpfs 110M 5.5M 104M 6% /run tmpfs 110M 0 110M 0% /sys/fs/cgroup /dev/sda1 1014M 130M 885M 13% /boot tmpfs 22M 0 22M 0% /run/user/0 /dev/mapper/my_vg-my_lv 9.8G 37M 9.2G 1% /lyshark
e.LV的快照功能(創建一個快照)
格式:lvcreate [-s 快照] -n [快照名] -L [快照大小] [指定分區] [root@localhost lyshark]# lvcreate -s -n mylv_back -L 200M /dev/my_vg/my_lv Logical volume "mylv_back" created. [root@localhost lyshark]# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert root centos -wi-ao---- <17.00g swap centos -wi-ao---- 2.00g my_lv my_vg owi-aos--- 10.00g mylv_back my_vg swi-a-s--- 200.00m my_lv 0.01 #這就是我們的快照
LV快照的恢復(假設我們誤刪除了文件,掛載快照,復制恢復文件即可)
[root@localhost lyshark]# rm -fr * [root@localhost lyshark]# [root@localhost lyshark]# mkdir /back [root@localhost lyshark]# [root@localhost lyshark]# mount /dev/my_vg/mylv_back /back/ [root@localhost lyshark]# [root@localhost lyshark]# cp -a /back/ ./ [root@localhost lyshark]# [root@localhost lyshark]# ls back [root@localhost lyshark]# cd back/ [root@localhost back]# ls 1 10 11 12 13 14 15 16 17 18 19 2 20 3 4 5 6 7 8 9 lost+found
RAID獨立磁盤冗余陣列
定義:獨立磁盤構成的具有冗余能力的陣列,保證硬件損害的情況下業務不終止.保證了數據的高可用
磁盤陣列分類: 1.外接式磁盤陣列櫃 2.內接式磁盤陣列卡 3.利用軟件來仿真
1.通過把多個磁盤組織在一起作為一個邏輯卷提供磁盤跨越功能
2.通過把數據分成多個數據塊(Block)並行寫入/讀出多個磁盤以提高訪問磁盤的速度
3.通過鏡像或校驗操作提供容錯能力
RAID磁盤陣列主要為了保證硬件損壞的情況下業務不會終止,無法防止誤操作
RAID磁盤陣列的種類簡介:
RAID 0 沒有奇偶校驗的 (條帶卷)
RAID 0 提高存儲性能的原理是把連續的數據分散到多個磁盤上存取,這樣系統有數據請求就可以被多個磁盤並行的執行,每個磁盤執行屬於它自己的那部分數據請求
RAID 1 獨立磁盤冗余陣 (鏡像卷)
RAID 1 通過磁盤數據鏡像實現數據冗余,在成對的獨立磁盤上產生互為備份的數據.當原始數據繁忙時,可直接從鏡像拷貝中讀取數據,因此RAID 1可以提高讀取性能.
RAID10 (鏡象陣列條帶)
Raid 10 是一個Raid1與Raid0的組合體,它是利用奇偶校驗實現條帶集鏡像,所以它繼承了Raid0的快速和Raid1的安全.
RAID5 分布式奇偶校驗的獨立磁盤結構
RAID 5 是一種存儲性能,數據安全,和存儲成本,兼顧的存儲解決方案. RAID 5可以理解為是RAID 0和RAID 1的折中方案.
《Linux-基礎篇筆記》 Linux高級文件系統管理(七)