天天看點

RAID和邏輯卷管理器(LVM)

什麼是RAID

    RAID:RedundantArrays of Inexpensive(Independent)Disks 廉價的獨立磁盤

    1988年由加利福尼亞大學伯克利分校(University of California-Berkeley)“A Case for Redundant Arrays of Inexpensive Disks”

    多個磁盤合成一個“陣列”來提供更好的性能、備援,或者兩者都提供

RAID

    提高IO能力

        磁盤并行讀寫

    提高耐用性

        磁盤備援來實作

    級别:多塊磁盤組織在一起的工作方式有所不同

    RAID實作的方式:

        外接式磁盤陣列:通過擴充卡提供适配能力

        内接式RAID:主機闆內建RAID控制器

            安裝OS前在BIOS裡配置

        軟體RAID:通過OS實作

RAID級别

    RAID-0:條帶卷,strip

    RAID-1: 鏡像卷,mirror  

    RAID-2

    ...

    RAID-5

    RAID-6

    RAID-10

    RAID-01

    RAID-0:

        讀、寫性能提升;

        可用空間:N*min(S1,S2,...)

        無容錯能力

        最少磁盤數:2, 2+

    RAID-1:

        讀性能提升、寫性能略有下降;

        可用空間:1*min(S1,S2,...)

        有備援能力

        最少磁盤數:2, 2N

    RAID-4:

        多塊資料盤異或運算值存于專用校驗盤

    RAID-5:

        讀、寫性能提升

        可用空間:6力:允許最多1塊磁盤損壞

        最少磁盤數:3, 3+

    RAID-6:

        讀、寫性能提升

        可用空間:(N-2)*min(S1,S2,...)  

        有容錯能力:允許最多2塊磁盤損壞

        最少磁盤數:4, 4+

    RAID-10:

        讀、寫性能提升

        可用空間:N*min(S1,S2,...)/2

        有容錯能力:每組鏡像最多隻能壞一塊

        最少磁盤數:4, 4+

組合RAID

    RAID-01

        多塊磁盤先實作RAID0,再組合成RAID1

    RAID-50

        多塊磁盤先實作RAID5,再組合成RAID0

    JBOD:Just a Bunch Of Disks

        功能:将多塊磁盤的空間合并一個大的連續空間使用

            可用空間:sum(S1,S2,...)

    RAID7

        可以了解為一個獨立存儲計算機,自身帶有作業系統和管理工具,可以獨立運作,理論上性能最高的RAID模式

    常用級别:

        RAID-0, RAID-1, RAID-5, RAID-10, RAID-50, JBOD

    軟RAID

        mdadm:為軟RAID提供管理界面

        為空餘磁盤添加備援

        結合核心中的md(multi devices)

        RAID裝置可命名為/dev/md0、/dev/md1、/dev/md2、/dev/md3等

    軟體RAID的實作

        mdadm:模式化的工具

        指令的文法格式:mdadm[mode] <raiddevice> [options] <component-devices>

        支援的RAID級别:LINEAR, RAID0, RAID1, RAID4, RAID5, RAID6, RAID10

        模式:

            建立:-C

            裝配: -A

            監控: -F   

            管理:-f, -r, -a

        <raiddevice>: /dev/md#

        <component-devices>: 任意塊裝置

        -C: 建立模式

            -n #: 使用#個塊裝置來建立此RAID

            -l #:指明要建立的RAID的級别

            -a {yes|no}:自動建立目标RAID裝置的裝置檔案

            -c CHUNK_SIZE: 指明塊大小,機關k

            -x #: 指明空閑盤的個數 簡稱備用

        -D:顯示raid的詳細資訊

            mdadm-D /dev/md#

        管理模式:

            -f: 标記指定磁盤為損壞

            -a: 添加磁盤

            -r: 移除磁盤

        觀察md的狀态:

            cat /proc/mdstat

軟RAID配置示例

    使用mdadm建立并定義RAID裝置

        mdadm-C /dev/md0 -a yes -l 5 -n 3 -x 1 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1

    用檔案系統對每個RAID裝置進行格式化

        mke2fs -j /dev/md0

    測試RAID裝置

    使用mdadm檢查RAID裝置的狀況

        mdadm--detail|D/dev/md0

    增加新的成員

        mdadm–G /dev/md0 –n4 -a /dev/sdf1

