almalinux9(redhat9 clone)でefi利用のxfsフルバックアップとフルリストア

前にbios使ったVMでxfsdump/xfsrestore使ったリストアをやってみた。

業務でリクエスト受けているのは、実機が最近のものでbiosじゃなくてuefi使う。

VMのefiでもリストアうまくいくかを検証してみた。

最後に実機で違ったことや、調べたことも少し入れといた。

efi使ってVM用意する

uefiと何がちゃうんやろ?
ここに書いてた。

へぇ、intelとhpが最初のを作ったんや。
2005年頃にuefiになってMBRじゃなくGPT使えるようになったから、2TBオーバーのディスクを扱えるってか。
歴史はそこそこでええ。

VM用意してみると、パーティションはefi特有のパーティション構成になる。
efiのことあんまりよく知らなかったのでハマったから、biosのときの続きじゃなくて別枠でメモ書く。

vmwareってefi使えるんかなぁって軽く探したらすぐ出てきた。

『vmware / VM Workstation PlayerをUEFIでブートする』
■ vmware / VM Workstation PlayerをUEFIでブートするvmxファイルに以下を追加firmware = "efi"(多分、元は、…

できるん知らんかった。作者さんありがとう。

biosはシンプルでええんやけど、今はuefiが主流かな。
それはサーバの梱包解いたときのお楽しみってことで。

efiになるとlinuxの場合はパーティション構成が少し変わる。
ダンプも変わる。
gcpとかaws使ってたらほとんど意識せんことやけど・・・。

たいへん参考になるサイトがあった。作者さんありがとう。
dvd起動した後のvmはテキストの切り貼りができないから、バックアップ置き場に入力したいコマンドラインを書いておいて実行してった。

Linux システムバックアップリストア(xfs dump restore) - きまぐれほげほげひろば

ついでに起動するときにefiのブートメニューに入るまでの待ち時間を5秒にするようvmxファイルの記述を足した。

firmware = "efi"
BIOS.BootDelay = "5000"

起動まで5秒待ってくれるので、F2キー連打せずに済む。

VMイメージを作る

bios版でやったときと同じようにインストールする。

alma9efi-xfsdump

違いはインストール先のディスクに/boot/efiって領域があること。

alma9efi-xfsdump

swapってパーティション今でもいるんかなぁ?

メモリの利用率が増えてディスクに読み書きするようになったら、ディスクがボトルネックになってシステム不安定になってまうとか。

なくてもよさげやけど、いったんパーティション自動作成したら20GBのディスクを適当に割ってくれてた。

インストール普通に終わって30GBのディスク作っておき、GUIログインして/backupのパーティションも作っておき、ディスクの状態見たらこうなってる。

[root@localhost backup]# df -hT
ファイルシス               タイプ   サイズ  使用  残り 使用% マウント位置
devtmpfs                   devtmpfs   4.0M     0  4.0M    0% /dev
tmpfs                      tmpfs      1.9G     0  1.9G    0% /dev/shm
tmpfs                      tmpfs      775M  9.6M  765M    2% /run
/dev/mapper/almalinux-root xfs         17G  4.9G   12G   30% /
/dev/nvme0n1p2             xfs        960M  261M  700M   28% /boot
/dev/nvme0n1p1             vfat       599M  7.1M  592M    2% /boot/efi
/dev/nvme0n2               ext4        30G  3.1G   25G   11% /backup
tmpfs                      tmpfs      388M   96K  388M    1% /run/user/1000
[root@localhost backup]# 

/bootと/boot/efiってのがあって、/boot/efiはvfatってあるからwindowsのfat32とかかな。

前にbios版でやったのとほぼ同じことをやってく。

  1. システムの更新(dnf update)
  2. git/xfsdumpインストール(入ってた)
  3. selinuxの無効化(SELINUX=disabledにする)とOS再起動
  4. gitクローン(対象はなんでもよくてwinmerge取った)
  5. ディスクの情報バックアップ(fdisk/parted/blkid/parted/vgcfgbackup)
  6. LVMの状態バックアップ(pvdisplay/vgdisplay/lvdisplay)
  7. システムの状態バックアップ(systemctlのリストと、dnfのリスト)
  8. efi関連の設定

長いログは省略するけど、やってみたのはこんな感じ。

[root@localhost backup]# dnf update ★システムの更新
 :(中略)
[root@localhost backup]# dnf install xfsdump ★インストール
メタデータの期限切れの最終確認: 0:01:15 前の 2023年12月09日 04時30分22秒 に実施しました。
パッケージ xfsdump-3.1.12-3.el9.x86_64 は既にインストールされています。
依存関係が解決しました。
行うべきことはありません。
完了しました!
[root@localhost backup]# dnf install git ★インストール
 :(中略)
[root@localhost backup]# vi /etc/sysconfig/selinux ★selinuxの無効化とOS再起動
 :(中略)
[root@localhost backup]# cat /etc/sysconfig/selinux | grep SELINUX=dis
# NOTE: Up to RHEL 8 release included, SELINUX=disabled would also
SELINUX=disabled
[root@localhost backup]# shutdown -r now
 :(中略)
[nari@localhost ~]$ git clone https://github.com/WinMerge/winmerge.git ★gitクローン
Cloning into 'winmerge'...
remote: Enumerating objects: 147722, done.
remote: Counting objects: 100% (1938/1938), done.
remote: Compressing objects: 100% (169/169), done.
remote: Total 147722 (delta 1837), reused 1803 (delta 1769), pack-reused 145784
Receiving objects: 100% (147722/147722), 470.07 MiB | 25.62 MiB/s, done.
Resolving deltas: 100% (71905/71905), done.
[nari@localhost ~]$ 
[nari@localhost ~]$ su - 
パスワード:
[root@localhost ~]# cd /backup
[root@localhost backup]# cp -pR /home/nari/winmerge /backup/
[root@localhost backup]# fdisk -l > ./fdisk.txt ★ディスク情報のバックアップ
[root@localhost backup]# parted -l > ./parted.txt ★ディスク情報のバックアップ
[root@localhost backup]# blkid | sort > ./blkid.txt ★ディスク情報のバックアップ
[root@localhost backup]# cp -p /etc/fstab ./fstab.txt ★ディスク情報のバックアップ
[root@localhost backup]# vgcfgbackup -f /backup/vgcfgbackup.txt ★LVMの状態バックアップ
  Volume group "almalinux" successfully backed up.

[root@localhost backup]# systemctl list-unit-files -t service | grep enabled > /backup/systemctlList.txt ★システムの状態バックアップ
[root@localhost backup]# dnf list --installed > dnf.txt ★システムの状態バックアップ
[root@localhost backup]# pvdisplay > ./pvdisplay.txt ★LVMの状態バックアップ
[root@localhost backup]# vgdisplay > ./vgdisplay.txt ★LVMの状態バックアップ
[root@localhost backup]# lvdisplay > ./lvdisplay.txt ★LVMの状態バックアップ
[root@localhost backup]# efibootmgr -v > efibootmgr.txt ★efi関連の設定
[root@localhost backup]# cat /boot/efi/EFI/almalinux/grub.cfg > grub.txt ★efi関連の設定
[root@localhost backup]# 
[root@localhost backup]# ls -l *.txt 
-rw-r--r--. 1 root root    627 12月 13 05:42 blkid.txt
-rw-r--r--. 1 root root 110152 12月 10 05:49 dnf.txt
-rw-r--r--  1 root root    614 12月 12 17:34 efibootmgr.txt
-rw-r--r--. 1 root root   1514 12月 10 05:48 fdisk.txt
-rw-r--r--. 1 root root    880 12月 10 05:26 fstab.txt
-rw-r--r--  1 root root    144 12月 12 17:35 grub.txt
-rw-r--r--. 1 root root   1178 12月 10 05:49 lvdisplay.txt
-rw-r--r--. 1 root root    774 12月 10 05:48 parted.txt
-rw-r--r--. 1 root root    378 12月 10 05:49 pvdisplay.txt
-rw-r--r--. 1 root root   3286 12月 10 05:48 systemctlList.txt
-rw-------  1 root root   1842 12月 10 05:48 vgcfgbackup.txt
-rw-r--r--. 1 root root    625 12月 10 05:49 vgdisplay.txt
[root@localhost backup]# 

ディスクの状態

biosのときとはefiは違ってるのでリストしてみる。

fdisk

fdiskで見てみた。

biosのときは/dev/nvme0n1のp1とp2で/bootと/の2つやった。

デバイス       起動 開始位置 終了位置   セクタ サイズ Id タイプ
/dev/nvme0n1p1 *        2048  2099199  2097152     1G 83 Linux
/dev/nvme0n1p2       2099200 41943039 39843840    19G 8e Linux LVM

efiのときは/dev/nvme0n1のp1とp2とp3で/boot/efiと/bootと/の3つになってる。

デバイス       開始位置 終了位置   セクタ サイズ タイプ
/dev/nvme0n1p1     2048  1230847  1228800   600M EFI システム
/dev/nvme0n1p2  1230848  3327999  2097152     1G Linux ファイルシステム
/dev/nvme0n1p3  3328000 41940991 38612992  18.4G Linux LVM

ファイルシステムとしてはこうなってて、/boot/efiがvfatとして存在する。
バックアップとリストアするときのファイルシステムはvfatのが増えてる。

[root@localhost backup]# df -hT | egrep 'nvme|root' | sort 
/dev/mapper/almalinux-root xfs         17G  4.8G   12G   29% /
/dev/nvme0n1p1             vfat       599M  7.1M  592M    2% /boot/efi
/dev/nvme0n1p2             xfs        960M  261M  700M   28% /boot
/dev/nvme0n2               ext4        30G  3.6G   25G   13% /bakcup
[root@localhost backup]# 

parted

partedだとこう。
fdiskでは30GBで見えてるしvmwareで作ったときもそうやったんやけど、なんでbackupが32GBなんやろなぁ。

[root@localhost backup]# cat parted.txt 
モデル: VMware Virtual NVMe Disk (nvme)
ディスク /dev/nvme0n1: 21.5GB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: gpt
ディスクフラグ: 

番号  開始    終了    サイズ  ファイルシステム  名前                  フラグ
 1    1049kB  630MB   629MB   fat32             EFI System Partition  boot, esp
 2    630MB   1704MB  1074MB  xfs
 3    1704MB  21.5GB  19.8GB                                          lvm


モデル: VMware Virtual NVMe Disk (nvme)
ディスク /dev/nvme0n2: 32.2GB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: loop
ディスクフラグ: 

番号  開始   終了    サイズ  ファイルシステム  フラグ
 1    0.00B  32.2GB  32.2GB  ext4

blkid

そんなコマンドあるんやって今回初めて知った。
UUID読みにくいけど、中はこんななってた。

[root@localhost backup]# cat blkid.txt 
/dev/mapper/almalinux-root: UUID="a3818a0a-f2d6-4bc1-8f64-a9df795a28ed" TYPE="xfs"
/dev/mapper/almalinux-swap: UUID="576310bb-b209-4655-a011-fd57f840ca47" TYPE="swap"
/dev/nvme0n1p1: UUID="94FB-35B4" TYPE="vfat" PARTLABEL="EFI System Partition" PARTUUID="c57bce63-f53b-4c1b-bc18-92943b78b805"
/dev/nvme0n1p2: UUID="125bd3d4-df1d-413c-8a4c-a91028a9ddba" TYPE="xfs" PARTUUID="90299a72-0218-4580-b967-358dbbf3adf2"
/dev/nvme0n1p3: UUID="35gX10-p6hm-VMZE-2ebr-peBW-VwZ5-oiHWf7" TYPE="LVM2_member" PARTUUID="931ce558-9cb4-4913-9bc6-3b77d4d226c1"
/dev/nvme0n2: LABEL="backup2" UUID="847041eb-6cd2-4f34-82d1-9935d5155516" TYPE="ext4"
[root@localhost backup]# 

LVMのための構成情報

vgcfgbackupってのも今回初めて見た。
こうなってた。

[root@localhost backup]# cat /backup/vgcfgbackup.txt 
# Generated by LVM2 version 2.03.21(2) (2023-04-21): Sat Dec  9 04:34:14 2023

contents = "Text Format Volume Group"
version = 1

description = "vgcfgbackup -f /backup/vgcfgbackup.txt"

creation_host = "localhost.localdomain"    # Linux localhost.localdomain 5.14.0-362.8.1.el9_3.x86_64 #1 SMP PREEMPT_DYNAMIC Tue Nov 7 14:54:22 EST 2023 x86_64
creation_time = 1702064054    # Sat Dec  9 04:34:14 2023

almalinux {
    id = "kIl9Y6-AKy9-PUja-bujW-ppPs-6uKs-GwKVMV"
    seqno = 3
    format = "lvm2"         # informational
    status = ["RESIZEABLE", "READ", "WRITE"]
    flags = []
    extent_size = 8192      # 4 Megabytes
    max_lv = 0
    max_pv = 0
    metadata_copies = 0

    physical_volumes {

        pv0 {
            id = "35gX10-p6hm-VMZE-2ebr-peBW-VwZ5-oiHWf7"
            device = "/dev/nvme0n1p3"   # Hint only

            device_id_type = "sys_wwid"
            device_id = "eui.246f796db70a6b4f000c29611d35befd"
            status = ["ALLOCATABLE"]
            flags = []
            dev_size = 38612992 # 18.4121 Gigabytes
            pe_start = 2048
            pe_count = 4713 # 18.4102 Gigabytes
        }
    }

    logical_volumes {

        root {
            id = "FZjk3c-LC0O-YIAQ-seAS-INs1-Bgm2-xHvJGf"
            status = ["READ", "WRITE", "VISIBLE"]
            flags = []
            creation_time = 1702062416  # 2023-12-09 04:06:56 +0900
            creation_host = "localhost.localdomain"
            segment_count = 1

            segment1 {
                start_extent = 0
                extent_count = 4201 # 16.4102 Gigabytes

                type = "striped"
                stripe_count = 1    # linear

                stripes = [
                    "pv0", 0
                ]
            }
        }

        swap {
            id = "ugY770-CPhs-fwDX-ZYXW-HqyN-HNfm-HhjdWr"
            status = ["READ", "WRITE", "VISIBLE"]
            flags = []
            creation_time = 1702062416  # 2023-12-09 04:06:56 +0900
            creation_host = "localhost.localdomain"
            segment_count = 1

            segment1 {
                start_extent = 0
                extent_count = 512  # 2 Gigabytes

                type = "striped"
                stripe_count = 1    # linear

                stripes = [
                    "pv0", 4201
                ]
            }
        }
    }

}
[root@localhost backup]# 

pvdisplay/vgdisplay/lvdisplay

ついでにpvdisplay/vgdisplay/lvdisplayの結果。
中にalmalinuxって書いてる箇所はredhat使ったらredhatってなってるんやろな。

[root@localhost backup]# cat pvdisplay.txt 
  --- Physical volume ---
  PV Name               /dev/nvme0n1p3
  VG Name               almalinux
  PV Size               18.41 GiB / not usable 2.00 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              4713
  Free PE               0
  Allocated PE          4713
  PV UUID               35gX10-p6hm-VMZE-2ebr-peBW-VwZ5-oiHWf7

[root@localhost backup]# 
[root@localhost backup]# cat vgdisplay.txt 
  --- Volume group ---
  VG Name               almalinux
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  3
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                2
  Open LV               2
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               18.41 GiB
  PE Size               4.00 MiB
  Total PE              4713
  Alloc PE / Size       4713 / 18.41 GiB
  Free  PE / Size       0 / 0   
  VG UUID               kIl9Y6-AKy9-PUja-bujW-ppPs-6uKs-GwKVMV

[root@localhost backup]# 
[root@localhost backup]# cat lvdisplay.txt 
  --- Logical volume ---
  LV Path                /dev/almalinux/root
  LV Name                root
  VG Name                almalinux
  LV UUID                FZjk3c-LC0O-YIAQ-seAS-INs1-Bgm2-xHvJGf
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2023-12-09 04:06:56 +0900
  LV Status              available
  # open                 1
  LV Size                16.41 GiB
  Current LE             4201
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0

  --- Logical volume ---
  LV Path                /dev/almalinux/swap
  LV Name                swap
  VG Name                almalinux
  LV UUID                ugY770-CPhs-fwDX-ZYXW-HqyN-HNfm-HhjdWr
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2023-12-09 04:06:56 +0900
  LV Status              available
  # open                 2
  LV Size                2.00 GiB
  Current LE             512
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:1

[root@localhost backup]# 

efiにある起動情報

efiにはefibootmgrってコマンドがあってそれ使う。
なるほど、起動順位設定みたいなのがある。

[root@localhost backup]# cat efibootmgr.txt 
BootCurrent: 0004
BootOrder: 0004,0001,0000,0002,0003
Boot0000* EFI VMware Virtual NVME Namespace (NSID 1)    PciRoot(0x0)/Pci(0x16,0x0)/Pci(0x0,0x0)/NVMe(0x1,00-00-00-00-00-00-00-00)
Boot0001* EFI VMware Virtual SATA CDROM Drive (1.0)    PciRoot(0x0)/Pci(0x11,0x0)/Pci(0x0,0x0)/Sata(1,0,0)
Boot0002* EFI Network    PciRoot(0x0)/Pci(0x15,0x0)/Pci(0x0,0x0)/MAC(00505623689f,1)
Boot0003* EFI Internal Shell (Unsupported option)    MemoryMapped(11,0xeb5a018,0xf07e017)/FvFile(c57ad6b7-0515-40a8-9d21-551652854e37)
Boot0004* AlmaLinux    HD(1,GPT,c57bce63-f53b-4c1b-bc18-92943b78b805,0x800,0x12c000)/File(\EFI\almalinux\shimx64.efi)
[root@localhost backup]# 

grub2を使ってるんやけど、その内容もバックアップしといた。
1行目のUUIDはパーティションとしての/bootを指定してるんやな。

[root@localhost backup]# cat grub.txt 
search --no-floppy --fs-uuid --set=dev 125bd3d4-df1d-413c-8a4c-a91028a9ddba
set prefix=($dev)/grub2

export $prefix
configfile $prefix/grub.cfg
[root@localhost backup]# 

念のためfstab

UUID入っててヤヤこしいなぁ。
/boot/efiはUUID短めなんやな。

[root@localhost backup]# cat /etc/fstab 

#
# /etc/fstab
# Created by anaconda on Fri Dec  8 19:06:59 2023
#
# Accessible filesystems, by reference, are maintained under '/dev/disk/'.
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
/dev/mapper/almalinux-root /                       xfs     defaults        0 0
UUID=125bd3d4-df1d-413c-8a4c-a91028a9ddba /boot                   xfs     defaults        0 0
UUID=94FB-35B4          /boot/efi               vfat    umask=0077,shortname=winnt 0 2
/dev/mapper/almalinux-swap none                    swap    defaults        0 0
/dev/disk/by-uuid/847041eb-6cd2-4f34-82d1-9935d5155516 /backup auto nosuid,nodev,nofail,x-gvfs-show 0 0
[root@localhost backup]# 

あとでわかったんやけど、UUID書いてる2行はデバイス名書いてもええらしい。
blkidの結果とdfの結果で考えたらこんな感じ。

/dev/nvme0n1p2    /boot                   xfs     defaults        0 0
/dev/nvme0n1p1    /boot/efi               vfat    umask=0077,shortname=winnt 0 2

フルバックアップ

vfatのパーティションはxfsdumpやなくてtar使えばええ。

# xfsdump -l0 - /dev/mapper/almalinux-root | gzip -9 > /backup/root.gz
# cd /boot/efi
# tar czf /backup/boot_efi.tar.gz ./EFI/
# xfsdump -l0 - /dev/nvme0n1p2             | gzip -9 > /backup/boot.gz
[root@localhost backup]#  ls -lh /backup/* | egrep '.gz|tar'
-rw-r--r--.  1 root root 213M 12月 10 05:45 /backup/boot.gz
-rw-r--r--.  1 root root 7.0M 12月 10 05:45 /backup/boot_efi.tar
-rw-r--r--   1 root root 2.5M 12月 13 05:48 /backup/boot_efi.tar.gz
-rw-r--r--   1 root root 2.3G 12月 10 05:45 /backup/root.gz
[root@localhost backup]# 

xfsdumpしたときの結果はbiosのときと同じぐらい時間かかった。
root.gz作るのに389秒、boot.gzは6秒。
2つ目のtarしたときの結果。1秒で戻ってくる。

[root@localhost backup]# ls -lh /backup/* | egrep '.gz|tar' 
-rw-r--r--.  1 root root 213M 12月 10 05:45 /backup/boot.gz
-rw-r--r--.  1 root root 7.0M 12月 10 05:45 /backup/boot_efi.tar
-rw-r--r--   1 root root 2.3G 12月 10 05:45 /backup/root.gz
[root@localhost backup]# 

dvdブートとリストアの準備

efiの設定画面に入ってブート順番をdvd優先にしとく。
ハイライトさせてからテンキーの「+」とか押したら表示が上に上がる。

alma9efi-xfsdump

起動したらgrubの画面で選ぶ。
「Troubleshooting」、「Rescue a AlmaLinux system」、「3) Skip to shell」を選ぶ。

