LinuxMin22.2 のインストールからバックアップまで

LinuxMin22.2 のインストールからバックアップまで

(2025-10-20, Mon)

この記事では、以下のようなところまで作業しています。

ざっくり言うと
  • Linux Mint 22.2 をインストール
  • NASに2種類の方法で簡単バックアップ
  • 復元の落とし穴(イメージバックアップ)

o linuxmint-22.2-cinnamon-64bit.iso をインストール。
o SSHでアクセスできるようにする。
o NASをマウントできるようにする。
o バックアップをできるようにする。
- ソースとしてバックアップ
- イメージとしてバックアップ
o イメージとしてバックアップする欠点は次の通り。
- 復元先のSSDにはバックアップイメージがそのまま(の位置で)復元される。
- 万一、復元先のSSDのあるセクターに欠陥があるとしたら、そこには書き込めない。
- よって、正常な復元が不可能。(要するに復元先のSSDを100%信用する場合のみ使用できる)
o ソースとしてバックアップした復元方法
- 初期インストールとまったく同様の作業を行う。
- 「復元(上書き)スクリプト」でNASにあるデーターから上書き処理をする。
- 復元プログラムは後日紹介予定。
o バックアップスクリプトを紹介。


 

■ 初期インストール (LinuxMint222) 
linuxmint-22.2-cinnamon-64bit.iso
 ■ ssh をインストールしておく。 
sudo apt update
sudo apt install openssh-server
 ■ HIMAGINE (稼働マシン名です) 
192.168.1.128	DHCPで取得したIPアドレス
 ■ /etc/hosts バックアップ先の NAS の IP アドレスを追加 
# NAS
192.168.1.40    as6704t
192.168.1.42    as6702t
 ■ /etc/fstab  NASのマウント準備 
# BACKUP POINT
as6704t:/volume1/Public/LinuxMint222-HIMAGENE /mnt/as6704t    nfs     defaults        0       0
 ■ NAS に、バックアップ用ディレクトリを用意 
\\192.168.1.40\Public\LinuxMint222-HIMAGINE\SOURCE	ソースバックアップ先
\\192.168.1.40\Public\LinuxMint222-HIMAGINE\ARCHIVES	イメージバックアップ先
 ■ マウント機能をインストール 
sudo apt install -y nfs-common
 ■ マウントポイントを作成 
sudo mkdir /mnt/as6704t
 ■ バックアップ先をマウント 
sudo mount -a
---
mount: (hint) your fstab has been modified, but systemd still uses
       the old version; use 'systemctl daemon-reload' to reload.
---
sudo systemctl daemon-reload
 ■ バックアップスクリプト MyBackupSOURCE_to_NAS.sh (ソースタイプ) 
#!/bin/bash
: <<'_EOT_'
MyBackupFullSOURCE_to_NAS.sh

目的:
    - 内蔵SSDのルートパーティション(/dev/sda2など)の全ファイルを
      NFSマウント先に圧縮イメージ(tar.gz)としてバックアップ
    - 保存先は /mnt/as6704t/SOURCE
    - ARCHIVES ディレクトリは除外
    - 重複ファイルは自動で連番を付与
    - バックアップ前にNFSサーバー疎通確認・マウント確認
    - 進捗表示・所要時間・ファイルサイズ表示
注意:
    - ブート領域(/bootなど)は含めない
_EOT_

HOSTNAME=$(cat /etc/hostname)
BACKUP_DIRPOINT="/mnt/as6704t"
BACKUP_DIR="/mnt/as6704t/SOURCE"
DATE=$(date +'%Y%m%d')
BACKUP_FILE="${BACKUP_DIR}/${HOSTNAME}-${DATE}-source.tar.gz"

# バックアップ対象ディレクトリ
# 除外ディレクトリを追加: /mnt を含めることでマウントされたNFSディレクトリがバックアップ対象から除外される
EXCLUDES=("/boot" "/mnt" "/proc" "/sys" "/dev" "/run" "/tmp")

# NFSサーバー
NFS_SERVER="as6704t"

