Linux‎ > ‎儲存技術‎ > ‎

在Linux SoftRAID上建立LVM虛擬磁碟

目的

Linux線上的系統中,將新增的6顆硬碟作軟體磁碟陣列(Software RAID),劃分成3RAID群組,模式都設為RAID 1 (Mirror)。接著使用LVM將這3RAID群組合併成1個虛擬磁碟。

 

 

測試環境

作業系統

Red Hat Enterprise Linux 6.4

RAID

Raid Group 1

(RAID1 Mirror)

1.      /dev/sdb: 10.7 GB

2.      /dev/sdc: 10.7 GB

/dev/md0

Raid Group 2

(RAID1 Mirror)

3.      /dev/sdd: 14.0 GB

4.      /dev/sde: 14.0 GB

/dev/md1

Raid Group 3

(RAID1 Mirror)

5.      /dev/sdf: 17.2 GB

6.      /dev/sdg: 17.2 GB

/dev/md2

LVM

PV

 

VG

jvg

LV

jlv

 

實作Software RAID

1.      檢視系統可作SoftRAID磁碟

[root@JLAB ~]# fdisk -l | grep "/dev"

Disk /dev/sda: 53.7 GB, 53687091200 bytes

/dev/sda1   *           1        6528    52427776   83  Linux

Disk /dev/sdb: 10.7 GB, 10737418240 bytes

Disk /dev/sdc: 10.7 GB, 10737418240 bytes

Disk /dev/sdd: 14.0 GB, 13958643712 bytes

Disk /dev/sde: 14.0 GB, 13958643712 bytes

Disk /dev/sdf: 17.2 GB, 17179869184 bytes

Disk /dev/sdg: 17.2 GB, 17179869184 bytes

 

2.      將相同容量磁碟組成1RAID群組,總共會有3RAID 1群組。

I.         sdbsdc : 10.7GB

II.       sddsde : 14.0GB

III.     sdfsdg : 17.2GB

 

3.      使用指令mdadm --create建立SoftRAID

[root@JLAB ~]# mdadm --create --auto=yes /dev/md0 --level=1 --raid-device=2 /dev/sd{b,c}

[root@JTSM ~]# mdadm --create --auto=yes /dev/md1 --level=1 --raid-device=2 /dev/sd{d,e}

[root@JTSM ~]# mdadm --create --auto=yes /dev/md2 --level=1 --raid-device=2 /dev/sd{f,g}

選項與參數說明:

--create :建立新的RAID

--auto=yes :決定建立後面接的軟體磁碟陣列裝置,亦即 /dev/md0, /dev/md1...

--raid-devices=N :指定磁碟陣列的裝置(磁碟)的數量

--spare-devices=N :指定磁碟陣列的裝置備用磁碟(spare)的數量

--level=1 :設定磁碟陣列的等級

--detail :列出磁碟陣列裝置的詳細資訊

 

4.      使用指令mdadm --detail查詢已建立好的RAID

[root@JLAB ~]# mdadm --detail /dev/md{0,1,2}

/dev/md0:

        Version : 1.2

  Creation Time : Mon Jul  8 14:46:15 2013

     Raid Level : raid1

     Array Size : 10477440 (9.99 GiB 10.73 GB)

  Used Dev Size : 10477440 (9.99 GiB 10.73 GB)

   Raid Devices : 2

  Total Devices : 2

    Persistence : Superblock is persistent

 

    Update Time : Mon Jul  8 14:53:57 2013

          State : active

 Active Devices : 2

Working Devices : 2

 Failed Devices : 0

  Spare Devices : 0

 

           Name : JTSM:0  (local to host JTSM)

           UUID : c33f76c8:7c8de294:79c6526b:03787bc9

         Events : 18

 

    Number   Major   Minor   RaidDevice State

       0       8       16        0      active sync   /dev/sdb

       1       8       32        1      active sync   /dev/sdc

/dev/md1:

        Version : 1.2

  Creation Time : Mon Jul  8 15:05:36 2013

     Raid Level : raid1

     Array Size : 13623168 (12.99 GiB 13.95 GB)

  Used Dev Size : 13623168 (12.99 GiB 13.95 GB)

   Raid Devices : 2

  Total Devices : 2

    Persistence : Superblock is persistent

 

    Update Time : Mon Jul  8 17:35:29 2013

          State : clean

 Active Devices : 2

Working Devices : 2

 Failed Devices : 0

  Spare Devices : 0

 

           Name : JTSM:1  (local to host JTSM)

           UUID : eebd9b9e:111cdcc5:e005ecb4:7d6720c0

         Events : 17

 

    Number   Major   Minor   RaidDevice State

       0       8       48        0      active sync   /dev/sdd

       1       8       64        1      active sync   /dev/sde