alma9efi-xfsdump

プロンプト待ちになったらenter押す。

alma9efi-xfsdump

バックアップを参照できるようにしとく

パーティション設定が残ってる。

alma9efi-xfsdump

backupってパーティション作っておいて、さっきバックアップしたデータを参照できるようにしとく。

alma9efi-xfsdump

今から使うコマンドラインも7つ作っといた。

LVMを初期化

LVMの設定を潰す。

やりなおしたいときはここからやったらええ。

lvremove /dev/almalinux/root
lvremove /dev/almalinux/swap
vgremove almalinux
pvremove /dev/nvme0n1p3

1つずつ入力すると打ち間違えあるし、1_lvmSettingDelって名前で作って準備しておきbackupフォルダに置いてあるのを動かした。

alma9efi-xfsdump

パーティションを初期化

作る予定のパーティション。

デバイス       開始位置 終了位置   セクタ サイズ タイプ
/dev/nvme0n1p1     2048  1230847  1228800   600M EFI システム
/dev/nvme0n1p2  1230848  3327999  2097152     1G Linux ファイルシステム
/dev/nvme0n1p3  3328000 41940991 38612992  18.4G Linux LVM

せっかくやからfdiskやなくてparted使ってみる。
対話側でのparted入力コマンドの意味はこんな感じ。