軟RAID測試和修複

    模拟磁盤故障

        mdadm /dev/md0 -f /dev/sda1

    移除磁盤

        mdadm /dev/md0 –r /dev/sda1

    從軟體RAID磁盤修複磁盤故障

        替換出故障的磁盤然後開機

        在備用驅動器上重建分區

        mdadm /dev/md0 -a /dev/sda1

    mdadm、/proc/mdstat及系統日志資訊

軟RAID管理

    生成配置檔案:mdadm –D –s >> /etc/mdadm.conf

    停止裝置:mdadm –S /dev/md0

    激活裝置:mdadm –A –s /dev/md0 激活

    強制啟動:mdadm –R /dev/md0

    删除raid資訊:mdadm --zero-superblock /dev/sdb1

問題:如何建立一個軟RAID5 添加一個硬碟備用????????

    機器可使用的硬碟:

        sdb      8:16   0   50G  0 disk

        sde      8:64   0   30G  0 disk

        sdc      8:32   0   40G  0 disk

        sdd      8:48   0   30G  0 disk

    将磁盤分區好:

        sdb      8:16   0   50G  0 disk

        └─sdb1   8:17   0   30G  0 part

        sde      8:64   0   30G  0 disk

        └─sde1   8:65   0   30G  0 part

        sdc      8:32   0   40G  0 disk

        └─sdc1   8:33   0   30G  0 part

        sdd      8:48   0   30G  0 disk

        └─sdd1   8:49   0   30G  0 part

    partx -a /dev/sdb sde sdc sdd   同步

    建立RAID:

        mdadm -C /dev/md0 -a yes -l5 -n3 -x1 /dev/sd{b,c,d,e}1

    用于檢視建立的RAID裝置:

        mdadm -D /dev/md0   

    建立檔案格式類型:

        mkfs.ext4 /dev/md0 -L raid5     -L:添加卷标

    建立與挂載出:

        vim /etc/fstab

        UUID=6f246919-9fc5-4854-9982-8e7f11c16318 /mnt/raid     ext4    defaults 0 0

        mkdir /mnt/raid

        mount -a    啟用

    注意:在使用RAID的時候建議最好生成一個RAID的配置檔案以防下次停止使用時無法讀取RAID裝置

    如果要停止RAID裝置時要先取消挂載才可操作

    測試一下RAID5的性能:本人使用的都是固态硬碟是以........

        寫入的速度測試:

            [[email protected] ~]# dd if=/dev/zero of=/data/f1 bs=1M count=1024   本機的普通硬碟寫入的性能     

            1024+0 records in

            1024+0 records out

            1073741824 bytes (1.1 GB) copied, 4.46875 s, 240 MB/s

            [[email protected] ~]# dd if=/dev/zero of=/mnt/raid/f1 bs=1M count=1024     RAID5寫入的性能

            1024+0 records in

            1024+0 records out

            1073741824 bytes (1.1 GB) copied, 2.47991 s, 433 MB/s

        讀的速度測試:

            [ro[email protected] ~]# dd if=/data/f1 of=/dev/null 本機的普通硬碟的讀取性能

            2097152+0 records in

            2097152+0 records out

            1073741824 bytes (1.1 GB) copied, 4.17335 s, 257 MB/s

            [[email protected] ~]# dd if=/mnt/raid/f1 of=/dev/null     RAID5讀取的性能

            2097152+0 records in

            2097152+0 records out

            1073741824 bytes (1.1 GB) copied, 2.14119 s, 501 MB/s

    那麼如何停用和啟用RAID呢????

        umount /mnt/raid/

        mdadm -S /dev/md0   停用RAID    

        mdadm -A /dev/md0  啟用RAID

        mount -a     

    檢視RAID狀态:

        mdadm -D /dev/md0

    模拟一塊硬碟損壞另外一個自動頂替

        mdadm /dev/md0 -f /dev/sdc1     模拟/dev/sdc1的磁盤損壞

        mdadm -D /dev/md0   檢視狀态

        Rebuild Status : 18% complete   備用硬碟自動啟動填上去

        即便是壞了一硬碟資料還是可通路的有容錯性

    如何将損壞/dev/sdc1的硬碟移走呢????

        mdadm /dev/md0 -r /dev/sdc1

    還是可以添加回來的 不過成為備用的

        mdadm /dev/md0 -a /dev/sdc1

    新加的硬碟一般都沒有檔案系統硬碟空間無法使用該如何解決呢???

        centos6:resize2fs /dev/md0 同步檔案系統,隻支援ext檔案格式

        centos7:xfs_growfs /mnt/raid   同步檔案系統,支援xfs檔案格式   注意路徑要寫挂載的路徑

