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