Raspberry PiのRocky Linuxのバックアップ&リストア

Linux

SunDisk Micro SD XC I 64GB にRocky LinuxをインストールしてRaspberry Pi 4 4GBで利用している。
何度もPCにLinuxをインストールしているが、毎回ハードディスク障害でいろいろなデータを紛失していた。今回はSDカードのため、バックアップ媒体を用意でできそうなので、真剣にシステムディスクのバックアップを行ってみた。
バックアップ&リストアを数ヶ月悩みましたのでその記録です。

  1. 失敗1
  2. 失敗2
    1. 新SDカードのフォーマット情報を確認する。
    2. 起動しているSDカードのboot領域とswap領域をddコマンドでバックアップする。
    3. 起動しているSDカードの / ファイルシステムをdumpコマンドでバックアップする。
    4. バックアップしたboot領域とswap領域をddコマンドで、新SDカードにリストアする。
    5. 新SDカードに/ ファイルシステムを作成する
    6. 新SDカードの / ファイルシステムを、起動しているLinuxサーバにマウントする。
    7. バックアップした / ファイルシステムを、新SDカードにリストアする。
    8. raspberry pi 4 のMicro SD カードを差し替えて、再起動する
  3. 失敗3
    1. 直接バックアップ&リストア
    2. 再起動
  4. バックアップ成功
    1. 起動ディスクのパーティションを確認する。
    2. リストア先の新SDカードのパーティションを確認する。
    3. 起動ディスクのboot領域とswap領域をddコマンドで、新SDカードに直接リストアする。
    4. リストア先のパ―ティションを確認する。
    5. 新SDカードに / ファイルシステムを作成する。
    6. 新SDカードカードの / ファイルシステムを、起動しているLinuxサーバにマウントする。
    7. 起動している / ファイルシステムを、新SDカードに直接リストアする。
    8. 新SDカードのパティションのUUIDを確認する。
    9. リストア先のfastabファイルを修正する。
    10. 再起動
  5. 結果

失敗1

手持ちのUSBのSDカードリーダで新しく買ったMicro SDカードをRaspberry Piに接続すると、なぜか、ファイルシステムが2つ(sdb、sdc)存在する様に表示される。

# lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda           8:0    0  1.8T  0 disk 
└sda1        8:1    0  1.8T  0 part /usr/local/dlna
sdb           8:16   1    1M  0 disk 
sdc           8:32   1    0B  0 disk 
mmcblk0     179:0    0 59.5G  0 disk 
├mcblk0p1  179:1    0  286M  0 part /boot
├mcblk0p2  179:2    0  488M  0 part [SWAP]
└mcblk0p3  179:3    0 58.7G  0 part /
# 

WEBにいろいろなバックアップ&リストアの情報が有るため、いろいろ試したが正常に起動するSDカードは作成できなかった。
数ヶ月経った時に、古いカードリーダなので、SD XC に対応のではないのないかと考えて、新しいSDカードリーダを購入しました。

そして、新しいSDカードリーダをRspberry pi に接続してSDカードを確認すると、表示されるファイルシステム(sdb)が正しそうなのでバックアップできそうである。

# lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda           8:0    0  1.8T  0 disk 
└sda1        8:1    0  1.8T  0 part /usr/local/dlna
sdb           8:16   1 59.4G  0 disk 
└sdb1        8:17   1 59.4G  0 part 
mmcblk0     179:0    0 59.5G  0 disk 
├mcblk0p1  179:1    0  286M  0 part /boot
├mcblk0p2  179:2    0  488M  0 part [SWAP]
└mcblk0p3  179:3    0 58.7G  0 part /
# 

失敗2

Raspberry Piを極限まで無駄なくバックアップする」を参照しバックアップ&リストアを行う。

新SDカードのフォーマット情報を確認する。

やはり、古いSDカードリーダがMicro SD XCに対応していないことを再認識した。

# parted /dev/sdb u s p
モデル: Mass Storage Device (scsi)
ディスク /dev/sdb: 124669952s
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: msdos
ディスクフラグ: 

番号  開始   終了        サイズ      タイプ   ファイルシステム  フラグ
 1    2048s  124669951s  124667904s  primary  fat32             lba

#

起動しているSDカードのboot領域とswap領域をddコマンドでバックアップする。

注)出力先を起動しているSDカードではなく、USB接続の他のデバイスにしている。

# parted /dev/mmcblk0 u s p
モデル: SD SD64G (sd/mmc)
ディスク /dev/mmcblk0: 124735488s
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: msdos
ディスクフラグ: 

番号  開始      終了        サイズ      タイプ   ファイルシステム  フラグ
 1    8192s     593919s     585728s     primary  fat16             boot, lba
 2    593920s   1593343s    999424s     primary  linux-swap(v1)    swap
 3    1593344s  124735454s  123142111s  primary  ext4