/dev/md2:

        Version : 1.2

  Creation Time : Mon Jul  8 15:07:31 2013

     Raid Level : raid1

     Array Size : 16768896 (15.99 GiB 17.17 GB)

  Used Dev Size : 16768896 (15.99 GiB 17.17 GB)

   Raid Devices : 2

  Total Devices : 2

    Persistence : Superblock is persistent

 

    Update Time : Mon Jul  8 15:24:30 2013

          State : clean

 Active Devices : 2

Working Devices : 2

 Failed Devices : 0

  Spare Devices : 0

 

           Name : JTSM:2  (local to host JTSM)

           UUID : c6479325:886f2c7f:51ddd3a9:90b1cc73

         Events : 17

 

    Number   Major   Minor   RaidDevice State

       0       8       80        0      active sync   /dev/sdf

       1       8       96        1      active sync   /dev/sdg

 

5.      使用指令cat /proc/mdstat 查看系統SoftRAID情況

I.     下列狀態表示,每個 block 單位為 1K[UU] 代表的是2個裝置的啟動情況,U 代表正常運作,若為 _ 則代表不正常。

[root@JLAB ~]# cat /proc/mdstat

Personalities : [raid1]

md2 : active raid1 sdg[1] sdf[0]

      16768896 blocks super 1.2 [2/2] [UU]

 

md1 : active raid1 sde[1] sdd[0]

      13623168 blocks super 1.2 [2/2] [UU]

 

md0 : active raid1 sdc[1] sdb[0]

      10477440 blocks super 1.2 [2/2] [UU]

 

unused devices: <none>

 

6.      格式化

[root@JLAB ~]# mkfs.ext4 /dev/md0

[root@JLAB ~]# mkfs.ext4 /dev/md1

[root@JLAB ~]# mkfs.ext4 /dev/md2

 

7.      設定開機自動啟動RAID

I.           查詢每一組RAIDUUID識別碼

[root@JLAB ~]# mdadm --detail /dev/md{0,1,2} | grep -i uuid

           UUID : c6479325:886f2c7f:51ddd3a9:90b1cc73

           UUID : eebd9b9e:111cdcc5:e005ecb4:7d6720c0

           UUID : c33f76c8:7c8de294:79c6526b:03787bc9

II.        設定 /etc/mdadm.conf

[root@JLAB ~]# vim /etc/mdadm.conf

ARRAY /dev/md0 UUID=c6479325:886f2c7f:51ddd3a9:90b1cc73

ARRAY /dev/md1 UUID=eebd9b9e:111cdcc5:e005ecb4:7d6720c0

ARRAY /dev/md2 UUID=c33f76c8:7c8de294:79c6526b:03787bc9

 

8.      RAID中加入新的磁碟,並移除故障磁碟。

[root@JLAB ~]# mdadm --manage /dev/md0 --add /dev/sdh --remove /dev/sdb

mdadm: added /dev/sdh

mdadm: hot removed /dev/sdb

 

9.      關閉RAID

[root@JLAB ~]# mdadm --stop /dev/md0

mdadm: stopped /dev/md0

 

在建立好的RAID上,實作LVM (Logical Volume Manager)

1.      建立PV (Physical Volume)

        i.                PV相關指令

      ii.                pvcreate : 將實體磁碟或Partition建立成PV

    iii.                pvremove : 將實體磁碟或Partition移除PV屬性

    iv.                pvscan : 搜尋系統內具有PV屬性的磁碟

      v.                pvdisplay : 顯示PV狀態

    vi.                pvs : 產生PV標準化輸出的資訊

  vii.                建立PV

[root@JLAB ~]# pvcreate /dev/md{0,1,2}

  Physical volume "/dev/md0" successfully created

  Physical volume "/dev/md1" successfully created

  Physical volume "/dev/md2" successfully created

viii.                搜尋已建立的PV

[root@JLAB ~]# pvscan

  PV /dev/md0                      lvm2 [15.99 GiB]

  PV /dev/md1                      lvm2 [12.99 GiB]

  PV /dev/md2                      lvm2 [9.99 GiB]

  Total: 3 [38.98 GiB] / in use: 0 [0   ] / in no VG: 3 [38.98 GiB]

    ix.                顯示每個PV的個別資訊

