作業ログの部屋 -5ページ目

作業ログの部屋

いろいろな作業ログを公開。何かの時に便利・・・かも。記録とメモ代わりに。

最近はこれ(AIの協力を得て~)が定番になりつつありますが、今回もGeminiに聞きながらすすめます。
やりたいことの全体のイメージはこんな感じ。

 

では、進めます。
Gemini:最も一般的で使いやすいSambaを使った方法を簡潔に解説します。

1.事前準備

1)HDDのパスを確認:
sudo fdisk -l を実行し、/dev/sda1 などのデバイス名を確認します。

$ sudo fdisk -l  
(実行した結果の抜粋)
Disk /dev/sda: 931.51 GiB, 1000204886016 bytes, 1953525168 sectors
Disk model: HDPH-UT
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 9AE3EA98-AD74-4AED-9707-C7A3AE530DC7

Device      Start        End    Sectors   Size Type
/dev/sda1      34     262177     262144   128M Microsoft reserved
/dev/sda2  264192 1953524063 1953259872 931.4G Microsoft basic data

Sizeからsda2らしい。

2)マウントポイントの作成:

 

sudo mkdir -p /mnt/nas]

3)マウント実行:

 

sudo mount /dev/sda2 /mnt/nas


(マウント後)
$ ls -la /mnt/nas/
total 8
drwxrwxrwx 1 root root 4096 Sep 12 12:44  .
drwxr-xr-x 3 root root 4096 Feb 22 11:22  ..
drwxrwxrwx 1 root root    0 Sep 12 12:44 'System Volume Information'

※自動マウント設定(/etc/fstabへの追記)をしておくと、再起動後も自動で繋がります。(後に書いてます)

2.Sambaのインストールと設定(よくよく考えるとNASのバックアップだけなら不要かもな)
ネットワーク越しにアクセスするためのソフトを入れます。

1)インストール:

sudo apt wupdate
sudo apt install samba


2)設定ファイルの編集:
sudo nano /etc/samba/smb.conf を開き、末尾に以下を追記します。

[RaspberryPi-NAS]
path = /mnt/nas
read only = no
guest ok = yes
force user = user

 

3)再起動:

sudo systemctl restart smbd

 

3.PCからのアクセス方法
同じWi-Fi(LAN)に繋がっているPCから、以下のパスを入力します。

Windows: エクスプローラーのアドレスバーに

 

\\<ラズパイのIPアドレス>\RaspberryPi-NAS

 

Mac: Finderの「サーバへ接続」で

 

smb://<ラズパイのIPアドレス>/RaspberryPi-NAS

 

4.Windows11からアクセスしたところ、認証でうまくいかず、Geminiに聞いて、smb用のパスワード設定しました。

sudo smbpasswd -a user
sudo systemctl restart smbd

 

これで無事Windowsのエクスプローラからラズパイに接続しているポータルブルHDDにアクセスできました。

3./etc/fstab(エフスタブ)の設定
ラズパイを再起動しても自動でHDDが接続(マウント)されるようにします。失敗するとラズパイが起動しなくなることもあるので、慎重に進めましょう。

1) HDDの固有ID(UUID)を調べる
デバイス名(/dev/sda1など)は接続順で変わることがあるため、不変のUUIDを使います。

sudo blkid

 

実行結果から、対象HDDの UUID="xxxx-xxxx" という値をメモしてください。

2) fstabを編集する
設定ファイルを開きます。

sudo nano /etc/fstab

 

ファイルの末尾に、以下の内容を1行で追記します。これは、HDDのファイルシステムがNTFSの場合です。ファイルシステムの確認はlsblk -fでできます。

 

UUID=あなたのメモしたUUID  /mnt/nas   ntfs-3g  defaults,nofail  0  0

※オプションの間はスペースではなくTABで

 

3) 設定の反映(テスト)
いきなり再起動せず、必ず以下のコマンドでエラーが出ないか確認してください。

sudo mount -a

 

エラーが出なければ成功です!これで次回の再起動後も自動でHDDが認識されます。(エラーが出たらGeminiに聞きましょう!)

4.いざバックアップ(コピー)
既存のNAS(192.168.11.5)からラズパイに繋いだHDDへデータを丸ごとコピーする方法で、最も確実で速いのは、ラズパイ側で「NASをマウント」して「rsync」でコピーする方法です。

1) NASをラズパイに認識させる(マウント)
まず、ラズパイから192.168.11.5のデータが見える状態にします。
* マウント用のフォルダ作成:

sudo mkdir -p /mnt/old_nas

 

* NASを接続:

sudo mount -t cifs //192.168.11.5/共有フォルダ名 /mnt/old_nas -o username=ユーザー名,password=パスワード,vers=1.0

 

※自宅のNASはSMB1.0なので、バージョンを指定しています。

これで /mnt/old_nas を開けば元のデータが見えるようになります。自宅のNASには複数の共有ポイントがあるので、どうしたか・・は、最後に【番外編】でまとめます。

2) 全データをコピーする(rsync)
cpコマンドよりも、途中で止まっても再開できる rsync がおすすめです。ただ、時間がかかるのでバックグラウンドでする方法を教えてもらいました。