print        -> パーティションの状態表示(print)
mklabel gpt  -> gptでパーティションテーブルを構成する
mkpart "EFI System Partition" fat32 2048s 600MB 
             ->1つ目のvfatパーティション作る
set 1 esp on -> EFI System partitionのフラグを立てる
mkpart primary xfs  600MB 1600MB 
             -> 2つ目のパーティションを作る
mkpart primary xfs 1601MB 100% 
             -> 3つ目のパーティションを作る
set 3 lvm on -> 3つ目のパーティションにLVMのフラグを立てる(xfsの表記が消える)
quit

partedを対話型じゃなくてスクリプトに書いた内容はこんな感じ。
これでできるみたい。

parted -s -a optimal /dev/nvme0n1 -- mklabel gpt
parted -s -a optimal /dev/nvme0n1 -- mkpart EFI-partition fat32 2048s 601MB set 1 esp on
parted -s -a optimal /dev/nvme0n1 -- mkpart Boot-partition xfs   602MB 1602MB
parted -s -a optimal /dev/nvme0n1 -- mkpart LVM-partition  xfs  1603MB 100% set 3 lvm on

サイズが601MBとか1602MBとかしてるのは、partedで確認したとき微妙にサイズがスレるから。

600MB/1000MBの箇所を端数がない数字にしてみたかっただけ。
ま、ズレててもリストアはできるんやけどね。

