Linux磁碟管理

Linux小菜鸟發表於2024-07-04

磁碟管理

【1】、Linux常用的分割槽格式

  • 在新增磁碟後要對其進行分割槽,分割槽後才可以去儲存資料

  • MBR分割槽格式:比較古老的分割槽格式,只能劃分4個主分割槽,如果四個分割槽劃分完成後,硬碟空間還有剩餘,那剩餘的分割槽也不能夠使用。後來新增加擴充套件分割槽(容器)功能,可在擴充套件分割槽內劃分出更多的邏輯分割槽,最大支援2.2.T磁碟容量

    • 擴充套件分割槽可以沒有,至多有一個,擴充套件分割槽不能儲存資料,只可以作為邏輯分割槽的基礎
    • IDE介面硬碟邏輯分割槽最多可以劃分59個
    • SCSI介面硬碟邏輯分割槽最多可以劃分11個
    • 最大支援2.2T以內的磁碟容量
    • 使用fdisk 裝置路徑命令去進行MBR磁碟分割槽
  • GPT分割槽格式:可以劃分128個主分割槽,最大支援18EB磁碟容量

【2】、磁碟分割槽和掛載

1、分割槽型別

  • Linux來說無論有幾個分割槽,分給哪一目錄使用,他歸根結底只有一個根目錄,一個獨立且唯一的檔案結構,Linux中每個分割槽都是用來組成整個檔案系統的一部分。

  • 當我們拿到一張大白紙,首先為了使用方便要裁剪,然後為了書寫工整要畫格。

  • “白紙”表示原始的硬碟,“裁剪”意味著分割槽,“畫格”意味著格式化,最後寫入資料,即新安裝一塊硬碟裝置後,為了更充分、安全的利用硬碟空間首先要進行分割槽,然後格式化,最後掛載使用。

  • 主分割槽、擴充套件分割槽和邏輯分割槽的區別

    • 主分割槽

      • 主分割槽主要是用來啟動作業系統的,它主要放的是作業系統的啟動或載入程式,/boot分割槽最好放在主分割槽上;
    • 擴充套件分割槽

      • 擴充套件分割槽是不能使用的,它只是做為邏輯分割槽的容器存在的,先建立一個擴充套件分割槽,在擴充套件分割槽之上建立邏輯分割槽;

      • 除去主分割槽所佔用的容量以外,剩下的容量就被認定為擴充套件分割槽(也可以這麼講:一塊硬碟除去主分割槽外的容量後,如果對剩下的容量進行了再分割槽,那麼,這個再分割槽就是擴充套件分割槽)

      • 擴充套件分割槽是不能進行格式化的,擴充套件分割槽本身也是不能使用的,他的作用僅僅是邏輯分割槽的容器

      • /dev/nvme0n2p3      1640448 10485759 8845312  4.2G  5 Extended
        major minor  #blocks  name
        
         259        0   62914560 nvme0n1
         259        1    1048576 nvme0n1p1
         259        2   61864960 nvme0n1p2
         259        3    5242880 nvme0n2
         259        5     307200 nvme0n2p1
         259        4     512000 nvme0n2p2
         259        6          0 nvme0n2p3
        # 擴充套件分割槽的容量從我們的角度看是0
        
    • 邏輯分割槽

      • 擴充套件分割槽可以分成若干個邏輯分割槽。他們的關係是包含的關係,所有的邏輯分割槽都是擴充套件分割槽的一部分——擴充套件分割槽如果不再進行分割槽了,那麼擴充套件分割槽就是邏輯分割槽了

      • 邏輯分割槽在使用上和主分割槽完全相同

      • /dev/nvme0n2p3      1640448 10485759 8845312  4.2G  5 Extended
        /dev/nvme0n2p5      1642496  3076095 1433600  700M  b W95 FAT32
        

    檢視分割槽型別

    parted命令

    {24-06-02 23:07}bogon:~ root# parted /dev/sdc print
    Model: VMware, VMware Virtual S (scsi)
    Disk /dev/sdc: 21.5GB
    Sector size (logical/physical): 512B/512B
    Partition Table: msdos
    Disk Flags: 
    
    Number  Start   End     Size    Type      File system  Flags
     1      1049kB  2149MB  2147MB  primary
     2      2149MB  4296MB  2147MB  primary
     3      4296MB  6443MB  2147MB  primary
     4      6443MB  21.5GB  15.0GB  extended
     5      6445MB  8592MB  2147MB  logical
     6      8593MB  10.7GB  2147MB  logical
     7      10.7GB  12.9GB  2147MB  logical
     8      12.9GB  15.0GB  2147MB  logical
     9      15.0GB  21.5GB  6436MB  logical
    

2、磁碟分割槽(MBR)

當我們在分割槽的時候,預設使用MBR進行分割槽

  • 磁碟分割槽

    • 磁碟首先要進行分割槽才可以進行掛載

    • 給虛擬機器新增一塊硬碟

    • [root@localhost ~]# fdisk -l | grep nv
      Disk /dev/nvme0n1: 60 GiB, 64424509440 bytes, 125829120 sectors
      /dev/nvme0n1p1 *       2048   2099199   2097152   1G 83 Linux
      /dev/nvme0n1p2      2099200 125829119 123729920  59G 8e Linux LVM
      Disk /dev/nvme0n2: 5 GiB, 5368709120 bytes, 10485760 sectors # 新增的硬碟
      
    • 對新增的磁碟進行分割槽

    • [root@localhost ~]# fdisk /dev/nvme0n2
      # 進入磁碟分割槽介面
      Welcome to fdisk (util-linux 2.32.1).
      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 (container for logical partitions)
      Select (default p): 
      
      Using default response p.
      Partition number (1-4, default 1): 
      First sector (2048-10485759, default 2048): # 由於磁碟的引導檔案會佔用空間,因此第一個扇區的起始位置是從2048開始
      Last sector, +sectors or +size{K,M,G,T,P} (2048-10485759, default 10485759): +200M
      
      Created a new partition 1 of type 'Linux' and of size 200 MiB.
      
      The signature will be removed by a write command.
      
      Command (m for help): p
      Disk /dev/nvme0n2: 5 GiB, 5368709120 bytes, 10485760 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
      Disklabel type: dos
      Disk identifier: 0x7a7b9c31
      
      Device         Boot Start    End Sectors  Size Id Type
      /dev/nvme0n2p1       2048 411647  409600  200M 83 Linux
      
      Filesystem/RAID signature on partition 1 will be wiped.
      
      Command (m for help): n
      Partition type
         p   primary (1 primary, 0 extended, 3 free)
         e   extended (container for logical partitions)
      Select (default p): 
      
      Using default response p.
      Partition number (2-4, default 2): 
      First sector (411648-10485759, default 411648): 
      Last sector, +sectors or +size{K,M,G,T,P} (411648-10485759, default 10485759): +500M
      
      Created a new partition 2 of type 'Linux' and of size 500 MiB.
      
      The signature will be removed by a write command.
      
      Command (m for help): p
      Disk /dev/nvme0n2: 5 GiB, 5368709120 bytes, 10485760 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
      Disklabel type: dos
      Disk identifier: 0x7a7b9c31
      
      Device         Boot  Start     End Sectors  Size Id Type
      /dev/nvme0n2p1        2048  411647  409600  200M 83 Linux
      /dev/nvme0n2p2      411648 1435647 1024000  500M 83 Linux
      
      Filesystem/RAID signature on partition 1 will be wiped.
      Filesystem/RAID signature on partition 2 will be wiped.
      #儲存退出
      
    • 重新載入硬碟,因為核心在讀取硬碟的狀態時,是讀取開機時的狀態,我們後續對硬碟進行了分割槽操作後,需要強制重啟硬碟,讓核心重新讀取硬碟的資訊

    • [root@localhost ~]# partprobe /dev/nvme0n2
      [root@localhost ~]# cat /proc/partitions 
      major minor  #blocks  name
      
       259        0   62914560 nvme0n1
       259        1    1048576 nvme0n1p1
       259        2   61864960 nvme0n1p2
       259        3    5242880 nvme0n2
       259        6     204800 nvme0n2p1
       259        7     512000 nvme0n2p2
      

3、磁碟分割槽(GPT)

GPT分割槽使用和MBR相同

{24-06-02 23:21}bogon:~ root# fdisk /dev/sdd
Command (m for help): g
Created a new GPT disklabel (GUID: EEA1265E-7679-0446-BFB7-A3DD6605FB7D).

Command (m for help): n
Partition number (1-128, default 1): 

4、格式化磁碟

  • 將磁碟分割槽完成後,進行格式化(賦予空間檔案系統的過程)

    • [root@localhost ~]# mkfs.ext4 /dev/nvme0n2p1 
      mke2fs 1.45.6 (20-Mar-2020)
      Creating filesystem with 204800 1k blocks and 51200 inodes
      Filesystem UUID: c93d6606-57de-4d63-949a-db4034c47d3b
      Superblock backups stored on blocks: 
      	8193, 24577, 40961, 57345, 73729
      
      Allocating group tables: done                            
      Writing inode tables: done                            
      Creating journal (4096 blocks): done
      Writing superblocks and filesystem accounting information: done 
      
    • [root@localhost ~]# mkfs.xfs /dev/nvme0n2p2
      meta-data=/dev/nvme0n2p2         isize=512    agcount=4, agsize=32000 blks
               =                       sectsz=512   attr=2, projid32bit=1
               =                       crc=1        finobt=1, sparse=1, rmapbt=0
               =                       reflink=1    bigtime=0 inobtcount=0
      data     =                       bsize=4096   blocks=128000, imaxpct=25
               =                       sunit=0      swidth=0 blks
      naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
      log      =internal log           bsize=4096   blocks=1368, version=2
               =                       sectsz=512   sunit=0 blks, lazy-count=1
      realtime =none                   extsz=4096   blocks=0, rtextents=0
      
    • 檢查是否格式化成功

      {24-06-02 18:30}bogon:~ root# blkid /dev/sdb2   
      /dev/sdb2: UUID="2c55e9d9-9f5c-4536-97af-c821625328ec" BLOCK_SIZE="512" TYPE="xfs" PARTUUID="2af2b43a-02"
      