#
# dd if=/dev/mmcblk0 of=/usr/local/dlna/backup/piboot.bin bs=512 count=1593344
1593344+0 レコード入力
1593344+0 レコード出力
815792128 bytes (816 MB, 778 MiB) copied, 238.712 s, 3.4 MB/s
#

起動しているSDカードの / ファイルシステムをdumpコマンドでバックアップする。

注)出力先を起動しているSDカードではなく、USB接続の他のデバイスにしている。

# dump -0 -z9 -f /usr/local/dlna/backup/piroot.dump /dev/mmcblk0p3
  DUMP: Date of this level 0 dump: Tue May 21 20:45:15 2024
  DUMP: Dumping /dev/mmcblk0p3 (/) to /usr/local/dlna/backup/piroot.dump
  DUMP: Label: _/
  DUMP: Writing 10 Kilobyte records
  DUMP: Compressing output at transformation level 9 (zlib)
  DUMP: mapping (Pass I) [regular files]
  DUMP: mapping (Pass II) [directories]
  DUMP: estimated 13531339 blocks.
  DUMP: Volume 1 started with block 1 at: Tue May 21 20:45:17 2024
  DUMP: dumping (Pass III) [directories]
  DUMP: dumping (Pass IV) [regular files]
  DUMP: 29.21% done at 13173 kB/s, finished in 0:12
  DUMP: 56.59% done at 12762 kB/s, finished in 0:07
  DUMP: 81.08% done at 12189 kB/s, finished in 0:03
  DUMP: Closing /usr/local/dlna/backup/piroot.dump
  DUMP: Volume 1 completed at: Tue May 21 21:03:49 2024
  DUMP: Volume 1 took 0:18:32
  DUMP: Volume 1 transfer rate: 8629 kB/s
  DUMP: Volume 1 13712210kB uncompressed, 9595860kB compressed, 1.429:1
  DUMP: 13712210 blocks (13390.83MB) on 1 volume(s)
  DUMP: finished in 1112 seconds, throughput 12331 kBytes/sec
  DUMP: Date of this level 0 dump: Tue May 21 20:45:15 2024
  DUMP: Date this dump completed:  Tue May 21 21:03:49 2024
  DUMP: Average transfer rate: 8629 kB/s
  DUMP: Wrote 13712210kB uncompressed, 9595860kB compressed, 1.429:1
  DUMP: DUMP IS DONE
#

バックアップしたboot領域とswap領域をddコマンドで、新SDカードにリストアする。

# dd if=/usr/local/dlna/backup/piboot.bin of=/dev/sdb bs=65536
12448+0 レコード入力
12448+0 レコード出力
815792128 bytes (816 MB, 778 MiB) copied, 103.892 s, 7.9 MB/s

新SDカードに/ ファイルシステムを作成する

# mkfs.ext4 /dev/sdb3
mke2fs 1.46.5 (30-Dec-2021)
/dev/sdb3 contains a ext4 file system
    created on Tue May 21 21:13:48 2024
Proceed anyway? (y,N) y
Creating filesystem with 15384576 4k blocks and 3850240 inodes
Filesystem UUID: d9b895c6-e1dc-4316-bb65-4fb1fd4abd58
Superblock backups stored on blocks: 
    32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
    4096000, 7962624, 11239424

Allocating group tables:   0/470       done                            
Writing inode tables:   0/470       done                            
C

新SDカードの / ファイルシステムを、起動しているLinuxサーバにマウントする。

# mount /dev/sdb3 /mnt/vol01
#
# df -h
ファイルシス   サイズ  使用  残り 使用% マウント位置
/dev/root         58G   13G   45G   23% /
devtmpfs         1.9G     0  1.9G    0% /dev
tmpfs            1.9G   16K  1.9G    1% /dev/shm
tmpfs            759M   14M  746M    2% /run
/dev/mmcblk0p1   286M  141M  146M   50% /boot
/dev/sda1        1.9T  1.2T  663G   65% /usr/local/dlna
tmpfs            380M     0  380M    0% /run/user/1001
/dev/sdb3         58G   24K   55G    1% /mnt/vol01
#

バックアップした / ファイルシステムを、新SDカードにリストアする。

# cd /mnt/vol01
# 
# ls -l
合計 16
drwx------ 2 root root 16384  5月 21 21:14 lost+found
# 
# restore -rf /usr/local/dlna/backup/piroot.dump 
Dump tape is compressed.
restore: ./lost+found: File exists
# 
# sync
# sync
#
# umount /mnt/vol01
#
# shutdown -h now
#

最初のsyncコマンドに時間が掛かったが問題無し。