スクリプトにして動かしてみたらできてるっぽい。

alma9efi-xfsdump

ブートのフラグもLVMのフラグもできとる、できとる。

alma9efi-xfsdump

LVMを復元

こんな内容を動かす。
uuidはblkidでLVM memberってなってた/dev/nvme0n1p3のパーティションを指定し、vgcfgbackupでとったlvmの構成情報をリカバリする。
vgchangeでアクティブにする。

pvcreate --uuid 35gX10-p6hm-VMZE-2ebr-peBW-VwZ5-oiHWf7 --restorefile /backup/vgcfgbackup.txt /dev/nvme0n1p3
vgcfgrestore -f /backup/vgcfgbackup.txt almalinux
vgchange -ay almalinux

動かすとこんな感じ。warning出るけどこの後で作るからかまへん。

alma9efi-xfsdump

ファイルシステム作る

/boot/efiをvfat、/bootとルートパーティションはxfsで作る。

mkfs.vfat -v -c -F32 -s2 /dev/nvme0n1p1

mkfs.xfs -f /dev/nvme0n1p2
xfs_admin -U 125bd3d4-df1d-413c-8a4c-a91028a9ddba /dev/nvme0n1p2

mkfs.xfs -f /dev/mapper/almalinux-root
xfs_admin -U 35gX10-p6hm-VMZE-2ebr-peBW-VwZ5-oiHWf7 /dev/mapper/almalinux-root

