Slide 1

Slide 1 text

EBSでLVMをやってみた 2024/03/14 株式会社ゆめみ 白"雪姫"

Slide 2

Slide 2 text

自己紹介 Name: 白"雪姫"(Snowwhite) Corporated: 株式会社ゆめみ Job: ネットワークとセキュリティのお姉さん Profile: 2023年8月入社 元々は、ネットワークをメインに仕事をしており、 前々職からセキュリティの世界へ、 現在はインフラをメインにSRE・セキュリティを担当 Certificate: SAA/SAPro/ANS/SCS Liked Service: Amazon Inspector Twitter: 白"雪姫"(@yuri_snowwhite) blog: https://kohaku-kageroh.hatenablog.com/

Slide 3

Slide 3 text

LVMってなんだ?

Slide 4

Slide 4 text

LVMとは・・・・ Logical Volume Managerの略で論理的にパーティションを管理する物。 端的に言えば、1つの大きな箱に仕切り板を入れて相互にアクセス出来 ないように制御している状態。 論理的にボリュームを分けているもの。 この分けるものをパーティションという。

Slide 5

Slide 5 text

非LVMのボリューム Partition 1 LVMのボリューム Partition 1 Partition 2 Partition 3 イメージはこんな感じ ・ ・

Slide 6

Slide 6 text

なんでそんなことしようと思ったの?

Slide 7

Slide 7 text

こんな要件がありました ・システムサーバはAWSを利用 ・作業前、作業後にはスナップショットを取得 ・home, log, app, {root(/), boot}, swapは分離 ・取得したスナップショットは作業成功・失敗にかかわらず1 年保存

Slide 8

Slide 8 text

パーティションを分けるだけなら、必要なパーティションだ けEBSボリュームを接続するのが簡単!! だけど、スナップショットの保存期間と管理を考えるととん でもないことになる! そのため、LVMで論理パーティションを分ける事に。 後述の実践であれ?って思うかもですがroot(/)は事情説 明して免除してもらいました。

Slide 9

Slide 9 text

実践に入る前に計算してみた。 今はAWS Backupが有るので自動でローテションとかできるけど本構築をしていた当時はそんな物有 りません。(AWS Backupは2019年7月に東京リージョンにGA、本システムのリリースは 2019年3月 必須というリリースありきの構築でした。 ) ・1台あたり6個のEBS ・1回の作業前後で6x2で12個 ・1ヶ月の作業はOS・ミドルウェアのアップデートは月あたり 平均15回 ・・・・12(個)x15(回)=1ヶ月で180個増え、1年間では2160個のスナップショット。 とてもでは無いですが、管理しきれません・・・。

Slide 10

Slide 10 text

実践

Slide 11

Slide 11 text

検証時スペック 本当はroot(/)を作りたいが、作るとKernel Panicを起こして二度と起動しません 検証当時 今回の発表で再検証で利用 OS Amazon Linux Amazon Linux 2 Instance t2.nano t4g.micro boot disk 8GiB 8GiB Attached EBS Volume 30GiB 30GiB Created LVM /home, /var, /var/log, swap /home, /var, /var/log, swap

Slide 12

Slide 12 text

細かい設定はここでは割愛します。 EBSそのものは こんな感じで追加

Slide 13

Slide 13 text