5、磁碟掛載

  • 建立掛載點

  • [root@localhost ~]# mkdir /mnt/etx /mnt/xfs
    
  • 透過mount命令進行掛載

  • [root@localhost ~]# mount -a
    
  • 進行永久掛載,在/etc/fstab中寫入

    裝置路徑 掛載點目錄 檔案系統型別 引數(defaults)

    /dev/nvme0n2p1          /mnt/ext                ext4    defaults        0 0
    /dev/nvme0n2p2          /mnt/xfs                xfs     defaults        0 0
    
  • 檢視掛載情況

  • [root@localhost ~]# df -TH | grep -v tmp
    Filesystem            Type      Size  Used Avail Use% Mounted on
    /dev/mapper/rhel-root xfs        40G   21G   20G  52% /
    /dev/sr0              iso9660    14G   14G     0 100% /mnt/cdrom
    /dev/nvme0n2p2        xfs       519M   31M  489M   6% /mnt/xfs
    /dev/mapper/rhel-home xfs        20G  170M   20G   1% /home
    /dev/nvme0n1p1        xfs       1.1G  208M  856M  20% /boot
    /dev/nvme0n2p1        ext4      198M   15k  183M   1% /mnt/ext
    
  • 至此,掛載成功

【3】、檔案系統

檔案系統:資料在空間中的存放規則

Windows預設檔案系統:NTFS

  • 分類

    • vfat檔案系統
      • vfat是Linux對DOS,Windows系統下的FAT(包括fat16和Fat32)檔案系統的一個統稱
    • NFS檔案系統
      • NFS即網路檔案系統,用於在UNIX系統間透過網路進行檔案共享,使用者可將網路中NFS伺服器提供的共享目錄掛載到本地的檔案目錄中,從而實現操作和訪問NFS檔案系統中的內容
    • swap
      • 在Linux中,使用整個交換分割槽來提供虛擬記憶體,其分割槽大小一般應是系統實體記憶體的2倍,在安裝Linux作業系統時,就應創分交換分割槽,它是Linux正常執行所必需的,其型別必須是swap,交換分割槽由作業系統自行管理。
    • ext4檔案系統
      • EXT4是第四代擴充套件檔案系統(英語:Fourth extended filesystem,縮寫為 ext4)是Linux系統下的日誌檔案系統,是ext3檔案系統的後繼版本。
    • xfs檔案系統
      • XFS 特別擅長處理大檔案,同時提供平滑的資料傳輸。
  • 對於不同的檔案系統來說,雖然在使用中沒有過大的差距,但是依舊存在著一些小的不同

    • 對於ext4檔案系統來說,我們在掛載完成收,就會自動生成一個目錄

    • [root@localhost ~]# ll /mnt/ext/
      total 12
      drwx------. 2 root root 12288 Mar 29 02:28 lost+found
      
    • 但是對於xfs檔案系統來說,就不會生成

    • [root@localhost ~]# ll /mnt/xfs
      total 0
      

當我格式化好一個分割槽後,我想重新格式化檔案系統,對於xfs和ext4檔案系統的提示是不同的

# 現在是xfs檔案系統,我想重新格式化為ext4格式
{24-06-02 18:39}bogon:~ root# mkfs.ext4 /dev/sdb2
mke2fs 1.45.6 (20-Mar-2020)
/dev/sdb2 contains a xfs file system
Proceed anyway? (y,N) y

# 現在是ext4檔案系統,我想格式化為xfs檔案系統,使用-f強制重新格式化
{24-06-02 18:40}bogon:~ root# mkfs.xfs /dev/sdb2
mkfs.xfs: /dev/sdb2 appears to contain an existing filesystem (ext4).
mkfs.xfs: Use the -f option to force overwrite.
{24-06-02 18:40}bogon:~ root# mkfs.xfs -f /dev/sdb2

【4】、磁碟資料遷移

如果目錄沒有被掛載的檔案系統,那麼預設佔用的是根分割槽的容量

例如/opt目錄

若/opt目錄下的資料特別大,我們該如何實現資料的遷移,來緩解根分割槽的負擔