やってみたらこうなる。

alma9efi-xfsdump

ここまで来たら、リストアの準備が完了。

リストアする

バックアップしといたものをリストアする。
やったことないけど、linuxのtarってvfatでも使えるんかな。

mkdir /restore
mount -t xfs /dev/mapper/almalinux-root /restore
cd /restore
zcat /backup/root.gz | xfsrestore - ./

mount -t xfs /dev/nvme0n1p2 /restore/boot
cd /restore/boot
zcat /backup/boot.gz | xfsrestore - ./

mount -t vfat /dev/nvme0n1p1 /restore/boot/efi
cd /restore/boot/efi
tar xf /backup/boot_efi.tar
sync;sync;sync

動かしたらこうなる。
bios版のときと同じぐらい待つ。

alma9efi-xfsdump

/boot/efiについてのエコーバックなんもないけど、復旧はできてるっぽい。

alma9efi-xfsdump

EFIの復旧

参考サイト読ませてもらったとき、/boot/efiに設定するときchrootする必要があるってことを理解するのに時間かかった。

mount -t proc proc /restore/proc
mount --bind /dev  /restore/dev
mount -t sysfs sysfs /restore/sys
chroot /restore

リストアのための/restoreってパーティションを基点にしてrootで使いながら、efi関連設定をする必要があるらしい。
そういうもんということで理解しましょ。

ただ、これやると用意した/backupのパーティションが見えんくなるから用意したテキストが使えんなぁ。

数行でちょっとのことやしええか。
(ホンマは何回か入力間違いしてOSリストアの後起動できんかった)

efibootmgr -c -d /dev/nvme0n1 -p 1 -l '\EFI\almalinux\shimx64.efi' -L 'AlmaLinux'

実際にはもうちょっと設定する。
この起動設定でやってるパスの入力よく間違えてOS上がって来ないことあった。

入力してすぐ動かさず、ちゃんとチェックしなはれ。

# efibootmgr -v        # 設定確認
BootCurrent: 0004
BootOrder: 0004,0001,0000,0002,0003
Boot0000* EFI VMware Virtual NVME Namespace (NSID 1)    PciRoot(0x0)/Pci(0x16,0x0)/Pci(0x0,0x0)/NVMe(0x1,00-00-00-00-00-00-00-00)
Boot0001* EFI VMware Virtual SATA CDROM Drive (1.0)    PciRoot(0x0)/Pci(0x11,0x0)/Pci(0x0,0x0)/Sata(1,0,0)
Boot0002* EFI Network    PciRoot(0x0)/Pci(0x15,0x0)/Pci(0x0,0x0)/MAC(00505623689f,1)
Boot0003* EFI Internal Shell (Unsupported option)    MemoryMapped(11,0xeb5a018,0xf07e017)/FvFile(c57ad6b7-0515-40a8-9d21-551652854e37)
Boot0004* AlmaLinux    HD(1,GPT,c57bce63-f53b-4c1b-bc18-92943b78b805,0x800,0x12c000)/File(\EFI\almalinux\shimx64.efi)
Boot0005* EFI VMware Virtual NVME Namespace (NSID 2)    PciRoot(0x0)/Pci(0x16,0x0)/Pci(0x0,0x0)/NVMe(0x2,00-00-00-00-00-00-00-00)

# efibootmgr -b 5 -B 5  # dvdブートしたときに増えた起動設定の削除
# efibootmgr -b 4 -B 4  # alamlinux起動設定の削除

# efibootmgr -c -d /dev/nvme0n1 -p 1 -l '\EFI\almalinux\shimx64.efi' -L 'AlmaLinux'  #新しいほうのディスク見に行くようにする設定の追加
# efibootmgr -o 0004
# efibootmgr -t 5   #タイムアウトの設定

やってみるとこうなる。
まずは起動順序で不要なのを削除して、最後に作ったalma9のefiパーティションの情報を追加する。

alma9efi-xfsdump

ここでは4番目の登録情報をデフォルトにしたいから、その指定をつける。
ついでに起動まで5秒のインターバルつけてみる。

alma9efi-xfsdump

blkidの出力結果に、/boot/efiのパーティションにあるuuidが入ってることが見えたらOK。

alma9efi-xfsdump

grub設定の復旧

参考サイトにはこうあった。

# grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg

almalinux9でやってるので読み替えてファイルの内容確認すると、grub.cnfにはblkidにあるuuidがもう書いてあるように見えたのでここはスキップ。

alma9efi-xfsdump

fstab修正せなアカンのちゃうか

思い出したのが/etc/fstabにvfatのuuid書いてたはず。

alma9efi-xfsdump

この場合、fstabにある94FB-35B4ってあるのを7358-B27Dに修正せなアカンはず。レスキューモードはハデなvi画面やな。

alma9efi-xfsdump

最後にinitramfsのファイルをバックアップしといて作成しなおす。

# cd /boot/
# ls -l initramfs-*
# mv initramfs-5.14.0-362.8.1.el9_3.x86_64.img initramfs-5.14.0-362.8.1.el9_3.x86_64.img.ord
# dracut -f initramfs-5.14.0-362.8.1.el9_3.x86_64.img

