Linux LVMでのディスク拡張をコマンドを打ってから調べる

ディスク拡張、思ったよりややこしかった。

最近インフラネタが増えてきましたね!結構自分用メモに役立つんですよね~。

ディスクが圧迫していて、logとか画像とか消して、それで何とかしのげれば良いですが、dbサーバーだったりで全部使ってますよ〜みたいなもう消すものない状況ってあると思います。

インフラ担当の人がディスク拡張しました、ありがと~みたいな流れよく見るのですが、自分がやるとは思って無く、たまたま経験できたのでコマンドについてちょっと掘りながらメモしていきたいと思います。

RDSとかフルマネージドなサービスだったら必要ないかもですが、クラウドサービスで200GBね、はい追加ポチ!タスク完了!ってな感じだと思ってたのですがそうはいかないみたいで、パーテーションとかファイルシステムとか色々あるようです。その色々を辿りましょう。

ざっくりな流れ

基本的にはこんな感じで流れます。

  • 1.サービスストップ。関連バッチとかもあればそれも止める?
  • 2.クラウドサービスでディスク増量
  • 3.パーテーション拡張
  • 4.物理ボリュームサイズ変更→論理ボリュームサイズ変更
  • 5.サービス再起動、各種チェック

1.サービスストップ

まずはdf -hしましょう。

# df -h 
[root@o-db-g03 ~]# df -h
ファイルシス                       サイズ  使用  残り 使用% マウント位置
/dev/xvda2                            5.0G  182M  4.4G    4% /
devtmpfs                             2.9G     0  2.9G    0% /dev
tmpfs                                2.9G     0  2.9G    0% /dev/shm
tmpfs                                2.9G  105M  2.8G    4% /run
tmpfs                                2.9G     0  2.9G    0% /sys/fs/cgroup
/dev/mapper/centos_o--db01-usr       5.0G  1.3G  3.8G   26% /usr
/dev/mapper/centos_o--db01-var       720G  710G   11G   99% /var
/dev/mapper/centos_o--db01-var_log    10G  115M  9.9G    2% /var/log
tmpfs                                581M     0  581M    0% /run/user/0

99%ですね、これは障害起きてるかも。。。

systemctl stop mysql
systemctl disable mysql
ps aufx | grep mysql
systemctl stop cron
reboot

はい止まりました、自動起動も切っておかないとですね。レプリケーションとかシャーディングとかやってた場合や他にバッチが動いてますとかその辺は状況に合わせて。

2.クラウドサービス画面でディスク増量

それぞれのサービスで違うと思いますので割愛、以下はさくらのクラウド。

https://manual.sakura.ad.jp/cloud/design-pattern/tips/disk-expand.html

3.パーティション拡張

クラウドでボタンポチっても物理的な容量が増えただけで、df -h でやばいとなっていたところを増やす必要があります。

ここからが本番です、パーティションを拡張していきます。パーティションとは何かの図があんまり無かったのですが、以下のリンクが簡単で、CドライブとDドライブみたいなやつです。

https://www.pckids.info/lectureship/lectureship_detail7.html

ではこのパーティション操作コマンドfdisk(format disk)を打っていきましょう。これは現状確認ですね。

# fdisk -l
Disk /dev/xvda: 912.7 GB, 912680550400 bytes, 1782579200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
Disk label type: dos
ディスク識別子: 0x0004ca30

デバイス ブート      始点        終点     ブロック   Id  システム
/dev/xvda1            2048   408944639   204471296   8e  Linux LVM
/dev/xvda2       408944640   419430399     5242880   83  Linux
/dev/xvda3       419430400  1258291199   419430400   83  Linux
/dev/xvda4      1258291200  1572863999   157286400   8e  Linux LVM

Disk /dev/mapper/centos_o--db01-swap: 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 バイト


Disk /dev/mapper/centos_o--db01-usr: 5368 MB, 5368709120 bytes, 10485760 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト


Disk /dev/mapper/centos_o--db01-var_log: 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 バイト


Disk /dev/mapper/centos_o--db01-var: 773.1 GB, 773081530368 bytes, 1509924864 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト

さっき増やしたので、一行目が増えているはずです。ディスクが拡大したので、それに応じたパーティションに新たに仕切り直しましょう。

# fdisk /dev/xvda
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.

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

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

デバイス ブート      始点        終点     ブロック   Id  システム
/dev/xvda1            2048   408944639   204471296   8e  Linux LVM
/dev/xvda2       408944640   419430399     5242880   83  Linux
/dev/xvda3       419430400  1258291199   419430400   83  Linux
/dev/xvda4      1258291200  1572863999   157286400   8e  Linux LVM