raspberry pi 4 のMicro SD カードを差し替えて、再起動する

boot情報が表示できないのが残念であるが、起動はできた!!!
が、ログインすると何かが変である。
/ ファイルシステムがread onlyでマウントされている。
リストア失敗である。
※後から考えると、起動するSDカードが変わったため/etc/fstabファイル内のUUIDを変更すれば、起動できたかもしれない。

失敗3

ddコマンドでsdカード全体をバックアップ&リストアする。

直接バックアップ&リストア

2時間以上時間が掛かった。

# dd if=/dev/mmcblk0 of=/dev/sdb bs=512 count=124735453
# sync
# sync
# shtdown -h now

再起動

Micro SDカードを差し替えて起動するると「kernel panic」のメッセージで停止する。
本来、一番簡単なバックアップ&リストア方式なのになぜ、起動しないか不明である。

バックアップ成功

時間短縮のため、バックアップデータをファイルに出力せず直接新SDカードにリストアする。

起動ディスクのパーティションを確認する。

# parted /dev/mmcblk0 u s p
モデル: SD SD64G (sd/mmc)
ディスク /dev/mmcblk0: 124735488s
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: msdos
ディスクフラグ: 

番号  開始      終了        サイズ      タイプ   ファイルシステム  フラグ
 1    8192s     593919s     585728s     primary  fat16             boot, lba
 2    593920s   1593343s    999424s     primary  linux-swap(v1)    swap
 3    1593344s  124735454s  123142111s  primary  ext4

#

リストア先の新SDカードのパーティションを確認する。

リストア先なので意味はないが念のため。

# parted /dev/sdb u s p
モデル: Mass Storage Device (scsi)
ディスク /dev/sdb: 124669952s
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: msdos
ディスクフラグ: 

番号  開始   終了        サイズ      タイプ   ファイルシステム  フラグ
 1    2048s  124669951s  124667904s  primary  fat32             lba

# 

起動ディスクのboot領域とswap領域をddコマンドで、新SDカードに直接リストアする。

パーティション3の先頭シリンダーの最初の値をcountsパラメータの指定する。

# dd if=/dev/mmcblk0 of=/dev/sdb bs=512 count=1593344
1593344+0 レコード入力
1593344+0 レコード出力
815792128 bytes (816 MB, 778 MiB) copied, 194.211 s, 4.2 MB/s
#

リストア先のパ―ティションを確認する。

# fdisk /dev/sdb

fdisk (util-linux 2.37.4) へようこそ。
ここで設定した内容は、書き込みコマンドを実行するまでメモリのみに保持されます。
書き込みコマンドを使用する際は、注意して実行してください。


コマンド (m でヘルプ): p
ディスク /dev/sdb: 59.45 GiB, 63831015424 バイト, 124669952 セクタ
ディスク型式: Storage Device  
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスクラベルのタイプ: dos
ディスク識別子: 0xc798b673

デバイス   起動 開始位置  終了位置    セクタ サイズ Id タイプ
/dev/sdb1  *        8192    593919    585728   286M  c W95 FAT32 (LBA)
/dev/sdb2         593920   1593343    999424   488M 82 Linux スワップ / Solaris
/dev/sdb3        1593344 124735454 123142111  58.7G 83 Linux

コマンド (m でヘルプ): q

# 

新SDカードに / ファイルシステムを作成する。

# mkfs.ext4 /dev/sdb3 
mke2fs 1.46.5 (30-Dec-2021)
/dev/sdb3 contains a ext4 file system labelled '_/'
    last mounted on / on Sun Apr  7 09:00:02 2024
Proceed anyway? (y,N) y
Creating filesystem with 15384576 4k blocks and 3850240 inodes
Filesystem UUID: 0f0de392-35a6-404c-b583-ba9430cc1f26
Superblock backups stored on blocks: 
    32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
    4096000, 7962624, 11239424

Allocating group tables:   0/470       done                            
Writing inode tables:   0/470       done                            
Creating journal (65536 blocks): 
done
Writing superblocks and filesystem accounting information:   0/470       done

# 

新SDカードカードの / ファイルシステムを、起動しているLinuxサーバにマウントする。

# mount /dev/sdb3 /mnt/vol01
#
# df -h
ファイルシス   サイズ  使用  残り 使用% マウント位置
/dev/root         58G   13G   45G   23% /
devtmpfs         1.9G     0  1.9G    0% /dev
tmpfs            1.9G   16K  1.9G    1% /dev/shm
tmpfs            759M   15M  745M    2% /run
/dev/mmcblk0p1   286M  141M  146M   50% /boot
/dev/sda1        1.9T  1.2T  672G   64% /usr/local/dlna
tmpfs            380M     0  380M    0% /run/user/1001
/dev/sdb3         58G   24K   55G    1% /mnt/vol01
#

