【Linux基礎】LVMでディスク追加する方法

Linux

Linux基礎編として、仮想マシンでディスクを追加した後に、OS上で認識させるまでの方法を手順としてまとめておきます。

私自身、何度かこのような作業をしていますが、一向に覚えられないのでアウトプットします。

概要

手順の前に、LVMを用いたディスクの概要を説明します。

論理ボリュームマネージャ(ろんりボリュームマネージャ、logical volume manager、LVM)は、「物理ボリューム」を提供するハードディスクなどのストレージメディア・デバイス(補助記憶装置)に、直接ファイルシステムをマップするのではなく、粗粒度(典型的には、メビバイト単位程度)のブロックにより一旦「論理ボリューム」と呼ばれる仮想化されたボリュームに束ねて利用するためのシステムである。

フリー百科事典『ウィキペディア(Wikipedia)』 https://ja.wikipedia.org/wiki/%E8%AB%96%E7%90%86%E3%83%9C%E3%83%AA%E3%83%A5%E3%83%BC%E3%83%A0%E3%83%9E%E3%83%8D%E3%83%BC%E3%82%B8%E3%83%A3

物理ディスクをそのままOSから使うのではなく、論理的に管理することで、便利に扱いましょうということです。

上の例では、4つの物理デバイス(HDDやSSDなど)に対して、1つのVG(物理ボリューム)にまとめて、そこからLV(論理ボリューム)を切り出している例です。400GBのボリュームから50GBと300GB切り出しています。もちろんすべて使い切ることもできます。

また、新たにデバイスが追加された場合、既存のボリュームグループに追加することも可能です。

このような便利なボリューム管理システムがLVMです。このようにレイヤーを分けてストレージを管理する方法は、オンプレミスなどで使われているストレージ装置も同じような仕組みだったりします。

手順

ディスクを追加し、再起動を行うとブロックデバイスとして認識します。再起動後に以下のコマンドを入力。

lsblk -S

[root@localhost ~]# lsblk -S

NAME HCTL       TYPE VENDOR   MODEL             REV TRAN

sda  0:0:0:0    disk VMware,  VMware Virtual S 1.0  spi

sdb  0:0:1:0    disk VMware,  VMware Virtual S 1.0  spi

sr0  2:0:0:0    rom  NECVMWar VMware IDE CDR10 1.00 ata

次にデバイス情報を確認します

fdisk -l /dev/sdb

[root@localhost ~]# fdisk -l /dev/sdb

Disk /dev/sdb: 107.4 GB, 107374182400 bytes, 209715200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト

fdiskコマンドで パーティションを作成します。 今回は107.4GBの全容量を1つのパーティション sdb1 として設定します。

[root@localhost ~]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x0a662cfe.

コマンド (m でヘルプ): p

Disk /dev/sdb: 107.4 GB, 107374182400 bytes, 209715200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
Disk label type: dos
ディスク識別子: 0x0a662cfe

デバイス ブート      始点        終点     ブロック   Id  システム

コマンド (m でヘルプ): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
パーティション番号 (1-4, default 1): 1
最初 sector (2048-209715199, 初期値 2048): 
初期値 2048 を使います
Last sector, +sectors or +size{K,M,G} (2048-209715199, 初期値 209715199): 
初期値 209715199 を使います
Partition 1 of type Linux and of size 100 GiB is set

コマンド (m でヘルプ): t
Selected partition 1
Hex code (type L to list all codes): 8e
Changed type of partition 'Linux' to 'Linux LVM'

コマンド (m でヘルプ): p

Disk /dev/sdb: 107.4 GB, 107374182400 bytes, 209715200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
Disk label type: dos
ディスク識別子: 0x0a662cfe

デバイス ブート      始点        終点     ブロック   Id  システム
/dev/sdb1            2048   209715199   104856576   8e  Linux LVM

コマンド (m でヘルプ): w
パーティションテーブルは変更されました!

ioctl() を呼び出してパーティションテーブルを再読込みします。
ディスクを同期しています。

作成したパーティションをLVMのPVに設定します。

[root@localhost ~]# pvcreate /dev/sdb1
  Physical volume "/dev/sdb1" successfully created.