ログインしたら、ディスクの状況を確認 [root@ip-172-30-2-70 ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT nvme1n1 259:0 0 30G 0 disk nvme0n1 259:1 0 8G 0 disk ├─nvme0n1p1 259:2 0 8G 0 part / └─nvme0n1p128 259:3 0 10M 0 part /boot/efi [root@ip-172-30-2-70 ~]# df -kh Filesystem Size Used Avail Use% Mounted on devtmpfs 169M 0 169M 0% /dev tmpfs 208M 0 208M 0% /dev/shm tmpfs 208M 416K 208M 1% /run tmpfs 208M 0 208M 0% /sys/fs/cgroup /dev/nvme0n1p1 8.0G 1.7G 6.3G 22% / /dev/nvme0n1p128 10M 3.8M 6.2M 38% /boot/efi tmpfs 42M 0 42M 0% /run/user/1000 起動時にはご覧の通り 追加ディスクはマウントされてい ない

Slide 14

Slide 14 text

パーティションを切るための箱を作る作業です。 [root@ip-172-30-2-70 ~]# fdisk /dev/nvme1n1 Welcome to fdisk (util-linux 2.30.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. Created a new DOS disklabel with disk identifier 0x11e1ea1d. Command (m for help): n Partition type p primary (0 primary, 0 extended, 4 free) e extended (container for logical partitions) Select (default p): p Partition number (1-4, default 1): 1 First sector (2048-62914559, default 2048): Last sector, +sectors or +size{K,M,G,T,P} (2048-62914559, default 62914559): Created a new partition 1 of type 'Linux' and of size 30 GiB. Linuxの認識による物理ディスク 的にはまるっと使うので30GiB 丸々使う様にします。

Slide 15

Slide 15 text

フォーマットタイプをLVMに変更します。 Command (m for help): t Selected partition 1 Hex code (type L to list all codes):8e Changed type of partition 'FAT12' to 'Linux LVM'. Command (m for help): w The partition table has been altered. Calling ioctl() to re-read partition table. Syncing disks. パーティションタイプを LVMに変更します。

Slide 16

Slide 16 text

ここからは一般的なLVMの作成方式なのでコマンドを入れて PV・VG・LVをそれぞ れ作っていきます。 ・PVの作成 pvcreate /dev/nvme1n1p1 ・VGの作成 vgcreate vg-all /dev/nvme1n1p1 ・LVの作成 lvcreate -n lv-home --size 10GiB vg-all lvcreate -n lv-var --size 5GiB vg-all lvcreate -n lv-log --size 5GiB vg-all lvcreate -n lv-swap --size 4.9GiB vg-all LVMのパーティションを順次 作っていきます。 また、LVを作る段階で各パー ティションを分けますがヘッ ダー情報等で目一杯は使え ません そのためlogは5GiB確保できませ んでした・・・

Slide 17

Slide 17 text

作ったLVMを各種フォーマットします。(今回はext4です) ・パーティションのフォーマット mkfs -t ext4 /dev/vg-all/lv-home mkfs -t ext4 /dev/vg-all/lv-var mkfs -t ext4 /dev/vg-all/lv-log mkfs -t ext4 /dev/vg-all/lv-swap ・ラベル付け e2label /dev/vg-all/lv-home /home e2label /dev/vg-all/lv-var /var e2label /dev/vg-all/lv-log /var/log e2label /dev/vg-all/lv-swap /swap ・仮マウントポイント作成 mkdir /swap mkdir /mnt/home mkdir /mnt/var mkdir /mnt/log フォーマットとラベルを作って、マ ウントまで確認します。 マウント mount /dev/vg-all/lv-home /mnt/home mount /dev/vg-all/lv-var /mnt/var mount /dev/vg-all/lv-log /mnt/log mount /dev/vg-all/lv-swap /swap マウント確認 df -kh

Slide 18

Slide 18 text

ポイント!データのコピーをする 1つ前まででマウントが確認出来ていたら既存のデータをコ ピーすることが大事!! ・マウントポイント外へ移動 cd /root ・swapを作成 dd if=/dev/zero of=/swap/swapfile bs=1MB count="4096" chmod 600 /swap/swapfile mkswap /swap/swapfile swapon /swap/swapfile free -m swapoff /swap/swapfile free -m ・データのコピー cp -rp /var/* /mnt/var/ cp -rp /var/log/* /mnt/log/ cp -rp /home/* /mnt/home/ ・データの確認 ls -la /home/ec2-user/ ls -la /mnt/home/ec2-user/.ssh/ homeのパーティションをマウントし 直す関係から、SSHの認証鍵など の権限が正しいことは確認しましょ う!

Slide 19

Slide 19 text

アンマウントをして、テンポラリのマウントポイントを削除 ・アンマウント umount /mnt/log umount /mnt/var umount /mnt/home umount /swap df -kh ・仮マウントポイントを削除 rm -rf /mnt/log rm -rf /mnt/var rm -rf /mnt/home ls -la /mnt/ テンポラリはデータを移管・コピーする ためだったので紛らわしくなりますので 削除。

Slide 20

Slide 20 text

マウントポイントを新しく作った EBSに切り替える準備と確認をします。 # 念のため設定ファイルをバックアップ cp -rp /etc/fstab /root/fstab.org vi /etc/fstab # 変更して保存 diff /etc/fstab /root/fstab.org # マウント確認 mount -a df -kh # 別のターミナルを起動して接続を確認 ssh **** この時、SSHを新しいターミナル等で 起動を行って接続出来ることを確認 しておくと安心できます。 /etc/rd.localに以下を追記 swapon /swap/swapfile swapの有効化を確認 sh /etc/rc.local 確認が出来たら、OSを再起動

Slide 21

Slide 21 text

まとめ ◆運用面 ・LVMの利用によって、スナップショットを減らし運用を楽に ・増減を行うときも無停止にできる(OS再起動も不要になり、手間が減る) ◆技術面 ・過去にHWで行っていた事がAWSでも使えることを知れる ・技術的編纂を知ることができる。

Slide 22

Slide 22 text

Fin. ご清聴ありがとうございました。