# sync ; sync 
alma9efi-xfsdump

blkidの確認

blkidのUUIDの確認。

alma9efi-xfsdump

この辻褄があってないと起動に失敗する。
biosのときも数回失敗したし、今回のefiのときも5回ぐらいは失敗したけど・・・。

dvdブートするとキーボード配列が英字になってまうから、バックスラッシュ、コロンの入力とシングルクオートの入力がツライのな。

  1. /dev/nvme0n1p1のUUIDは/etc/fstabに書いてあるものとそろってる。
  2. /dev/nvme0n1p2と/dev/nvme0n1p3のUUIDはリカバリ前のものでファイルシステム作れてる。
  3. /dev/mapper/almalinux-rootは作り直したから変わってええ。

syncしてOS停止と起動

参考サイトに書いてあったけど、syncはやっといたほうがええよね。
chrootからexitする直前とshutdownの直前はsync

alma9efi-xfsdump

solarisのshutdownのときいっつも手順に書いてあったな。

いったんshutdownして、dvdを起動時にマウントしないようにvmの設定しておく。

さぁ、起動してみましょ!

alma9efi-xfsdump

起動できたら嬉しいもんや。

リストア後の確認

GUIログインしてrootユーザにsuできたから、認証情報はリカバリできとんな。

alma9efi-xfsdump

念のため確認してみた。
dfとblkidの結果も想定してるとおりなんやけど、あ、swap作るの忘れてる・・・。

partedで作るときのスクリプトが欠けとる。まぁ、ええか。

[nari@localhost ~]$ su - 
パスワード:
[root@localhost ~]# df -hT
ファイルシス               タイプ   サイズ  使用  残り 使用% マウント位置
devtmpfs                   devtmpfs   4.0M     0  4.0M    0% /dev
tmpfs                      tmpfs      1.9G     0  1.9G    0% /dev/shm
tmpfs                      tmpfs      775M  9.6M  765M    2% /run
/dev/mapper/almalinux-root xfs         17G  4.9G   12G   30% /
/dev/nvme0n2               ext4        30G  3.1G   25G   11% /backup
/dev/nvme0n1p2             xfs        890M  317M  574M   36% /boot
/dev/nvme0n1p1             vfat       568M  7.0M  561M    2% /boot/efi
tmpfs                      tmpfs      388M  104K  388M    1% /run/user/1000
[root@localhost ~]# 

blkidとfstab

blkidはリストア前とはちょっと違う。

[root@localhost ~]# blkid | sort
/dev/mapper/almalinux-root: UUID="bb2d3b6e-7a73-4066-bb57-5e95e4fa7d16" TYPE="xfs"
/dev/nvme0n1p1: UUID="7358-B27D" TYPE="vfat" PARTLABEL="EFI-partition" PARTUUID="04cc7476-4c80-4bf9-bd35-d8e7aa23d648"
/dev/nvme0n1p2: UUID="125bd3d4-df1d-413c-8a4c-a91028a9ddba" TYPE="xfs" PARTLABEL="Boot-partition" PARTUUID="ab8beff0-6fe9-42cd-8d3d-18f4ae036690"
/dev/nvme0n1p3: UUID="35gX10-p6hm-VMZE-2ebr-peBW-VwZ5-oiHWf7" TYPE="LVM2_member" PARTLABEL="LVM-partition" PARTUUID="acb523b8-4833-4cf7-ac57-68f9bd40c84e"
/dev/nvme0n2: LABEL="backup2" UUID="847041eb-6cd2-4f34-82d1-9935d5155516" TYPE="ext4"
[root@localhost ~]#

リストア直後にも目視確認はしたけどfstabも使えてるのはなんでやろなぁ。
swapのこと書いてるのに、パーティション作るの忘れてもOS起動に失敗せんのやなぁ・・・。

[root@localhost ~]# cat /etc/fstab | grep -v ^#

/dev/mapper/almalinux-root /                       xfs     defaults        0 0
UUID=125bd3d4-df1d-413c-8a4c-a91028a9ddba /boot                   xfs     defaults        0 0
UUID=7358-B27D             /boot/efi               vfat    umask=0077,shortname=winnt 0 2
/dev/mapper/almalinux-swap none                    swap    defaults        0 0
/dev/disk/by-uuid/847041eb-6cd2-4f34-82d1-9935d5155516 /backup auto nosuid,nodev,nofail,x-gvfs-show 0 0
[root@localhost ~]# 

fdiskとparted

gptではやってみたけど、fdiskも使えるみたい。

[root@localhost ~]# fdisk -l | grep nvme 
ディスク /dev/nvme0n1: 20 GiB, 21474836480 バイト, 41943040 セクタ
/dev/nvme0n1p1     2048  1173503  1171456   572M EFI システム
/dev/nvme0n1p2  1175552  3129343  1953792   954M Linux ファイルシステム
/dev/nvme0n1p3  3131392 41940991 38809600  18.5G Linux LVM
ディスク /dev/nvme0n2: 30 GiB, 32212254720 バイト, 62914560 セクタ
[root@localhost ~]# 
[root@localhost ~]# parted -l | grep MB
 1    1049kB  601MB   600MB   fat32             EFI-partition   boot, esp
 2    602MB   1602MB  1000MB  xfs               Boot-partition
 3    1603MB  21.5GB  19.9GB                    LVM-partition   lvm
[root@localhost ~]# 

LVMの状態確認

使えてるしよしとしとこっか。

[root@localhost ~]# lvdisplay
  --- Logical volume ---
  LV Path                /dev/almalinux/root
  LV Name                root
  VG Name                almalinux
  LV UUID                FZjk3c-LC0O-YIAQ-seAS-INs1-Bgm2-xHvJGf
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2023-12-09 04:06:56 +0900
  LV Status              available
  # open                 1
  LV Size                16.41 GiB
  Current LE             4201
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0

  --- Logical volume ---
  LV Path                /dev/almalinux/swap
  LV Name                swap
  VG Name                almalinux
  LV UUID                ugY770-CPhs-fwDX-ZYXW-HqyN-HNfm-HhjdWr
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2023-12-09 04:06:56 +0900
  LV Status              available
  # open                 0
  LV Size                2.00 GiB
  Current LE             512
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:1

