最近Redhatのサーバ構築案件があり、練習がてらAmazon EC2(Amazon Linux2)で色々お試ししましたので、備忘録がてら記事にします。利用したAMIはAmazon Linux2ですがRedhat系とほぼ同じコマンドで行けるので、練習環境があるのはありがたいです。
#前提条件
- 使用するインスタンスはAmazon Linux2 です。
- コマンド入力はEC2にログインして、Rootユーザに昇格した状態で行うものとします。
- 各種ファイル(/etc/fstabなど)を設定するときは必ずバックアップを取得してから中身を変更してください。
- 実行しているコマンドについては詳細な解説までは載せません。他に詳しく記載されている記事があるのでそちらを参照してください。LPIC Lv2まで勉強した人は何となく見たことがあるコマンドだと思います。
#複数EBSをアタッチして、LVM論理ボリュームを設定する
###概要
EC2(Amazon Linux2)のルートボリュームはデフォルト=/dev/xvda というデバイス名になっています。
追加でEBSをアタッチすると/dev/xvdb,/dev/xvdcという形でデバイス認識されます。
今回は追加で2つのEBSをアタッチして、LVM論理ボリュームとして設定したいと思います。
なおEBSの追加アタッチ方法やEC2初期設定については割愛します。
###手順
①アタッチしたEBSがどういうデバイス名で認識されているか確認する
[root@AWS ec2-user]# lsblk →認識されているデバイスの一覧を表示
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 8G 0 disk
└─xvda1 202:1 0 8G 0 part /
xvdb 202:16 0 8G 0 disk
xvdc 202:32 0 8G 0 disk
xvdaというディスクにxvda1で1つパーティションが割り当てられており、マウント先はルート(”/”)になっており、
追加で割り当てたEBSはxvdbとxvdcというディスク名で認識されていることがわかりました。
②パーティションを設定する
ではxvdbにパーティションを設定していきます。
[root@AWS ec2-user]# parted /dev/xvdb
GNU Parted 3.1
Using /dev/xvdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel gpt →パーティションのタイプをGPTに指定します。
(parted) mkpatrt
Partition name? []? test-xvdb →適当に名前を付けます
File system type? [ext2]? ext4 →任意のファイルシステムを設定します
Start? 0% →ディスクのどこから利用し始めるかを記載します。今回はディスクの先頭から使っていくので0%で指定します。
End? 100% →ディスクのどこまで利用するか記載します。今回はディスクの最後まで使うので100%で指定します。
(parted) p →今の設定状況の確認
Model: Xen Virtual Block Device (xvd)
Disk /dev/xvdb: 8590MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 8589MB 8588MB test-xvdb
(parted) set 1 lvm on →対象となるパーティションナンバー「1」に対してLVMを有効にします。
(parted) p
Model: Xen Virtual Block Device (xvd)
Disk /dev/xvdb: 8590MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 8589MB 8588MB test-xvdb lvm
(parted) q →終了
Information: You may need to update /etc/fstab. →/etc/fstabの修正も忘れずに!と注意されるので、覚えておきましょう。
xvdcも同様にパーティションを設定しておきます。
もう1度認識されてデバイスの一覧を表示させて、パーティション設定を確認します。
[root@AWS ec2-user]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 8G 0 disk
└─xvda1 202:1 0 8G 0 part /
xvdb 202:16 0 8G 0 disk
└─xvdb1 202:17 0 8G 0 part
xvdc 202:32 0 8G 0 disk
└─xvdc1 202:33 0 8G 0 part
xvdbとxvdcの下にTYPEがpartになっているxvdb1とxvdc1が追加されているのでOKです。
③物理ボリュームの作成
xvdb1に物理ボリュームを設定します。
[root@AWS ec2-user]# pvcreate /dev/xvdb1
Physical volume "/dev/xvdb1" successfully created.
xvdc1に対しても同様に設定します。
では物理ボリュームを認識できているかを確認します。
[root@AWS ec2-user]# pvdisplay
"/dev/sdc1" is a new physical volume of "<8.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdc1
VG Name
PV Size <8.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID R2E3qM-mnNS-ixxx-RI1d-S9Yd-SeuP-xxxxx
"/dev/sdb1" is a new physical volume of "<8.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdb1
VG Name
PV Size <8.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID kt238d-oMLJ-xxxx-81yZ-Tvvh-iW1K-xxxxx
新しく/dev/sdb1と/dev/sdc1が出来ていることがわかりました。
④ボリュームグループの作成
物理ボリュームをボリュームグループとして登録していきます。ボリュームグループ名はtest-vgとします。
#ボリュームグループtest-vgを作成し/dev/sdb1 を追加します。
[root@AWS ec2-user]# vgcreate test-vg /dev/sdb1
Volume group "test-vg" successfully created
#test-vgに/dev/sdc1も追加します
[root@AWS ec2-user]# vgextend test-vg /dev/sdc1
Volume group "test-vg" successfully extended
⑤論理ボリュームの作成
ボリュームグループを使って、論理ボリュームを作成します。
[root@AWS ec2-user]# lvcreate -l 100%VG test-vg -n test-lvg
#lオプションで 容量指定(test-vgの容量100%使用)し、nオプションで論理ボリューム名をtest-lvgに設定
Logical volume "test-lvg" created.
では論理ボリュームが作成されたか確認します。
[root@AWS ec2-user]# lvdisplay
--- Logical volume ---
LV Path /dev/test-vg/test-lvg
LV Name test-lvg
VG Name test-vg
LV UUID GjcYa1-kNKy-hll3-oxnT-xxxx-Phri-xxxxx
LV Write Access read/write
LV Creation host, time AWS.ap-northeast-1.compute.internal, 2021-07-26 15:15:22 +0000
LV Status available
# open 0
LV Size 15.99 GiB
Current LE 4094
Segments 2
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0
上記からサイズ15.99Gibの論理ボリュームが作成されていることがわかります。
今回は8GibのEBSを2つ使ったので約16GiBとなっています。
⑥ファイルシステムの作成
では作成した論理ボリュームにファイルシステムを作成しましょう。
[root@AWS ec2-user]# mkfs -t ext4 /dev/test-vg/test-lvg
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
1048576 inodes, 4192256 blocks
209612 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2151677952
128 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000
Allocating group tables: 0/128 done
Writing inode tables: 0/128 done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: 0/128 done
⑦ファイルシステムのマウント
ファイルシステムが作成できたら、マウントしてみます。
マウント用ディレクトリをまず/home下にtestという名前で作成します。
[root@AWS ec2-user]# cd /home
[root@AWS home]# mkdir test
[root@AWS home]# ls -l
total 0
drwx------ 3 ec2-user ec2-user 74 Jul 26 14:53 ec2-user
drwxr-xr-x 2 root root 6 Jul 26 15:24 test
上記で作成したtestフォルダに先ほど作成したファイルシステムをマウントします。マウントする際のデバイス名はlvdisplayで表示されたLV Pathをを指定します。
[root@AWS home]# mount /dev/test-vg/test-lg test
ではどのようにディスクが認識されているか確認します。
[root@AWS home]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 482M 0 482M 0% /dev
tmpfs 492M 0 492M 0% /dev/shm
tmpfs 492M 488K 492M 1% /run
tmpfs 492M 0 492M 0% /sys/fs/cgroup
/dev/xvda1 8.0G 1.6G 6.5G 20% /
tmpfs 99M 0 99M 0% /run/user/1000
tmpfs 99M 0 99M 0% /run/user/0
/dev/mapper/test--vg-test--lg 16G 45M 15G 1% /home/test
上記より/home/testに約16Gの容量の論理ボリュームが存在することがわかります。
※LVMのデバイスマップ表示は/dev/mapper/ボリュームグループ名-論理ボリューム名となります。
これで2つの8GibのEBSをまとめて1つのLVM論理ボリュームとして設定できました。
ただし/etc/fstabを修正していないので、再起動するとマウントが外れてしまいます。
必要に応じて/etc/fstabに追記してあげましょう。
#SWAPを設定する
###概要
Amazon Linux2ではデフォルトでSWAPは作成されていないので、手動で作成していきます。
SWAPに割り当てる容量は以下を参考にしてください。
スワップ領域
今回はメモリ1GBのサーバなので、SWAPは2GBで設定します。
###手順
①SWAPファイルの作成
swap用のファイルを作成します。その前にまず現状メモリの状態がどうなっているか調べります。
[root@AWS ec2-user]# free
total used free shared buff/cache available
Mem: 1006892 86564 729660 480 190668 783736
Swap: 0 0 0
上記から現状SWAP領域は割り当てられていないことがわかります。
ではSWAP用ファイルを作成します。ファイルは「/swapfile」で、ファイルサイズは2GBで作成します。
[root@AWS ec2-user]# dd if=/dev/zero of=/swapfile bs=1024K count=2048
2048+0 records in
2048+0 records out
2147483648 bytes (2.1 GB) copied, 31.0973 s, 69.1 MB/s
これでSWAP用ファイルが作成されました。ファイルのアクセス権を読み書きできるように変更します。
[root@AWS ec2-user]# chmod 600 /swapfile
②作成したファイルをSWAP用に設定する
[root@AWS ec2-user]# mkswap /swapfile
Setting up swapspace version 1, size = 2 GiB (2147479552 bytes)
no label, UUID=06116f11-77d6-xxxx-b180-xxxxxxxxx
③SWAP設定を有効化する
[root@AWS ec2-user]# swapon /swapfile
ここで再度現状メモリの状態を確認します。
[root@AWS ec2-user]# free
total used free shared buff/cache available
Mem: 1006892 80752 80328 480 845812 777576
Swap: 2097148 0 2097148
上記からSWAP料金が約2GBで設定されていることがわかります。
④再起動しても自動的に利用されるようにする
このままでは再起動したら設定が消えてしまうので、/etc/fstabに追記して、再起動後も自動的にSWAPが利用できるようにします。
[root@AWS ec2-user]# vi /etc/fstab
###以下を追記###
/swap /swap swap defaults 0 0
#NFSを使って、他サーバのボリュームをネットワークマウントする
###概要
サーバのボリュームを他のサーバからもアクセスできるように設定します。Windowsでいうところの共有の設定みたいなものです。
今回は上記図でいうとEC2#2の/home/nfs-testにEC2#1の/home/testをマウントしてみます。
###手順
①設定したいボリュームがあるサーバ(NFSサーバ)で以下のコマンドを実行し、必要なサービスがインストールおよび動作しているか確認します。
[root@AWS ec2-user]#systemctl status rpcbind nfs-server
起動していない、もしくはインストールされていなければ起動、インストールしてください。
[root@AWS ec2-user]#systemctl enable rpcbind nfs-server
再起動後も自動でサービスが起動するようにします。
②同様にNFSクライアントで以下のコマンドを実行し、必要なサービスがインストールおよび動作しているか確認します。
[root@AWS ec2-user]#systemctl status rpcbind nfs-server
[root@AWS ec2-user]#systemctl enable rpcbind nfs-server
③NFSサーバで以下コマンドを実行し、ディレクトリを他サーバがマウントすることを許可します。
#/etc/exports に外部からのマウント許可を記述します。
[root@AWS ec2-user]#vi /etc/exports
####以下を追記####
/home/test 10.0.0.0/24(rw,no_root_squash) →/24の後ろにスペースはいれない!
[記述例]
マウント許可するディレクトリ マウント許可するホストもしくはNW(マウントオプション)
"no_root_squash"はクライアントの root のアクセスをサーバ上の root として扱うオプション
#記述できたら保存して、設定反映させるためにサービス再起動
[root@AWS ec2-user]#exportfs -ra
④NFSクライアントでマウントコマンドを実行します。
#10.0.0.223がNFSサーバのIPで、/home/testが被マウントディレクトリ
[root@AWS ec2-user]#mount -t nfs 10.0.0.223:/home/test /home/nfs-test
⑤再起動してもアンマウントされてないようにNFSクライアント側の/etc/fstabに追記しておきます
[root@AWS ec2-user]vim /etc/fstab
####以下追記####
10.0.0.223:/home/test /home/nfs-test nfs rw,auto 1 1
ではマウント出来ているか確認します。NFSクライアント側で以下コマンドを実行します。
[root@AWS ec2-user]#df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 482M 0 482M 0% /dev
tmpfs 492M 0 492M 0% /dev/shm
tmpfs 492M 412K 492M 1% /run
tmpfs 492M 0 492M 0% /sys/fs/cgroup
/dev/xvda1 8.0G 1.5G 6.5G 19% /
10.0.0.223:/home/test 16G 44M 15G 1% /home/nfs-test
tmpfs 99M 0 99M 0% /run/user/1000
/home/nfs-testにNFSサーバの/home/testがマウントされているのが見えました!
#終わりに
CentOSの設定についてPING-Tの問題をやってただけでは全然理解でていなかったんだなぁ~というのが身に染みて分かりました...実機でコマンド打ってみるって大切です!
#参考にしたサイト
https://aws.amazon.com/jp/premiumsupport/knowledge-center/create-lv-on-ebs-volume/
https://hara-chan.com/it/infrastructure/how-to-mount-server/
https://aws.amazon.com/jp/premiumsupport/knowledge-center/ec2-memory-swap-file/
https://www.server-world.info/query?os=Ubuntu_20.04&p=nfs&f=2
https://qiita.com/rikudai/items/f9900e4865ce25a8464e
https://hara-chan.com/it/infrastructure/how-to-mount-server/