2018-2-27 Linuxシステム管理(7)LVM 2


この章ではLVM 2の基礎使用について説明し始め、前章ではRAIDディスクの基礎概念について説明した.主にソフトRAIDを実現し、そのRAIDレベルを紹介し、RAIDの作成、RAIDの管理、RAIDの削除などの操作を紹介した.

一、LVM 2


LVMはLogical Volume Managerで、論理ボリュームマネージャと呼ばれています.明らかに、論理ボリュームを管理するツールです.バージョン番号は2です.前章のソフトRAIDと同じように、LVMもソフトウェアの形式で構成されており、複数のディスクデバイスを抽象的に論理デバイスにしています.前者のRAIDが参照するカーネルモジュールはmdであり、ここで参照するのはdmであり、デバイスマッパと呼ばれ、このコンポーネントは1つ以上の下位モジュールデバイスを1つの論理デバイスに組織するモジュールとして機能する.論理ボリュームとは、複数の論理デバイスを1つの単一デバイスとして管理するコンポーネントにほかならない.この観点から、論理ボリュームとは、1つのディスクがあるか、パーティション化されているか、RAIDであると仮定し、いずれかのブロックデバイスに基づいて行うことであり、論理アーキテクチャでそのディスクをPVとして作成することができ、物理ボリュームと呼ぶことができる.これも最下位の論理デバイスであり、ボリュームグループと呼ばれるVGを分割することもできます.ボリュームグループは実際には複数の物理ボリュームを含むことができ、ボリュームグループの空間サイズは物理ボリュームによって提供される.つまり、そのディスクスペースを増やしたり減らしたりすることができるが、VGではデバイスを使用することはできず、その上でLVの論理ボリュームに分割する必要がある.これは本当の意味での論理ボリュームである.各LVはファイルシステムであり、フォーマットして使用することができます.LVは、VGの容量の大きさに応じて分割してもよいし、このパーティションの容量を動的に増加させる境界であってもよい.複数のブロックデバイスからVGを構成すると、VGは各ブロックデバイスが提供する空間を論理的に一定の大きさのブロックに分割する.PEと呼ばれ、PVの大きさはVGの定義に依存するため、PEはPVをあるVGに加えることによって決定される.LVはPEのサイズに応じて容量を分割したり、動的に拡張したり収縮したりすることもでき、この過程でデータを破損させることはありません.これは、企業が未知のデータを格納するのに非常に良い選択です.LVMの欠点は、データが失われると修復され、結局はソフトウェアによって実現され、ハードウェアで実際に実現するのではなく、ソフトウェアによって組織されることです.また、PVを1つ取り外すと多くの問題が発生することに注意してください.このPVのデータを他のパーティションに移動してから取り外さなければなりません.だから縮小は危険だが、拡張的には一般的な問題は大きくない.PEがあるLVに割り当てられて使用されると、PEはそのLVパーティションに属し、このときPEはLEと呼ばれる.VGまたはLVの場合、デバイスファイルは/devのユニークなディレクトリの下でmapperと呼ばれます.
   LVM:Logical Volume Manager, Verion 2

   dm:device mapper, ;

   /dev/mapper/VG_NAME-LV_NAME
      /dev/mapper/vol0-root   ( vol0 root )
   /dev/VG_NAME/LV_NAME
     /dev/vol0/root

二、管理ツール


次に、論理ボリュームを作成する管理ツールについて説明します.論理ボリュームを作成して使用するには、論理ボリュームを下から順に作成し、物理ボリュームを作成してから、ボリュームグループを作成し、ボリュームグループの上に論理ボリュームを作成します.論理パーティションを作成して管理するには、ディスクを追加するか、パーティションを直接分割する必要があります.
# fdisk -l
Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 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


Disk /dev/sdd: 21.5 GB, 21474836480 bytes, 41943040 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


Disk /dev/sdc: 21.5 GB, 21474836480 bytes, 41943040 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

仮想マシンに3つのディスクを追加しました.まず、この2つのディスクで物理ボリュームを作成します.この物理ボリュームを作成するには、pv作成と管理ツールを使用します.
   pv :
     pvs: pv ;
     pvdisplay: pv ;
    
     # pvcreate /dev/DEVICE   pv
     # pvremove /dev/DEVICE   pv

まず、/dev/sdbおよび/dev/sdcを作成します.
# pvcreate /dev/sdb /dev/sdc
  Physical volume "/dev/sdb" successfully created.
  Physical volume "/dev/sdc" successfully created.

