このページでは、ファームウェアとしてbiosを使用し、Linuxにてxfsファイルシステムを使用しているときのシステムバックアップリストア方法について記載しています。
xfsdumpを使用してファイルシステムイメージでバックアップしているので、OS付属のコマンドのみでバックアップリストアを実現し、aclやselinuxにも対応できます。(aclやselinuxの場合は権限の箇所を適時読み替えてください)
OS標準機能のみでバックアップリストアをしてみたい貧乏人もしくは玄人変人向けです。安全に確実に安定性を求めたバックアップをしたい人は大人しく製品を使用してください。このページを真似して損害が発生しても筆者は一切責任を負いません。
(こんな苦労しなくてもClonezillaというオープンソースもあります)
(この方法を記載するにあたり検証した環境は、KVMベースの仮想マシンに、OSはRocky Linux10です。RHEL10でも通用するはずです。以下のような構成です。)
# uname -a
Linux test-rocky10 6.12.0-55.12.1.el10_0.x86_64 #1 SMP PREEMPT_DYNAMIC Fri May 23 17:41:02 UTC 2025 x86_64 GNU/Linux
# cat /etc/redhat-release
Rocky Linux release 10.0 (Red Quartz)
# fdisk -l /dev/vda
Device Start End Sectors Size Type
/dev/vda1 2048 4095 2048 1M BIOS boot
/dev/vda2 4096 2101247 2097152 1G Linux extended boot
/dev/vda3 2101248 83884031 81782784 39G Linux LVM
# df
ファイルシス 1K-ブロック 使用 使用可 使用% マウント位置
/dev/mapper/rl-root 38682624 4686240 33996384 13% /
devtmpfs 4096 0 4096 0% /dev
tmpfs 1004280 0 1004280 0% /dev/shm
tmpfs 401712 8808 392904 3% /run
tmpfs 1024 0 1024 0% /run/credentials/systemd-journald.service
/dev/vda2 983040 295220 687820 31% /boot
tmpfs 200856 116 200740 1% /run/user/986
tmpfs 200856 60 200796 1% /run/user/0
# pvdisplay
--- Physical volume ---
PV Name /dev/vda3
VG Name rl
PV Size <39.00 GiB / not usable 0
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 9983
Free PE 0
Allocated PE 9983
PV UUID XXXXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXXXX
# vgdisplay
--- Volume group ---
VG Name rl
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 2
Max PV 0
Cur PV 1
Act PV 1
VG Size <39.00 GiB
PE Size 4.00 MiB
Total PE 9983
Alloc PE / Size 9983 / <39.00 GiB
Free PE / Size 0 / 0
VG UUID XXXXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXXXX
# lvdisplay
--- Logical volume ---
LV Path /dev/rl/swap
LV Name swap
VG Name rl
LV UUID XXXXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXXXX
LV Write Access read/write
LV Creation host, time test-rocky10, 2025-06-26 00:39:07 +0900
LV Status available
# open 1
LV Size 2.04 GiB
Current LE 523
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:1
--- Logical volume ---
LV Path /dev/rl/root
LV Name root
VG Name rl
LV UUID XXXXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXXXX
LV Write Access read/write
LV Creation host, time test-rocky10, 2025-06-26 00:39:07 +0900
LV Status available
# open 1
LV Size 36.95 GiB
Current LE 9460
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0
# mount | egrep "(xfs|fat)"
/dev/mapper/rl-root on / type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota)
selinuxfs on /sys/fs/selinux type selinuxfs (rw,nosuid,noexec,relatime)
/dev/vda2 on /boot type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota)
以下の条件がそろっていることを前提とします。
ところで、ファームウェアはBIOSかUEFIかどっち?はfdisk -lコマンドで1番目のパーティションタイプを参照すれば分かります。
# fdisk -l /dev/vda
Device Start End Sectors Size Type
/dev/vda1 2048 4095 2048 1M BIOS boot
/dev/vda2 4096 2101247 2097152 1G Linux extended boot
/dev/vda3 2101248 83884031 81782784 39G Linux LVM
# gdisk -l /dev/vda
Number Start (sector) End (sector) Size Code Name
1 2048 411647 200.0 MiB EF00 EFI System Partition
2 411648 1435647 500.0 MiB 0700
3 1435648 3907028991 1.8 TiB 8E00
マウントしているローカルディスクの全ファイルシステム(/tmp以外)をバックアップします。
# sync #念のため
# xfsdump -l 0 - <ファイルシステムデバイスファイルパス> | gzip -c > /<NFS上の任意ディレクトリ>/<バックアップイメージ名>
# sync
# xfsdump -l 0 - /dev/vda2 | gzip -c > /backup/boot.dump.gz
# xfsdump -l 0 - /dev/mapper/rl-root | gzip -c > /backup/root.dump.gz
あとで泣かないように、パーティション構造、lvm構造とかも記録しておきます。
# sfdisk -d /dev/vda > /<NFS上の任意ディレクトリ>/sfdisk_-d_dev_vda
# vgcfgbackup -f /<NFS上の任意ディレクトリ>/vgcfgbackup
# fdisk -l > /<NFS上の任意ディレクトリ>/fdisk_<デバイス名>.txt
# df > /<NFS上の任意ディレクトリ>/df.txt
# cat /etc/fstab > /<NFS上の任意ディレクトリ>/fs.txt
# pvdisplay > /<NFS上の任意ディレクトリ>/lv.txt
# vgdisplay > /<NFS上の任意ディレクトリ>/vg.txt
# lvdisplay > /<NFS上の任意ディレクトリ>/vp.txt
# mount > /<NFS上の任意ディレクトリ>/mount.txt
# sfdisk -d /dev/vda > /backup/sfdisk_-d_dev_vda
# vgcfgbackup -f /backup/vgcfgbackup
Volume group "rl" successfully backed up.
# fdisk -l > /backup/fdisk_-l
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.
# gdisk -l /dev/vda > /backup/gdisk
# df > /backup/df
# pvdisplay > /backup/pvdisplay
# vgdisplay > /backup/vgdisplay
# lvdisplay > /backup/lvdisplay
# mount > /backup/mount
# localectl set-keymap jp106
# ifconfig eth0 192.168.1.xxx netmask 255.255.255.0
# lvm vgchagne -ay
# mkdir /backup
# mount -t nfs -o rsize=8192,wsize=8192,intr <NFSサーバーエクスポートディレクトリ> /backup
# mkdir /backup
# nfsの場合
# mount -t nfs -o rsize=8192,wsize=8192,intr 192.168.1.2:/nfs /backup
# smbfsの場合
# mount -t cifs -o vers=1.0,guest //192.168.1.2/smb /backup
# sfdisk <ディスクデバイスファイルパス> < /backup/sfdisk_-d_dev_vda
# fdisk -l
# sfdisk /dev/vda < /backup/sfdisk_-d_dev_vda
# fdisk -l
# mkfs.xfs <boot(/boot)用パーティションデバイスファイルパス>
# mkfs.xfs /dev/vda2
# less /backup/vgcfgbackup
<vg名> {
physical_volumes {
pv0 {
id = "<pv0のuuid>"
# pvcreate --uuid "<pv0のuuid>" --restorefile /backup/vgcfgbackup <LVM用パーティションデバイスファイルパス>
# less /backup/vgcfgbackup
physical_volumes {
pv0 {
id = "vZ3hT0-qYEX-1b28-05DN-F7Id-PfK6-E1FSuR"
device = "/dev/vda3" # Hint only
status = ["ALLOCATABLE"]
# pvcreate --uuid "vZ3hT0-qYEX-1b28-05DN-F7Id-PfK6-E1FSuR" --restorefile /backup/vgcfgbackup /dev/vda3
# vgcfgrestore -f /backup/vgcfgbackup <VG名>
# pvs
# vgs
# lvs
# vgchange -ay <VG名> #これしないと/dev/以下にlvのデバイスが見えない
# vgcfgrestore -f /backup/vgcfgbackup rl
# pvs
# vgs
# lvs
# vgchange -ay rl
# mkfs.xfs <ファイルシステムデバイスファイルパス>
# mkswap <swap用パーティションデバイスファイルパス>
# mkfs.xfs /dev/rl/root
# mkswap /dev/rl/swap
# lvm vgchagne -ay
# mkdir /restore
# mount -t xfs <ファイルシステムデバイス> /restore/<従来のマウントポイント>
# cd /restore/<従来のマウントポイント>
# gzip -dc /backup/<バックアップイメージ> | xfsrestore - ./
# sync
# mkdir /restore
# mount -t xfs /dev/rl/root /restore
# cd /restore
# gzip -dc /backup/root.dump.gz | xfsrestore - ./
#
# mount -t xfs /dev/vda2 /restore/boot
# cd /restore/boot
# gzip -dc /backup/boot.dump.gz | xfsrestore - ./
# sync;sync;sync
# blkid <マウントしているパーティションデバイスファイルパス>
# blkid <swapパーティションデバイスファイルパス>
# vi /restore/etc/fstab
UUID=<パーティションデバイスのUUID> / xfs defaults 0 0
UUID=<swapパーティションデバイスのUUID> none swap defaults 0 0
# blkid /dev/vda2
/dev/vda2: UUID="ca203617-2efe-40d2-afe3-43f7841e251c" BLOCK_SIZE="512" TYPE="xfs" PARTUUID="27d1279b-e041-45f2-8a43-801e24a5f33a"
# blkid /dev/rl/root
/dev/rl/root: UUID="69e5479e-3f61-4f5c-8576-566bc299e023" BLOCK_SIZE="512" TYPE="xfs"
# blkid /dev/rl/swap
/dev/rl/swap: UUID="65bfdb15-d689-4f2a-add5-3dfc4e2599ff" TYPE="swap"
# vi /restore/etc/fstab
UUID=69e5479e-3f61-4f5c-8576-566bc299e023 / xfs defaults 0 0
UUID=ca203617-2efe-40d2-afe3-43f7841e251c /boot xfs defaults 0 0
UUID=65bfdb15-d689-4f2a-add5-3dfc4e2599ff none swap defaults 0 0
# blkid <swapパーティションデバイスファイルパス>
# vi /restore/boot/loader/entries/<マシンID>-<カーネルリリース番号>.conf
options root=/dev/mapper/rl-root ro resume=UUID=<スワップ領域のUUID> rd.lvm.lv=rl/root rd.lvm.lv=rl/swap rhgb quiet
# vi /restore/boot/loader/entries/<マシンID>-0-rescue.conf
options root=/dev/mapper/rl-root ro resume=UUID=<スワップ領域のUUID> rd.lvm.lv=rl/root rd.lvm.lv=rl/swap rhgb quiet
# blkid /dev/rl/swap
/dev/rl/swap: UUID="65bfdb15-d689-4f2a-add5-3dfc4e2599ff" TYPE="swap"
# vi /restore/boot/loader/entries/2e0dd30dc9c149258994175d4ef856fc-6.12.0-55.12.1.el10_0.x86_64.conf
options root=/dev/mapper/rl-root ro resume=UUID=65bfdb15-d689-4f2a-add5-3dfc4e2599ff rd.lvm.lv=rl/root rd.lvm.lv=rl/swap rhgb quiet
# vi /restore/boot/loader/entries/2e0dd30dc9c149258994175d4ef856fc-0-rescue.conf
options root=/dev/mapper/rl-root ro resume=UUID=65bfdb15-d689-4f2a-add5-3dfc4e2599ff rd.lvm.lv=rl/root rd.lvm.lv=rl/swap rhgb quiet
# mount -t proc proc /restore/proc
# mount --bind /dev /restore/dev
# mount -t sysfs sysfs /restore/sys
# chroot /restore
# grub2-install <ディスクデバイスパス>
# grub2-install /dev/vda
# cd /boot
# ls initramfs-*
# mv initramfs-<カーネルリリース番号>.img initramfs-<カーネルリリース番号>.img.old
# dracut -f /boot/initramfs-<カーネルリリース番号>.img <カーネルリリース番号>
# cd /boot
# ls initramfs-*
# mv initramfs-6.12.0-55.12.1.el10_0.x86_64.img initramfs-6.12.0-55.12.1.el10_0.x86_64.img.old
# dracut -f /boot/initramfs-6.12.0-55.12.1.el10_0.x86_64.img 6.12.0-55.12.1.el10_0.x86_64
# grub2-mkconfig -o /boot/grub2/grub.cfg
# sync;sync;sync #←石橋を叩きたい数だけ(笑)
# exit
# sync;sync;sync
# exit