プログラマーのメモ書き

伊勢在住のプログラマーが気になることを気ままにメモったブログです

スマホで SIM を認識しくなった件

つい先日の休みの日、家に帰宅後スマホを見ると、『SIMカードがありません』みたいな表示が出ていました。

スマホをポケットとかに入れていて、たまに変な操作をすることがあるので、データ通信をオフにしてしまったのかと思い確認しても、オフになっていません。 ちょっと不思議に思いながらも、ずいぶんと古い端末(中古で買った Nexus 6P )なので、一度再起動してみることにしました。でも、症状は変わらずです。 いまの回線契約は IIJ mio のギガプランなので、こちらから障害情報がないか確認しても、なにもありません。

さて、困ったぞ、となったので、ネットを探すと、一度 SIM を差し直せというのがありました。

同じ日、昼間買い物に出かけていた時は問題なく使えていたし、外出先で SIM 周りなんて触らないので、半信半疑ながら、試してみます。

  1. 端末の電源を切ります
  2. 端末横の SIM スロットにある取り出し穴をピンで押します(手順もありました)
  3. SIMカードトレイのSIMを一度取り出します
  4. SIM の接触面を眼鏡拭きの布で軽く拭きます(静電気や傷つけるのに注意)
  5. SIM を SIM カードトレイに載せて
  6. しっかりと奥まで差し直します
  7. 端末の電源を入れなおします

すると、問題なく電波を拾うように復活しました!

SIM 差し直しの時、裏表が分からなくなったので、写真と一緒にメモに残しておきます。

にしても、こんなこと、あるんですね~。

Android エミュレータを複数ディスプレイのメイン以外に移動させるとフリーズする

タイトルの通り、 Android のエミュレータを起動して、メインのディスプレイ以外に移動させようとすると、隣の画面に映ったとたんにエミュレータがフリーズします。

こちらの記事で3画面化の話を書きましたが、それ以前から問題は起きていたので、グラボ関係とは別問題だと思います。

まあ、今までは一度フリーズしても、次にエミュレータを起動するときに Cold boot をさせれば、メインディスプレイに表示されてそのまま動いていたので、若干不便でしたが使ってきてました。

ところが、先日エミュレータを起動したままディスプレイの電源を切ったか何かのタイミングで、エミュレータがメイン以外のディスプレイに表示されました。後日、このエミュレータを起動しようとすると、どうにもメインディスプレイに戻りません。

ということで、これへの対応方法を検討しなくてはならなくなったので、調べてみたことをメモっておきます。

環境は下記のとおりでした。

  • Windows 10 21H2
  • Android Studio 4.1.3

解決方法

ググったら、割とすぐに解決方法が見つかりました(ずばり、下記記事です)。

android - AVD Crash on second monitor - Stack Overflow

なるほど、 Open GS EL renderer の設定の問題なんですね。

デフォルトでは、

f:id:junichim:20220203115741p:plain

のように、 host で検出したものを使うとなっているのを

f:id:junichim:20220203115858p:plain

ANGLE(D3D11) に変更するとよいとのことです(要エミュレータの再起動)。

試してみると、メインディスプレイ以外でも問題なく表示できるようになりました。

起動しないエミュレータの場合

上記のやり方は、エミュレータが起動している場合にしか使えません。今回のように、メインディスプレイに持ってくることができなくてエミュレータが起動しない場合は、設定そのものが変更できません。

この場合、問題のあるエミュレータのディレクトリ直下にある『 hardware-qemu.ini 』ファイルをテキストエディタで開いて、

hw.gpu.mode = host

となっている個所を

hw.gpu.mode = angle_indirect

に変更してから、エミュレータを起動( Cold boot )したら、無事立ち上がりました。

これが、正しい設定方法かどうかはわかりませんが、お困りの方、何かのご参考にしていただければと思います。

QNAP NetBak Replicator によるバックアップ

先日、第24回伊勢IT交流会にて、こちらの記事で書いた、 cron + rsnapshot による Windows のバックアップの話をしたら、 QNAP の NAS なら同期アプリかバックアップツールがあったはずだよ、と教えてもらいました。

一度、調べてみる価値ありそうだと思い、早速みてみると、2つほどバックアップに使えそうなツールがありました。

NetBak Replicator は Windows にインストールして使うツールで、ローカルドライブのデータをバックアップするツールになります。以前あきらめた Windows のファイル履歴に代わるようなツールのイメージです。

Qsync は NAS 上のデータ領域をクライアント側で同期するというのが本来の目的のようです。プライベートな dropbox を作るイメージですかね。クライアントが1つなら、データのバックアップツールと同じように使うことができます。

前に設定した cron + rsnapshot によるバックアップでは、バックアップ実行中での PC シャットダウンが運用上のネックになっていたので、 NetBak Replicator を使ったバックアップに切り替えることで、それを回避できないか試してみましたので、それについてメモっておきます。