作成が完了すると、この2つの物理ボリュームの情報を詳細に表示できます.
# pvdisplay /dev/sdb /dev/sdc
  "/dev/sdb" is a new physical volume of "20.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb
  VG Name               
  PV Size               20.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               ryttO9-gZAc-n8LF-KHz5-BoT2-xnF9-gvoS8l
   
  "/dev/sdc" is a new physical volume of "20.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdc
  VG Name               
  PV Size               20.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               39FLas-V3BY-S1Qd-XvnO-UH5P-kaC0-fiiVWs

またはpvsコマンドを使用して表示します.
# pvs
  PV         VG Fmt  Attr PSize  PFree 
  /dev/sdb      lvm2 ---  20.00g 20.00g
  /dev/sdc      lvm2 ---  20.00g 20.00g

上記の詳細フォーマットで見たAllocatableがNOであることは,そのVGには入っていないことを示している.また、PEサイズなどのデータもありません.次にVGを作成します.同様に、vgの管理ツールも紹介します.それに比べて、pvよりもずっと多いです.
   vg :
     vgs
     vgdisplay
    
     vgcreate [-s #[kKmMgGtTpPeE]] VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]
     vgcreate VG_GROUPNAME /dev/PV_DEVICE
     vgextend VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]
     vgreduce VolumeGroupName PhysicalDevicePath [PhysicalDeviceParh...]  
          pvmore
     vgremove VolumeGroupName

vgを作成する場合は、まずvgの名前を作成し、デバイスパスを指定する必要があります.次に、vg 0というボリュームグループを作成し、/dev/sdbおよび/dev/sdcをグループに追加します.
# vgcreate vg0 /dev/sdb /dev/sdc
   Volume group "vg0" successfully created
# 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               39.99 GiB
  PE Size               4.00 MiB
  Total PE              10238
  Alloc PE / Size       0 / 0   
  Free  PE / Size       10238 / 39.99 GiB
  VG UUID               xdF5Fu-nWKM-Sm6V-MRou-LAgl-PCUb-JIEqgE
# vgs
  VG  #PV #LV #SN Attr   VSize  VFree 
  vg0   2   0   0 wz--n- 39.99g 39.99g

論理ボリュームが作成されていないことを前提に-sを使用してサイズを指定できます.ボリュームグループを拡張する場合は、vgextendコマンドを使用して拡張できます.物理ボリュームを作成していないディスクを作成します.
# pvcreate /dev/sdd
  Physical volume "/dev/sdd" successfully created.
# vgextend vg0 /dev/sdd
  Volume group "vg0" successfully extended

vg 0ボリュームグループが拡張されているかどうかを確認します.
# vgdisplay vg0
  --- Volume group ---
  VG Name               vg0
  System ID             
  Format                lvm2
  Metadata Areas        3
  Metadata Sequence No  2
  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               <59.99 GiB
  PE Size               4.00 MiB
  Total PE              15357
  Alloc PE / Size       0 / 0   
  Free  PE / Size       15357 / <59.99 GiB
  VG UUID               xdF5Fu-nWKM-Sm6V-MRou-LAgl-PCUb-JIEqgE

以上、これがvgの拡張であり、vgであるpvを削除したい場合は、まずあるpvを削除し、大量のデータが存在する場合は長い間待機し、その後、vgからそのデバイスを削除する.
# pvmove /dev/sdb
  No data to move for vg0
# vgreduce vg0 /dev/sdb
  Removed "/dev/sdb" from volume group "vg0"
# vgdisplay vg0
  --- Volume group ---
  VG Name               vg0
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  5
  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               39.99 GiB
  PE Size               4.00 MiB
  Total PE              10238
  Alloc PE / Size       0 / 0   
  Free  PE / Size       10238 / 39.99 GiB
  VG UUID               xdF5Fu-nWKM-Sm6V-MRou-LAgl-PCUb-JIEqgE

次に、論理ボリュームの作成および管理ツールについて説明します.作成は簡単ですが、サイズを変えるには限界があり、拡張は問題ありません.また、作成した論理ボリュームのサイズも、ボリュームグループのエッジ内のディスク容量に合致する必要があります.では、論理ボリュームの作成と管理方法について、コマンドツールでは次のように説明します.
   lv :
     lvs
     lvdisplay
    
     lvcreate -L #[mMgGtT] -n name VolumeGroup
     
     lvremove /dev/VG_NAME/LV_NAME