コマンド (m でヘルプ): d
パーティション番号 (1-4, default 4): 4
Partition 4 is deleted

コマンド (m でヘルプ): n
Partition type:
   p   primary (3 primary, 0 extended, 1 free)
   e   extended
Select (default e): p
Selected partition 4
最初 sector (1258291200-1782579199, 初期値 1258291200):
初期値 1258291200 を使います
Last sector, +sectors or +size{K,M,G} (1258291200-1782579199, 初期値 1782579199):
初期値 1782579199 を使います
Partition 4 of type Linux and of size 250 GiB is set

コマンド (m でヘルプ): t
パーティション番号 (1-4, default 4): 4
Hex code (type L to list all codes): 8e
Changed type of partition 'Linux' to 'Linux LVM'

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

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

WARNING: Re-reading the partition table failed with error 16: デバイスもしくはリソースがビジー状態です.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
ディスクを同期しています。

コマンドする度にpで現状確認をした方が良いと思います!ここでしか使わない?謎のおまじない達でした。。。
増やしたいパーティションを削除して最大の大きさで改めて仕切り直した感じです。ではもう一度rebootします。

reboot

4.物理ボリュームサイズ変更→論理ボリュームサイズ変更

さて、2大関門と言われるうちのもう一つがやってきました。pvdisplay(physical volume)とlvextend(logical volume)とxfs_growfwコマンドを脳死で打っていきましょう。物理やら論理やら何じゃお前ら。

この記事の図がイメージしやすいかも。

https://users.miraclelinux.com/technet/document/linux/training/2_2_3.html

# pvdisplay
  --- Physical volume ---
  PV Name               /dev/xvda1
  VG Name               centos_o-db01
  PV Size               <195.00 GiB / not usable 2.00 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              49919
  Free PE               0
  Allocated PE          49919
  PV UUID               NzuRuz-rWTy-K9rO-cFUl-inG2-HCDh-Qod8Pp

  --- Physical volume ---
  PV Name               /dev/xvda3
  VG Name               centos_o-db01
  PV Size               400.00 GiB / not usable 4.00 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              102399
  Free PE               0
  Allocated PE          102399
  PV UUID               XVqZrq-rERf-qz0U-nAyf-Uc5R-4Yd7-1eAiWq

  --- Physical volume ---
  PV Name               /dev/xvda4
  VG Name               centos_o-db01
  PV Size               150.00 GiB / not usable 4.00 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              38399
  Free PE               0
  Allocated PE          38399
  PV UUID               nfa74V-MaQ0-9D2N-JZPB-ztqH-56js-J1wxTA

では今回変更パーティションを物理的にリサイズしましょう。

# pvresize /dev/xvda4
Physical volume "/dev/xvda4" changed
 1 physical volume(s) resized / 0 physical volume(s) not resized

これでdf -h しても結果は変わらず。。。まだまだ〜。

# lvextend -l +100%FREE /dev/mapper/centos_o--db01-var
Size of logical volume centos_o-db01/var changed from <719.99 GiB (184317 extents) to <819.99 GiB (209917 extents).
Logical volume centos_o-db01/var successfully resized.

論理的に、拡張できる余地分拡張しました。
df -h しても結果は変わらず。。。ゴーゴー〜。

# xfs_growfs /dev/mapper/centos_o--db01-var
meta-data=/dev/mapper/centos_o--db01-var isize=256    agcount=17, agsize=11140864 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=0        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=188740608, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
log      =internal               bsize=4096   blocks=21759, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 188740608 to 214955008

ファイルシステムに認識させることでやっと、df -hの結果が変わってきます。
これでハッピーです。

5.サービスの再起動、各種チェック。まとめ

そういえばmysql止めていたので忘れずに。。。

systemctl start mysql

そして、アプリ画面やら通信やらdbなど確認して、見事バッチが動いてませんね、なぜならcronも止めたからですガッハッハー。まあ本番稼働とか怖すぎなので素人が触らない方が餅は餅屋ですが、ベテランの方とダブルチェックしながら作業できるのは安心かつ学べてとても幸せなことですよね~。

まとめると

クラウドポチ(ディスク装置全体拡張)→fdisk(パーティション、ディスク装置分割)→pvresize (パーティションに従い物理ボリューム増強)→lvextend(物理ボリュームに従い論理ボリューム増強)→xfs_growfs(論理ボリュームに従いファイルシステムズ増強)→大勝利。てな感じなんですかね。知らんけど(エンジニア必殺)。

以下も同じような流れなので、餅は餅屋です。なぜ毎月記事を書いているんだ一体全体分からない。。。

【解説】LVMとは?|論理ボリュームを拡張してみよう!

おすすめの記事