なお、 QNAP でのバックアップ全般については、 QNAP の記事 なども参考にしてください。

NetBak Replicator のインストール

NetBak Replicator は QNAP NAS 上で動作するのではなく、Windows などにインストールして使うツールになります(QNAP が NAS を有効利用するため配布しているツールなんでしょうね)。

なので、インストールは、QNAP のサイトより NetBak Replicator をダウンロードして、 Windows にインストールする形になります。

基本的には、画面の説明通りに進めればOKです。 NetBak Replicator のマニュアル(PDF)もありましたので、ご参考にどうぞ。

インストールを進めると、最後のほうで、下記のように

f:id:junichim:20220117225854p:plain

起動オプションを決めるように求められるのですが、今回はデフォルトのままとしました。

初回起動

インストールが問題なく終わり、最初に NetBak Replicator を起動すると、下記のような画面が表示されます。

f:id:junichim:20220117225932p:plain

ここでは、地域情報としてグローバルを選択します。

でも、これってどういうことだろうと思って、画面のリンクをたどると、

QNAP モバイルアプリおよびユーティリティが現在の位置を確認する必要があるのはなぜですか? | QNAP

中国への対応とのことです。なんだかなー。

このあと、下記のような設定ウィザードが出るのですが、ここはキャンセルします。

f:id:junichim:20220118102300p:plain

最後に、シンプルモードの開始画面が表示されて、 NetBak Replicator が起動した状態になります。

f:id:junichim:20220118102347p:plain

画面下部の『拡張モード』を選択して、拡張モードで設定を進めます。

設定

無事にインストールが完了して、 NetBak Replicator が起動したら、バックアップを設定します。 が、その前に、どのバックアップ種類を使うか決定します。

どのバックアップを使うか

NetBak Replicator は3種類のバックアップがあります。

  • オートバックアップ
  • スケジュールバックアップ
  • インスタントバックアップ

オートバックアップは、指定したフォルダに変更があった際に自動的にバックアップを取るものです。 スケジュールバックアップは文字通り、設定したスケジュールでバックアップを取る機能です。 インスタントバックアップは、ボタンを押して手作業でバックアップを取る機能です。

スケジュールバックアップが望ましいかなと思ったのですが、

  • 日次・週次・月次のような形の世代管理の形ではバックアップデータを管理できない(バックアップごとに別フォルダにデータを貯めていくことはできる)
  • 古いデータの自動削除は行ってくれないので、どこかで手作業で削除作業を行う必要がある

ということのようなので、断念しました

Windows 上の作業データのバックアップが主な目的なので、

  • Windows での作業中はオートバックアップでデータを保護するようにして、
  • 作業完了後、夜中に NAS 側でスナップショットをとる( cron + rsnapshot でやったのと同様に、バックアップ先は NAS の iSCSI ターゲットをマウントしたドライブにする予定)

という形で、過去データをカバーするようにしてみました。こういった世代管理や重複データをハードリンクを使って使用量を減らすという点では、 rsnapshot のほうがいいですね。

オートバックアップの設定

オートバックアップを使うことに決めたので、 NetBak Replicator を起動して、拡張モードに切り替えて、『オートバックアップ』タブを選択します。

f:id:junichim:20220118102645p:plain

左側のツリーからバックアップ対象(画面上は『自動バックアップソース』となっています)を選択します。

右側のドロップダウンリストでバックアップ先(画面上は『宛先を選択してください』となっています)を指定します。今回はローカルドライブを指定していますが、任意のフォルダやネットワークドライブ等も指定できるようです。

あと、画面下部の『オプション』から、

f:id:junichim:20220118105839p:plain

のように、ログとして表示するものを『警告とエラーログのみを表示』に切り替えておきます。

参考:バックアップ先指定時のエラー

なお、『宛先を選択してください』のドロップダウンリストより、

f:id:junichim:20220118092346p:plain

『その他の場所』を選択すると、

f:id:junichim:20220118092131p:plain

のようなダイアログが表示されます。ここの説明の例で、ドライブ内のフォルダを指定することができる、ように書いているので、その通りに入力すると、

f:id:junichim:20220118092054p:plain

というエラーが表示されて、設定できないことがありました。指定したドライブが iSCSI ターゲットをマウントしたドライブだったためかもしれませんが、再度試したときはうまく指定できたので根本的な理由はよくわかりません。ま、ご参考までに。

バックアップ実行

設定ができれば、画面右下の『自動バックアップを開始』ボタンを押します。すると、下記のようなダイアログが表示され、

f:id:junichim:20220118102946p:plain

その場でバックアップが始まります。

なお、バックアップ先は、下記の記事などでも書かれているように、

指定したバックアップ先に

NetBakData\ユーザー名@マシン名

というフォルダが作成され、その内部に『Disk C』などのドライブ名のフォルダが作成され、その内部にドライブ名以下のパス付でデータが保存されていきます。