[root@localhost backup]# vgdisplay 
  --- Volume group ---
  VG Name               almalinux
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  4
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                2
  Open LV               1
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               18.41 GiB
  PE Size               4.00 MiB
  Total PE              4713
  Alloc PE / Size       4713 / 18.41 GiB
  Free  PE / Size       0 / 0   
  VG UUID               kIl9Y6-AKy9-PUja-bujW-ppPs-6uKs-GwKVMV

[root@localhost ~]# pvdisplay
  --- Physical volume ---
  PV Name               /dev/nvme0n1p3
  VG Name               almalinux
  PV Size               18.41 GiB / not usable 2.00 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              4713
  Free PE               0
  Allocated PE          4713
  PV UUID               35gX10-p6hm-VMZE-2ebr-peBW-VwZ5-oiHWf7

[root@localhost ~]# 

efiの状態

どうしてリストが増えてるのかわからんかった。
4番目を作ったのがリストア直後で、そのあとに9番目まで増えとる。
swapパーティション作り忘れたからかもしれんけど、efiの理解がまだ足りんってことか。

[root@localhost ~]# efibootmgr -v 
BootCurrent: 0004
Timeout: 5 seconds
BootOrder: 0004,0005,0006,0007,0008,0009
Boot0000* EFI VMware Virtual NVME Namespace (NSID 1)    PciRoot(0x0)/Pci(0x16,0x0)/Pci(0x0,0x0)/NVMe(0x1,00-00-00-00-00-00-00-00)
Boot0001* EFI VMware Virtual SATA CDROM Drive (1.0)    PciRoot(0x0)/Pci(0x11,0x0)/Pci(0x0,0x0)/Sata(1,0,0)
Boot0002* EFI Network    PciRoot(0x0)/Pci(0x15,0x0)/Pci(0x0,0x0)/MAC(00505623689f,1)
Boot0003* EFI Internal Shell (Unsupported option)    MemoryMapped(11,0xeb5a018,0xf07e017)/FvFile(c57ad6b7-0515-40a8-9d21-551652854e37)
Boot0004* AlmaLinux    HD(1,GPT,04cc7476-4c80-4bf9-bd35-d8e7aa23d648,0x800,0x11e000)/File(\EFI\almalinux\shimx64.efi)
Boot0005* EFI VMware Virtual NVME Namespace (NSID 1)    PciRoot(0x0)/Pci(0x16,0x0)/Pci(0x0,0x0)/NVMe(0x1,00-00-00-00-00-00-00-00)
Boot0006* EFI VMware Virtual NVME Namespace (NSID 2)    PciRoot(0x0)/Pci(0x16,0x0)/Pci(0x0,0x0)/NVMe(0x2,00-00-00-00-00-00-00-00)
Boot0007* EFI VMware Virtual SATA CDROM Drive (1.0)    PciRoot(0x0)/Pci(0x11,0x0)/Pci(0x0,0x0)/Sata(1,0,0)
Boot0008* EFI Network    PciRoot(0x0)/Pci(0x15,0x0)/Pci(0x0,0x0)/MAC(00505623689f,1)
Boot0009* EFI Internal Shell (Unsupported option)    MemoryMapped(11,0xeb5a018,0xf07e017)/FvFile(c57ad6b7-0515-40a8-9d21-551652854e37)
[root@localhost ~]# 

モジュールとファイルとシステム状態

確認してみたら大丈夫っぽい。

[root@localhost ]# cd /backup
[root@localhost backup]# which xfsdump 
/usr/sbin/xfsdump
[root@localhost backup]# which git 
/usr/bin/git
[root@localhost backup]# getenforce 
Disabled
[root@localhost backup]# diff -r /backup/winmerge/ /home/nari/winmerge/
[root@localhost backup]# 
[root@localhost backup]# systemctl list-unit-files -t service | grep enabled > foo.txt
[root@localhost backup]# diff foo.txt systemctlList.txt 
[root@localhost backup]# 

OS起動できんかったり、英語配列キーボードで記号文字探したり、efiのリストアけっこうツラかったな。

そやけど、練習はできたから実務でもいけそうかな。

実機での顛末(リストア関連)

年末にお客様の実機を預かって実際にやってみた。

実機は2023年のものなでrdxドライブ使うから、そのあたりはalmalinux9(redhat9 clone)でxfsフルバックアップとフルリストアでやったこととほぼ同じことした。

守秘義務あるからログは入れられんけど、alma9では発生せずredhat9で発生した問題もあった。
ここでは実施のために調査した結果だけを入れてく。

練習できる物理マシンないから、クラウドの仮想マシンとローカルVMでリハーサルやっといてよかった。

redhatサブスクリプションの登録

サブスクリプションは利用権で、お金払うともらえるはず。
redhat特有の設定はお客様にお願いした。

自分でも調べたけど、実際はこんな感じの設定するはず。

subscrition-manager register --username <username> --password <passoword>

必要なサブスクリプションのプールID確認。

subscrition-manager list --available

表示されるプールIDをシステムに割り当てる。

subscrition-manager attach --pool=<pool_id>

ここまでやるとdnfでモジュール参照するインターネット上のリポジトリが見えるはず。

redhatのマイナーバージョンが上がらないようにリミッターつける

今はredhat9.3が今は最新やけど、ハードウェアサポート範囲の都合でもう少し古いのを使うことになった。
実際のモジュールやセキュリティアップデートは最新のマイナーバージョンに対して行われるはずやから、リミッターつけるのはあまりオススメできん。

dnfでアップグレードすると勝手に9.3になってまうから、そうならないように設定入れとく。例えば9.2の場合。

subscrition-manager release --set 9.2

確認はこうする。

subscrition-manager release --show

selinuxオンにする

お客様の社内ルールでlinuxホストのselinuxをオンにして使うリクエストがあった。

オフにして使うことしか今までなかったので、けっこうツラい。
何が普段通り使えんようになるのかまったく知らん・・・。

selinuxが出てきた当初、「なんやねんsshも繋がらんのかい!!」ってムカついたことあったし、今までの20年でオンにして使ってるお客様見たことない(たまたまかもな)。