# NFS疎通確認
echo "NFSサーバーへの疎通確認: $NFS_SERVER..."
if ! ping -c 1 -W 2 "$NFS_SERVER" &>/dev/null; then
    echo "エラー: NFSサーバー $NFS_SERVER に到達できません。"
    exit 1
fi
echo "疎通確認OK"

# マウント確認
if ! mountpoint -q "$BACKUP_DIRPOINT"; then
    echo "エラー: バックアップ先が正しくマウントされていません: $BACKUP_DIR"
    exit 1
fi
echo "マウント確認OK: $BACKUP_DIR"

# 重複ファイル回避
counter=1
while [[ -f "$BACKUP_FILE" ]]; do
  BACKUP_FILE="${BACKUP_DIR}/${HOSTNAME}-${DATE}-source-${counter}.tar.gz"
  counter=$((counter + 1))
done

# 確認フェーズ
echo "バックアップを開始します。以下の内容で実行します:"
echo "バックアップ先: $BACKUP_FILE"
echo "除外ディレクトリ: ${EXCLUDES[*]}"
read -p "続行しますか? (y/n): " confirm
[[ "$confirm" != "y" ]] && { echo "バックアップ中止"; exit 1; }

# 時間計測開始
start_time=$(date +%s)

# tar 用 exclude 引数生成
EXCLUDE_ARGS=()
for dir in "${EXCLUDES[@]}"; do
  EXCLUDE_ARGS+=(--exclude="$dir")
done

# バックアップ実行
echo "バックアップを開始します..."
sudo tar "${EXCLUDE_ARGS[@]}" -czpf "$BACKUP_FILE" / --warning=no-file-changed --verbose

# 時間計測終了
end_time=$(date +%s)
elapsed=$(( (end_time - start_time) / 60 ))
FILE_SIZE=$(du -h "$BACKUP_FILE" | cut -f1)

echo "バックアップ完了: $BACKUP_FILE"
echo "所要時間: 約 ${elapsed} 分"
echo "ファイルサイズ: ${FILE_SIZE}"

---
(chmod +x  MyBackupSOURCE_to_NAS.sh)
 ■ イメージバックアップ   MyBackupIMG_to_NAS.sh (復元先SSDを信用できる場合) 
#!/bin/bash

# バックアップ先のディレクトリとファイル名
BACKUP_DIR="/mnt/as6702t/ARCHIVES"
DATE=$(date +'%Y%m%d')  # 日付の取得 (ゼロサプレス形式)
BACKUP_FILE="${BACKUP_DIR}/PearlLinux12-N2-${DATE}-backup.img.gz"

# SSDチェック
lsblk -o NAME,TRAN,MOUNTPOINT

# 内蔵SSDか、外付けUSBかを設定する。
SD="/dev/sda"

# ファイル名がすでに存在する場合、番号を付けて新しい名前にする
counter=1
while [[ -f "$BACKUP_FILE" ]]; do
  BACKUP_FILE="${BACKUP_DIR}/PearlLinux12-N2-${DATE}-backup-${counter}.img.gz"
  counter=$((counter + 1))
done

# 確認フェーズ
echo "バックアップを開始します。以下の内容でバックアップを実行します:"
echo "バックアップ元: $SD"
echo "バックアップ先: ${BACKUP_FILE}"
echo
read -p "続行しますか? (y/n): " confirm

if [[ "$confirm" != "y" ]]; then
  echo "バックアップは中止されました。"
  exit 1
fi

# 進捗表示付きでバックアップを実行
echo "バックアップを開始します..."

# `dd` と `gzip` の組み合わせでバックアップを作成し、進捗を表示
sudo dd if=$SD bs=4M status=progress | gzip -q > "$BACKUP_FILE"

echo "バックアップが完了しました: $BACKUP_FILE"
---
(chmod +x MyBackupIMG_to_NAS.sh)
---
バックアップ完了: /mnt/as6704t/SOURCE/HIMAGINE-20251020-source.tar.gz
所要時間: 約 7 分
ファイルサイズ: 2.8G
 ■ イメージでバックアップ sudo ./MyBackupIMG_to_NAS.sh 
