こんにちは、しょうぞうです。
本日は、WSL2環境でWindows内のディレクトリのデータをバックアップするシェルスクリプトを作成していきたいと思います。
私自身4月からインフラの案件を行っているのですが、今だこれと言ってシェルスクリプトを書くということがないので練習がてらシェルスクリプトを使ってデータのバックアップを行っていきたいと思います。
やりたいこととしては、
- 特定のフォルダ(Windows環境にある)を特定のフォルダ(こちらもWindows環境)にWSL2環境のシェルスクリプトからバックアップ処理を実行したい
- バックアップする際に、tarで固めてファイル名も日時が書かれた指定のものにする。
- 世代管理は3世代分まででそれ以降は削除する。
さくらサーバの以下のサイトを参考に進めていきたいと思います。
シェルスクリプトでバックアップのすすめ~初心者でもよくわかる!VPSによるWebサーバー運用講座(5)
シェルスクリプトを作成
実際にシェルを作成していきます。
シェルスクリプトの内容
ls -lt ${1}
ls -lはよく使いますが、ここで重要なのは -t
意味は、ファイルを最終更新日時順に並べる表示オプションです。
つまり、関数の最初の引数を並び替えている。
awk ‘{print $9}’
awkは入力として受け取った文字列に対して、フィールド区切りや文字やレコード区切り文字を指定して、切り取って出力するコマンド。
今回の場合、ls -ltの出力の9番目のフィールド(ファイル名)を抽出している
eval “tar czf [バックアップ先ディレクトリ/ファイル名まで指定できる] [バックアップ対象ディレクトリ]
evalコマンドは渡された文字列に対して評価した後に、シェルコマンドとして実行するものです。
tar:ファイルをアーカイブし、圧縮するためのコマンド
-c:新しいアーカイブを作成するオプション
-z:gzip圧縮を使用するオプション
-f:ファイル名を指定するオプション
です。
シェルを通常実行
シェルを通常実行してみて実際にバックアップできるかどうかを確認してみます。
shozo1030@DESKTOP-A39U63S:~$ source backup.sh tar: Removing leading `/' from member names C:\Users\shozo>←ここで毎回wslが落ちるorログアウトする
実際にバックアップできていました!
実際に中身も確認して問題なかったです。
tar~以降の文言はエラーではなく、tarコマンドがアーカイブに追加されるふぁいるの絶対パスを処理する際に、先頭のスラッシュを削除していることを表しているそうです。
もしこれが嫌ならば、–transformオプションを使用することで回避することができるそうです。
ただ、なぜかshellを実行するとwslからログアウト?シャットダウンしてしまう?ので解決しないといけません。
まずログアウトorシャットダウンを確認する
wslの起動確認コマンドを実行したところどうやらシャットダウンしているようです。
シェルを叩くたびにシャットダウンされたらたまりません。
windows11にアクセスしてることが原因?
調べてみると、windows環境の方とアクセスすることでシャットダウンが起きるみたいなことが書かれていたので、バックアップ先をwsl2の方にしてみます。
しかし、結果変わらず。
次にどちらもwsl環境に指定してみます。
# 対象ソースとバックアップフォルダ # 絶対パスで指定 SOURCE_DIR="/home/shozo1030/logs" BACKUP_DIR="/home/shozo1030/backup"
とりあえずこんな感じでwindowsにアクセスしないパターンでやってみるが、これもダメ・・・
sourceコマンドが原因の可能性
実行コマンドをsource 〇〇でやっているのですが、これが原因かもしれないと切り分けてみました。
なので、bash 〇〇で実行したところ・・・
shozo1030@DESKTOP-A39U63S:~$ bash backup.sh tar: Removing leading `/' from member names shozo1030@DESKTOP-A39U63S:~$
wsl2が落ちずにshellを実行することができました!!!!
まとめ
今回は、shellでデータをバックアアップするところまではやりました。
次は、これをCronで定期実行できるようにしたいと思います。
以上です、参考になれば幸いです。
コメント