lsblk、sgdisk、LVM 系コマンドの使用例を作りました。
流れとしては、パーティションも何もないまっさらなディスクを用意し、そのディスクに対して
- lsblk コマンドでブロックデバイスの確認
- sgdisk コマンドでパーティションの作成
- LVM 系コマンドで LVM の作成、拡張
- sgdisk、LVM 系コマンドでの削除
をするものとなっています。
なお、あくまでもコマンドの使用例ですので、各パーティションの容量の割り当てなどは実践的なものではありません。
今回、各コマンドを試すまっさらなディスクとして、さくらのクラウドのブランクディスクを用いることとします。
さくらのクラウドでのブランクディスクの利用手順
以下の画像は2016年12月10日現在のものとなります。
サーバの作成
最初に、ブランクディスクを接続するサーバを作成します。
今回は CentOS 7.2 で作成したいと思います。
ブランクディスクを接続後にサーバを起動したいので「作成後すぐに起動」のチェックボックスは外しておきます。
ブランクディスクの作成
次に、ブランクディスクを作成します。
「接続先サーバ」には先ほど作成したサーバを指定します。
ブランクディスクを接続したサーバの起動
最後に、ブランクディスクを接続したサーバを「電源操作」から起動します。
なお、下記画像の「接続」のとおり、今回はディスク1、2 ともに virtio での接続ですので、/dev
ディレクトリには /dev/vd*
のブロックデバイス、具体的には /dev/vda
と /dev/vdb
が存在することとなります。
サーバを起動しましたら、 ssh や リモートスクリーンからサーバに入り、コマンドを叩いていきましょう。
lsblk、sgdisk、LVM 系コマンドの使用例
はじめに
以下、コマンドのオプションは sgdisk [-p|--print]
のように、ショートオプションとロングオプションを併記します。
登場するコマンドのバージョンは下記のとおりです。
[root@test ~]# lsblk --version
lsblk from util-linux 2.23.2
[root@test ~]# sgdisk --version
GPT fdisk (sgdisk) version 0.8.6
[root@test ~]# pvscan --version
LVM version: 2.02.130(2)-RHEL7 (2016-06-09)
Library version: 1.02.107-RHEL7 (2016-06-09)
Driver version: 4.33.0
ブロックデバイスの確認
まずは、いったん lsblk コマンドでブランクディスクのブロックデバイスを確認します。
[root@test ~]# lsblk
とコマンドを打ちますと、
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
fd0 2:0 1 4K 0 disk
sr0 11:0 1 1024M 0 rom
vda 253:0 0 20G 0 disk
├─vda1 253:1 0 1M 0 part
├─vda2 253:2 0 4G 0 part [SWAP]
└─vda3 253:3 0 16G 0 part /
vdb 253:16 0 20G 0 disk
上記のとおり、vda
と vdb
が存在しますが、ブランクディスクの vdb
には枝分かれの part
が存在せず、パーティションが切られていないことがわかります。
lsblk
コマンドはパーティションの追加後などに逐次打ってみるとよいかと思います。
それでは、sgdisk [-p|--print]
を打ち、/dev/vdb
のサマリーデータを確認してみましょう。
[root@test ~]# sgdisk --print /dev/vdb
Creating new GPT entries.
Disk /dev/vdb: 41943040 sectors, 20.0 GiB
Logical sector size: 512 bytes
(以下省略)
上記のように、/dev/vdb
のセクター数やセクターのサイズなどがわかります。
ブランクディスクの現状を把握しましたので、実際にパーティションを切る作業に入ります。
パーティションの作成
ここでは、20GiB の /dev/vdb
を 2GiB 、9GiB、9GiB とパーティションを切ってみることにします。
sgdisk [-n|--new]
を使います。
[root@test ~]# sgdisk --new 1::+2G /dev/vdb
The operation has completed successfully.
[root@test ~]# sgdisk --new 2::+9G /dev/vdb
The operation has completed successfully.
[root@test ~]# sgdisk --new 3:: /dev/vdb
The operation has completed successfully.
1::+2GB
の部分ですが、:
で区切られており、左から
- パーティションの番号
- パーティションの始まりのセクター(省略可)
- パーティションの終わりのセクター(省略可)
となります。
パーティション作成後の /dev/vdb
のサマリーデータを sgdisk [-p|--print]
で表示しますと、
[root@test ~]# sgdisk --print /dev/vdb
(途中省略)
Number Start (sector) End (sector) Size Code Name
1 2048 4196351 2.0 GiB 8300
2 4196352 23070719 9.0 GiB 8300
3 23070720 41943006 9.0 GiB 8300
となっており、Size の項から、意図したとおり 2GiB、9GiB、9GiB のパーティションが切られていることがわかります。
パーティションのコードの一覧の表示とコードの変更方法
ところで、上記の sgdisk --print /dev/vdb
にはパーティションのコードとして 8300 が記載されていました。
他にどのようなコードが存在するのか確認してみましょう。
sgdisk [-L|--list-types]
を打ってみます。
[root@test ~]# sgdisk --list-types
0700 Microsoft basic data 0c01 Microsoft reserved 2700 Windows RE
4200 Windows LDM data 4201 Windows LDM metadata 7501 IBM GPFS
7f00 ChromeOS kernel 7f01 ChromeOS root 7f02 ChromeOS reserved
8200 Linux swap 8300 Linux filesystem 8301 Linux reserved
8e00 Linux LVM a500 FreeBSD disklabel a501 FreeBSD boot
a502 FreeBSD swap a503 FreeBSD UFS a504 FreeBSD ZFS
a505 FreeBSD Vinum/RAID a580 Midnight BSD data a581 Midnight BSD boot
a582 Midnight BSD swap a583 Midnight BSD UFS a584 Midnight BSD ZFS
a585 Midnight BSD Vinum a800 Apple UFS a901 NetBSD swap
a902 NetBSD FFS a903 NetBSD LFS a904 NetBSD concatenated
a905 NetBSD encrypted a906 NetBSD RAID ab00 Apple boot
af00 Apple HFS/HFS+ af01 Apple RAID af02 Apple RAID offline
af03 Apple label af04 AppleTV recovery af05 Apple Core Storage
be00 Solaris boot bf00 Solaris root bf01 Solaris /usr & Mac Z
bf02 Solaris swap bf03 Solaris backup bf04 Solaris /var
bf05 Solaris /home bf06 Solaris alternate se bf07 Solaris Reserved 1
bf08 Solaris Reserved 2 bf09 Solaris Reserved 3 bf0a Solaris Reserved 4
bf0b Solaris Reserved 5 c001 HP-UX data c002 HP-UX service
ed00 Sony system partitio ef00 EFI System ef01 MBR partition scheme
ef02 BIOS boot partition fb00 VMWare VMFS fb01 VMWare reserved
fc00 VMWare kcore crash p fd00 Linux RAID
便利なリストが表示されました。
8300 は「Linux filesystem」と記載されています。
2番目と3番目のパーティションを 8e00 の「Linux LVM」に変更してみましょう。
sgdisk [-t|--typecode]
を使います。
[root@test ~]# sgdisk --typecode 2:8e00 /dev/vdb
The operation has completed successfully.
[root@test ~]# sgdisk --typecode 3:8e00 /dev/vdb
The operation has completed successfully.
変更した結果を sgdisk --print /dev/vdb
で確認します。
[root@test ~]# sgdisk --print /dev/vdb
(途中省略)
Number Start (sector) End (sector) Size Code Name
1 2048 4196351 2.0 GiB 8300
2 4196352 23070719 9.0 GiB 8E00
3 23070720 41943006 9.0 GiB 8E00
2番目、3番目のコードが 8E00 に変更されました。
パーティションの名前の変更
パーティションに名前をつけてみましょう。
sgdisk [-c|--change-name]
を使います。
[root@test ~]# sgdisk --change-name 1:"NOT LVM" /dev/vdb
The operation has completed successfully.
[root@test ~]# sgdisk --change-name 2:"LVM1" /dev/vdb
The operation has completed successfully.
[root@test ~]# sgdisk --change-name 3:"LVM2" /dev/vdb
The operation has completed successfully.
名前を付けた結果を、sgdisk --print /dev/vdb
で確認します。
[root@test ~]# sgdisk --print /dev/vdb
(途中省略)
Number Start (sector) End (sector) Size Code Name
1 2048 4196351 2.0 GiB 8300 NOT LVM
2 4196352 23070719 9.0 GiB 8E00 LVM1
3 23070720 41943006 9.0 GiB 8E00 LVM2
Name の項にパーティションの名前が表示されるようになりました。
次に、パーティションの2番目と3番目を利用して LVM を作成したいと思います。
lvm2 のインストール
最初に LVM 系のコマンドをインストールしておきます。
[root@test ~]# yum install lvm2
物理ボリュームの作成
下記の pvcreate
コマンドで物理ボリュームを作成します。
[root@test ~]# pvcreate /dev/vdb2
Physical volume "/dev/vdb2" successfully created
[root@test ~]# pvcreate /dev/vdb3
Physical volume "/dev/vdb3" successfully created
物理ボリュームの /dev/vdb2
と /dev/vdb3
の作成が成功したようです。
作成結果を pvscan
コマンドで確認します。
[root@test ~]# pvscan
PV /dev/vdb3 lvm2 [9.00 GiB]
PV /dev/vdb2 lvm2 [9.00 GiB]
Total: 2 [18.00 GiB] / in use: 0 [0 ] / in no VG: 2 [18.00 GiB]
あわせて pvdisplay
コマンドで確認するのもよいでしょう。
ボリュームグループの作成
まずは vgcreate
コマンドを使い /dev/vdb2
だけで lvm_sample
というボリュームグループを作成してみます。
[root@test ~]# vgcreate lvm_sample /dev/vdb2
Volume group "lvm_sample" successfully created
作成が成功したようです。
vgscan
コマンドで作成したボリュームグループを確認します。
[root@test ~]# vgscan
Reading all physical volumes. This may take a while...
Found volume group "lvm_sample" using metadata type lvm2
ここで vgdisplay [-v|--verbose]
コマンドを打ちますと、ボリュームグループの物理ボリュームが表示されます。
[root@test ~]# vgdisplay --verbose lvm_sample
(途中省略)
--- Physical volumes ---
PV Name /dev/vdb2
(以下省略)
論理ボリュームの作成
lvcreate
コマンドで論理ボリュームの作成が可能です。
[root@test ~]# lvcreate --extents 100%FREE -n data lvm_sample
Logical volume "data" created.
ここでは、上記のとおり、[-l|--extents] 100%FREE
として、すべてのフリーなスペースを割り当てました。
また、 [-n|--name]
オプションで、data という名前の論理ボリュームにしています。
実際、lvscan
コマンドや lvdisplay
コマンドで確認しますと、
[root@test ~]# lvscan
ACTIVE '/dev/lvm_sample/data' [9.00 GiB] inherit
と、/dev/lvm_sample/data
の論理ボリュームが 9.00 GiB になっていることがわかります。
論理ボリュームの拡張
論理ボリュームを拡張する場合、最初に vgextend
コマンドでボリュームグループに物理ボリュームを追加しておきましょう。
[root@test ~]# vgextend lvm_sample /dev/vdb3
Volume group "lvm_sample" successfully extended
上記コマンドを打った後、前述の vgdisplay [-v|--verbose]
コマンドでボリュームグループを確認しますと、物理ボリュームとして /dev/vdb3
が追加されていることがわかります。
それでは、lvextend
コマンドで論理ボリュームを拡張してみます。
[root@test ~]# lvextend --extents +100%FREE /dev/lvm_sample/data
Size of logical volume lvm_sample/data changed from 9.00 GiB (2303 extents) to 17.99 GiB (4606 extents).
Logical volume data successfully resized.
リサイズに成功したようです。
論理ボリュームの作成のところで使用した lvscan
コマンドや lvdisplay
コマンドを叩いても拡張されていることがわかります。
以上で作成、拡張系の手順は終了です。
当然ですが、現時点ではファイルシステムを出力する lsblk [-f|--fs]
で確認しましても、/dev/vdb
にはファイルシステムが存在していませんので、この後には利用したいファイルシステムを mkfs
コマンドなどで作成する作業が待っています。
以下、参考として、LVM とパーティションの削除について記載します。
LVM の削除について
論理ボリュームの削除は lvremove
コマンドです。
論理ボリュームが active なときに lvremove
コマンドを利用しますと Do you really want to remove active logical volume data? [y/n]
と確認されます。
本例では、いったん lvchange -an
で deactivate してから削除することとします。
[root@test ~]# lvchange -an /dev/lvm_sample/data
[root@test ~]# lvremove /dev/lvm_sample/data
Logical volume "data" successfully removed
ボリュームグループの削除は vgremove
コマンドです。
[root@test ~]# vgremove lvm_sample
Volume group "lvm_sample" successfully removed
物理ボリュームの削除は pvremove
コマンドです。
[root@test ~]# pvremove /dev/vdb3
Labels on physical volume "/dev/vdb3" successfully wiped
[root@test ~]# pvremove /dev/vdb2
Labels on physical volume "/dev/vdb2" successfully wiped
パーティションの削除について
個別にパーティションを削除する場合は sgdisk [-d|--delete]
です。
[root@test ~]# sgdisk --delete 3 /dev/vdb
The operation has completed successfully.
すべてのパーティションの削除は sgdisk [-Z|--zap-all]
です。
[root@test ~]# sgdisk --zap-all /dev/vdb
GPT data structures destroyed! You may now partition the disk using fdisk or
other utilities.
なお、パーティションが削除されるだけですので、もしデータまで削除したい場合には dd
コマンドなどを利用してデータを削除することになります。
クラウドで作成したディスクの場合であれば、dd
コマンドなどで削除せず、いったんディスクを削除して再度ディスクを作成した方が早い場合が多いかと思われます。
まとめ
lsblk、sgdisk、LVM 系コマンドの基本的な使用例がわかりました。あとは状況に応じて man
で他のオプションを確認しながらスクリプトを作成することなどができると思います。個人的には、ショートオプションよりは長くなりますが、わかりやすいロングオプションの方を好んで利用しています。