起動している / ファイルシステムを、新SDカードに直接リストアする。

# cd  /mnt/vol01
# 
# dump -0uf - /dev/mmcblk0p3 | restore -rf -
  DUMP: Date of this level 0 dump: Wed May 29 20:15:34 2024
  DUMP: Dumping /dev/mmcblk0p3 (/) to standard output
  DUMP: Label: _/
  DUMP: Writing 10 Kilobyte records
  DUMP: mapping (Pass I) [regular files]
  DUMP: mapping (Pass II) [directories]
  DUMP: estimated 13544624 blocks.
  DUMP: Volume 1 started with block 1 at: Wed May 29 20:15:36 2024
  DUMP: dumping (Pass III) [directories]
  DUMP: dumping (Pass IV) [regular files]
restore: ./lost+found: File exists
./tmp/rstdir1716981334: (inode 681) not found on tape
./tmp/rstmode1716981334: (inode 1052) not found on tape
  DUMP: 16.25% done at 7337 kB/s, finished in 0:25
  DUMP: 30.28% done at 6835 kB/s, finished in 0:23
  DUMP: 44.27% done at 6662 kB/s, finished in 0:18
  DUMP: 57.52% done at 6491 kB/s, finished in 0:14
  DUMP: 70.65% done at 6379 kB/s, finished in 0:10
  DUMP: 84.96% done at 6393 kB/s, finished in 0:05
  DUMP: 98.02% done at 6322 kB/s, finished in 0:00
  DUMP: Volume 1 completed at: Wed May 29 20:51:51 2024
  DUMP: Volume 1 13724410 blocks (13402.74MB)
  DUMP: Volume 1 took 0:36:15
  DUMP: Volume 1 transfer rate: 6310 kB/s
  DUMP: 13724410 blocks (13402.74MB)
  DUMP: finished in 2175 seconds, throughput 6310 kBytes/sec
  DUMP: Date of this level 0 dump: Wed May 29 20:15:34 2024
  DUMP: Date this dump completed:  Wed May 29 20:51:51 2024
  DUMP: Average transfer rate: 6310 kB/s
  DUMP: DUMP IS DONE
#
# sync
# sync
# sync
#

新SDカードのパティションのUUIDを確認する。

# lsblk -f
NAME        FSTYPE FSVER LABEL      UUID                                 FSAVAIL FSUSE% MOUNTPOINTS
sda
mqsda1      ntfs         SSD-SCTU3A 30A2A1EAA2A1B52E                      672.3G    64% /usr/local/dlna
sdb
tqsdb1      vfat   FAT16            ABC3-EED9
tqsdb2      swap   1     _swap      e92e62d3-b879-414d-97cb-47904a256f15
mqsdb3      ext4   1.0              50509510-5843-40b9-80b5-01bdbdece713   41.7G    22% /mnt/vol01
mmcblk0
tqmmcblk0p1 vfat   FAT16            ABC3-EED9                             145.6M    49% /boot
tqmmcblk0p2 swap   1     _swap      e92e62d3-b879-414d-97cb-47904a256f15                [SWAP]
mqmmcblk0p3 ext4   1.0   _/         05fa8335-82c7-4c1d-b57a-5b6565c00cc4   44.9G    22% /
#

リストア先のfastabファイルを修正する。

新SDカードのfstabファイルを修正する。
注)新SDカードの / ファイルシステムが現在の作業領域のため、etc/fstabとすること。
 /etc/fstabの指定では、起動しているSDカードのfstabを操作してしまいます。

# cp etc/fstab etc/fstab_org
#
# vi etc/fstab
#
# diff /etc/fstab_org /etc/fstab
2c2
< UUID=05fa8335-82c7-4c1d-b57a-5b6565c00cc4  / ext4    defaults,noatime 0 0
---
> UUID=50509510-5843-40b9-80b5-01bdbdece713  / ext4    defaults,noatime 0 0
#
# sync
# sync
#
# cd
#
# umount /mnt/vol01
#
# shutdown -h now

再起動

正常に起動できた。
長期間の対応だったので、「やっとできた」の思いです。
今後、一ヶ月単位くらいで/ ファイルシステムのバックアップ&リストアで対応できるのではないかと思われる。

結果

仕事でRedHat Linuxを利用しているため、自宅ではCentOSを利用したいがRaspberry Piで利用できない。
そのためRockey Linuxを利用しているが、Raspberry Pi OSに対するバックアップ&リストア情報は沢山あるが、Rocky Linuxに対するバックアップ&リストア情報が少ない気がする。
Rockey  Linuxe利用者の目に留まればと思ます。