[root@JTSM ~]# pvdisplay

  "/dev/md0" is a new physical volume of "15.99 GiB"

  --- NEW Physical volume ---

  PV Name               /dev/md0

  VG Name

  PV Size               15.99 GiB

  Allocatable           NO

  PE Size               0

  Total PE              0

  Free PE               0

  Allocated PE          0

  PV UUID               IROlqW-iO2o-0bwu-aW81-gAUI-IBni-XszJoh

 

  "/dev/md1" is a new physical volume of "12.99 GiB"

  --- NEW Physical volume ---

  PV Name               /dev/md1

  VG Name

  PV Size               12.99 GiB

  Allocatable           NO

  PE Size               0

  Total PE              0

  Free PE               0

  Allocated PE          0

  PV UUID               uylDen-ksAi-AaIR-je8O-0viD-FQbg-e4Mj5J

 

  "/dev/md2" is a new physical volume of "9.99 GiB"

  --- NEW Physical volume ---

  PV Name               /dev/md2

  VG Name

  PV Size               9.99 GiB

  Allocatable           NO

  PE Size               0

  Total PE              0

  Free PE               0

  Allocated PE          0

  PV UUID               LRgVMV-F4RG-bRIE-3sJG-7Wnw-F84E-AgaXDc

 

I.       產生PV標準化輸出的資訊

[root@JLAB ~]# pvs

    PV         VG    Fmt  Attr  PSize  PFree

  /dev/md0    tsmvg   lvm2  a--   15.98g    0

  /dev/md1    tsmvg   lvm2  a--   12.98g    0

  /dev/md2    tsmvg   lvm2  a--   9.98g    0

 

2.      組成VG (Volume Group)

II.    VG相關指令

        i.                vgcreate : 建立VG

      ii.                vgremove : 刪除VG

    iii.                vgextend : VG內新增額外的PV

    iv.                vgreduce : VG內移除PV

      v.                vgchange : 設定VG是否啟動 (active)

    vi.                vgscan : 搜尋系統上是否有VG

  vii.                vgdisplay : 顯示VG狀態

viii.                vgs : 產生VG標準化輸出的資訊

III. 建立VG

          i.                指令: vgcreate [-s N[mgt]] VG名稱 PV名稱

        ii.                -s :後面接 PE 的大小 (size) ,單位可以是 m, g, t (大小寫均可)

[root@JLAB ~]# vgcreate -s 16M jvg /dev/md{0,1,2}

  Volume group "jvg" successfully created

IV. 搜尋剛建立好的VG

[root@JLAB ~]# vgscan

  Reading all physical volumes.  This may take a while...

  Found volume group "jvg" using metadata type lvm2

V.    再搜尋一次PV,可看到每個PV後面都接了VG的字串。

[root@JLAB ~]# pvscan

  PV /dev/md0   VG jvg   lvm2 [15.98 GiB / 15.98 GiB free]

  PV /dev/md1   VG jvg   lvm2 [12.98 GiB / 12.98 GiB free]

  PV /dev/md2   VG jvg   lvm2 [9.98 GiB / 9.98 GiB free]

  Total: 3 [38.95 GiB] / in use: 3 [38.95 GiB] / in no VG: 0 [0   ]

VI. 顯示VG狀態

[root@JLAB ~]# vgdisplay

  --- Volume group ---

  VG Name               jvg

  System ID

  Format                lvm2

  Metadata Areas        3

  Metadata Sequence No  1

  VG Access             read/write

  VG Status             resizable

  MAX LV                0

  Cur LV                0

  Open LV               0

  Max PV                0

  Cur PV                3

  Act PV                3

  VG Size               38.95 GiB

  PE Size               16.00 MiB

  Total PE              2493

  Alloc PE / Size       0 / 0

  Free  PE / Size       2493 / 38.95 GiB

  VG UUID               tTE4e1-vwrb-P8nH-fXlF-3h2P-v0Xm-mvaaIE

VII.  產生VG標準化輸出的資訊

[root@JLAB ~]# vgs

  VG    #PV #LV #SN  Attr   VSize  VFree

  tsmvg   3   1   0   wz--n-  38.95g    0

VIII.               VG上增加PV

[root@JLAB ~]# vgextend jvg /dev/hda9

Volume group "jvg" successfully extended

 

3.      建立LV (Logical Volume)

I.       LV相關指令

      x.                lvcreate : 建立LV

    xi.                lvremove : 移除LV

  xii.                lvextend : LV裡增加容量

xiii.                lvreduce : LV裡減少容量

xiv.                lvresize : LV進行容量大小調整

  xv.                lvscan : 搜尋系統內的LV

xvi.                lvdisplay : 顯示LV狀態

xvii.                lvmdiskscan: 搜尋所有的Block裝置

xviii.                lvs : 產生LV標準化輸出的資訊

II.    建立LV

     i.                指令: lvcreate [-L N[mgt]] [-n LV名稱] VG名稱

   ii.                指令: lvcreate [-l N] [-n LV名稱] VG名稱

 iii.                –L : 後面接容量,容量的單位可以是 M,G,T

 iv.                –l : 後面可以接 PE 的數量。PE數量乘上PE大小(16M)就是可用容量了。

[root@JLAB ~]# lvcreate -l 2493 -n jlv jvg

  Logical volume "jlv" created

[root@JLAB ~]# lvcreate -L 38G -n jlv jvg

 

