epics/Aruduino_UNO_Q: merge_arduino_partitions.sh

File merge_arduino_partitions.sh, 2.6 KB (added by Tetsuya Michikawa, 43 hours ago)
Line 
1#!/usr/bin/env bash
2set -euo pipefail
3
4# 1. カレントディレクトリを /root に設定
5cd /root
6
7# 2. root権限チェック
8if [ "$(id -u)" -ne 0 ]; then
9 echo "[ERROR] このスクリプトは root 権限で実行する必要があります。(sudo -i で実行してください)" >&2
10 exit 1
11fi
12
13echo "=== パーティションマージ処理を開始します (p68 + p69) ==="
14
15# 3. 必要なツールの確認・インストール
16if ! command -v growpart &> /dev/null; then
17 echo "[INFO] cloud-guest-utils (growpart) をインストールしています..."
18 apt-get update -y && apt-get install -y cloud-guest-utils
19fi
20
21for cmd in rsync parted resize2fs findmnt fuser; do
22 if ! command -v "$cmd" &> /dev/null; then
23 echo "[ERROR] 必要なコマンド '$cmd' が見つかりません。" >&2
24 exit 1
25 fi
26done
27
28BACKUP_DIR="/root/home_arduino_backup"
29
30# 4. /home/arduino データの退避
31if findmnt -M "/home/arduino" > /dev/null 2>&1; then
32 echo "[INFO] データを $BACKUP_DIR にバックアップ中..."
33 mkdir -p "$BACKUP_DIR"
34 rsync -aHAX --info=progress2 /home/arduino/ "$BACKUP_DIR/"
35
36 # 5. /etc/fstab のバックアップと自動マウント無効化
37 echo "[INFO] /etc/fstab を更新中..."
38 cp /etc/fstab "/etc/fstab.bak.$(date +%Y%m%d%H%M%S)"
39 sed -i '\|/home/arduino|s/^/# /' /etc/fstab
40 sed -i '\|mmcblk0p69|s/^/# /' /etc/fstab
41
42 # 6. プロセス停止とアンマウント
43 echo "[INFO] /home/arduino をアンマウント中..."
44 if id "arduino" &>/dev/null; then
45 loginctl terminate-user arduino 2>/dev/null || true
46 fi
47 fuser -km /home/arduino 2>/dev/null || true
48 sleep 1
49 umount -l /home/arduino || true
50fi
51
52# 7. パーティション 69 (p69) の削除
53echo "[INFO] パーティション 69 を削除中..."
54parted -s /dev/mmcblk0 rm 69
55
56# 8. パーティション 68 (p68) のオンライン拡張 (growpartで警告プロンプトを回避)
57echo "[INFO] パーティション 68 を空き領域の末尾まで拡張中..."
58growpart /dev/mmcblk0 68
59
60# 9. ルートファイルシステム (ext4) の拡張
61echo "[INFO] ルートファイルシステムを拡張中 (resize2fs)..."
62resize2fs /dev/mmcblk0p68
63
64# 10. データの書き戻しと権限復元
65echo "[INFO] データを新しいルートディレクトリ (/home/arduino) へ書き戻し中..."
66mkdir -p /home/arduino
67rsync -aHAX "$BACKUP_DIR/" /home/arduino/
68rm -rf "$BACKUP_DIR"
69
70if id "arduino" &>/dev/null; then
71 chown -R arduino:arduino /home/arduino
72fi
73
74echo "=== すべての処理が完了しました ==="
75echo "拡張後のディスク容量:"
76df -h /