
Contents
ディスク拡張、思ったよりややこしかった。
最近インフラネタが増えてきましたね!結構自分用メモに役立つんですよね~。
ディスクが圧迫していて、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とは?|論理ボリュームを拡張してみよう!