III. 在系統上可看到建立好的LV磁碟

[root@JLAB ~]# ll /dev/jvg/jlv

lrwxrwxrwx 1 root root 7 Jul 10 15:43 /dev/jvg/jlv -> ../dm-0

 

[root@JLAB ~]# fdisk -l /dev/mapper/jvg-jlv

Disk /dev/mapper/jvg-jlv: 41.8 GB, 41825599488 bytes

255 heads, 63 sectors/track, 5085 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x00000000

 

IV. 搜尋已建立好的LV

[root@JLAB ~]# lvscan

  ACTIVE            '/dev/jvg/jlv' [38.95 GiB] inherit

V.    顯示LV資訊

[root@JLAB ~]# lvdisplay

  --- Logical volume ---

  LV Path                /dev/jvg/jlv

  LV Name                jlv

  VG Name                jvg

  LV UUID                tk6dUY-bRuU-p9Z3-RnXh-j8Yf-i9LX-JGwR3R

  LV Write Access        read/write

  LV Creation host, time JTSM, 2013-07-10 15:43:21 +0800

  LV Status              available

  # open                 0

  LV Size                38.95 GiB

  Current LE             2493

  Segments               3

  Allocation             inherit

  Read ahead sectors     auto

  - currently set to     256

  Block device           253:0

VI. 顯示系統上所有的Block裝置

[root@JLAB ~]# lvmdiskscan

  /dev/ram0        [      16.00 MiB]

  /dev/loop0       [       3.46 GiB]

  /dev/md0         [      15.99 GiB] LVM physical volume

  /dev/tsmvg/tsmlv [      38.95 GiB]

  /dev/ram1        [      16.00 MiB]

  /dev/loop1       [       3.46 GiB]

  /dev/sda1        [      50.00 GiB]

  /dev/md1         [      12.99 GiB] LVM physical volume

  /dev/ram2        [      16.00 MiB]

  /dev/md2         [       9.99 GiB] LVM physical volume

  /dev/ram3        [      16.00 MiB]

  /dev/ram4        [      16.00 MiB]

  /dev/ram5        [      16.00 MiB]

  /dev/ram6        [      16.00 MiB]

  /dev/ram7        [      16.00 MiB]

  /dev/ram8        [      16.00 MiB]

  /dev/ram9        [      16.00 MiB]

  /dev/ram10       [      16.00 MiB]

  /dev/ram11       [      16.00 MiB]

  /dev/ram12       [      16.00 MiB]

  /dev/ram13       [      16.00 MiB]

  /dev/ram14       [      16.00 MiB]

  /dev/ram15       [      16.00 MiB]

  /dev/sdh         [      20.00 GiB]

  /dev/sdi         [       8.00 GiB]

  3 disks

  19 partitions

  0 LVM physical volume whole disks

  3 LVM physical volumes

 

IX. 產生LV標準化輸出的資訊

[root@JLAB ~]# lvs

  LV    VG    Attr      LSize  Pool Origin Data%  Move Log Cpy%Sync Convert

  tsmlv  tsmvg  -wi-ao---  38.95g

 

使用LVM GUI介面管理

1.      安裝LVM GUI套件

[root@JLAB ~]# yum –y install system-config-lvm.noarch

 

2.      開啟LVM GUI管理

I.       啟動X Window

II.    到下列位置執行LVM

                         i.                System -> Administration -> Logical Volume Management

III. 執行後畫面呈現如下


 

格式化並掛載檔案系統

3.      格式化並掛載檔案系統

[root@JLAB ~]# mkfs.ext4 /dev/jvg/jlv

[root@JLAB ~]# mkdir /JLVM

[root@JLAB ~]# mount /dev/jvg/jlv /JLVM

 

4.      設定開機後自動掛載

[root@JLAB ~]# vim /etc/fstab

加入下列一行

/dev/jvg/jlv        /JLVM                 ext4    defaults        0 1

 

LVM Configuration Metadata備份

1.      LVM Configuration metadata備份檔案預設會被存放至 “/etc/lvm/backup/” ,此備份檔並不包含使用者及系統資料。

2.      若要手動執行Metadata設定檔的備份,可使用下列指令。

I.           vgcfgbackup

3.      手動還原Metadata的設定檔,可使用下列指令。

I.           vgcfgrestore

 

LVM 問題診斷

1.      LVM發生未預期問題時,透過以下指令及方法可搜集LVM的診斷資訊。

I.           lvmdump : LVM相關資訊及診斷訊息打包成一個tar

II.        lvs –vpvs –admsetup info –c : 可取得額外的資訊

III.     lvm dumpconfig : 確認目前的配置資訊

IV.     檢測 /etc/lvm/backup/ 目錄底下的metadata配置檔資訊

 

 

Comments