[root@localhost ~]# pvdisplay /dev/sdb1
  "/dev/sdb1" is a new physical volume of "<100.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb1
  VG Name               
  PV Size               <100.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               1Gh6Uv-wAQf-DhhU-UfDR-7GVx-TlMR-s2fas6
   

次にPVをそのままVGとして構成します。名前はVolGroup01とします。

[root@localhost ~]# vgcreate VolGroup01 /dev/sdb1
  Volume group "VolGroup01" successfully created
[root@localhost ~]# vgdisplay VolGroup01
  --- Volume group ---
  VG Name               VolGroup01
  System ID             
  Format                lvm2
  Metadata Areas        1
  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                1
  Act PV                1
  VG Size               <100.00 GiB
  PE Size               4.00 MiB
  Total PE              25599
  Alloc PE / Size       0 / 0   
  Free  PE / Size       25599 / <100.00 GiB
  VG UUID               yXccXY-JhGP-M3Rx-OjmC-8xIv-mWyA-s32trI
   

次にVG(ボリュームグループ)からLV(論理ボリューム)を切り出します。vgdisplayでの結果からTotal PE が 25599となっているので、すべて単一の論理ボリュームとして切り出します。

[root@localhost ~]# lvcreate -l 25599 -n LogVol00 VolGroup01
  Logical volume "LogVol00" created.
[root@localhost ~]# vgdisplay -v VolGroup01
  --- Volume group ---
  VG Name               VolGroup01
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  2
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               0
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               <100.00 GiB
  PE Size               4.00 MiB
  Total PE              25599
  Alloc PE / Size       25599 / <100.00 GiB
  Free  PE / Size       0 / 0   
  VG UUID               yXccXY-JhGP-M3Rx-OjmC-8xIv-mWyA-s32trI
   
  --- Logical volume ---
  LV Path                /dev/VolGroup01/LogVol00
  LV Name                LogVol00
  VG Name                VolGroup01
  LV UUID                GukTOB-bfwR-lsnT-a6LU-l1Mh-lxQA-h1h0WS
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2020-01-05 22:57:10 +0900
  LV Status              available
  # open                 0
  LV Size                <100.00 GiB
  Current LE             25599
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:3
   
  --- Physical volumes ---
  PV Name               /dev/sdb1     
  PV UUID               1Gh6Uv-wAQf-DhhU-UfDR-7GVx-TlMR-s2fas6
  PV Status             allocatable
  Total PE / Free PE    25599 / 0
   

出来上がった論理ボリュームにファイルシステムのフォーマットをかけます。CentOS7の標準xfsを使用します。

[root@localhost ~]# mkfs.xfs /dev/VolGroup01/LogVol00
meta-data=/dev/VolGroup01/LogVol00 isize=512    agcount=4, agsize=6553344 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=26213376, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=12799, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

出来た論理ボリュームをマウントします。マウントポイントを作成しマウントしています。

[root@localhost /]# mount /dev/VolGroup01/LogVol00 /data

うまくマウントできたら、fstabに記載しておきます。以下の一番下の行が今回追加したマウント設定です。

[root@localhost /]# cat /etc/fstab 

#
# /etc/fstab
# Created by anaconda on Tue Dec 31 03:35:43 2019
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=e3c5b9e6-b955-45ed-86be-688909fd5bef /boot                   xfs     defaults        0 0
/dev/mapper/centos-var  /var                    xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0
/dev/mapper/VolGroup01-LogVol00 /data           xfs     defaults        0 0

再起動したあとも正しくマウントされていることを確認します。

まとめ

今回はLVMを用いたLinuxにおけるディスク管理方法を紹介しました。

基礎的な内容となりますので頭に入れておきますおきましょう。

この記事を書いた人

渋谷で働くよわよわエンジニア。TypeScript(Next.js/Node.js)/Golang/AWS/Flutterなど
LINE API Expert(2023/1~)

tokkuをフォローする
オススメ記事
在宅ワークが多くなって、デスクの配線周りに困っている方は、拡張デスクの導入がおすすめです。Windows/MacOS/Linuxの複数の機器をスッキリとデスク周りに収める事ができました!リモートからサーバーメンテを行うインフラエンジニアは必見です!
Linux
tokkuをフォローする
インフラエンジニアがもがくブログ

コメント

タイトルとURLをコピーしました