1. 程式人生 > >《Linux-基礎篇筆記》 Linux高級文件系統管理(七)

《Linux-基礎篇筆記》 Linux高級文件系統管理(七)

常用選項 列表 pack nor 請求 nta ESS anaconda emp

Quota磁盤配額

由於Linux是一個多用戶管理的操作系統,而Linux默認情況下並不限制每個用戶使用磁盤空間的大小.

假如某個用戶疏忽或者惡意占滿磁盤空間將導致系統磁盤無法寫入甚至崩潰.為了保證系統磁盤的有足夠的剩余空間,我們需要對用戶和組進行磁盤空間使用限制.

磁盤配額限制類型:

1.限制用戶和組對磁盤空間的使用量
2.限制用戶和組在磁盤內創建文件的個數

磁盤配額限制級別:

1.軟限制:低級限制,此限制可以突破,突破時會被警告,超出部分會有寬限天數,寬限天數到期後超出部分被清空,軟限制不能超過硬限制
2.硬限制:絕對限制此限制不會被突破,達到指定限制後無法使用更多空間

3.寬限天數:當有數據超過軟限制後超出部分會被計時,寬限天數到期後超出部分數據將被清空,寬限天數默認是7天


註:磁盤配額是針對分區進行設置的,無法實現 "某用戶在系統中共計只能使用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 to 
do

※檢查指定分區的掛載屬性是否滿足條件※

[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高級文件系統管理(七)