#!/bin/bash

# バックアップ先のディレクトリ
BACKUP_DIR="/mnt/as6704t/ARCHIVES"

# 日付(例: 20251020)
DATE=$(date +'%Y%m%d')

# マシン名(例: PearlLinux12-N2)
HOSTNAME=$(hostname)

# バックアップファイル名
BACKUP_FILE="${BACKUP_DIR}/${HOSTNAME}-${DATE}-backup.img.gz"

# SSDチェック
lsblk -o NAME,TRAN,MOUNTPOINT

# 内蔵SSDか、外付けUSBかを設定する
SD="/dev/sda"

# 同名ファイルが存在する場合、連番を付与
counter=1
while [[ -f "$BACKUP_FILE" ]]; do
  BACKUP_FILE="${BACKUP_DIR}/${HOSTNAME}-${DATE}-backup-${counter}.img.gz"
  counter=$((counter + 1))
done

# 確認フェーズ
echo "バックアップを開始します。以下の内容でバックアップを実行します:"
echo "バックアップ元: $SD"
echo "バックアップ先: ${BACKUP_FILE}"
echo
read -p "続行しますか? (y/n): " confirm

if [[ "$confirm" != "y" ]]; then
  echo "バックアップは中止されました。"
  exit 1
fi

# 進捗表示付きでバックアップを実行
echo "バックアップを開始します..."

sudo dd if=$SD bs=4M status=progress | gzip -q > "$BACKUP_FILE"

echo "バックアップが完了しました: $BACKUP_FILE"
 ■ イメージでバックアップする前に、圧縮効果を高めるため未使用領域(/配下であってデバイスではない)をゼロで埋めておく。 
sudo dd if=/dev/zero of=/zerofill.tmp bs=1M status=progress || true
sudo rm /zerofill.tmp
--
koji@HIMAGINE:~$ sudo dd if=/dev/zero of=/zerofill.tmp bs=1M status=progress || true
[sudo] koji のパスワード:
52237959168 bytes (52 GB, 49 GiB) copied, 2513 s, 20.8 MB/s
dd: '/zerofill.tmp' の書き込みエラー: デバイスに空き領域がありません
49829+0 records in
49828+0 records out
52248727552 bytes (52 GB, 49 GiB) copied, 2512.92 s, 20.8 MB/s
koji@HIMAGINE:~$
---
(sudo rm /zerofill.tmp)
 ■ イメージアックアップ実例 
koji@HIMAGINE:~/mybin$ ./MyBackupIMG_to_NAS.sh
NAME   TRAN   MOUNTPOIN
sda    sata
├─sda1        /boot/efi
└─sda2        /
バックアップを開始します。以下の内容でバックアップを実行します:
バックアップ元: /dev/sda
バックアップ先: /mnt/as6704t/ARCHIVES/HIMAGINE-20251020-backup.img.gz

続行しますか? (y/n): y
バックアップを開始します...
63946358784 bytes (64 GB, 60 GiB) copied, 937 s, 68.2 MB/s
15264+1 records in
15264+1 records out
64023257088 bytes (64 GB, 60 GiB) copied, 937.767 s, 68.3 MB/s
バックアップが完了しました: /mnt/as6704t/ARCHIVES/HIMAGINE-20251020-backup.img.gz

 

このサイトについて

I gaze upon those things forgotten, cast adrift by the flow of time. Humble beings that once held dreams, only to be nearly shrouded in silence. Yet, I know that within their cold shells, a faint warmth still lingers.

I am one who gathers those fading embers, polishes them, and rekindles a modest light. This is a small port of call for those adrift on the currents of time, searching for the same remnants of dreams.

Whatever the currents of the world may be, I continue my quiet work here. Speaking little, steadfastly weaving new mechanisms, breathing new life into them. With the hope that from yesterday to today, and from today to tomorrow, their pulse, however faint, may grow more certain.

If you have lost your course and are searching for the radiance you once loved, Let this humble endeavor be your guidepost. I would be fortunate if it could help you on your own new journey.

-- Good Luck !