| 1 | #!/usr/bin/env bash
|
|---|
| 2 | set -euo pipefail
|
|---|
| 3 |
|
|---|
| 4 | # 1. カレントディレクトリを /root に設定
|
|---|
| 5 | cd /root
|
|---|
| 6 |
|
|---|
| 7 | # 2. root権限チェック
|
|---|
| 8 | if [ "$(id -u)" -ne 0 ]; then
|
|---|
| 9 | echo "[ERROR] このスクリプトは root 権限で実行する必要があります。(sudo -i で実行してください)" >&2
|
|---|
| 10 | exit 1
|
|---|
| 11 | fi
|
|---|
| 12 |
|
|---|
| 13 | echo "=== パーティションマージ処理を開始します (p68 + p69) ==="
|
|---|
| 14 |
|
|---|
| 15 | # 3. 必要なツールの確認・インストール
|
|---|
| 16 | if ! 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
|
|---|
| 19 | fi
|
|---|
| 20 |
|
|---|
| 21 | for 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
|
|---|
| 26 | done
|
|---|
| 27 |
|
|---|
| 28 | BACKUP_DIR="/root/home_arduino_backup"
|
|---|
| 29 |
|
|---|
| 30 | # 4. /home/arduino データの退避
|
|---|
| 31 | if 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
|
|---|
| 50 | fi
|
|---|
| 51 |
|
|---|
| 52 | # 7. パーティション 69 (p69) の削除
|
|---|
| 53 | echo "[INFO] パーティション 69 を削除中..."
|
|---|
| 54 | parted -s /dev/mmcblk0 rm 69
|
|---|
| 55 |
|
|---|
| 56 | # 8. パーティション 68 (p68) のオンライン拡張 (growpartで警告プロンプトを回避)
|
|---|
| 57 | echo "[INFO] パーティション 68 を空き領域の末尾まで拡張中..."
|
|---|
| 58 | growpart /dev/mmcblk0 68
|
|---|
| 59 |
|
|---|
| 60 | # 9. ルートファイルシステム (ext4) の拡張
|
|---|
| 61 | echo "[INFO] ルートファイルシステムを拡張中 (resize2fs)..."
|
|---|
| 62 | resize2fs /dev/mmcblk0p68
|
|---|
| 63 |
|
|---|
| 64 | # 10. データの書き戻しと権限復元
|
|---|
| 65 | echo "[INFO] データを新しいルートディレクトリ (/home/arduino) へ書き戻し中..."
|
|---|
| 66 | mkdir -p /home/arduino
|
|---|
| 67 | rsync -aHAX "$BACKUP_DIR/" /home/arduino/
|
|---|
| 68 | rm -rf "$BACKUP_DIR"
|
|---|
| 69 |
|
|---|
| 70 | if id "arduino" &>/dev/null; then
|
|---|
| 71 | chown -R arduino:arduino /home/arduino
|
|---|
| 72 | fi
|
|---|
| 73 |
|
|---|
| 74 | echo "=== すべての処理が完了しました ==="
|
|---|
| 75 | echo "拡張後のディスク容量:"
|
|---|
| 76 | df -h /
|
|---|