やってみたら、ログのローテートで/var/log以外を使うとローテートしてくれんかった。rdxへのバックアップとリストアには影響なさそうやった。

時間なかったので仕方ないから、/var/logに専用のフォルダ作って置くことにしたら、ローテートできた。

リストアはスクリプト化してご提供

最初にマウントしてるところと、grubの起動順位設定だけは手動でやらなアカンけど、uuid間違わずに入力するのは苦しいはずやから、スクリプト化してuuidとかdevナントカを変数に定義しておき、6つの処理を1つずつ確認してもらいながら使ってもらうことにした。

流れはこんな感じで動かしてく。けっこう長いやん。

  1. インストールメディアで起動してレスキューモードに入りbash使う
  2. 日本語キーボード使う設定にする(# localectl set-keymap)
  3. バックアップ先のrdxをマウント

    👉以下、パーティションを完全に作り直す場合のみ実施。
  4. 新品のディスクに見立てるためLVM情報を潰す(lvremove/vgremove/pvremove – スクリプト1のおよその内容)
  5. パーティションを作成(parted – スクリプト2のおよその内容)

    👉最初は手動やったのをスクリプトにはこんな感じ。ローカルvmで練習作成した。
parted -s -a optimal /dev/sda -- mklabel gpt
parted -s -a optimal /dev/sda -- mkpart EFI-partition  fat32 2048s  601MB set 1 esp on
parted -s -a optimal /dev/sda -- mkpart Boot-partition xfs   602MB 1602MB
parted -s -a optimal /dev/sda -- mkpart LVM-partition  xfs  1603MB  100% set 3 lvm on
  1. LVMを構成情報から戻す(pvcreate/vgfcfgrestore/vgchange – スクリプト3のおよその内容)
  2. xfsでファイルシステム作る(mkfs/xfs_admin – スクリプト4のおよその内容)

    👉元あるディスクを使うときはrdxマウントした後ここから実施。


  3. 手動でLVM情報が見えることを確認実施(pvdisplay/vgdisplay/lvdisplay)
  4. もしLVM見えてないなら有効にする(vgchange)
  5. リストア用のマウントポイント作ってroot/boot/boot-efiの順番にリストア実施(xfsrestore/tar – スクリプト5のおよその内容)
  6. リストア用のマウントポイントを一時的にルートディレクトリにする(chroot – スクリプト6のおよその内容)

    👉以下、手動で実施。LVMとファイルシステムを作り直してなければ、リストアした結果そのまま使えるからチェックのみでええ。


  7. ブートオーダで見えるuuidの変更のためbootパーティションへの情報を削除してから再作成(efibootmgr)
  8. grub.cfgの中に見えるbootパーティションのuuidの情報とblkidの中のuuidをチェックする
  9. fstabにあるboot-efiパーティションのxxxx-xxxxってあるuuidをblkidコマンドで見えるyyyy-yyyyに更新する
  10. /boot/initramfs-xxを再作成(dracut)

リストア後の動作確認

バックアップとして以下の実行結果をそれぞれ取っておき(実際はバックアップスクリプトの中のxfsdumpしている箇所の前に書いてリダイレクトさせた)、リストア後に同じ内容を取得して保管フォルダごとwinmergeで比べた。

cat /etc/os-release
uname -n
ip a
cat /etc/hosts
cat /etc/resolv.conf
cat /etc/chrony.conf
parted -l
df -hT
cat /etc/fstab
cat /etc/passwd
cat /etc/group
systemctl  list-unit-files -t service | grep enabled
dnf list --installed
rpm -qa | sort
blkid | sort
pvdisplay
vgdisplay
lvdisplay
vgcfgbackup -f /tmp/aaa.txt
efibootmgr -v
cat /boot/efi/almalinux/grub.cfg
getenforce

たとえば実行結果にタイムスタンプが入るsystemctlやvgcfgbackupだったり、dracut使ったときbootパーティションにバックアップ作るからdfには差異出るけど、dnfの結果とかユーザ・グループのリストには違いが出ないはず。

その他、/etcの中の設定とかも必要なら比較したらいい。

web系のサーバやったら、nginxとかapacheの設定とか、dbサーバやったらmariadbとかpostgresqlの設定とかシステム状態を拾うsql用意してもええと思う。

dockerとかkubernetesをホストしてるなら、冪等性を信じてyamlファイルの定義の比較だけでもええかもね。

etcの中なら例えば、logrotate.d/ssh/yum.repos.dとかをtarで丸々取っといたらええ。

例えばこんな感じ。

BACKUP_DIR=/backup
mkdir -p $BACKUPDIR/ssh
cp -pR /etc/ssh/* $BACKUP_DIR/ssh/

cd $BACKUP_DIR
tar czf ssh.tar.gz ssh
rm -fR $BACKUP_DIR/ssh/

なんとxfsdumpでバグ?

redhat9をそのままインストールして使うと、xfsdumpでとったバックアップをxfsrestoreで戻したら、変な動きすることあるらしいってわかった。

フルバックアップのときには特に発生してへんかったけど、LVM潰さずにファイルシステムもそのままにしてresotoreフォルダの中をrmしてからリストアしたときに見つけた。

リストアでLVM設定が有効になってないことが・・・

何度かリカバリDVDで起動して復元してたら、たまたまかもしれんけどルートパーティションが入ったLVMが見えんくなってることがあった。

LVMのvgが有効になってないと、そのまま動かすとxfsrestoreで警告出まくる(/dev/mapper/redhat-rootなんかあらへんで!!とかいう感じ)。

見えてへんときは、新品ディスクにLVM作るときの最後のコマンドライン使ってこうする。

vgchange -ay almalinux

引数のalmalinuxはLVMのvg名。
vgcfgbackupで取っておいた設定の中にも書いてある。
pvdisplayしたときのVG Name。
バックアップにLVMの設定残してたからすぐ書けた。

これやってうまく行ったらこう戻ってくる。

3 logical volume(s) in volume group "almalinux" now active

クラウドのサーバばっかりやってるから、いろいろ新鮮やったな。

ホンマはxfsdump/xfsrestoreでlinuxを元に戻せるのかって検証が目的やったんやけど、色々と枝葉がついたもんや。

タイトルとURLをコピーしました