LVM:邏輯卷管理

    允許對卷進行友善操作的抽象層,包括重新設定檔案系統的大小

    允許在多個實體裝置間重新組織檔案系統

        将裝置指定為實體卷

        用一個或者多個實體卷來建立一個卷組

        實體卷是用固定大小的實體區域(Physical Extent,PE)來定義的

        在實體卷上建立的邏輯卷

        是由實體區域(PE)組成

        可以在邏輯卷上建立檔案系統

LVM介紹

LVM: Logical Volume Manager,Version: 2

dm: device mapper:将一個或多個底層塊裝置組織成一個邏輯裝置的子產品

裝置名:/dev/dm-#

軟連結:

    /dev/mapper/VG_NAME-LV_NAME

    /dev/mapper/vol0-root  

    /dev/VG_NAME/LV_NAME

    /dev/vol0/root

LVM更改檔案系統的容量

    LVM可以彈性的更改LVM的容量

    通過交換PE來進行資料的轉換,将原來LV内的PE轉移到其他的裝置中以降低LV的容量,或将其他裝置中的PE加到LV中以加大容量

pv管理工具

    顯示pv資訊

        pvs:簡要pv資訊顯示

        pvdisplay

    建立pv

        pvcreate /dev/DEVICE

vg管理工具

    顯示卷組

        vgs:顯示卷組的空間

        vgdisplay:顯示詳細的卷組資訊

    建立卷組

        vgcreate [-s #[kKmMgGtTpPeE]] VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]

    管理卷組

        vgextend VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]

        vgreduce VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]

    删除卷組

        先做pvmove,再做vgremove

