15/120


LVM(Logical Volume Manage)
複数のHDDを1つのファイルシステムに統合
必要に応じて再分割可能
=>ディスク容量の動的管理
論理ボリュームの構造
  • Phisical Volume(PV):物理デバイスに直接マッピングし、複数のデバイス
  • を作成できます.
  • ボリュームグループ:1つ以上のPVとして構成され、利用可能なPEがLV
  • に割り当てられる
  • 論理ボリューム(LV):実際にスペースを占有し、VG範囲内に
  • を作成する
  • PE:PVを構成する基本ユニット、データ記憶ユニット
  • LE(論理拡張):LVの基本単位を構成し、基本的にPEと1対1
  • 一致する
    Physical Volume
    物理ボリュームぶつりボリューム:パーティションぶんかつ
    pvcreate
    物理ボリュームの作成
    # pvcreate [장치명]
    [root@localhost ~]# pvcreate /dev/sdb[1-4]
      Physical volume "/dev/sdb1" successfully created.
      Physical volume "/dev/sdb2" successfully created.
      Physical volume "/dev/sdb3" successfully created.
      Physical volume "/dev/sdb4" successfully created.
    pvdisplay
    pv属性出力
    # pvdisplay [장치명]
    [root@localhost ~]# pvdisplay /dev/sdb1
      "/dev/sdb1" is a new physical volume of "4.00 GiB"
      --- NEW Physical volume ---
      PV Name               /dev/sdb1
      VG Name
      PV Size               4.00 GiB
      Allocatable           NO
      PE Size               0
      Total PE              0
      Free PE               0
      Allocated PE          0
      PV UUID               MqOJMN-G5dE-AmKO-D1DV-7z2V-G2kI-0EXDST
    pvを作成するかどうかを決定できます(blkidでもわかります)
    [root@localhost ~]# blkid
    ...
    /dev/sdb1: UUID="MqOJMN-G5dE-AmKO-D1DV-7z2V-G2kI-0EXDST" TYPE="LVM2_member"'
    ...
    pvremove
    物理ボリュームの削除
    # pvremove [pv명]
    [root@localhost ~]# pvremove /dev/sdb[1-4]
      Labels on physical volume "/dev/sdb1" successfully wiped.
      ...
    Volume Group
    ≪ボリューム・グループ|Volume Group|oem_src≫:物理ボリュームを1つの物理グループにマージします.
    vgcreate
    ボリュームグループの作成
    # vgcreate [vg명] [pv명]
    [root@localhost ~]# vgcreate vg0 /dev/sdb[13]
      Volume group "vg0" successfully created
    vgcreateは、必要なpvを自分で作成し、自分のボリュームとして作成できます.
    [root@localhost ~]# blkid
    /dev/sda1: UUID="88f82736-89b0-49e6-88c5-165c88bcc5bf" TYPE="swap"
    /dev/sda2: UUID="231c776b-3197-4e9f-a142-6b80be0ca930" TYPE="xfs"
    [root@localhost ~]# vgcreate vg0 /dev/sdb[1-4]
      Physical volume "/dev/sdb1" successfully created.
      Physical volume "/dev/sdb2" successfully created.
      Physical volume "/dev/sdb3" successfully created.
      Physical volume "/dev/sdb4" successfully created.
      Volume group "vg0" successfully created
    オプション
  • -s n[M,G]:peサイズ
  • を指定
    [root@localhost ~]# vgcreate vg1 /dev/sdb[24] -s 8M
      Volume group "vg1" successfully created
      
    [root@localhost ~]# vgdisplay vg1
      ...
      PE Size               8.00 MiB
      ...
    vgdisplay
    ボリュームグループのプロパティの確認
    [root@localhost ~]# vgdisplay vg0
      --- Volume group ---
      VG Name               vg0
      System ID
      Format                lvm2
      Metadata Areas        2
      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                2
      Act PV                2
      VG Size               9.99 GiB
      PE Size               4.00 MiB (디폴트는 4 메가)
      Total PE              2558
      Alloc PE / Size       0 / 0
      Free  PE / Size       2558 / 9.99 GiB
      VG UUID               ihpb5z-u5FD-0Ir3-DhbP-LM5Y-Ia3a-y3xoV0
    vgremove
    ボリュームグループの削除
    # vgremove [vg명]
    [root@localhost ~]# vgremove vg0
      Volume group "vg0" successfully removed
    vgextend
    拡張ボリュームグループ
    # vgextend [vg명] [pv명]
    [root@localhost ~]# vgdisplay vg0
    ...
      VG Size               9.99 GiB
      PE Size               4.00 MiB
    ...
    
    [root@localhost ~]# vgextend vg0 /dev/sdb2
      Volume group "vg0" successfully extended
      
    [root@localhost ~]# vgdisplay vg0
    ...
       VG Size               <13.99 GiB # 볼륨그룹이 확장이 됐음
      PE Size               4.00 MiB
    ...
    vgreduce
    ボリュームグループを折りたたむ
    # vgreduce [vg명] [pv명]
    [root@localhost ~]# vgreduce vg0 /dev/sdb2
      Removed "/dev/sdb2" from volume group "vg0“
    破棄するには、パーティション内にデータがない必要があります.
    データにエラーがある場合
    [root@localhost ~]# vgreduce vg0 /dev/sdb1
      Physical volume "/dev/sdb1" still in use
    この場合必要なコマンドはpvmoveです
    pvmove
    物理ボリュームの内容の移動
    # pvmove [pv명]
    [root@localhost ~]# lsblk
    NAME         MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    ...
    sdb            8:16   0   20G  0 disk
    ├─sdb1         8:17   0    4G  0 part
    │ └─vg0-lv02 253:1    0    3G  0 lvm  /mnt/disk2
    ├─sdb2         8:18   0    4G  0 part
    ├─sdb3         8:19   0    6G  0 part
    │ └─vg0-lv01 253:0    0    4G  0 lvm  /mnt/disk1
    sr0           11:0    1 1024M  0 rom
    # 이동
    [root@localhost ~]# pvmove /dev/sdb1
      /dev/sdb1: Moved: 0.52%
    /dev/sdb1: Moved: 100.00%
    # 데이터가 옮겨진 모습
    [root@localhost ~]# lsblk
    NAME         MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    ...
    sdb            8:16   0   20G  0 disk
    ├─sdb1         8:17   0    4G  0 part
    ├─sdb2         8:18   0    4G  0 part
    │ └─vg0-lv02 253:1    0    3G  0 lvm  /mnt/disk2
    ├─sdb3         8:19   0    6G  0 part
    │ └─vg0-lv01 253:0    0    4G  0 lvm  /mnt/disk1
    sr0           11:0    1 1024M  0 rom
    [root@localhost ~]# vgreduce vg0 /dev/sdb1
      Removed "/dev/sdb1" from volume group "vg0“
    # 볼륨 그룹에서 제거 성공
    ランダムに移動パーティションをシステム内の空き領域パーティションとして指定
    pvmove運転時の表示容量不足
    [root@localhost ~]# pvmove /dev/sdb3
      Insufficient free space: 1535 extents needed, but only 73 available
      Unable to allocate mirror extents for vg0/pvmove0.
      Failed to convert pvmove LV to mirrored.
    pvがすぐに使用可能な場合は、ボリュームグループに空き領域がある必要があります=>既存のコンテンツをマージしてスペースを作成する
    1.グループを展開(スペースを増やす)
    [root@localhost ~]# vgextend vg0 /dev/sdb4
      Volume group "vg0" successfully extended
  • pvmove
  • を実行
    [root@localhost ~]# pvmove /dev/sdb3
      /dev/sdb3: Moved: 0.13%
      /dev/sdb3: Moved: 91.60%
      /dev/sdb3: Moved: 100.00%
    拡張容量は、削除するpvのサイズ以上でなければなりません.
    Logical Volume
    論理ボリューム:1つ以上のボリュームをグループ化して論理グループを分割する
    コマンドラインに拡張
    最小単位:PE(LE)
    LVを作成する仮定pv->vg->lv作成->lvフォーマット->lvインストール
    lvcreate
    論理ボリュームの作成
    lvcreate [vg명] [-L 실제 크기 or -l le 갯수] [-n lv명]
    # -l 옵션 사용시 용량 / pe사이즈 를 하여 le 값을 구함
    # 여기선 1G로 만들려고 함(pe사이즈는 4M) -> 1024 / 4 = 256
    [root@localhost ~]# lvcreate vg0 -l 256 -n lv01
      Logical volume "lv01" created.
      
    [root@localhost ~]# lvcreate vg0 -L 2G -n lv02
      Logical volume "lv02" created.
    確認
    [root@localhost ~]# lsblk
    NAME         MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    ...
    sdb            8:16   0   20G  0 disk
    ├─sdb1         8:17   0    4G  0 part
    │ ├─vg0-lv01 253:0    0    1G  0 lvm
    │ └─vg0-lv02 253:1    0    2G  0 lvm
    ...
    システムはランダムにlvの順序を指定します
    lvmには3つのパスがあります
    [root@localhost ~]# ls -l /dev/vg0/lv01 /dev/mapper/vg0-lv01 /dev/dm-0
    brw-rw----. 1 root disk 253, 0  2월 25 14:26 /dev/dm-0 (실제 지정된 이름)
    lrwxrwxrwx. 1 root root      7  2월 25 14:26 /dev/mapper/vg0-lv01 -> ../dm-0
    lrwxrwxrwx. 1 root root      7  2월 25 14:26 /dev/vg0/lv01 -> ../dm-0
    lvが多くなると、実際に指定した名前で区別するのは難しい
    ユーザは主に/dev/vg 0/lv 01などのパスを使用する.
    システムは主に以下のパスを使用します:/dev/mapper/vg 0-lv 01
    lvdisplay
    lvプロパティのチェック
    // lvdisplay /dev/mapper/vg0-lv02 같은 패턴도 가능
    [root@localhost ~]# lvdisplay /dev/vg0/lv01
      --- Logical volume ---
      LV Path                /dev/vg0/lv01
      LV Name                lv01
      VG Name                vg0
      LV UUID                WwUd3V-0gGj-AqEo-MULY-EmhZ-wtyv-qBdgvn
      LV Write Access        read/write
      LV Creation host, time localhost.localdomain, 2022-02-25 14:26:49 +0900
      LV Status              available
      # open                 0
      LV Size                1.00 GiB
      Current LE             256
      Segments               1
      Allocation             inherit
      Read ahead sectors     auto
      - currently set to     8192
      Block device           253:0
    余った容量を使い切りたいと思っていたのですが、このようなエラーが発生したら
    [root@localhost ~]# lvcreate vg0 -L 7G -n lv03
      Volume group "vg0" has insufficient free space (1790 extents): 1792 required.
    LEのサイズは1792のはずですが、残りのスペースは1790なので問題が発生します.
    使用方法:
    [root@localhost ~]# lvcreate vg0 -l 100%FREE -n lv03
      Logical volume "lv03" created.
    lvフォーマット
    パーティションのフォーマットコマンドと同じ
    [root@localhost ~]# mkfs -t xfs /dev/vg0/lv01
    [root@localhost ~]# mkfs.ext4 /dev/mapper/vg0-lv02
    確認
    [root@localhost ~]# blkid
    ...
    /dev/mapper/vg0-lv01: UUID="0b2baf8a-30d2-4737-9765-f6c6a09a6057" TYPE="xfs"
    /dev/mapper/vg0-lv02: UUID="636ad79c-0d2a-4ee6-bb2c-fc157227e596" TYPE="ext4“
    ...
    lvインストール
    パーティション・マウントと同じ方法
    [root@localhost ~]# mount /dev/vg0/lv01 /mnt/disk1
    [root@localhost ~]# mount /dev/mapper/vg0-lv02 /mnt/disk2
    インストールの確認
    [root@localhost ~]# lsblk
    NAME         MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    ...
    sdb            8:16   0   20G  0 disk
    ├─sdb1         8:17   0    4G  0 part
    │ ├─vg0-lv01 253:0    0    1G  0 lvm  /mnt/disk1
    │ ├─vg0-lv02 253:1    0    2G  0 lvm  /mnt/disk2
    │ └─vg0-lv03 253:2    0    7G  0 lvm
    ...
    lvremove
    論理ボリュームの削除
    lvremove lv경로
    まず、
  • インストール
  • をアンインストールします.
    [root@localhost ~]# umount /mnt/disk1
    [root@localhost ~]# umount /mnt/disk2
  • 削除
  • を行う.
    [root@localhost ~]# lvremove /dev/mapper/vg0-lv0[23]
    Do you really want to remove active logical volume vg0/lv02? [y/n]: y
      Logical volume "lv02" successfully removed
    Do you really want to remove active logical volume vg0/lv03? [y/n]: y
      Logical volume "lv03" successfully removed
    アンインストールせずに削除すると、
    [root@localhost ~]# lvremove /dev/vg0/lv01
      Logical volume vg0/lv01 contains a filesystem in use.
    現在使用中のため削除できません
    lvextend
    論理ボリュームの拡張
    lvextend lv경로 -r(파일시스템 확장)
    [root@localhost ~]# lvextend -L +0.5G /dev/vg0/lv01 -r
      Size of logical volume vg0/lv01 changed from 6.00 GiB (1536 extents) to 6.50 GiB (1664 extents).
      Logical volume vg0/lv01 successfully resized.
    meta-data=/dev/mapper/vg0-lv01   isize=512    agcount=6, agsize=262144 blks
             =                       sectsz=512   attr=2, projid32bit=1
             =                       crc=1        finobt=0 spinodes=0
    data     =                       bsize=4096   blocks=1572864, imaxpct=25
             =                       sunit=0      swidth=0 blks
    naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
    log      =internal               bsize=4096   blocks=2560, version=2
             =                       sectsz=512   sunit=0 blks, lazy-count=1
    realtime =none                   extsz=4096   blocks=0, rtextents=0
    data blocks changed from 1572864 to 1703936
    -rオプションを使用しない場合、ファイルシステムが非フォーマット=>df-Thと判断した場合、容量が増加していないことがわかります(スペースは拡張されていますが、ファイルシステムはフォーマットされていないため、使用可能なスペースとして認識できません).
    -rオプションを忘れました❗再拡張は必要ですか?仲介lvmコマンドに拡張できます
    拡張xfsファイルシステム
    # xfs_growfs [마운트 포인트]
    [root@localhost ~]# xfs_growfs /mnt/disk1
    拡張ext 4ファイルシステム
    # resize2fs [lv경로]
    [root@localhost ~]# resize2fs /dev/vg0/lv02
    なぜlvreduceを推奨しないのですか?
    縮小範囲を特定できません->既存のデータが破損する可能性があります