# 我們首先將一塊新的磁碟掛載
mount /dev/sdb1 /mypart1
# 然後將/opt的資料移動到/mypart1下,此時/opt中就沒有資料了,以此減輕了根分割槽的負擔,但是有一些服務的相關配置檔案會在/opt目錄下。現在我們將資料移走了,服務會找不到配置檔案,導致服務無法啟動
mv /opt/* /mypart1 
# 現在/opt中的資料已經在sdb磁碟的sdb1分割槽中,我們將sdb1取消掛載
umount /mypart1 
# 將sdb1掛載到/opt目錄下
mount /dev/sdb1 /opt 
# 此時/opt目錄下又重新恢復了資料
{24-06-02 22:32}bogon:~ root# ls /opt
10.txt  1.txt  2.txt  3.txt  4.txt  5.txt  6.txt  7.txt  8.txt  9.txt  lost+found
# 至此完成了資料的遷移

【4】、磁碟分割槽--虛擬記憶體

  • 在記憶體不夠大時,需要開啟Swap,使用一部分硬碟,增加虛擬記憶體,解決記憶體容量不足的情況

  • 當記憶體不足的時候,一部分程序會被殺死

  • 透過free -mh檢視swap情況

  • [root@localhost ~]# free -mh
                  total        used        free      shared  buff/cache   available
    Mem:          3.8Gi       373Mi       3.2Gi       9.0Mi       221Mi       3.2Gi
    Swap:         5.9Gi          0B       5.9Gi
    
  • 使用swapon來管理swap分割槽

  • [root@localhost ~]# swapon -s
    Filename				Type		Size	Used	Priority
    /dev/dm-1               partition	4116476	  0	     -2
    

1、建立虛擬記憶體方式1

  • 透過磁碟分割槽來劃分出新的分割槽作為swap

  • Command (m for help): n
    
    All space for primary partitions is in use.
    Adding logical partition 6
    First sector (2873344-10485759, default 2873344): 
    Last sector, +sectors or +size{K,M,G,T,P} (2873344-10485759, default 10485759): +2G
    
    Created a new partition 6 of type 'Linux' and of size 2 GiB.
    Partition #6 contains a swap signature.
    
    Do you want to remove the signature? [Y]es/[N]o: Y
    
    The signature will be removed by a write command.
    
    Command (m for help): p
    Disk /dev/nvme0n2: 5 GiB, 5368709120 bytes, 10485760 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
    Disklabel type: dos
    Disk identifier: 0x7a7b9c31
    
    Device         Boot   Start      End Sectors  Size Id Type
    /dev/nvme0n2p1         2048   411647  409600  200M 83 Linux
    /dev/nvme0n2p2       411648  1435647 1024000  500M 83 Linux
    /dev/nvme0n2p3      1435648 10485759 9050112  4.3G  5 Extended
    /dev/nvme0n2p5      1437696  2871295 1433600  700M  b W95 FAT32
    /dev/nvme0n2p6      2873344  7067647 4194304    2G 83 Linux
    
    Filesystem/RAID signature on partition 6 will be wiped.
    
    Command (m for help): t #由於使用做swap分割槽的,所以需要進行型別轉換
    Partition number (1-3,5,6, default 6): 
               
    Hex code (type L to list all codes): 82
    
    Changed type of partition 'Linux' to 'Linux swap / Solaris'.
    #將分割槽型別從Linux改變為了Linux swap
    Command (m for help): 
    
    
    Command (m for help): p
    
    Disk /dev/nvme0n2: 5 GiB, 5368709120 bytes, 10485760 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
    Disklabel type: dos
    Disk identifier: 0x7a7b9c31
    
    Device         Boot   Start      End Sectors  Size Id Type
    /dev/nvme0n2p1         2048   411647  409600  200M 83 Linux
    /dev/nvme0n2p2       411648  1435647 1024000  500M 83 Linux
    /dev/nvme0n2p3      1435648 10485759 9050112  4.3G  5 Extended
    /dev/nvme0n2p5      1437696  2871295 1433600  700M  b W95 FAT32
    /dev/nvme0n2p6      2873344  7067647 4194304    2G 82 Linux swap / Solaris
    
    
  • 讓記憶體重新讀取硬碟的資訊

  • [root@localhost ~]# partprobe /dev/nvme0n2
    
  • 對分割槽進行格式化,對swap分割槽的格式化和其他分割槽格式化不同,格式化後會生成UUID

  • [root@localhost ~]# mkswap /dev/nvme0n2p6
    Setting up swapspace version 1, size = 2 GiB (2147479552 bytes)
    no label, UUID=c32e1e46-bab2-45c6-9de5-05627eb2126f
    
  • 編寫/etc/fstab檔案,永久掛載,swap分割槽不需要寫掛載路徑

  • /dev/nvme0n2p6          none                    swap    defualts        0 0
    
  • 重新載入swap

  • [root@localhost ~]# swapon -a
    
  • 檢視掛載結果

  • [root@localhost ~]# swapon -s
    Filename				Type		Size	Used	Priority
    /dev/nvme0n2p6          partition	2097148  0	      -3
    /dev/dm-1              	partition	4116476  0	      -2
    

2、建立虛擬記憶體方式2

  • 透過根目錄磁碟剩餘容量建立swap,以檔案作為交換空間

  • [root@localhost ~]# df -Th | grep -v tmp
    Filesystem            Type      Size  Used Avail Use% Mounted on
    /dev/mapper/rhel-root xfs        37G   20G   18G  52% /
    
  • 根目錄磁碟分割槽還剩餘18G,從這18G中分出一部分來劃分為swap,不需要對磁碟進行分割槽,直接從根磁碟中分出一部分,然後進行格式化即可

  • [root@localhost ~]# dd if=/dev/zero of=/tmp/swap1 bs=1M count=2048
    2048+0 records in
    2048+0 records out
    2147483648 bytes (2.1 GB, 2.0 GiB) copied, 22.1407 s, 97.0 MB/s
    [root@localhost ~]# mkswap /tmp/swap1 
    mkswap: /tmp/swap1: insecure permissions 0644, 0600 suggested.
    #建議我們將swap1的許可權設定為0660
    Setting up swapspace version 1, size = 2 GiB (2147479552 bytes)
    no label, UUID=dfa53414-4d5c-4237-9f97-f1f7435de6b1
    
  • 修改許可權

  • [root@localhost ~]# chmod 0600 /tmp/swap1
    [root@localhost ~]# ll -d /tmp/swap1 
    -rw-------. 1 root root 2147483648 Apr  1 02:13 /tmp/swap1
    [root@localhost ~]# 
    
  • 修改/etc/fstab檔案

  • 後面的步驟就和第一種方式一樣了

【4】、磁碟配額

  • Linux系統作為一個多使用者的作業系統,在生產環境中,會發生多個使用者共同使用一個磁碟的情況,會造成Linux根分割槽的磁碟空間耗盡,導致Linux系統無法建立新的檔案,從而出現服務程式崩潰、系統無法啟動等故障現象。

  • 為了避免這種情況,解決方法就是 ,對使用者在指定檔案系統中使用磁碟空間、檔案數量進行限制,防止使用者佔用大量的磁碟空間,從而保持系統儲存空間可以穩定使用。

  • 在進行磁碟配額操作之前,先檢查作業系統底層是否有支援的模組

  • [root@localhost ~]# grep CONFIG_QUOTA /boot/config-4.18.0-513.5.1.el8_9.x86_64 
    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
    
  • 主要對兩個檔案系統進行磁碟配額

    • etx4,不能限制root超級使用者

      • 修改/etc/fstab引數

      • /dev/nvme0n2p1          /mnt/ext                ext4    defaults,usrquota,grpquota      0 0
        
      • 檢視/dev/nvme0n2p1資訊,此時還沒有quota相關引數

      • [root@localhost ~]# mount | grep nvme0n2p1
        /dev/nvme0n2p1 on /mnt/ext type ext4 (rw,relatime,seclabel)
        
      • 重新載入後就有了相關引數

      • [root@localhost ~]# mount -o remount /mnt/ext/
        mount: (hint) your fstab has been modified, but systemd still uses
               the old version; use 'systemctl daemon-reload' to reload.
        [root@localhost ~]# mount | grep nvme0n2p1
        /dev/nvme0n2p1 on /mnt/ext type ext4 (rw,relatime,seclabel,quota,usrquota,grpquota)
        
      • 檢查支援配額磁碟的分割槽,同時會在/mnt/ext目錄下生成兩個檔案

      • [root@localhost ~]# quotacheck -augcv
        #-a:檢擦所有的磁碟分割槽
        #-u,-g:檢查對使用者和使用者組配額的分割槽
        quotacheck: Your kernel probably supports journaled quota but you are not using it. Consider switching to journaled quota to avoid running quotacheck after an unclean shutdown.
        quotacheck: Scanning /dev/nvme0n2p1 [/mnt/ext] done
        quotacheck: Cannot stat old user quota file /mnt/ext/aquota.user: No such file or directory. Usage will not be subtracted.
        quotacheck: Cannot stat old group quota file /mnt/ext/aquota.group: No such file or directory. Usage will not be subtracted.
        quotacheck: Cannot stat old user quota file /mnt/ext/aquota.user: No such file or directory. Usage will not be subtracted.
        quotacheck: Cannot stat old group quota file /mnt/ext/aquota.group: No such file or directory. Usage will not be subtracted.
        quotacheck: Checked 3 directories and 0 files
        quotacheck: Old file not found.
        quotacheck: Old file not found.
        [root@localhost ~]# ls -l /mnt/ext/
        total 26
        -rw-------. 1 root root  6144 Apr  1 02:25 aquota.group
        -rw-------. 1 root root  6144 Apr  1 02:25 aquota.user
        drwx------. 2 root root 12288 Mar 29 02:28 lost+found
        
      • 對要進行配額的使用者進行設定,block限制的是容量大小,inodes限制的是數量,soft和hard分別是軟限制和硬限制,也就是超過了soft會給出警告,到達了hard則限制操作

      • [root@localhost ~]# edquota -u quotauser
        Disk quotas for user quotauser (uid 10007):
          Filesystem                   blocks       soft       hard     inodes     soft     hard
          /dev/nvme0n2p1                     0      80M         100M         0        8      10             
        
      • 開啟配額

      • [root@localhost ~]# quotaon -a
        
      • 開始測試

      • #測試block
        [quotauser@localhost ext]$ dd if=/dev/zero of=./test1 bs=30M count=1
        1+0 records in
        1+0 records out
        31457280 bytes (31 MB, 30 MiB) copied, 0.709584 s, 44.3 MB/s
        [quotauser@localhost ext]$ dd if=/dev/zero of=./test2 bs=30M count=1
        1+0 records in
        1+0 records out
        31457280 bytes (31 MB, 30 MiB) copied, 0.540205 s, 58.2 MB/s
        [quotauser@localhost ext]$ dd if=/dev/zero of=./test3 bs=30M count=1
        nvme0n2p1: warning, user block quota exceeded. #此時quotauser建立的檔案達到了90M,超過了soft block
        1+0 records in
        1+0 records out
        31457280 bytes (31 MB, 30 MiB) copied, 0.589843 s, 53.3 MB/s
        [quotauser@localhost ext]$ dd if=/dev/zero of=./test4 bs=30M count=1
        nvme0n2p1: write failed, user block limit reached.
        dd: error writing './test4': Disk quota exceeded
        #此時quotauser建立的檔案達到了120M,到達了hard block,因此超過的部分會被刪除
        1+0 records in
        0+0 records out
        10481664 bytes (10 MB, 10 MiB) copied, 0.231525 s, 45.3 MB/s
        [quotauser@localhost ext]$ ll -h| grep test4
        -rw-rw-r--. 1 quotauser quotauser  10M Apr  1 02:43 test4
        #所以test4只用10M
        
        #測試inodes
        [quotauser@localhost ext]$ touch {1..10}.txt
        nvme0n2p1: warning, user file quota exceeded.
        nvme0n2p1: write failed, user file limit reached.
        #下面的三個檔案超出了inodes的個數限制,不能建立
        touch: cannot touch '8.txt': Disk quota exceeded
        touch: cannot touch '9.txt': Disk quota exceeded
        touch: cannot touch '10.txt': Disk quota exceeded
        
      • grace time

        當有配額限制的使用者達到soft限制後,會產生grace time,它的含義是,在grace time限制內,如果沒有將容量或者檔案數量降低到soft限制下,那麼hard限制將會降低為soft限制。如果在規定時間內降低到soft以下了,grace time會消失

      • [root@localhost ~]# quota -u quotauser 
        Disk quotas for user quotauser (uid 10007): 
             Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
         /dev/nvme0n2p1   92170*  81920  102400   6days      10*      8      10   6days
        
      • 檢視裝置對那些使用者進行限制

      • [root@localhost ~]# repquota /dev/nvme0n2p1
        *** Report for user quotas on device /dev/nvme0n2p1
        Block grace time: 7days; Inode grace time: 7days
                                Block limits                File limits
        User            used    soft    hard  grace    used  soft  hard  grace
        ----------------------------------------------------------------------
        root      --      13       0       0              2     0     0       
        quotauser --   61442   81920  102400              2     8    10       
        
      • 下線ext4的quota

      • quotaoff -a
        
    • xfs,可以針對root超級使用者,不過需要建立專案

      • 針對普通使用者(不需要建立專案)

      • 修改/etc/fstab引數

      • /dev/nvme0n2p1          /mnt/ext                ext4    defaults,usrquota,grpquota      0 0
        
      • 重新載入磁碟資訊

      • [root@localhost ~]# umount /mnt/xfs/
        [root@localhost ~]# mount /mnt/xfs/
        mount: (hint) your fstab has been modified, but systemd still uses
               the old version; use 'systemctl daemon-reload' to reload.
        [root@localhost ~]# mount | grep nvme0n2p2
        /dev/nvme0n2p2 on /mnt/xfs type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,usrquota,grpquota)
        
      • 進行user和group的配額設定

      • [root@localhost ~]# xfs_quota -x -c  "limit bsoft=60M bhard=80M isoft=6 ihard=8 quotauser" /mnt/xfs
        
        #limit:進行限制
        #bsoft:block soft
        
      • 檢視配置

      • [root@localhost ~]# xfs_quota -x -c "report -ubih" /mnt/xfs
        #u:表示使用者,b:表示block,i:表示inodes h:顯示形式
        
      • 進行測試

      • [quotauser@localhost xfs]$ dd if=/dev/zero of=./test1 bs=25M count=1
        1+0 records in
        1+0 records out
        26214400 bytes (26 MB, 25 MiB) copied, 0.050311 s, 521 MB/s
        [quotauser@localhost xfs]$ dd if=/dev/zero of=./test2 bs=25M count=1
        1+0 records in
        1+0 records out
        26214400 bytes (26 MB, 25 MiB) copied, 0.218181 s, 120 MB/s
        [quotauser@localhost xfs]$ dd if=/dev/zero of=./test3 bs=25M count=1
        1+0 records in
        1+0 records out
        26214400 bytes (26 MB, 25 MiB) copied, 0.312256 s, 84.0 MB/s
        [quotauser@localhost xfs]$ dd if=/dev/zero of=./test4 bs=25M count=1
        dd: error writing './test4': Disk quota exceeded
        1+0 records in
        0+0 records out
        4194304 bytes (4.2 MB, 4.0 MiB) copied, 0.0943417 s, 44.5 MB/s
        ##xfs檔案系統在達到配額的soft limit時不會給出警告資訊,直到達到hard limit時才給出報錯資訊,並限制檔案大小,同時,xfs和ext4檔案系統一樣具有grace time,並且機制和ext4一樣
        
      • 針對專案(root)進行配額

      • 修改/etc/fstab引數,grpquota不能和prjquota共存

      • /dev/nvme0n2p2          /mnt/xfs                xfs     defaults,usrquota,prjquota      0 0
        
      • 重新載入磁碟

      • [root@localhost ~]# umount /mnt/xfs
        [root@localhost ~]# mount -a
        mount: (hint) your fstab has been modified, but systemd still uses
               the old version; use 'systemctl daemon-reload' to reload.
        [root@localhost ~]# 
        [root@localhost ~]# mount | grep nvme0
        /dev/nvme0n2p5 on /mnt/win type vfat (rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,errors=remount-ro)
        /dev/nvme0n2p1 on /mnt/ext type ext4 (rw,relatime,seclabel,quota,usrquota,grpquota)
        /dev/nvme0n1p1 on /boot type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota)
        /dev/nvme0n2p2 on /mnt/xfs type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,usrquota,prjquota)
        
      • 進行專案的繫結匹配

      • [root@localhost ~]# echo "41:/mnt/xfs">/etc/projects
        [root@localhost ~]# cat /etc/projects
        41:/mnt/xfs
        [root@localhost ~]# echo "quotaxfs:41">>/etc/projid
        [root@localhost ~]# cat /etc/projid
        quotaxfs:41
        
      • 啟動專案

      • [root@localhost ~]# xfs_quota  -x -c "project -s quotaxfs"
        Setting up project quotaxfs (path /mnt/xfs)...
        Processed 1 (/etc/projects and cmdline) paths for project quotaxfs with recursion depth infinite (-1).
        Setting up project quotaxfs (path /mnt/xfs)...
        Processed 1 (/etc/projects and cmdline) paths for project quotaxfs with recursion depth infinite (-1).
        Setting up project quotaxfs (path /mnt/xfs)...
        Processed 1 (/etc/projects and cmdline) paths for project quotaxfs with recursion depth infinite (-1).
        Setting up project quotaxfs (path /mnt/xfs)...
        Processed 1 (/etc/projects and cmdline) paths for project quotaxfs with recursion depth infinite (-1).
        
      • 檢視專案

      • [root@localhost ~]# xfs_quota  -x -c "print" /mnt/xfs
        Filesystem          Pathname
        /mnt/xfs            /dev/nvme0n2p2 (uquota, pquota)
        /mnt/xfs            /dev/nvme0n2p2 (project 41, quotaxfs)
        
      • 進行限制

      • [root@localhost ~]# xfs_quota -x -c "limit -p bsoft=90M bhard=100M quotaxfs" /mnt/xfs
        [root@localhost xfs]# xfs_quota -x -c "report -pbih" /mnt/xfs
        Project quota on /mnt/xfs (/dev/nvme0n2p2)
                                Blocks                            Inodes              
        Project ID   Used   Soft   Hard Warn/Grace     Used   Soft   Hard Warn/Grace  
        ---------- --------------------------------- --------------------------------- 
        #0              0      0      0  00 [------]      2      0      0  00 [------]
        quotaxfs        0    90M   100M  00 [------]      1      0      0  00 [------]
        
        
      • 測試,透過root建立的檔案也會受到限制同時也會有grace time

      • 33554432 bytes (34 MB, 32 MiB) copied, 0.0351664 s, 954 MB/s
        [root@localhost xfs]# dd if=/dev/zero of=./root1 bs=32M count=1
        1+0 records in
        1+0 records out
        33554432 bytes (34 MB, 32 MiB) copied, 0.0432654 s, 776 MB/s
        [root@localhost xfs]# dd if=/dev/zero of=./root2 bs=32M count=1
        1+0 records in
        1+0 records out
        33554432 bytes (34 MB, 32 MiB) copied, 0.0447339 s, 750 MB/s
        [root@localhost xfs]# dd if=/dev/zero of=./root3 bs=32M count=1
        1+0 records in
        1+0 records out
        33554432 bytes (34 MB, 32 MiB) copied, 0.27855 s, 120 MB/s
        [root@localhost xfs]# ll
        total 98304
        -rw-r--r--. 1 root root 33554432 Apr  1 03:53 root1
        -rw-r--r--. 1 root root 33554432 Apr  1 03:53 root2
        -rw-r--r--. 1 root root 33554432 Apr  1 03:53 root3
        [root@localhost xfs]# dd if=/dev/zero of=./root4 bs=32M count=1
        dd: error writing './root4': No space left on device
        1+0 records in
        0+0 records out
        4194304 bytes (4.2 MB, 4.0 MiB) copied, 0.116613 s, 36.0 MB/s
        [root@localhost xfs]# xfs_quota -x -c "report -pbih" /mnt/xfs
        Project quota on /mnt/xfs (/dev/nvme0n2p2)
                                Blocks                            Inodes              
        Project ID   Used   Soft   Hard Warn/Grace     Used   Soft   Hard Warn/Grace  
        ---------- --------------------------------- --------------------------------- 
        #0              0      0      0  00 [------]      2      0      0  00 [------]
        quotaxfs     100M    90M   100M  00 [7 days]      5      0      0  00 [------]
        
      • 對於專案的配額來說,在一個專案中會有許多的使用者,針對劃分的空間,採取的是誰先佔用就是誰的

      • 只看某一個專案的具體資訊

      • [root@localhost xfs]# xfs_quota -c "quota -p 41" /mnt/xfs
        Disk quotas for Project quotaxfs (41)
        Filesystem              Blocks      Quota      Limit  Warn/Time      Mounted on
        /dev/nvme0n2p2           36864      92160     102400   00 [--------] /mnt/xfs
        
      • 檢視xfs的quota狀態

      • [root@localhost xfs]# xfs_quota  -x -c "state" /mnt/xfs
        User quota state on /mnt/xfs (/dev/nvme0n2p2)
          Accounting: ON
          Enforcement: ON
          Inode: #131 (2 blocks, 2 extents)
        Blocks grace time: [7 days]
        Blocks max warnings: 5
        Inodes grace time: [7 days]
        Inodes max warnings: 5
        Realtime Blocks grace time: [7 days]
        Group quota state on /mnt/xfs (/dev/nvme0n2p2)
          Accounting: OFF
          Enforcement: OFF
          Inode: #132 (2 blocks, 2 extents)
        Blocks grace time: [7 days]
        Blocks max warnings: 5
        Inodes grace time: [7 days]
        Inodes max warnings: 5
        Realtime Blocks grace time: [7 days]
        Project quota state on /mnt/xfs (/dev/nvme0n2p2)
          Accounting: ON
          Enforcement: ON
          Inode: #137 (2 blocks, 2 extents)
        Blocks grace time: [7 days]
        Blocks max warnings: 5
        Inodes grace time: [7 days]
        Inodes max warnings: 5
        Realtime Blocks grace time: [7 days]
        
      • xfs的quota功能開關

      • xfs_quota -x -c "disable -up" /mnt/xfs/  #關閉配額
        xfs_quota -x -c "off -up" /mnt/xfs/ #永久下線配額
        xfs_quota -x -c "remove -p" /mnt/xfs/#移除配額專案
        
  • EXT4和XFS的區別

    ext4 檔案系統 xfs 檔案系統
    無法對單一目錄 可對單一目錄、超級使用者
    quota工具 xfs_quota工具
    quota預設不開啟 預設開啟
    需要建立配額配置檔案:edquota -u user 不需要建立配額配置檔案

【5】、LVM邏輯卷

1、LVM概述

進行LVM邏輯卷建立的分割槽或磁碟,必須是沒有被使用的(沒有被格式化的)

LVM(Logical Volume Manager)是基於核心的一種邏輯卷管理器,LVM適合於管理大儲存裝置,並允許使用者動態調整檔案系統大小。對底層硬碟的整合,當我們對LVM邏輯捲進行管理時,不需要在涉及到底層的硬碟了

  • 1.物理卷(Physical Volume, PV)

    物理卷是LVM的最底層概念,是LVM的邏輯儲存塊,物理卷與磁碟分割槽是邏輯的對應關係。LVM提供了命令工具可以將磁碟分割槽轉換為物理卷,透過組合物理卷生成卷組。

  • 2.卷組( Volume Group,VG)

    卷組是LVM邏輯概念上的磁碟裝置,透過將單個或多個物理卷組合後生成卷組。卷組的大小取決於物理卷的容量及個數。在Centos7系統中,對容量與個數沒有限制。

  • 3.邏輯卷(Logical Volume, LV)

    邏輯卷就是LVM邏輯意義上的分割槽,我們可以指定從卷組中提取多少容量來建立邏輯卷,最後對邏輯卷格式化並掛載使用。

  • 也就是說我們真正去使用的是LVM邏輯卷的分割槽,並不是直接使用磁碟的分割槽

2、建立LVM

  • 首先也要先對磁碟進行分割槽,然後轉換為物理卷PV

    • 建立好分割槽後進行格式轉換,轉換為Linux LVM格式

    • Command (m for help): t
      Selected partition 1
      Hex code (type L to list all codes): L
                  
      Hex code (type L to list all codes): 8e
      Changed type of partition 'Linux' to 'Linux LVM'.
      
  • 將磁碟的分割槽建立為物理分割槽

    • [root@localhost ~]# pvcreate /dev/nvme0n3p1
        Physical volume "/dev/nvme0n3p1" successfully created
      [root@localhost ~]# pvs
        PV             VG   Fmt  Attr PSize   PFree
        /dev/nvme0n1p2 rhel lvm2 a--  <59.00g    0 
        /dev/nvme0n3p1      lvm2 ---    2.00g 2.00g
      ##使用pvs命令檢視物理分割槽情況
      
  • 將物理分割槽生成卷組

    • [root@localhost ~]# vgcreate myvg /dev/nvme0n3p1
        Volume group "myvg" successfully created
      [root@localhost ~]# vgs
        VG   #PV #LV #SN Attr   VSize   VFree 
        myvg   1   0   0 wz--n-  <2.00g <2.00g
        rhel   1   3   0 wz--n- <59.00g     0 
      
    • 此時再檢視物理分割槽情況

    • [root@localhost ~]# pvs
        PV             VG   Fmt  Attr PSize   PFree 
        /dev/nvme0n1p2 rhel lvm2 a--  <59.00g     0 
        /dev/nvme0n3p1 myvg lvm2 a--   <2.00g <2.00g
      
    • 出現了vg卷組的名字

  • 從卷組中抽取一部分容量建立LVM邏輯卷

    • [root@localhost ~]# lvcreate -n mylv -L 300M myvg 
        Logical volume "mylv" created.
      [root@localhost ~]# lvs
        LV   VG   Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
        mylv myvg -wi-a----- 300.00m                                                    
        home rhel -wi-ao---- <18.07g                                                    
        root rhel -wi-ao----  37.00g                                                    
        swap rhel -wi-ao----  <3.93g        
      
  • 然後對建立好的LVM進行格式化和掛載

    • [root@localhost ~]# mkfs.ext4 /dev/myvg/mylv 
      mke2fs 1.45.6 (20-Mar-2020)
      Creating filesystem with 307200 1k blocks and 76912 inodes
      Filesystem UUID: 0d6c7eb8-14ab-4110-b7d1-e83a9a7b93c7
      Superblock backups stored on blocks: 
      	8193, 24577, 40961, 57345, 73729, 204801, 221185
      
      Allocating group tables: done                            
      Writing inode tables: done                            
      Creating journal (8192 blocks): done
      Writing superblocks and filesystem accounting i
      
    • 需要注意:此時在建立好LVM後就已經和底層的磁碟分割槽沒有什麼關係了,我們在進行格式化的時候,就不能使用/dev/nvme0n3p1,要使用/dev/myvg/mylv,之後就是修改/etc/fstab檔案。然後透過mount進行掛載

3、邏輯卷LVM的擴容和縮容

物理卷PV不能進行擴充套件和縮減了,只有卷組和邏輯卷可以實現擴充套件和縮減

  • ext4 file system

    • 擴容(卷組空間足夠的情況下)

      • 先擴大邏輯卷

      • root@localhost lvmext4]# lvextend -L +300M /dev/myvg/mylv 
          Size of logical volume myvg/mylv changed from 300.00 MiB (75 extents) to 600.00 MiB (150 extents).
          Logical volume myvg/mylv successfully resized.
        [root@localhost lvmext4]# lvs
          LV   VG   Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
          mylv myvg -wi-ao---- 600.00m                                                    
          home rhel -wi-ao---- <18.07g                                                    
          root rhel -wi-ao----  37.00g                                                    
          swap rhel -wi-ao----  <3.93g                                                    
        [root@localhost lvmext4]# vgs
          VG   #PV #LV #SN Attr   VSize   VFree
          myvg   1   1   0 wz--n-  <2.00g 1.41g
          rhel   1   3   0 wz--n- <59.00g    0 
        [root@localhost lvmext4]# pvs
          PV             VG   Fmt  Attr PSize   PFree
          /dev/nvme0n1p2 rhel lvm2 a--  <59.00g    0 
          /dev/nvme0n3p1 myvg lvm2 a--   <2.00g 1.41g
        
      • 通知檔案系統

      • [root@localhost lvmext4]# df -Th | grep lvm
        /dev/mapper/myvg-mylv ext4      281M  186M   77M  71% /mnt/lvmext4
        
      • 此時檔案系統還不知道,我已進行了擴容,所以通知檔案系統

      • [root@localhost lvmext4]# df -Th | grep lvm
        /dev/mapper/myvg-mylv ext4      281M  186M   77M  71% /mnt/lvmext4
        [root@localhost lvmext4]# resize2fs /dev/myvg/mylv 
        resize2fs 1.45.6 (20-Mar-2020)
        Filesystem at /dev/myvg/mylv is mounted on /mnt/lvmext4; on-line resizing required
        old_desc_blocks = 3, new_desc_blocks = 5
        The filesystem on /dev/myvg/mylv is now 614400 (1k) blocks long.
        
        [root@localhost lvmext4]# df -Th | grep lvm
        /dev/mapper/myvg-mylv ext4      572M  186M  355M  35% /mnt/lvmext4
        
    • 擴容(在卷組空間不足的情況下)

      • 首先我們需要去增加一個磁碟分割槽,轉換為物理分割槽,讓他加入myvg卷組

      • [root@localhost lvmext4]# partprobe 
        Warning: Unable to open /dev/sr0 read-write (Read-only file system).  /dev/sr0 has been opened read-only.
        [root@localhost lvmext4]# pvcreate /dev/nvme0n3p2
          Physical volume "/dev/nvme0n3p2" successfully created.
        [root@localhost lvmext4]# vgextend myvg  /dev/nvme0n3p2
          Volume group "myvg" successfully extended
        
      • 然後再進行擴容操作

    • 縮減

      • 首先需要下載掛載的內容

      • [root@localhost ~]# umount /mnt/lvmext4
        
      • 對邏輯分割槽進行檢查

      • [root@localhost ~]# e2fsck -f /dev/myvg/mylv
        e2fsck 1.45.6 (20-Mar-2020)
        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: 11/65536 files (0.0% non-contiguous), 12955/262144 blocks
        
      • 先縮小檔案系統

      • [root@localhost ~]# resize2fs /dev/myvg/mylv 300M
        resize2fs 1.45.6 (20-Mar-2020)
        Resizing the filesystem on /dev/myvg/mylv to 76800 (4k) blocks.
        The filesystem on /dev/myvg/mylv is now 76800 (4k) blocks long.
        
      • 再縮小邏輯卷

      • [root@xu ~]# lvreduce -L 4G /dev/xuruizahovg/xuruizhaolv 
          WARNING: Reducing active logical volume to 4.00 GiB.
          THIS MAY DESTROY YOUR DATA (filesystem etc.)
        Do you really want to reduce xuruizahovg/xuruizhaolv? [y/n]: y
          Size of logical volume xuruizahovg/xuruizhaolv changed from 12.00 GiB (3072 extents) to 4.00 GiB (1024 extents).
          Logical volume xuruizahovg/xuruizhaolv successfully resized.
        
      • 重新掛載

      • [root@localhost ~]# mount -a
        
      • 縮容操作是一種存在一定風險的操作,因此在重新掛載時,可能會報錯,主要是由於縮減後的容量系統認為不能放下目錄中的所有資料,所以不讓掛載。

      • 解決方法:備份資料,重新格式化分割槽,再次進行掛載

  • xfs file system

    • xfs被建立出來的初衷就是為了解決大檔案、大資料儲存的,因此對於xfs file system預設不存在容量縮減的操作

    • 擴容

    • 首先也是建立PV(物理分割槽)、VG(卷組)、LVM(邏輯卷)

    • 進行格式化

    • [root@localhost xfs]# mkfs.xfs /dev/my_xfs/lvxfs 
      meta-data=/dev/my_xfs/lvxfs      isize=512    agcount=4, agsize=25600 blks
               =                       sectsz=512   attr=2, projid32bit=1
               =                       crc=1        finobt=1, sparse=1, rmapbt=0
               =                       reflink=1    bigtime=0 inobtcount=0
      data     =                       bsize=4096   blocks=102400, imaxpct=25
               =                       sunit=0      swidth=0 blks
      naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
      log      =internal log           bsize=4096   blocks=1368, version=2
               =                       sectsz=512   sunit=0 blks, lazy-count=1
      realtime =none                   extsz=4096   blocks=0, rtextents=0
      
      
    • 進行掛載

    • 擴充套件分割槽,並通知檔案系統

    • [root@localhost xfs]# lvextend -L +200M /dev/my_xfs/lvxfs 
        Size of logical volume my_xfs/lvxfs changed from 400.00 MiB (100 extents) to 600.00 MiB (150 extents).
        Logical volume my_xfs/lvxfs successfully resized.
      [root@localhost xfs]# xfs_growfs /dev/my_xfs/lvxfs 
      meta-data=/dev/mapper/my_xfs-lvxfs isize=512    agcount=4, agsize=25600 blks
               =                       sectsz=512   attr=2, projid32bit=1
               =                       crc=1        finobt=1, sparse=1, rmapbt=0
               =                       reflink=1    bigtime=0 inobtcount=0
      data     =                       bsize=4096   blocks=102400, imaxpct=25
               =                       sunit=0      swidth=0 blks
      naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
      log      =internal log           bsize=4096   blocks=1368, version=2
               =                       sectsz=512   sunit=0 blks, lazy-count=1
      realtime =none                   extsz=4096   blocks=0, rtextents=0
      data blocks changed from 102400 to 153600
      [root@localhost xfs]# df -Th | grep lv
      /dev/mapper/myvg-mylv    ext4      2.5G  186M  2.2G   8% /mnt/lvmext4
      /dev/mapper/my_xfs-lvxfs xfs       595M   25M  571M   5% /mnt/lvxfs
      
    • 對於xfs檔案系統,使用xfs_growfs通知檔案系統

4、邏輯卷LVM的管理命令

功能 物理卷管理 卷組管理 邏輯卷管理
Scan掃描 pvscan vgscan lvscan
Create建立 pvcreat vgcreat lvcreat
Display顯示 pvdisplay vgdisplay lvdisplay
Remove刪除 pvremove vgremove lvmove
Extend擴充套件 vgextent lvectent
Reduce減少 vgreduce lvreduce

5、邏輯卷資料遷移

  • 我們可以遷移邏輯捲到一個新的磁碟而不會丟失資料,也不用關機操作。該特性的功能是將資料從舊磁碟移動到新磁碟。通常,我們只是在一些磁碟發生錯誤時,才將資料從一個磁碟遷移到另外一個磁碟儲存。

  • 將邏輯卷從一個磁碟移動到另一個磁碟。

  • 我們可以使用任何型別的磁碟,如SATA、SSD、SAS、SAN storage iSCSI或者FC。

  • 線上遷移磁碟,而且資料不會丟失。

  • 遷移方式:

    • 透過新的磁碟將資料進行轉移

      • 檢視當前系統邏輯卷的情況

      • [root@bogon ~]# lsblk
        NAME             MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
        sr0               11:0    1 12.6G  0 rom  /mnt/cdrom
        nvme0n1          259:0    0   60G  0 disk 
        ├─nvme0n1p1      259:1    0    1G  0 part /boot
        └─nvme0n1p2      259:2    0   59G  0 part 
          ├─rhel-root    253:0    0   37G  0 lvm  /
          ├─rhel-swap    253:1    0  3.9G  0 lvm  [SWAP]
          └─rhel-home    253:2    0 18.1G  0 lvm  /home
        nvme0n2          259:3    0    5G  0 disk 
        ├─nvme0n2p1      259:4    0  300M  0 part 
        └─nvme0n2p2      259:5    0  600M  0 part /mnt/xfs
        nvme0n3          259:6    0   10G  0 disk 
        ├─nvme0n3p1      259:7    0    2G  0 part 
        │ └─myvg-mylv    253:4    0  400M  0 lvm  /mnt/lvmext4
        ├─nvme0n3p2      259:8    0    1G  0 part 
        └─nvme0n3p3      259:9    0    1G  0 part 
          └─my_xfs-lvxfs 253:3    0  600M  0 lvm  /mnt/lvxfs
        
      • 刪除nvme0n3xfs邏輯卷的物理分割槽,重新載入

      • 新增一塊新的磁碟,進行分割槽,將其加入到邏輯卷中,對xfs檔案系統進行遷移

      • [root@bogon ~]# pvcreate /dev/nvme0n4p1
          Physical volume "/dev/nvme0n4p1" successfully created.
        [root@bogon ~]# pvs
          PV             VG        Fmt  Attr PSize   PFree  
          /dev/nvme0n1p2 rhel      lvm2 a--  <59.00g      0 
          /dev/nvme0n3p5 myvg_ext4 lvm2 a--  496.00m      0 
          /dev/nvme0n3p6 myvg_ext4 lvm2 a--  496.00m 392.00m
          /dev/nvme0n3p7 myvg_xfs  lvm2 a--  596.00m 296.00m
          /dev/nvme0n4p1           lvm2 ---    1.00g   1.00g
        [root@bogon ~]# vgextend myvg_xfs /dev/nvme0n4p1
          Volume group "myvg_xfs" successfully extended
        [root@bogon ~]# vgs
          VG        #PV #LV #SN Attr   VSize   VFree  
          myvg_ext4   2   1   0 wz--n- 992.00m 392.00m
          myvg_xfs    2   1   0 wz--n-  <1.58g  <1.29g
          rhel        1   3   0 wz--n- <59.00g      0 
        [root@bogon ~]# pvmove /dev/nvme0n3p7 /dev/nvme0n4p1
          /dev/nvme0n3p7: Moved: 50.67%
          /dev/nvme0n3p7: Moved: 100.00%
        
      • 由於刪除了物理分割槽,所以邏輯卷會進行警告

      • [root@bogon ~]# vgs
          WARNING: Couldn't find device with uuid ubE7fk-OWBH-nQ2d-zMZU-GR7w-zdsT-OD1RKJ.
          WARNING: VG myvg_xfs is missing PV ubE7fk-OWBH-nQ2d-zMZU-GR7w-zdsT-OD1RKJ (last written to /dev/nvme0n3p7).
          VG        #PV #LV #SN Attr   VSize   VFree 
          myvg_ext4   3   1   0 wz--n-   1.96g <1.38g
          myvg_xfs    2   1   0 wz-pn-  <1.58g <1.29g
          rhel        1   3   0 wz--n- <59.00g     0 
        [root@bogon ~]# pvs
          WARNING: Couldn't find device with uuid ubE7fk-OWBH-nQ2d-zMZU-GR7w-zdsT-OD1RKJ.
          WARNING: VG myvg_xfs is missing PV ubE7fk-OWBH-nQ2d-zMZU-GR7w-zdsT-OD1RKJ (last written to /dev/nvme0n3p7).
          PV             VG        Fmt  Attr PSize    PFree   
          /dev/nvme0n1p2 rhel      lvm2 a--   <59.00g       0 
          /dev/nvme0n3p5 myvg_ext4 lvm2 a--   496.00m       0 
          /dev/nvme0n3p6 myvg_ext4 lvm2 a--   496.00m  392.00m
          /dev/nvme0n4p1 myvg_xfs  lvm2 a--  1020.00m  720.00m
          /dev/nvme0n4p2 myvg_ext4 lvm2 a--  1020.00m 1020.00m
          [unknown]      myvg_xfs  lvm2 a-m   596.00m  596.00m
        [root@bogon ~]# lvs
          WARNING: Couldn't find device with uuid ubE7fk-OWBH-nQ2d-zMZU-GR7w-zdsT-OD1RKJ.
          WARNING: VG myvg_xfs is missing PV ubE7fk-OWBH-nQ2d-zMZU-GR7w-zdsT-OD1RKJ (last written to /dev/nvme0n3p7).
          LV        VG        Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
          mylv_ext4 myvg_ext4 -wi-ao---- 600.00m                                                    
          mylv_xfs  myvg_xfs  -wi-ao---- 300.00m                                                    
          home      rhel      -wi-ao---- <18.07g                                                    
          root      rhel      -wi-ao----  37.00g                                                    
          swap      rhel      -wi-ao----  <3.93g     
        
      • 我們需要將對應的卷組刪除

      • [root@bogon ~]# vgreduce --removemissing --force myvg_xfs 
          WARNING: Couldn't find device with uuid ubE7fk-OWBH-nQ2d-zMZU-GR7w-zdsT-OD1RKJ.
          WARNING: VG myvg_xfs is missing PV ubE7fk-OWBH-nQ2d-zMZU-GR7w-zdsT-OD1RKJ (last written to /dev/nvme0n3p7).
          WARNING: Couldn't find device with uuid ubE7fk-OWBH-nQ2d-zMZU-GR7w-zdsT-OD1RKJ.
          Wrote out consistent volume group myvg_xfs.
        [root@bogon ~]# vgs
          VG        #PV #LV #SN Attr   VSize    VFree  
          myvg_ext4   3   1   0 wz--n-    1.96g  <1.38g
          myvg_xfs    1   1   0 wz--n- 1020.00m 720.00m
          rhel        1   3   0 wz--n-  <59.00g      0 
        [root@bogon ~]# pvs
          PV             VG        Fmt  Attr PSize    PFree   
          /dev/nvme0n1p2 rhel      lvm2 a--   <59.00g       0 
          /dev/nvme0n3p5 myvg_ext4 lvm2 a--   496.00m       0 
          /dev/nvme0n3p6 myvg_ext4 lvm2 a--   496.00m  392.00m
          /dev/nvme0n4p1 myvg_xfs  lvm2 a--  1020.00m  720.00m
          /dev/nvme0n4p2 myvg_ext4 lvm2 a--  1020.00m 1020.00m
        [root@bogon ~]# lvs
          LV        VG        Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
          mylv_ext4 myvg_ext4 -wi-ao---- 600.00m                                                    
          mylv_xfs  myvg_xfs  -wi-ao---- 300.00m                                                    
          home      rhel      -wi-ao---- <18.07g                                                    
          root      rhel      -wi-ao----  37.00g                                                    
          swap      rhel      -wi-ao----  <3.93g                               
        
      • 至此遷移成功

      • [root@bogon ~]# lsblk
        NAME                    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
        sr0                      11:0    1 12.6G  0 rom  /mnt/cdrom
        nvme0n1                 259:0    0   60G  0 disk 
        ├─nvme0n1p1             259:1    0    1G  0 part /boot
        └─nvme0n1p2             259:2    0   59G  0 part 
          ├─rhel-root           253:0    0   37G  0 lvm  /
          ├─rhel-swap           253:1    0  3.9G  0 lvm  [SWAP]
          └─rhel-home           253:2    0 18.1G  0 lvm  /home
        nvme0n2                 259:3    0    5G  0 disk 
        ├─nvme0n2p1             259:4    0  300M  0 part 
        └─nvme0n2p2             259:5    0  600M  0 part 
        nvme0n3                 259:6    0   10G  0 disk 
        ├─nvme0n3p1             259:7    0    1G  0 part 
        ├─nvme0n3p2             259:8    0    1K  0 part 
        ├─nvme0n3p5             259:9    0  500M  0 part 
        │ └─myvg_ext4-mylv_ext4 253:4    0  600M  0 lvm  /mnt/lvmext4
        └─nvme0n3p6             259:10   0  500M  0 part 
          └─myvg_ext4-mylv_ext4 253:4    0  600M  0 lvm  /mnt/lvmext4
        nvme0n4                 259:12   0   10G  0 disk 
        ├─nvme0n4p1             259:13   0    1G  0 part 
        │ └─myvg_xfs-mylv_xfs   253:3    0  300M  0 lvm  /mnt/lvxfs
        └─nvme0n4p2 
        
      • ext4檔案系統和xfs檔案系統操作相同

    • 使用硬碟快照來進行備份

      • 透過建立硬碟快照,對分割槽中的內進行備份,如果硬碟中的資料丟失,可以透過硬碟快照來恢復硬碟中的資料

      • 建立快照

      • [root@bogon ~]# lvcreate -n mylv_xfs_snap -s -L 100M /dev/myvg_xfs/mylv_xfs
          Logical volume "mylv_xfs_snap" created.
        
      • 對硬碟快照進行掛載,由於硬碟快照和硬碟分割槽的UUID是相同的,但是掛載點不同,因此在對磁碟快照進行掛載時要帶上忽略uuid的引數nouuid

      • [root@bogon ~]# mount -o nouuid /dev/myvg_xfs/mylv_xfs_snap  /mnt/snap/
        
      • 當硬碟分割槽的檔案發生錯誤時,我們可以透過快照復原丟失的檔案

      • [root@bogon ~]# cat /mnt/snap/etc/fstab  > /mnt/lvxfs/etc/fstab 
        [root@bogon ~]# diff /mnt/snap/etc/fstab /mnt/lvxfs/etc/fstab 
        
      • 對於快照,我們在需要時進行掛載,在不需要時即可下線

6、邏輯卷的移除

在邏輯卷之前要先下線裝置

  • 首先移除LVM

    • [root@bogon ~]# lvremove /dev/myvg/mylv /dev/myxfs_vg/myxfs_lv
      Do you really want to remove active logical volume myvg/mylv? [y/n]: y
        Logical volume "mylv" successfully removed.
      Do you really want to remove active logical volume myxfs_vg/myxfs_lv? [y/n]: y
        Logical volume "myxfs_lv" successfully removed.
      [root@bogon ~]# lvs
        LV   VG   Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
        home rhel -wi-ao---- <18.07g                                                    
        root rhel -wi-ao----  37.00g                                                    
        swap rhel -wi-ao----  <3.93g    
      
  • 再移除VG

    • [root@bogon ~]# vgs
        VG       #PV #LV #SN Attr   VSize    VFree   
        myvg       1   0   0 wz--n- 1020.00m 1020.00m
        myxfs_vg   1   0   0 wz--n- 1020.00m 1020.00m
        rhel       1   3   0 wz--n-  <59.00g       0 
      [root@bogon ~]# vgremove myvg myxfs_vg 
        Volume group "myvg" successfully removed
        Volume group "myxfs_vg" successfully removed
      [root@bogon ~]# vgs
        VG   #PV #LV #SN Attr   VSize   VFree
        rhel   1   3   0 wz--n- <59.00g    0 
      
  • 最後移除PV

    • [root@bogon ~]# pvs
        PV             VG   Fmt  Attr PSize   PFree  
        /dev/nvme0n1p2 rhel lvm2 a--  <59.00g      0 
        /dev/nvme0n3p1      lvm2 ---  500.00m 500.00m
        /dev/nvme0n3p2      lvm2 ---  500.00m 500.00m
        /dev/nvme0n4p1      lvm2 ---    1.00g   1.00g
        /dev/nvme0n4p2      lvm2 ---    1.00g   1.00g
      [root@bogon ~]# pvremove /dev/nvme0n3* /dev/nvme0n4*
        Cannot use /dev/nvme0n4: device is partitioned
        No PV found on device /dev/nvme0n3.
        Labels on physical volume "/dev/nvme0n3p1" successfully wiped.
        Labels on physical volume "/dev/nvme0n3p2" successfully wiped.
        Labels on physical volume "/dev/nvme0n4p1" successfully wiped.
        Labels on physical volume "/dev/nvme0n4p2" successfully wiped.
      [root@bogon ~]# pvs
        PV             VG   Fmt  Attr PSize   PFree
        /dev/nvme0n1p2 rhel lvm2 a--  <59.00g    0 
      

7、邏輯卷啟用與反啟用

  • 在進行啟用與反啟用切換時需要先下線

  • 檢視邏輯卷狀態,ACTIVE是啟用狀態

  • [root@bogon ~]# lvscan 
    \  ACTIVE            '/dev/myvg_ext4/mylv_ext4' [600.00 MiB] inherit
      ACTIVE   Original '/dev/myvg_xfs/mylv_xfs' [300.00 MiB] inherit
      ACTIVE   Snapshot '/dev/myvg_xfs/mylv_xfs_snap' [252.00 MiB] inherit
      ACTIVE            '/dev/rhel/swap' [<3.93 GiB] inherit
      ACTIVE            '/dev/rhel/home' [<18.07 GiB] inherit
      ACTIVE            '/dev/rhel/root' [37.00 GiB] inherit
    
  • inactive是反啟用狀態

  • [root@bogon ~]# umount /mnt/lvmext4 
    [root@bogon ~]# vgchange -a n myvg_ext4 
      0 logical volume(s) in volume group "myvg_ext4" now active
    [root@bogon ~]# lvscan 
      inactive          '/dev/myvg_ext4/mylv_ext4' [600.00 MiB] inherit
      ACTIVE   Original '/dev/myvg_xfs/mylv_xfs' [300.00 MiB] inherit
      ACTIVE   Snapshot '/dev/myvg_xfs/mylv_xfs_snap' [252.00 MiB] inherit
      ACTIVE            '/dev/rhel/swap' [<3.93 GiB] inherit
      ACTIVE            '/dev/rhel/home' [<18.07 GiB] inherit
      ACTIVE            '/dev/rhel/root' [37.00 GiB] inherit
    
  • 處於inactive狀態的分割槽是不能夠啟動的

  • 切換為ACTIVE狀態

  • [root@bogon ~]# vgchange -a y myvg_ext4 
      1 logical volume(s) in volume group "myvg_ext4" now active
    [root@bogon ~]# lvscan 
      ACTIVE            '/dev/myvg_ext4/mylv_ext4' [600.00 MiB] inherit
      ACTIVE   Original '/dev/myvg_xfs/mylv_xfs' [300.00 MiB] inherit
      ACTIVE   Snapshot '/dev/myvg_xfs/mylv_xfs_snap' [252.00 MiB] inherit
      ACTIVE            '/dev/rhel/swap' [<3.93 GiB] inherit
      ACTIVE            '/dev/rhel/home' [<18.07 GiB] inherit
      ACTIVE            '/dev/rhel/root' [37.00 GiB] inherit
    

7、卷組的PE

在我們想要進行邏輯卷建立時,會出現如下問題

我想建立一個10M的邏輯卷,它提示我建立好了一個12M的邏輯卷

❓這是為什麼呢

{24-06-03 10:59}locahost:~ root# lvcreate -L 10M -n lvxixi systemvg
  Rounding up size to full physical extent 12.00 MiB
  Logical volume "lvxixi" created

主要原因:

在卷組當中存在著一個PE(擴充套件單元)的機制,由於邏輯卷的建立是基於卷組去實現的,而在卷組的角度來說,我只能分給邏輯卷整數個PE的大小。

PE預設是4M,因此,邏輯卷預設只能建立4M整數倍的大小,這也就解釋了為什麼我想建立10M的大小,系統卻建立出了12M的大小

我們可以檢視卷組的PE大小vgdisplay

{24-06-03 11:23}locahost:~ root# vgdisplay systemvg | egrep "PE" 
  PE Size               1.00 MiB
  Total PE              71660
  Alloc PE / Size       25643 / 25.04 GiB
  Free  PE / Size       46017 / <44.94 GiB

卷組的預設PE值是可以進行修改的,在修改時,一般不能修改成單數(1除外)

vgchange

{24-06-03 11:08}locahost:~ root# vgchange -s 1M systemvg
  Volume group "systemvg" successfully changed

當我們修改完後,就可以建立11M的邏輯捲了

{24-06-03 11:09}locahost:~ root# lvcreate -L 11M -n lvhehe systemvg
  Logical volume "lvhehe" created.

PE是不能隨便修改的,當我們修改為1M,並且建立了一個11M的邏輯卷

此時我們如果想繼續修改PE,那就必須修改為11的倍數才行。

我們想建立一個10個PE大小的邏輯卷,我們可以直接指定大小

也可以從個數方面去建立

lvcreate -l

{24-06-03 11:09}locahost:~ root# lvcreate -l 20 -n lvtest systemvg
  Logical volume "lvtest" created.

【6】、RAID磁碟陣列

RAID:進行磁碟整合,將多塊硬碟整合到一起,形成RAID盤,多個RAID盤也可以繼續整合為一個虛擬硬碟,在虛擬硬碟中就可以繼續建立邏輯捲了,這種方式的優勢:允許壞掉幾塊硬碟,資料不會丟失

image-20240407194824933

LVM邏輯卷:進行磁碟擴容

RAID磁碟陣列:

  • 中文全稱:獨立磁碟冗餘陣列,簡稱磁碟陣列
  • RAID可以透過技術(軟體/硬體)將多個獨立的磁碟整個成一個巨大的邏輯磁碟使用
  • RAID可以提高資料I/O速度和冗餘的資料功能

1、RAID級別

  • RAID0模式(條帶模式)

    • RAID0 是一種非常簡單的的方式,它將多塊磁碟組合在一起形成一個大容量的儲存。當我們要寫資料的時候,會將資料分為N份,以獨立的方式實現N塊磁碟的讀寫,那麼這N份資料會同時併發的寫到磁碟中,因此寫入的速度非常的高。RAID0 的讀寫效能理論上是單塊磁碟的N倍(僅限理論,因為實際中磁碟的定址時間也是效能佔用的大頭)
    • 但RAID0的問題是,它並不提供資料校驗或冗餘備份,因此一旦某塊磁碟損壞了,資料就直接丟失,無法恢復了。因此RAID0就不可能用於高要求的業務中,但可以用在對可靠性要求不高,對讀寫效能要求高的場景中。
    • image-20240407210208745
  • RAID1模式

    • RAID1 是磁碟陣列中單位成本最高的一種方式。因為它的原理是在往磁碟寫資料的時候,將同一份資料無差別的寫兩份到磁碟,分別寫到工作磁碟和映象磁碟,那麼它的實際空間使用率只有50%了,兩塊磁碟當做一塊用,這是一種比較昂貴的方案。

      RAID1其實與RAID0效果剛好相反。RAID1 這種寫雙份的做法,就給資料做了一個冗餘備份。這樣的話,任何一塊磁碟損壞了,都可以再基於另外一塊磁碟去恢復資料,資料的可靠性非常強,但讀取效能就沒那麼好了。

  • RAID5模式

    • RAID5模式中,不再需要用單獨的磁碟寫校驗碼了。它把校驗碼資訊分佈到各個磁碟上。例如,總共有N塊磁碟,那麼會將要寫入的資料分成N份,併發的寫入到N塊磁碟中,同時還將資料的校驗碼資訊也寫入到這N塊磁碟中(資料與對應的校驗碼資訊必須得分開儲存在不同的磁碟上)。一旦某一塊磁碟損壞了,就可以用剩下的資料和對應的奇偶校驗碼資訊去恢復損壞的資料。
    • RAID5的方式,最少需要三塊磁碟來組建磁碟陣列,允許最多同時壞一塊磁碟。如果有兩塊磁碟同時損壞了,那資料就無法恢復了。
    • RAID5模式存在一塊熱備盤,用於在一塊硬碟壞掉後來頂替舊的盤
  • RAID6模式

    • 為了進一步提高儲存的高可用,聰明的人們又提出了RAID6方案,可以在有兩塊磁碟同時損壞的情況下,也能保障資料可恢復。

      為什麼RAID6這麼牛呢,因為RAID6在RAID5的基礎上再次改進,引入了雙重校驗的概念(加入了伽羅華域演算法)

      RAID6除了每塊磁碟上都有同級資料XOR校驗區以外,還有針對每個資料塊的XOR校驗區,這樣的話,相當於每個資料塊有兩個校驗保護措施,因此資料的冗餘性更高了。

      但是RAID6的這種設計也帶來了很高的複雜度,雖然資料冗餘性好,讀取的效率也比較高,但是寫資料的效能就很差。因此RAID6在實際環境中應用的比較少。

  • RAID10模式

    • RAID10其實就是RAID1與RAID0的一個合體。

    • RAID10兼備了RAID1和RAID0的有優點。首先基於RAID1模式將磁碟分為2份,當要寫入資料的時候,將所有的資料在兩份磁碟上同時寫入,相當於寫了雙份資料,起到了資料保障的作用。且在每一份磁碟上又會基於RAID0技術講資料分為N份併發的讀寫,這樣也保障了資料的效率。

      但也可以看出RAID10模式是有一半的磁碟空間用於儲存冗餘資料的,浪費的很嚴重,因此用的也不是很多。

    • image-20240408083602011

實現RAID的方式

  • 透過軟體技術實現RAID功能(軟RAID)
  • 外接式磁碟陣列櫃,通常用在大型伺服器上,價格昂貴
  • RAID磁碟陣列卡,分為伺服器自帶和額外安裝,影RAID比軟RAID更穩定,RAID卡帶有快取功能可實現資料自動恢復,RAID卡有電池

2、建立軟RAID

mdadm命令建立軟RAID5

  • 新增磁碟,磁碟大小要一致,至少3塊磁碟。我們新增四塊磁碟,剩餘一塊用來模擬故障,切換

  • 建立軟RAID

    • [root@bogon ~]# mdadm -C /dev/md0  -n 3 -l 5 /dev/nvme0n[234]
      mdadm: Defaulting to version 1.2 metadata
      mdadm: array /dev/md0 started.
      
    • 在建立軟RAID時,可以透過檢視記憶體檢視建立過程

    • [root@bogon ~]# cat /proc/mdstat 
      Personalities : [raid6] [raid5] [raid4] 
      md0 : active raid5 nvme0n4[3] nvme0n3[1] nvme0n2[0]
            10475520 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [UU_]
            [===>.................]  recovery = 18.9% (994076/5237760) finish=0.2min speed=248519K/sec
            
      unused devices: <none>
      [root@bogon ~]# cat /proc/mdstat 
      Personalities : [raid6] [raid5] [raid4] 
      md0 : active raid5 nvme0n4[3] nvme0n3[1] nvme0n2[0]
            10475520 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]
            
      unused devices: <none>
      
    • image-20240408152626001

    • 檢視RAID的資訊

    • [root@bogon ~]# mdadm -D /dev/md0 
      /dev/md0:
                 Version : 1.2
           Creation Time : Mon Apr  8 03:21:00 2024
              Raid Level : raid5
              Array Size : 10475520 (9.99 GiB 10.73 GB)
           Used Dev Size : 5237760 (5.00 GiB 5.36 GB)
            Raid Devices : 3
           Total Devices : 3
             Persistence : Superblock is persistent
      
             Update Time : Mon Apr  8 03:21:27 2024
                   State : clean 
          Active Devices : 3
         Working Devices : 3
          Failed Devices : 0
           Spare Devices : 0
      
                  Layout : left-symmetric
              Chunk Size : 512K
      
      Consistency Policy : resync
      
                    Name : bogon:0  (local to host bogon)
                    UUID : 178bfb9f:c88b0b14:70373056:288bb63e
                  Events : 18
      
          Number   Major   Minor   RaidDevice State
             0     259        3        0      active sync   /dev/nvme0n2
             1     259        4        1      active sync   /dev/nvme0n3
             3     259        5        2      active sync   /dev/nvme0n4
      
    • image-20240408153111752

  • 編寫RAID的配置檔案使其永久生效

    • [root@bogon ~]# mdadm -E -s --brief > /etc/mdadm.comf
      [root@bogon ~]# vim /etc/mdadm.comf 
      [root@bogon ~]# cat /etc/mdadm.comf 
      ARRAY /dev/md0   UUID=178bfb9f:c88b0b14:70373056:288bb63e 
      
  • 在RAID的基礎上建立LVM

    • [root@bogon ~]# pvcreate /dev/md0 
        Physical volume "/dev/md0" successfully created.
      [root@bogon ~]# vgcreate mdvg /dev/md0
        Volume group "mdvg" successfully created
      [root@bogon ~]# lvcreate -n mdlv -L 3G mdvg 
        Logical volume "mdlv" created.
      [root@bogon ~]# mkfs.ext4 /dev/mdvg/mdlv 
      mke2fs 1.45.6 (20-Mar-2020)
      Creating filesystem with 786432 4k blocks and 196608 inodes
      Filesystem UUID: e12f0f0a-46d2-460e-a63b-0e025707b97b
      Superblock backups stored on blocks: 
      	32768, 98304, 163840, 229376, 294912
      
      Allocating group tables: done                            
      Writing inode tables: done                            
      Creating journal (16384 blocks): done
      Writing superblocks and filesystem accounting information: done 
      進行永久掛載
      
  • 模擬硬碟故障

    • [root@bogon ~]# mdadm --manage /dev/md0 --fail /dev/nvme0n4
      mdadm: set /dev/nvme0n4 faulty in /dev/md0
      [root@bogon ~]# mdadm --manage /dev/md0 --remove /dev/nvme0n4
      mdadm: hot removed /dev/nvme0n4 from /dev/md0
      [root@bogon ~]# mdadm --manage /dev/md0 --add /dev/nvme0n5
      mdadm: added /dev/nvme0n5
      
    • 資料不會丟失

  • 刪除磁碟陣列

    • 刪除LVM

      • [root@bogon ~]# umount /mnt/lvmext4 
        [root@bogon ~]# 
        [root@bogon ~]# 
        [root@bogon ~]# lvremove /dev/mdvg/mdlv
        Do you really want to remove active logical volume mdvg/mdlv? [y/n]: y
          Logical volume "mdlv" successfully removed.
        [root@bogon ~]# vgremove mdvg 
          Volume group "mdvg" successfully removed
        [root@bogon ~]# pvremove /dev/md0 
          Labels on physical volume "/dev/md0" successfully wiped.
        [root@bogon ~]# 
        
    • 停止RAID

      • [root@bogon ~]# mdadm -S /dev/md0 
        mdadm: stopped /dev/md0
        
    • 刪除RAID的配置檔案

      • [root@bogon ~]# rm -rf /etc/mdadm.comf 
        
      • 重啟RAID 進行測試

      • [root@bogon ~]# mdadm -As /dev/md0
        mdadm: /dev/md0 not identified in config file.
        #無法重啟證明配置檔案刪除成功
        
    • 進行重啟

    • 重啟後檢查硬碟中是否存在RAID的快取

      • 沒有快取,證明RAID被完全刪除

      • 有快取,強制刪除

      • [root@bogon ~]# cat /proc/mdstat 
        Personalities : [raid6] [raid5] [raid4] 
        md127 : active (auto-read-only) raid5 nvme0n3[1] nvme0n2[0] nvme0n5[3]
              10475520 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]
              
        unused devices: <none>
        [root@bogon ~]# mdadm --zero-superblock /dev/nvme0n2
        [root@bogon ~]# mdadm --zero-superblock /dev/nvme0n3
        [root@bogon ~]# mdadm --zero-superblock /dev/nvme0n4
        [root@bogon ~]# mdadm --zero-superblock /dev/nvme0n5
        [root@bogon ~]# cat /proc/mdstat 
        Personalities : [raid6] [raid5] [raid4] 
        unused devices: <none>
        

3、監控RAIDs

  • 監控RAID可以在磁碟發生故障時通知我們,進而可以及時更換硬碟

  • 在/etc/mdamd.conf中設定正確的郵件,確保可以將通知傳送給我們

    [root@locahost ~]# echo "MAILADDR xuruizhao00@163.com" >> /etc/mdadm.conf 
    
  • 開啟監視服務

    [root@locahost ~]# systemctl start mdmonitor.service 
    [root@locahost ~]# systemctl status mdmonitor.service 
    ● mdmonitor.service - Software RAID monitoring and management
       Loaded: loaded (/usr/lib/systemd/system/mdmonitor.service; enabled; vendor preset: enabled)
       Active: active (running) since Mon 2024-04-08 22:34:54 EDT; 4min 57s ago
      Process: 2639 ExecStart=/sbin/mdadm --monitor --scan -f --pid-file=/var/run/mdadm/mdadm.pid (code=exited, status=0/SUCCESS)
     Main PID: 2640 (mdadm)
        Tasks: 1 (limit: 24565)
       Memory: 652.0K
       CGroup: /system.slice/mdmonitor.service
               └─2640 /sbin/mdadm --monitor --scan -f --pid-file=/var/run/mdadm/mdadm.pid
    
    Apr 08 22:34:54 locahost systemd[1]: Starting Software RAID monitoring and management...
    Apr 08 22:34:54 locahost systemd[1]: Started Software RAID monitoring and management.
    

【7】、parted命令

和fdisk一樣,都可以對磁碟進行分割槽。

fdisk命令進行磁碟分割槽:進位制是1024,更加貼合Linux中磁碟的容量

parted命令進行磁碟分割槽:進位制是1000,更貼合廠商的硬碟劃分

{24-06-03 8:52}locahost:~ root# parted /dev/sde
GNU Parted 3.2
Using /dev/sde
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mktable gpt                                                  
(parted) mkpart 
Partition name?  []?                                                      
File system type?  [ext2]?                                                
Start? 0                                                                  
End? 5G                                                                   
Warning: The resulting partition is not properly aligned for best performance: 34s % 2048s != 0s
Ignore/Cancel? Ignore                                                     
(parted) print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sde: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name  Flags
 1      17.4kB  5000MB  5000MB  ext2

(parted) mkpart                                                           
Partition name?  []?                                                      
File system type?  [ext2]?                                                
Start? 5G                                                                 
End? 100%                                                                 
(parted) print                                                            
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sde: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name  Flags
 1      17.4kB  5000MB  5000MB  ext2
 2      5001MB  21.5GB  16.5GB  ext2

(parted) quit                                                             
Information: You may need to update /etc/fstab.

【8】、VDO卷

做VDO需要2GB及以上記憶體

  • 重刪資料
    • 相同的資料只存放一份,重複的資料會刪除
  • 虛擬大小
    • 他本身有20G,但是可以對外聲稱2000G,建議10倍之差

相關文章