前回、RDXのRedHatLinuxでのフォーマットを行いました。
今回はこちらにRedHatLinux8でのxfsdumpのフルバックアップとリストアの検証をしてみます。
LVMのファイルシステムでのバックアップと復旧をしてみます。
まず前提としてファイルシステムは以下のようになっています。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# df -T ファイルシス タイプ 1K-ブロック 使用 使用可 使用% マウント位置 devtmpfs devtmpfs 3917124 0 3917124 0% /dev tmpfs tmpfs 3950092 0 3950092 0% /dev/shm tmpfs tmpfs 3950092 18204 3931888 1% /run tmpfs tmpfs 3950092 0 3950092 0% /sys/fs/cgroup /dev/mapper/rhel-root xfs 73364480 7345488 66018992 11% / /dev/mapper/rhel-home xfs 73573276 657848 72915428 1% /home /dev/sda1 xfs 1038336 255088 783248 25% /boot tmpfs tmpfs 790016 1168 788848 1% /run/user/42 tmpfs tmpfs 790016 4636 785380 1% /run/user/0 |
こちらにswapのファイルシステムがあります。
1 2 3 4 5 6 7 8 |
# blkid /dev/sda1: UUID="6d36047d-1ce1-4a8f-85e3-26589e5ed7c5" BLOCK_SIZE="512" TYPE="xfs" PARTUUID="ee97930a-01" /dev/sda2: UUID="4botm6-IVnl-qyBn-LAav-i4GQ-OkWY-4sTIPo" TYPE="LVM2_member" PARTUUID="ee97930a-02" /dev/mapper/rhel-root: UUID="fb466c37-309f-4801-a5ac-55d49127911c" BLOCK_SIZE="512" TYPE="xfs" /dev/mapper/rhel-swap: UUID="e93b1b14-da64-42cc-9535-32630a38c5f5" TYPE="swap" /dev/mapper/rhel-home: UUID="4e24e529-bc88-4b5e-964b-3ba5cae505a3" BLOCK_SIZE="512" TYPE="xfs" |
バックアップが必要な領域は以下の3つです。(swapは構成情報だけ必要でバックアップは必要ありません。)
- /bootの「/dev/sda1」
- /の「/dev/mapper/rhel-root」
- /homeの「/dev/mapper/rhel-home」
こちらはパーテション構成によって変わります。
今回はこちらのフルバックアップを行います。
前提として「/mnt/rdx」に十分な量のRDXでのDiskをマウントしています。
また、「xfsdump」が必要になりますので無い場合は以下でインストールが必要です。
1 2 3 |
# dnf -y install xfsdump |
フルバックアップと情報の保存
まず、disk構成を確認するために以下の確認と保存を行います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# fdisk -l ディスク /dev/sda: 149.1 GiB, 160041885696 バイト, 312581808 セクタ 単位: セクタ (1 * 512 = 512 バイト) セクタサイズ (論理 / 物理): 512 バイト / 512 バイト I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト ディスクラベルのタイプ: dos ディスク識別子: 0xee97930a デバイス 起動 開始位置 終了位置 セクタ サイズ Id タイプ /dev/sda1 * 2048 2099199 2097152 1G 83 Linux /dev/sda2 2099200 312580095 310480896 148.1G 8e Linux LVM ディスク /dev/sdc: 596.2 GiB, 640135028736 バイト, 1250263728 セクタ 単位: セクタ (1 * 512 = 512 バイト) セクタサイズ (論理 / 物理): 512 バイト / 512 バイト I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト ディスクラベルのタイプ: dos ディスク識別子: 0xa342f6d4 デバイス 起動 開始位置 終了位置 セクタ サイズ Id タイプ /dev/sdc1 2048 1250260991 1250258944 596.2G 7 HPFS/NTFS/exFAT ディスク /dev/mapper/rhel-root: 70 GiB, 75161927680 バイト, 146800640 セクタ 単位: セクタ (1 * 512 = 512 バイト) セクタサイズ (論理 / 物理): 512 バイト / 512 バイト I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト ディスク /dev/mapper/rhel-swap: 7.9 GiB, 8426356736 バイト, 16457728 セクタ 単位: セクタ (1 * 512 = 512 バイト) セクタサイズ (論理 / 物理): 512 バイト / 512 バイト I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト ディスク /dev/mapper/rhel-home: 70.2 GiB, 75375837184 バイト, 147218432 セクタ 単位: セクタ (1 * 512 = 512 バイト) セクタサイズ (論理 / 物理): 512 バイト / 512 バイト I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト ディスク /dev/sdb: 465.8 GiB, 500103667712 バイト, 976764976 セクタ 単位: セクタ (1 * 512 = 512 バイト) セクタサイズ (論理 / 物理): 512 バイト / 512 バイト I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト ディスクラベルのタイプ: dos ディスク識別子: 0x00000000 デバイス 起動 開始位置 終了位置 セクタ サイズ Id タイプ /dev/sdb1 2048 976764975 976762928 465.8G 83 Linux # fdisk -l > /mnt/rdx/fdisk.txt |
以下の部分が重要になります。
1 2 3 4 5 |
デバイス 起動 開始位置 終了位置 セクタ サイズ Id タイプ /dev/sda1 * 2048 2099199 2097152 1G 83 Linux /dev/sda2 2099200 312580095 310480896 148.1G 8e Linux LVM |
こちらを控えてきます。
UUIDの保存を行います。
1 2 3 |
# blkid > /mnt/rdx/blkid.txt |
次にLVMの情報を保存します。
1 2 3 |
# vgcfgbackup -f /mnt/rdx/lvm_cfg.txt |
最後にバックアップ必要な領域のバックアップを行います。
1 2 3 4 5 |
# xfsdump -l0 - /dev/sda1 | gzip -9 > /mnt/rdx/sda1.dump.gz # xfsdump -l0 - /dev/mapper/rhel-root | gzip -9 > /mnt/rdx/rhel-root.dump.gz # xfsdump -l0 - /dev/mapper/rhel-home | gzip -9 > /mnt/rdx/rhel-home.dump.gz |
バックアップ実施のログとしては以下のように出ます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# xfsdump -l0 - /dev/mapper/rhel-root | gzip -9 > /mnt/rdx/rhel-root.dump.gz xfsdump: using file dump (drive_simple) strategy xfsdump: version 3.1.8 (dump format 3.0) xfsdump: WARNING: most recent level 0 dump was interrupted, but not resuming that dump since resume (-R) option not specified xfsdump: level 0 dump of hoge:/ xfsdump: dump date: Thu Jul 1 13:53:46 2021 xfsdump: session id: e7533035-51e0-402a-aedb-f6914492372a xfsdump: session label: "" xfsdump: ino map phase 1: constructing initial dump list xfsdump: ino map phase 2: skipping (no pruning necessary) xfsdump: ino map phase 3: skipping (only one dump stream) xfsdump: ino map construction complete xfsdump: estimated dump size: 6892309824 bytes xfsdump: creating dump session media file 0 (media 0, file 0) xfsdump: dumping ino map xfsdump: dumping directories xfsdump: dumping non-directory files xfsdump: ending media file xfsdump: media file size 6708425184 bytes xfsdump: dump size (non-dir files) : 6602950016 bytes xfsdump: dump complete: 698 seconds elapsed xfsdump: Dump Status: SUCCESS |
こちらでシステムのバックアップは完了です。
バックアップデータのリストア
今回はDiskが壊れた想定でデータのリストアを行います。
実際には起動に必要なファイルなどが壊れただけの場合はパーテション情報やLVMの情報は保存されています。
まずメディアなどからBootしてレスキューモードに入ります。
メディアからの起動では起動時に「Troubleshooting」を選択し、「Rescue a Red Hat Enterprise Linux system」をクリックすることでレスキューモードに入れます。
既存のDiskをマウントするか選択できますので、3番の「Skip to shell」を選択してマウントをせずに起動を行います。
起動後にRDX装置をマウントし「/mnt/rdx」としてマウントしています。
1 2 3 4 5 |
# ls /dev/sd* # mkdir /mnt/rdx # mount /dev/sdc1 /mnt/rdx |
次にfdiskでパーテションの作成を行います。(完全にパーティション情報残っていればパーティションの作成を飛ばしても構いません)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
# fdisk /dev/sda コマンド (m でヘルプ): p ディスク /dev/sda: 149.1 GiB, 160041885696 バイト, 312581808 セクタ 単位: セクタ (1 * 512 = 512 バイト) セクタサイズ (論理 / 物理): 512 バイト / 512 バイト I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト ディスクラベルのタイプ: dos ディスク識別子: 0xee97930a コマンド (m でヘルプ): n パーティションタイプ p 基本パーティション (0 プライマリ, 0 拡張, 4 空き) e 拡張領域 (論理パーティションが入ります) 選択 (既定値 p): p パーティション番号 (1-4, 既定値 1): 最初のセクタ (2048-312581807, 既定値 2048): 最終セクタ, +セクタ番号 または +サイズ{K,M,G,T,P} (2048-312581807, 既定値 312581807): 2099199 新しいパーティション 1 をタイプ Linux、サイズ 1 GiB で作成しました。 コマンド (m でヘルプ): p ディスク /dev/sda: 149.1 GiB, 160041885696 バイト, 312581808 セクタ 単位: セクタ (1 * 512 = 512 バイト) セクタサイズ (論理 / 物理): 512 バイト / 512 バイト I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト ディスクラベルのタイプ: dos ディスク識別子: 0xee97930a デバイス 起動 開始位置 終了位置 セクタ サイズ Id タイプ /dev/sda1 2048 2099199 2097152 1G 83 Linux パーティション 1 にあるファイルシステム/RAIDの署名が完全に消去されます。 コマンド (m でヘルプ): n パーティションタイプ p 基本パーティション (1 プライマリ, 0 拡張, 3 空き) e 拡張領域 (論理パーティションが入ります) 選択 (既定値 p): 既定の回答 p であるものとみなします。 パーティション番号 (2-4, 既定値 2):2 最初のセクタ (2099200-312581807, 既定値 2099200): 最終セクタ, +セクタ番号 または +サイズ{K,M,G,T,P} (2099200-312581807, 既定値 312581807): 312580095 新しいパーティション 2 をタイプ Linux、サイズ 148.1 GiB で作成しました。 コマンド (m でヘルプ): p ディスク /dev/sda: 149.1 GiB, 160041885696 バイト, 312581808 セクタ 単位: セクタ (1 * 512 = 512 バイト) セクタサイズ (論理 / 物理): 512 バイト / 512 バイト I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト ディスクラベルのタイプ: dos ディスク識別子: 0xee97930a デバイス 起動 開始位置 終了位置 セクタ サイズ Id タイプ /dev/sda1 2048 2099199 2097152 1G 83 Linux /dev/sda2 2099200 312580095 310480896 148.1G 83 Linux コマンド (m でヘルプ): t パーティション番号 (1,2, 既定値 2): 2 16 進数コード (L で利用可能なコードを一覧表示します): L 0 空 24 NEC DOS 81 Minix / 古い Li bf Solaris 1 FAT12 27 隠し NTFS WinRE 82 Linux スワップ c1 DRDOS/sec (FAT- 2 XENIX root 39 Plan 9 83 Linux c4 DRDOS/sec (FAT- 3 XENIX usr 3c PartitionMagic 84 隠し OS/2 また c6 DRDOS/sec (FAT- 4 FAT16 <32M 40 Venix 80286 85 Linux 拡張領域 c7 Syrinx 5 拡張領域 41 PPC PReP Boot 86 NTFS ボリューム da 非 FS データ 6 FAT16 42 SFS 87 NTFS ボリューム db CP/M / CTOS / . 7 HPFS/NTFS/exFAT 4d QNX4.x 88 Linux プレーン de Dell ユーティリ 8 AIX 4e QNX4.x 第2パー 8e Linux LVM df BootIt 9 AIX 起動可能 4f QNX4.x 第3パー 93 Amoeba e1 DOS access a OS/2 ブートマネ 50 OnTrack DM 94 Amoeba BBT e3 DOS R/O b W95 FAT32 51 OnTrack DM6 Aux 9f BSD/OS e4 SpeedStor c W95 FAT32 (LBA) 52 CP/M a0 IBM Thinkpad ハ ea Rufus alignment e W95 FAT16 (LBA) 53 OnTrack DM6 Aux a5 FreeBSD eb BeOS fs f W95 拡張領域 (L 54 OnTrackDM6 a6 OpenBSD ee GPT 10 OPUS 55 EZ-Drive a7 NeXTSTEP ef EFI (FAT-12/16/ 11 隠し FAT12 56 Golden Bow a8 Darwin UFS f0 Linux/PA-RISC 12 Compaq 診断 5c Priam Edisk a9 NetBSD f1 SpeedStor 14 隠し FAT16 <32M 61 SpeedStor ab Darwin ブート f4 SpeedStor 16 隠し FAT16 63 GNU HURD または af HFS / HFS+ f2 DOS セカンダリ 17 隠し HPFS/NTFS 64 Novell Netware b7 BSDI fs fb VMware VMFS 18 AST SmartSleep 65 Novell Netware b8 BSDI スワップ fc VMware VMKCORE 1b 隠し W95 FAT32 70 DiskSecure Mult bb 隠し Boot Wizar fd Linux raid 自動 1c 隠し W95 FAT32 75 PC/IX bc Acronis FAT32 L fe LANstep 1e 隠し W95 FAT16 80 古い Minix be Solaris ブート ff BBT 16 進数コード (L で利用可能なコードを一覧表示します): 8e パーティションのタイプを 'Linux' から 'Linux LVM' に変更しました。 コマンド (m でヘルプ): p ディスク /dev/sda: 149.1 GiB, 160041885696 バイト, 312581808 セクタ 単位: セクタ (1 * 512 = 512 バイト) セクタサイズ (論理 / 物理): 512 バイト / 512 バイト I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト ディスクラベルのタイプ: dos ディスク識別子: 0xee97930a デバイス 起動 開始位置 終了位置 セクタ サイズ Id タイプ /dev/sda1 2048 2099199 2097152 1G 83 Linux /dev/sda2 2099200 312580095 310480896 148.1G 8e Linux LVM |
少し長いですが、最後の状態が上の方のパーティションと一緒になるようにします。
最後に「w」で構成情報を保存して終了します。
次にLVMの情報を確認します。
1 2 3 4 5 |
# pvdisplay # vgdisplay # lvdisplay |
こちらで構成情報がないことを確認します。もしあれば「pvremove」「vgremove」「lvremove」などのコマンドで削除してしまいます。(完全に構成情報残っていれば構成情報の復旧の手順を飛ばしても構いません。)
そして、LVMの情報の復旧を行います。
1 2 3 4 5 6 |
pvcreate --uuid 4botm6-IVnl-qyBn-LAav-i4GQ-OkWY-4sTIPo --restorefile /mnt/rdx/lvm_cfg.txt /dev/sda2 vgcfgrestore -f /mnt/rdx/lvm_cfg.txt rhel vgchange -ay rhel |
UUIDなど控えておく必要ありますが、「/mnt/rdx/lvm_cfg.txt」の中にもありますので、「more /mnt/rdx/lvm_cfg.txt」などでその場で確認しても大丈夫です。
LVMの構成情報が復帰したので以下のコマンドでファイルシステムの作成を行います。
1 2 3 4 5 6 7 8 9 10 11 12 |
# mkfs.xfs -f /dev/sda1 # xfs_admin -U 6d36047d-1ce1-4a8f-85e3-26589e5ed7c5 /dev/sda1 # mkfs.xfs -f /dev/mapper/rhel-root # xfs_admin -U fb466c37-309f-4801-a5ac-55d49127911c /dev/mapper/rhel-root # mkfs.xfs -f /dev/mapper/rhel-home # xfs_admin -U 4e24e529-bc88-4b5e-964b-3ba5cae505a3 /dev/mapper/rhel-home # mkswap -U e93b1b14-da64-42cc-9535-32630a38c5f5 /dev/mapper/rhel-swap |
UUIDは「/mnt/rdx/blkid.txt」に記載ありますので「more /mnt/rdx/blkid.txt」などでその場で確認しても大丈夫です。
そして、最後にバックアップデータからの復旧を行います。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# mkdir /mnt/boot # mkdir /mnt/root # mkdir /mnt/home # mount /dev/sda1 /mnt/boot # mount /dev/mapper/rhel-root /mnt/root # mount /dev/mapper/rhel-home /mnt/home # zcat /mnt/sda1.dump.gz | xfsrestore - /mnt/boot # zcat /mnt/rhel-root.dump.gz | xfsrestore - /mnt/root # zcat /mnt/rhel-home.dump.gz | xfsrestore - /mnt/home |
こちらでデータの復旧が完了となります。
再起動をすれば無事システムが起動されているはずです。
あまり実施したくないオペレーションではありますがOS標準の機能だけで、もしもの際に備えておくことができます。
このブログは株式会社CoLabMixによる技術ブログです。
GCP、AWSなどでのインフラ構築・運用や、クローリング・分析・検索などを主体とした開発を行なっています。
Ruby on RailsやDjango、Pythonなどの開発依頼などお気軽にお声がけください。
開発パートナーを増やしたいという企業と積極的に繋がっていきたいです。
お問い合わせやご依頼・ご相談など