|
||||||||||
|
LVMでボリュームを拡張するLVM論理ボリュームとはストレージを抽象化し、ディスク容量を柔軟にします。またディスクの拡張・削減・構成変更の際も、システムを停止することなく変更できるため運用コストが下がります。 本家Redhat 論理ボリューム と、Redhat本家にもありますが、けっこう多くの人が苦手意識を持っているのも確かです。 コマンドがややこしいですからね。 CentOS6まではsystem-config-lvmというGUIもあったようですが、CentOS7では削除されました。 現在はSSM(SystemStorageManager)と呼ばれるツールがモダンのようですがそもそもLVMの内容を把握してないと、コマンドがなにをしているかはピンときません。 LVMはいろいろなことができるため、全てを学ぼうとすると情報が多くなります。 そこで、勉強がてら実際に一番必要としやすい「容量を増やす」に絞って記載します。 課題 「/varの容量が足らなくなったので、増やしたい」 LVM拡張のコマンドだけ列挙すると、以下の手順になります。 追加ディスクへパーティションの作成
pv、vg、lvという略語が頭についてるだけで、displayやextendといったコマンドは統一されています。#fdisk 物理ボリュームへの追加 #pvcreate /dev/sdb1 物理ボリュームの状態確認、ボリュームグループの名前確認 #pvdisplay ボリュームグループの状態確認 #vgdisplay ボリュームグループへ追加 #vgextend centos /dev/sdb1 論理ボリュームの状態確認 #lvdisplay 論理ボリュームの拡張 #lvextend -L+20G /dev/centos/var --resizefs LVMは順序が重要です。一見すると手順が長い気がしますが、順序通りだと理解しやすいです。 ・用語の説明 ・前提。そもそもLVMじゃないとできない ・ディスクの追加 ・新しいディスクへパーティションを作成する ・物理ボリュームへディスクを追加 ・ボリュームグループへ追加する ・論理ボリュームを拡張する 用語の説明 ○ボリュームとパーティション パーティションとはその名のとおり「仕切り」です。 Windowsの知識を持つ人なら、500GBのHDDを250GB/250GBに割ってCドライブとDドライブとして利用することはよくあるでしょう。 500GBのHDDを250GB/250GBの領域に割ったら、それはパーティションです。 そこにCドライブ、Dドライブと名前を付けてフォーマットし、利用可能にしたらボリュームです。 パーティションがボリュームとは限りません。 割っただけで「未使用」状態のパーティション領域は、ボリュームではありません。 ボリュームもパーティションとは限りません。 1TBのHDDに1つのパーティションを作り、そのHDDを3つ束ねて「3TBのDドライブ」として利用した場合、 3パーティションと1ボリュームとなります。 これもボリューム イコール パーティションになってません。 ○LVMにおける用語 LVMではその名の通り、ボリュームを管理します。 「パーティションを作成する」というレベルのコマンドは用意されていません。そこはfdiskなど他のツールを使います。 物理ボリューム、論理ボリューム、と全てボリュームという単語で統一されています。 LVMで出てくる単語
前提。そもそもLVMじゃないとできない LVMは柔軟にいろんなことができますが、結局一番多い要件が「容量が足らなくなったので増やしたい」ではないでしょうか。 特に仮想環境が普及した現在、仮想ディスクの追加は容易になりました。 「/varの容量が不足してきたので、拡充したい」 という例をあげます。 /varの容量がひっ迫してきました。 16GBの内、14GBが使用されています。 #df -m
これをLVMで容量を拡張します。ファイルシス 1M-ブロック 使用 使用可 使用% マウント位置 devtmpfs 1391 0 1391 0% /dev tmpfs 1408 0 1408 0% /dev/shm tmpfs 1408 10 1398 1% /run tmpfs 1408 0 1408 0% /sys/fs/cgroup /dev/mapper/centos-root 10230 4041 6190 40% / /dev/sda1 1014 183 832 19% /boot /dev/mapper/centos-var 16370 14284 2087 88% /var tmpfs 282 1 282 1% /run/user/42 tmpfs 282 0 282 0% /run/user/0 ですがそもそもLVMが構成されていないとハナシになりません。 OSインストール時にディスクが「自動構成」になっている、もしくは 手動構成でデバイスタイプにLVMを選択している必要があります。 今回のテーマは「/varの容量を増やしたい」なので、/varボリュームが、LVMで構成されている必要があります。 fdiskコマンドにより現在のパーティションを確認します。 ここでは/dev/sda2に/varがあるとします。 #fdisk -l
/dev/sda2がLVMであることを確認できました。Disk /dev/sda: 32.2 GB, 32212254720 bytes, 62914560 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト Disk label type: dos ディスク識別子: 0x00091abe デバイス ブート 始点 終点 ブロック Id システム /dev/sda1 * 2048 2099199 1048576 83 Linux /dev/sda2 2099200 62914559 30407680 8e Linux LVM Disk /dev/mapper/centos-root: 10.7 GB, 10737418240 bytes, 20971520 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト (略) ディスクの追加 拡張するため、空きディスクを追加します。 ここではVirtualBoxなのですが、もちろんESXiでもHyper-Vでも同様です。 20GBの空ディスクを接続しました。 ディスク追加後、改めてOSを起動し、fdiskコマンドでデバイスリストを確認します。 するとメッセージが変化しました。 #fdisk -l
/dev/sdbが見つかったが、パーティションはまだないことが分かります。Disk /dev/sda: 32.2 GB, 32212254720 bytes, 62914560 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト Disk label type: dos ディスク識別子: 0x00091abe デバイス ブート 始点 終点 ブロック Id システム /dev/sda1 * 2048 2099199 1048576 83 Linux /dev/sda2 2099200 62914559 30407680 8e Linux LVM 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 サイズ (最小 / 推奨): 512 バイト / 512 バイト Disk /dev/mapper/centos-root: 10.7 GB, 10737418240 bytes, 20971520 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト (略 ここからの流れは ・fdiskにより、/dev/sdbへパーティションを作成 ・fdiskにより、作成したsdb1のタイプをLVMへ設定 ・pvcreateにより、物理ボリュームへsdb1を追加 ・vgcreateにより、既存のボリュームグループでsdb1を追加 ・/varを広げる という流れになります。 新しいディスクへパーティションを作成する fdiskにより、新しいディスクへLVMタイプのパーティションを作成します。 ・nコマンドにより、パーティションの新規作成 ・pコマンドにより、プライマリパーティション設定(default) ・パーティション容量で、ディスク全体(default) ・tコマンドにより、パーティションタイプからLVMを選択(途中Lコマンドで一覧表示してます) ・wコマンドにより、書き込み となります。 赤い行が入力ポイントです #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 0xe9fe66d1. コマンド (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-41943039, 初期値 2048): 2048 初期値 2048 を使います Last sector, +sectors or +size{K,M,G} (2048-41943039, 初期値 41943039): 初期値 41943039 を使います Partition 1 of type Linux and of size 20 GiB is set コマンド (m でヘルプ): t Selected partition 1 Hex code (type L to list all codes): L 0 空 24 NEC DOS 81 Minix / 古い Li bf Solaris 1 FAT12 27 Hidden NTFS Win 82 Linux スワップ c1 DRDOS/sec (FAT- 2 XENIX root 39 Plan 9 83 Linux c4 DRDOS/sec (FAT- 3 XENIX usr 3c PartitionMagic 84 OS/2 隠し C: ド c6 DRDOS/sec (FAT- 4 FAT16 <32M 40 Venix 80286 85 Linux 拡張領域 c7 Syrinx 5 拡張領域 41 PPC PReP Boot 86 NTFS ボリューム da 非 FS データ 6 FAT16 42 SFS 87 NTFS ボリューム db CP/M / CTOS / . 7 HPFS/NTFS/exFAT 4d QNX4.x 88 Linux プレーン de Dell ユーティリ 8 AIX 4e QNX4.x 2nd part 8e Linux LVM df BootIt 9 AIX ブート可能 4f QNX4.x 3rd part 93 Amoeba e1 DOS access a OS/2 ブートマネ 50 OnTrack DM 94 Amoeba BBT e3 DOS R/O b W95 FAT32 51 OnTrack DM6 Aux 9f BSD/OS e4 SpeedStor c W95 FAT32 (LBA) 52 CP/M a0 IBM Thinkpad ハ eb BeOS fs e W95 FAT16 (LBA) 53 OnTrack DM6 Aux a5 FreeBSD ee GPT f W95 拡張領域 (L 54 OnTrackDM6 a6 OpenBSD ef EFI (FAT-12/16/ 10 OPUS 55 EZ-Drive a7 NeXTSTEP f0 Linux/PA-RISC 11 隠し FAT12 56 Golden Bow a8 Darwin UFS f1 SpeedStor 12 Compaq 診断 5c Priam Edisk a9 NetBSD f4 SpeedStor 14 隠し FAT16 <32M 61 SpeedStor ab Darwin ブート f2 DOS セカンダリ 16 隠し FAT16 63 GNU HURD または af HFS / HFS+ fb VMware VMFS 17 隠し HPFS/NTFS 64 Novell Netware b7 BSDI fs fc VMware VMKCORE 18 AST SmartSleep 65 Novell Netware b8 BSDI スワップ fd Linux raid 自動 1b 隠し W95 FAT32 70 DiskSecure Mult bb 隠し Boot Wizar fe LANstep 1c 隠し W95 FAT32 75 PC/IX be Solaris ブート ff BBT 1e 隠し W95 FAT16 80 古い Minix Hex code (type L to list all codes): 8e Changed type of partition 'Linux' to 'Linux LVM' コマンド (m でヘルプ): w パーティションテーブルは変更されました! ioctl() を呼び出してパーティションテーブルを再読込みします。 ディスクを同期しています。 再度fdiskでリスト表示します。 #fdisk -l
/dev/sdb1のLVM領域を確認できます。Disk /dev/sda: 32.2 GB, 32212254720 bytes, 62914560 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト Disk label type: dos ディスク識別子: 0x00091abe デバイス ブート 始点 終点 ブロック Id システム /dev/sda1 * 2048 2099199 1048576 83 Linux /dev/sda2 2099200 62914559 30407680 8e Linux LVM 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 サイズ (最小 / 推奨): 512 バイト / 512 バイト Disk label type: dos ディスク識別子: 0xe9fe66d1 デバイス ブート 始点 終点 ブロック Id システム /dev/sdb1 2048 41943039 20970496 8e Linux LVM Disk /dev/mapper/centos-root: 10.7 GB, 10737418240 bytes, 20971520 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト 物理ボリュームへディスクを追加 ここからLVMの変更に入ります。 コマンドの細かいオプションについてはRedhatのページに詳細に記載されています。 本家Redhat 物理ボリュームの管理 物理デバイスにfdiskを使ってLVMボリュームを作成しただけでは、利用可能にはなりません。 物理ボリュームとして「登録」する必要があります。 物理ボリュームを表示するコマンドはいくつかあります。 pvdisplay、lvmdiskscan、pvscanなどです。 物理ボリュームとして登録されているデバイスを確認します。 #pvdisplay 現在のボリュームグループの名前(VG Name)を確認します。--- Physical volume --- PV Name /dev/sda2 VG Name centos PV Size <29.00 GiB / not usable 3.00 MiB Allocatable yes (but full) PE Size 4.00 MiB Total PE 7423 Free PE 0 Allocated PE 7423 PV UUID e9aECd-IT9a-CIAY-6yCM-TEUV-12tG-mSy5xz /dev/sda2という「物理ボリューム」1つにより、ボリュームグループ「centos」が構成されていることを確認できます。 つまり、追加するつもりの/dev/sdb1が、物理ボリュームに表示されていないことが分かります。 コマンドによりLVMボリュームを、物理ボリュームへ追加します。 #pvcreate /dev/sdb1
感覚的には物理ボリュームという単語は/dev/sdb1というボリュームでもあり、ボリュームグループから利用可能になる登録グループ、という二重の意味があるように思えます。Physical volume "/dev/sdb1" successfully created. なので/dev/sdb1を物理ボリュームへ「参加させる」と表現すると、自分は理解しやすいです。 pvdiskplayで確認すると、/dev/sdb1が増えました。 しかしVG Nameのパラメータは空白です。まだ使用されていないことを示します。 #pvdisplay
--- Physical volume --- PV Name /dev/sda2 VG Name centos PV Size <29.00 GiB / not usable 3.00 MiB Allocatable yes (but full) PE Size 4.00 MiB Total PE 7423 Free PE 0 Allocated PE 7423 PV UUID e9aECd-IT9a-CIAY-6yCM-TEUV-12tG-mSy5xz "/dev/sdb1" is a new physical volume of "<20.00 GiB" --- NEW Physical volume --- PV Name /dev/sdb1 VG Name PV Size <20.00 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID nbrfNY-MAdS-CLIv-pwx8-2HWz-stfL-Nf2OeE ボリュームグループへ追加する 本家Redhat ボリュームグループの管理 vgdisplayコマンドにより、ボリュームグループの情報を表示します。 #vgdisplay
--- Volume group --- VG Name centos System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 4 VG Access read/write VG Status resizable MAX LV 0 Cur LV 3 Open LV 3 Max PV 0 Cur PV 1 Act PV 1 VG Size <29.00 GiB PE Size 4.00 MiB Total PE 7423 Alloc PE / Size 7423 / <29.00 GiB Free PE / Size 0 / 0 VG UUID sAUPPC-AnGW-WtEV-SmNT-Kg3R-WZ0x-vA3HPL コマンドにより、拡張したい/varの含まれる、/dev/sda2のボリュームグループは「centos」でした。 新しくボリュームグループを使うのならvgcreateコマンドを使用するところですが、今回は既存のボリュームグループへ物理ボリュームを追加するので、vgextendコマンドを使用します。 #vgextend centos /dev/sdb1
centosというボリュームグループへ、新しい物理ボリュームである/dev/sdb1を追加しました。Volume group "centos" successfully extended vgdisplayコマンドで再確認します。 ボリュームグループ容量、空き容量が増えています。 #vgdisplay
ここではFreeが20GBあることを確認します。つまり20GB拡張できます。--- Volume group --- VG Name centos System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 5 VG Access read/write VG Status resizable MAX LV 0 Cur LV 3 Open LV 3 Max PV 0 Cur PV 2 Act PV 2 VG Size 48.99 GiB PE Size 4.00 MiB Total PE 12542 Alloc PE / Size 7423 / <29.00 GiB Free PE / Size 5119 / <20.00 GiB VG UUID sAUPPC-AnGW-WtEV-SmNT-Kg3R-WZ0x-vA3HPL 論理ボリュームを拡張する 本家Redhat 論理ボリュームの管理 論理ボリュームの情報を表示します。 いま着目したいのは、目的のパーティションである/varが含まれる論理ボリューム名です。 #lvdisplay
このコマンドにより、目的の「/var」は、「/dev/centos/var」というデバイスファイルであることが(略) --- Logical volume --- LV Path /dev/centos/var LV Name var VG Name centos LV UUID juJmT8-pC2n-iJi1-tHJ2-808r-0tUL-aARynJ LV Write Access read/write LV Creation host, time localhost, 2020-08-02 17:46:56 +0900 LV Status available # open 1 LV Size <16.00 GiB Current LE 4095 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 8192 Block device 253:2 確認できます。 この値を次のコマンドで使用します。 lvextendコマンドで、/varを拡張します。 コマンドは以下のようにサイズ指定します。 -L+オプションで、拡張するサイズを指定
#lvextend -L+20G /dev/centos/var --resizefs -L+オプションで、拡張するFree PE値を指定(vgdisplay参照) #lvextend -L+5119 /dev/centos/var --resizefs -Lオプションで拡張後のサイズを指定 #lvextend -L36G /dev/centos/var --resizefs -lオプションで空き領域の%で指定 #lvextend -l +100%FREE /dev/centos/var --resizefs 20GBのディスクを追加したつもりなので、20GBを加えたサイズ(36GB)を指定しますが、よくある問題が発生します。 サイズがちょっと合わない
空き領域を無駄なく指定したいのなら、100%で指定するかPE値で指定すると良いでしょう。#lvextend -L36G /dev/centos/var --resizefs Insufficient free space: 5121 extents needed, but only 5119 available 拡張サイズを小さくしたら成功 #lvextend -L35G /dev/centos/var --resizefs Size of logical volume centos/var unchanged from 35.00 GiB (8960 extents). Logical volume centos/var successfully resized. meta-data=/dev/mapper/centos-var isize=512 agcount=4, agsize=1048320 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=0 spinodes=0 data = bsize=4096 blocks=4193280, 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 4193280 to 9175040 「but only 5119 available」とは、vgdisplayコマンドの「Free PE値」のことです。 PE値で指定する場合
論理ボリュームを拡張後、そのサイズをファイルシステムに教える必要があります。(拡張サイズの反映)#lvextend -L+5119 /dev/centos/var --resizefs その反映は、lvextendコマンドの--resizefsオプションで行っています。 --resizeオプションを設定し忘れた場合は別途fsadmコマンドでサイズを反映します。 拡張と同時にサイズ反映を行う
lvextendの--resizefsオプションも、実体はfsadmコマンドを呼び出しているのだそうです。#lvextend -l +100%FREE /dev/centos/var --resizefs 拡張とサイズ反映を、別コマンドで行う #lvextend -l +100%FREE /dev/centos/var #fsadm --lvresize resize /dev/centos/var 最終確認 論理グループの表示 #lvdisplay
(略) --- Logical volume --- LV Path /dev/centos/var LV Name var VG Name centos LV UUID juJmT8-pC2n-iJi1-tHJ2-808r-0tUL-aARynJ LV Write Access read/write LV Creation host, time localhost, 2020-08-02 17:46:56 +0900 LV Status available # open 1 LV Size 35.00 GiB Current LE 8960 Segments 2 Allocation inherit Read ahead sectors auto - currently set to 8192 Block device 253:2 容量の確認 #df -m
無事、/varの空き容量が増えていることが分かります。ファイルシス 1M-ブロック 使用 使用可 使用% マウント位置 devtmpfs 1391 0 1391 0% /dev tmpfs 1408 0 1408 0% /dev/shm tmpfs 1408 10 1398 1% /run tmpfs 1408 0 1408 0% /sys/fs/cgroup /dev/mapper/centos-root 10230 4041 6190 40% / /dev/sda1 1014 183 832 19% /boot /dev/mapper/centos-var 35830 14284 21547 40% /var tmpfs 282 1 282 1% /run/user/42 tmpfs 282 0 282 0% /run/user/0 |
|
||||||||