ではvg_という名前のlv論理ボリューム、サイズ20 Gを指定し、vg 0論理ボリュームグループで作成します.
# lvcreate -L 20G -n vg_lv vg0
  Logical volume "vg_lv" created.

単一のディスクのみが作成されているため、lvdisplayコマンドを直接使用して論理ボリュームの情報を表示します.
# lvdisplay 
  --- Logical volume ---
  LV Path                /dev/vg0/vg_lv
  LV Name                vg_lv
  VG Name                vg0
  LV UUID                yshZmA-OgJz-45EB-jOM8-rqDb-goKq-BRkNK9
  LV Write Access        read/write
  LV Creation host, time node1.china.org, 2018-02-27 19:55:21 +0800
  LV Status              available
  # open                 0
  LV Size                20.00 GiB
  Current LE             5120
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0

/dev/mapperを確認すると、ボリュームグループ名-論理名で命名された論理ボリュームが見つかります.
# ls /dev/mapper/
control  vg0-vg_lv

次にフォーマットし、その後マウントします.
# mkfs.xfs /dev/vg0/vg_lv 
# mkdir /mnt/lv_disk
# mount /dev/vg0/vg_lv /mnt/lv_disk/

三、拡張論理ボリューム


論理ボリュームを拡張するには、lvextendコマンドを使用します.コマンドのフォーマットは次のとおりです.
    :
     # lvextend -L [+]#[mMgGtT] /dev/VG_NAME/LV_NAME
     # resize2fs /dev/VG_NAME/LV_NAME

+は、従来のディスク容量に加えて、追加せずにディスク容量に直接拡張することを意味します.ディスクを25 Gに追加します.
# lvextend -L 25G /dev/vg0/vg_lv 
  Size of logical volume vg0/vg_lv changed from 20.00 GiB (5120 extents) to 25.00 GiB (6400 extents).
  Logical volume vg0/vg_lv successfully resized.

拡張が完了した後、再マウントすると、やはり元の20 Gであることがわかります.これは論理ボリュームのエッジが大きくなったためですが、ファイルシステムのエッジは大きくなっていないので、20 Gです.ファイルシステムのエッジも大きくします再マウントする必要はありません.resize 2 fsを使用しますが、ext 4ファイルシステムでのみ使用できます.xfs_を使用しますgrowfsコマンド.
# xfs_growfs /dev/vg0/vg_lv 
meta-data=/dev/mapper/vg0-vg_lv  isize=512    agcount=4, agsize=1310720 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=5242880, 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 5242880 to 6553600

四、論理ボリュームの削減


論理ボリュームを縮小するには、ファイルシステムのサイズを事前に縮小してから、物理的または論理的な空間を指定したサイズに縮小する必要があります.
    :
     # umount /dev/VG_NAME/LV_NAME
     # e2fsck -f /dev/VG_NAME/LV_NAME
     # resize2fs /dev/VG_NAME/LV_NAME #[mMgGtT]
     # lvreduce -L [+]#[mMgGtT] /dev/VG_NAME/LV_NAME
     # mount

では、最初のステップは、論理ボリュームをアンインストールする必要があります.削減するには、まずアンインストールする必要があります.エラーのリスクが非常に大きいため、削減はオンラインでは許可されません.
   # umount /dev/mapper/vg0-vg_lv

2つ目は、修復を試みます.
   # xfs_repair /dev/mapper/vg0-vg_lv

ステップ3では、論理ボリュームを削減します.
# lvreduce -L 20G /dev/vg0/vg_lv 
  WARNING: Reducing active logical volume to 20.00 GiB.
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce vg0/vg_lv? [y/n]: y
  Size of logical volume vg0/vg_lv changed from 25.00 GiB (6400 extents) to 20.00 GiB (5120 extents).
  Logical volume vg0/vg_lv successfully resized.

xfsファイルシステムは増加のみをサポートでき,縮小はサポートできないようであるため,ここでの実験では再フォーマットを強制してマウントして使用するしかないため,縮小論理ボリュームは推奨されない.
# mkfs.xfs -f /dev/vg0/vg_lv

五、スナップショット