lv管理工具

    顯示邏輯卷

        lvs

        Lvdisplay

    建立邏輯卷

        lvcreate -L #[mMgGtT] -n NAME VolumeGroup

        lvcreate -l 60%VG -n mylvtestvg

        lvcreate -l 100%FREE -n yourlvtestvg

    删除邏輯卷

        lvremove/dev/VG_NAME/LV_NAME

    重設檔案系統大小

        fsadm[options] resize device [new_size[BKMGTEP]]

        resize2fs [-f] [-F] [-M] [-P] [-p] device [new_size

擴充和縮減邏輯卷

    擴充邏輯卷:

        lvextend-L [+]#[mMgGtT] /dev/VG_NAME/LV_NAME

        resize2fs /dev/VG_NAME/LV_NAME

        lvresize-r -l +100%FREE /dev/VG_NAME/LV_NAME

    縮減邏輯卷:

        umount/dev/VG_NAME/LV_NAME

        e2fsck -f /dev/VG_NAME/LV_NAME

        resize2fs /dev/VG_NAME/LV_NAME #[mMgGt]

        lvreduce-L [-]#[mMgGtT] /dev/VG_NAME/LV_NAME

        mount

跨主機遷移卷組

    源計算機上

        1 在舊系統中,umount所有卷組上的邏輯卷

        2 vgchange–a n vg0

            lvdisplay

        3 vgexportvg0

            pvscan

            vgdisplay

            拆下舊硬碟

    在目标計算機上

        4 在新系統中安裝舊硬碟,并vgimportvg0.

        5 vgchange–ay vg0

        6 mount所有卷組上的邏輯卷

建立邏輯卷示例

    建立實體卷

        pvcreate /dev/sda3

    為卷組配置設定實體卷

        vgcreate vg0 /dev/sda3

    從卷組建立邏輯卷

        lvcreate -L 256M -n data vg0

        mke2fs -j /dev/vg0/data

    mount /dev/vg0/data /mnt/data

邏輯卷管理器快照

    快照是特殊的邏輯卷,它是在生成快照時存在的邏輯卷的準确拷貝

    對于需要備份或者複制的現有資料臨時拷貝以及其它操作來說,快照是最合适的選擇

    快照隻有在它們和原來的邏輯卷不同時才會消耗空間

    在生成快照時會配置設定給它一定的空間,但隻有在原來的邏輯卷或者快照有所改變才會使用這些空間

    當原來的邏輯卷中有所改變時,會将舊的資料複制到快照中。

    快照中隻含有原來的邏輯卷中更改的資料或者自生成快照後的快照中更改的資料

    建立快照的卷大小隻需要原始邏輯卷的15%~20%就夠了,也可以使用lvextend放大快照

    快照就是将當時的系統資訊記錄下來,就好像照相一般,若将來有任何資料改動了,則原始資料會被移動到快照區,沒有改動的區域則由快照區和檔案系統共享

    由于快照區與原本的LV共用很多PE的區塊,是以快照與被快照的LV必須在同一個VG中.系統恢複的時候的檔案數量不能高于快照區的實際容量

使用LVM快照

    為現有邏輯卷建立快照

        lvcreate-l 64 -s -n data-snapshot -p r /dev/vg0/data

    挂載快照

        mkdir-p /mnt/snap

        mount -o ro/dev/vg0/data-snapshot /mnt/snap

    恢複快照

        umount/dev/vg0/data-snapshot

        umount/dev/vg0/data

        lvconvert--merge /dev/vg0/data-snapshot

    删除快照

        umount/mnt/databackup

        lvremove/dev/vg0/databackup

小執行個體:

    在硬碟上做兩個LVM的分區/dev/sdb1、/dev/sdc1大小各2G

      将普通的硬碟分區變成實體卷呢:

        pvcreate:用于建立實體卷

        pvdisplay:檢視實體卷看比較詳細

        pvs   用于檢視實體卷

        pvcreate /dev/sdb1   建立實體卷

        pvcreate /dev/sdc1   建立實體卷

      建立卷組:

        vgs:檢視現有的卷組

        vgdisplay:檢視更詳細的卷組

        vgcreate -s 18M vg1 /dev/sdb1

        vgcreate -s 18M vg2 /dev/sdc1

      建立邏輯卷:

        lvcreate -n lv1 -l 100 vg1

        lvdisplay:檢視建立的邏輯卷

      将剩餘的邏輯卷全部用完:

        lvcreate -n lv2 -l 100%FREE vg1

            100%FREE:将分區裡的剩餘空間全部用完

      建立檔案格式:

        mkfs.ext4 /dev/vg1/lv1

        mkfs.ext4 /dev/vg1/lv2

      挂載裝置:

        UUID=d60bf3e2-dede-4507-9e58-c16a46c45a63 /mnt/lv1      ext4    defaults 0 0

        UUID=3894bb11-c5e7-4be5-b4c3-ef4ce4461b27 /mnt/lv2      ext4    defaults 0 0

        mkdir /mnt/lv1

        mkdir /mnt/lv2

        mount -a    啟用挂載

    測試性能:

        [[email protected] ~]# dd if=/dev/zero of=/mnt/lv1/f1 bs=1M count=10241024+0 records in

        1024+0 records out

        1073741824 bytes (1.1 GB) copied, 9.09417 s, 118 MB/s

    如遇到邏輯卷空間不足如何增加空間:

        首先加一塊新的硬碟:

            在添加硬碟之後須執行:我加了一個20G的新硬碟名稱:/dev/sdd

                echo '- - -' > /sys/class/scsi_host/host2/scan  掃描識别新添加的硬碟

        直接用整塊硬碟做,可直接做成實體卷:

            pvcreate /dev/sdd

    添加進之前的vg1卷組:

            [[email protected] ~]# vgextend vg1 /dev/sdd

              Volume group "vg1" successfully extended

            [[email protected] ~]# pvs 或vgdisplay  用于查詢

              PV         VG   Fmt  Attr PSize  PFree

              /dev/sdb1  vg1  lvm2 a--u  2.00g     0

              /dev/sdc1  vg1  lvm2 a--u  2.00g     0

              /dev/sdd   vg1  lvm2 a--u 19.99g 19.99g

    将剛添加的新硬碟添加進/mnt/lv1:

            lvextend -L +10G /dev/vg1/lv1

            注意:添加完之後df中的添加的10G空間釋放必須要同步一下即可:

                resize2fs /dev/vg1/lv1

            其實也可以直接帶參數選項:

                lvextend -r -l +100%FREE /dev/vg1/lv1

                    -r:同步

                    -l +100%FREE:硬碟下的剩餘空間

    當遇到邏輯卷空間比較大時可以縮減的centos7是不行的用于centos6:

        縮減5G:

            e2fsck -f /dev/vg1/lv1  先檢查完整性才可執行縮減

            resize2fs /dev/vg1/lv1 5G

    縮減邏輯卷:注意可能會損壞資料

            lvreduce -L 5G /dev/vg1/lv1

            mount -a 将/mnt/lv1挂載回去

轉載于:https://blog.51cto.com/001230/2120575

繼續閱讀