nohup rsync -avh /mnt/old_nas/ /mnt/nas/ > /home/user/nas_copy.log 2>&1 &

 

3) 進捗(ログ)の確認方法
コピーが今どこまで進んでいるか、別のターミナルからリアルタイムで監視できます。

tail -f /home/user/nas_copy.log

 

※ Ctrl + C で監視を終了できます(コピー自体は止まりません)。
※コピーが終わった後、ログファイルに「total size is ...」といった要約が出ていれば完了です。

 

4) 本当に動いているか確認する
バックグラウンドで動いている rsync プロセスを探すにはこれです。

ps aux | grep rsync

 

(おまけ)万が一途中で止めたい時
もしコピーを強制終了したくなった場合は、以下のコマンドでプロセスを消せます。

【番外編】
既存のNASに複数の共有フォルダがあるので、まとめてバックアップする方法についてGeminiに確認したところ、シェルでの実行がオススメとのことで、シェルを作成してくれました。ここでは共有フォルダとして「data」「music」がある場合のケースをまとめます。

1)事前
事前にバックアップ元(old_nas)、先(nas)のマウントに共有フォルダ分のポイントを作成します。(1回だけ)

# コピー元(旧NAS用)
sudo mkdir -p /mnt/old_nas/{data,music}

# コピー先(新HDD用)
sudo mkdir -p /mnt/nas/{data,music}


2)シェルを作成
Geminiに全共有フォルダのバックアップ用のシェルを作成してもらいました。(シェル名:sync_all_nas.sh)
動きとしては、バックアップ元(old_nas)の共有フォルダ(data)をマウント、rsync、unmount、バックアップ元(old_nas)の共有フォルダ(music)をマウント・・・と繰り返す処理のようです。バックアップ先(nas)はfstabでマウントした先にディレクトリがあるような感じかな。SHARESのところで共有フォルダを指定しているので、必要に応じて修正すればよさそうです。

#!/bin/bash

# 設定項目
SHARES=("data" "music")
USER_NAME="old_user" # old_nas's username
PASS="old_pass" # old_nas's user password
OLD_NAS_IP="192.168.11.5" # old nas's IP address
LOG_FILE="/home/user/all_nas_sync.log"

echo "--- Backup Start: $(date) ---" | tee -a "$LOG_FILE"

for SHARE in "${SHARES[@]}"; do
    SRC="/mnt/old_nas/$SHARE"
    DST="/mnt/nas/$SHARE"

    echo "[$(date)] Syncing: $SHARE" | tee -a "$LOG_FILE"

    # 1. マウント実行
    sudo mount -t cifs "//$OLD_NAS_IP/$SHARE" "$SRC" -o username=$USER_NAME,password=$PASS,vers=1.0

    # 2. マウント成功確認
    if mountpoint -q "$SRC"; then
        # 3. 同期(差分のみコピー)
        RSYNC_OPTS="-av --no-perms --no-owner --no-group --modify-window=1 --partial --delete"
        sudo rsync $RSYNC_OPTS "$SRC/" "$DST/" >> "$LOG_FILE" 2>&1
        
        # 4. アンマウント
        sudo umount "$SRC"
        echo "Finished $SHARE." | tee -a "$LOG_FILE"
    else
        echo "Error: Could not mount $SHARE" | tee -a "$LOG_FILE"
    fi
done

echo "--- All Completed: $(date) ---" | tee -a "$LOG_FILE"

 

※初期バージョンから実行の結果を受けて、rsyncのオプションを見直した版です。
※最終的な運用版では、--deleteを付けて完全同期にしました。

3)実行

bash sync_all_nas.sh

 

これで同期実行できます。が、これだとずっと画面を占有してしまうので、バックグラウンドで実行させます。

nohup bash ~/sync_all_nas.sh > /dev/null 2>&1 &

 

経過は、

tail -f /home/user/all_nas_sync.log

 

実行しているか確認は、

ps aux | grep rsync

 

強制終了は、

sudo pkill -f sync_all_nas.sh
sudo pkill rsync

 

で大丈夫です。
一度、ファイル数の少ない共有フォルダで試してから、すべての処理を行った方が確実ですね。1TBで始まると処理完了まで数時間かかるので。

3. 注意点

  • ネットワーク負荷: 全コピーは時間がかかります。Wi-Fiではなく、有線LANでの実行を強くおすすめします。
  • ファイル権限: コピー先のHDDがWindows形式(NTFS/FAT32)の場合、Linux特有の権限設定が無視されることがありますが、写真や動画などのデータ保持には問題ありません。
  • 今回のrsyncコマンドは、最初NASからデータを消しても、HDDは消えないようにしていましたが、NASの容量をHDDがNASの容量より多くなってしまうので、--deleteオプションを付けて完全同期させるようにしました。実行する前に、覚悟を持って同期させます。ま、自分の場合は、このバックアップも不定期かつ実行後HDDはオフラインにする予定ですが。
  • 注意点でもないですが、CPUは50%ぐらい使っていました。CPU温度は65度ぐらい。使用したラズパイは4B/4GBモデルです。