スナップショットは実は私达に対してよく知られていないで、VMWareの中でスナップショットの机能があって、スナップショットがあってタイムマシンがあって、ドラえもんのタイムマシンのように、过去のある时の中に戻って、ファイルあるいはファイルシステムに対してスナップショットをして、过去のある时を、瞬间にスキャンして、もし瞬间に完成することができないならば、データはいつでもこのスナップショットを変える意味がありません.これは、スナップショットが速いため、バックアップが遅いため、シーケンス化と呼ばれるプロセスを別のディスクデバイスにコピーするために、バックアップ時に特に役立ちます.スナップショットボリュームは、元のボリュームへの別のパスを指しているだけで、独立したボリュームのように見えますが、実際にはファイルが保存されていません.しかし、マウントすると、データが表示されます.これは元のボリュームへのデータですが、スナップショットの容量が小さいので、保存されているのは相手が変化したファイルで、変化していないものは元のボリュームを探すことができます.スナップショットボリュームを作成するコマンドのフォーマットは、次のとおりです.
    :snapshot
     lvcreate -L #[mMgGtT] -p -r -s -n snapshot_lv_name original_lv_name

では、624 Mのスナップショットボリュームを作成します.名前はvg_です.lv-snap、読み取り専用権限のみを持ち、論理ボリュームは/dev/vg 0/vg_にあります.lv.
# lvcreate -s -L 624M -n vg_lv-snap -p r /dev/vg0/vg_lv
  Using default stripesize 64.00 KiB.
  Logical volume "vg_lv-snap" created.

vg_にマウントしますlv-snapディレクトリにあります.
# mkdir /mnt/vg_lv-snap
# mount /dev/mapper/vg0-vg_lv-snap /mnt/vg_lv-snap/

その後/mnt/lv_に入りますdiskディレクトリでは、論理ボリュームをマウントし、/etc/issueファイルをディレクトリにコピーすることを前提としています.
# cp /etc/issue ./

コピーが完了したらvg_に進みますlv-snapディレクトリにあります.
# cd /mnt/vg_lv-snap/

変更前のコピーですが、コピーした新しいファイルはスナップショットボリュームにコピーされません.コピーはスナップショットの瞬間のファイルです.バックアップが完了したら、論理ボリュームを削除できます.

六、削除操作


では、今はすべてのものが要らないので、削除すると次のように操作します.まず、アンインストールします.
# umount /dev/vg0/vg_lv

lvremoveを使用して論理ボリュームを削除し、スナップショットがあれば質問しますが、意外なことがなければ、yを直接クリックすればいいです.
# lvremove  /dev/vg0/vg_lv
Do you really want to remove active origin logical volume vg0/vg_lv with 1 snapshot(s)? [y/n]: y
  Logical volume "vg_lv-snap" successfully removed
  Logical volume "vg_lv" successfully removed

その後、ボリュームグループvg 0を削除します.
# vgremove vg0
  Volume group "vg0" successfully removed

その後pvを削除します.
# pvremove /dev/sdb /dev/sdd
  Labels on physical volume "/dev/sdb" successfully wiped.
  Labels on physical volume "/dev/sdd" successfully wiped.

七、ファイルシステムのマウントと使用


7.1 CDマウントデバイス


まず、光ディスク装置の経路は/devでどのようなインタフェースに依存し、シリアルポートであればsr 0およびsr 1などであり、識別を容易にするために/devディレクトリの下にシンボルリンクがsr 0を指すが、すべてのリリース版にシンボルリンクがあるわけではないことに注意しなければならない.したがってシンボルリンクがなければsr 0をそのまま使えばよい.
    :
      :
         IDE:/dev/hdc
         SATA:/dev/sr0
        
          :
             /dev/cdrom
             /dev/cdrw
             /dev/dvd
             /dev/dvdrw
            
     mount -r /dev/cdrom /media/cdrom
     umount /dev/cdrom

7.2 ddコマンド


ddコマンドは、最下位のレプリケーションを実現するツールであり、バイトでもレプリケーションが可能であり、レプリケーションの指定数を指定することができるという利点があります.レプリケーションは最下位なので、cpコマンドよりも効率的です.コマンドの使用方法は次のとおりです.
    :
     dd if=/PATH/FROM/SRC of=/PATH/TO/DEST
         bs=#:block size, ;
         count=#: bs。
    
      :
         dd if=/dev/sda of=/dev/sdb
        
      MBR
         dd if=/dev/sda of=/tmp/mbr.bak bs=512 count=1
     
      MBR bootloader:
         dd if=/dev/zero of=/dev/sda bs=256 count=1
    
    :
     /dev/null: ;
     /dev/zero: ;