参考:ユーザーフォルダを指定した場合

バックアップ対象を指定する際に、下図のようにユーザー名のフォルダ以下を指定した場合、

f:id:junichim:20220118110849p:plain

バックアップ先は、 VistaProfileData というフォルダが作られて、その中に、指定したフォルダ以下のデータが保存されました。

f:id:junichim:20220118093708p:plain

一方、バックアップ対象として、直接、C:\Users\ユーザー名\指定フォルダ名 を指定した場合は、

f:id:junichim:20220118093856p:plain

のように『Disk C』フォルダが作られ、その内部に Users 以下のパスを保持して保存されました。

Windows のバージョンでユーザーフォルダの位置がいろいろと変わるので、それへの対応なんでしょうね、きっと。いずれにせよ、バックアップ対象の指定の仕方で保存先フォルダ名が変わるようですので、ご注意ください。

参考:長いファイル名について

バックアップの際に、長いファイル名についてはバックアップできないようです。スクリーンショットは取れなかったのですが、260文字以上のパス名がある場合は、エラーとして表示されていました。

オートバックアップのテスト

最初に指定したバックアップ元のデータをすべて保存できたら、

f:id:junichim:20220118094310p:plain

こんな感じの画面になり、『ステータス』が『開始』になります。

これで、自動バックアップが動作しているはずです。確認のために NetBak Replicator の画面をいったん閉じます。

テストしてみます。バックアップ元フォルダで、ファイルを追加します。

f:id:junichim:20220118094505p:plain

その後、バックアップ先フォルダを開くと、

f:id:junichim:20220118094537p:plain

おお、ちゃんとコピーされてますね。

PCを再起動してから、もう一度同じテストを行ってみましたが、あれ?なぜかうまくいきません。バックアップ対象フォルダにファイルを追加しても、バックアップが取られません。なんでだろうか?

PC 再起動時の動作確認

実は、PC 再起動時、上記で示したものと同じエラー画面が表示されていました。この時は、バックアップ先として NAS の iSCSI ターゲットをローカルドライブとしてマウントしたドライブを指定していました。

また、この時、タスクトレイのアイコンを見ると、 NetBak Replicator 自体は自動起動していますが、 NetBak Replicator を起動して確認すると、ステータスが『停止』に変更されていました。

このため、iSCSI 絡みで問題が起きているのかもと思い、バックアップ先を D ドライブ( PC の SSD 上のドライブ)内のフォルダに切り替えて、同じテストをすると、この時は問題なくバックアップが取られます。

ということで、改めてエラーメッセージの内容を考えると、PC再起動により NetBak Replicator が起動された時点で iSCSI ドライブのマウントが完了していないため、バックアップ保存先が利用できなくて、自動バックアップそのものも正常に動作しなかった、のではないかと推測されます。

起動タイミングの調整

もし、この推測の通りだとすると、 NetBak Replicator が iSCSI マウント完了後に起動すれば、正しく動作しそうです。 NetBak Replicator はどこで起動されているのかと調べてみると、タスクスケジューラにありました。

f:id:junichim:20220118104820p:plain

起動タイミングは、ログオン時になっています。

f:id:junichim:20220118105018p:plain

iSCSI はログオンするとわりとすぐに再接続されている(ドライブが有効になった旨の通知が表示されている)ので、ログオン時に若干待ってから、 NetBak Replicator の起動タスクを実行すればいいんじゃないかと思います。

そこで、タスクスケジューラのこのタスク上で右クリックして、『プロパティ』を選択し、『トリガー』タブを選択して、起動トリガーを選択して『編集』を押します。

f:id:junichim:20220118105343p:plain

『詳細設定』で『遅延時間を指定する』にチェックを入れて、遅延時間として『30秒間』を選択します。

設定を変更したら、一度PCを再起動して、 NetBack Replicator が正しく起動されるか確認すると、先ほど出ていたエラーがでません。 さらに、 NetBak Replicator を表示してステータスを確認すると『開始』になっていました。 また、実際にファイルを追加すると、即座にバックアップ先にも保存されており、問題ありませんでした。

にらんだ通り、iSCSIドライブのマウントのタイミングが原因だったようです。

まとめ

このツールとオートバックアップ機能を使うと、 PC のシャットダウン時のバックアップ停止などを考えなくてよさそうなので、気軽に使えそうです。

前回試した cron + rsnapshot は無駄だったかな?と思ったのですが、よくよく考えると wsl 側のホームディレクトリは NetBak Replicator では扱えません。

ということで、最終的には、

  • Windows 側のデータ: NetBak Replicator
  • wsl 側のホームディレクトリ:cron + rsnapshot

として、両者を組み合わせてバックアップを取るようにしました。

wsl のホームディレクトリ部分だけなら、大して処理に時間がかからないので、運用上大きな問題にならないと見込んだためです。

これで、しばらくバックアップに悩まされなくて済むかな?