マウントされたストレージデバイスにデータをコピーするために必要なスクリプト

マウントされたストレージデバイスにデータをコピーするために必要なスクリプト

1 TB の HDD を持っています。Ubuntu マシンで更新するたびに、データをコピーする際に問題が発生します。Ubuntu をマウントするたびに、PC HDD から新しくダンプされたデータを外付け HDD にコピーする Ubuntu 用スクリプトの作成方法を誰か教えてもらえませんか?

答え1

バックグラウンドで実行され、ディスクがマウントされているかどうかを (たとえば) 20 秒ごとにチェックするスクリプトを使用できます。マウントされている場合は、rsync外部ディスク上のファイルをアップロード/更新するジョブを (1 回) 実行します。

以下のスクリプトは例であり、推奨される rsync ジョブも同様です。rsyncman rsyncの詳細については、 を参照してください。接続後にバックアップ ジョブを 1 回実行し、次にディスクが切断/接続されるか、スクリプトが再起動されるまで待機します。

使い方

  • 外部ディスクまたはパーティションを開き、ディスクのルート ディレクトリ内のどこかを右クリックして [プロパティ] を選択し、ディスクまたはパーティションがマウントされている場所を確認します (Nautilus プロパティ ウィンドウの [場所] フィールド)。
  • 以下のスクリプトをコピーし、空のファイルに貼り付けて、次の行を設定します。

    mounted_volume = "/mountpoint/of/the/disc"
    
  • ラインに正しいパスを設定します。

    source_dir = "/path/to/source"
    target_dir = "/path/to/destination"
    

として保存しcopy_ifconnected.py、コマンドで実行します(バックグラウンドで実行し続けます)。

python3 /path/to/copy_ifconnected.py

必要な機能がある場合は、スタートアップ アプリケーションに追加します。

スクリプト

#!/usr/bin/env python3

import subprocess
import time

mounted_volume = "/mountpoint/of/the/disc"

source_dir = "/path/to/source"
target_dir = "/path/to/destination"

rsync = "rsync -r -t"

curr_status = False

def run_backup():
    rsync_job = rsync+" "+source_dir+" "+target_dir
    subprocess.Popen(["/bin/bash", "-c", rsync_job])

while True:
    connected = subprocess.check_output(["lsblk"]).decode("utf-8")
    test1 = mounted_volume in connected; test2 = curr_status==True
    if test1 != test2:
        if test1 == True:
            run_backup()
            curr_status = True
        else:
            curr_status = False
    time.sleep(20)

関連情報