Windows10をddでクローンしてGTP-NVME-SSD128GBからGTP-NVME-SSD1TBへ移行する

結論

(更新) 結論から言うと、NVMe接続のスロットにSATA接続のm.2 SSDは接続できない。 価格.com - 『2.5インチSSDではなくM.2のSSDの換装ないし増設について』 Lenovo ThinkCentre M75q-1 Tiny 価格.com限定 AMD Ryzen 5 PRO 3400GE・8GBメモリー・256GB SSD搭載 パフォーマンス 11A4CTO1WW のクチコミ掲示板

概要

PCであるThinkCenter M75-q1のnvmeSSD128GBを換装する際、SSD1からSSD2へ換装できなかった。 原因と解決策を記載しておく。

今回利用したSSDは下記。最終的にSSD1からSSD3へ換装した事となる。

  1. Samsunq MZ-ALQ1280 128GB M-Key nvme
  2. Kingston RBU-SNS8152S3 256GB B&M-Key SATA?  今回使えなかった
  3. Kingston SKC2500M8 1TB M-key nvme
原因

M2インターフェイスはBkeyとMkeyがあり、SSD2は両方に対応するB & M keyだが、PCが認識できていなかった事がSSD2が使えない原因だった。 B/M keyには注意する必要がある。尚、B keyは6pin、M keyは5pinとなる。
参考 M.2 SSDのKey B,Key M,Key B+Mの意味とは? - パソコンの選び方と買い方 f:id:jijiken0417:20210524071332p:plain

SSD1(中央) と 問題だったSSD2(右)
USB-M2変換でSSD1からSSD2へコピーする際の接続写真。 f:id:jijiken0417:20210524055021j:plain

解決策

そのため、B keyであるSSD3へ換装する事とした。 B keyを二つ認識できる機器を持ち合わせないため、B&M M2変換 を利用して、下記順序でSSD3へddでデータコピーした。 SSD1(B 128GB) → SSD2(B&M 256GB) へdd SSD2(B&M 256GB) → SSD3(B 1TB) へdd

手持ちのB&M USB to M2変換がB keyに対応していれば一気にSSD1からSSD3へ変換できるはず。

変換方法
  1. UbuntuのUSB Live diskを用意して起動する。
  2. diskと検索すると認識diskのDeviceが出てくるため、接続しているSSDのDeviceを調べる。
  3. ddでコピーする。
    128GBから256GBへ変換する際は下記で行った。
    dd if=/dev/nvme0n1 of=/dev/sda bs=64K conv=noerror,sync status=progress f:id:jijiken0417:20210524055302j:plain
  4. 変換したSSDがPCのM2インターフェイスから認識できるか確認する
    これが重要。認識できていないと勿論windows bootできない。
    SSD2が認識できているものと思っていたため何回もハマってしまった。
  5. window回復パーティションを削除し、Cドライブパーティションを拡張する。
    筆者は念のためディスクの最後にfdiskとddを使い回復パーティションを移しておいた。使えるのかは不明。  最終的に下記構成とした。Cドライブを300GB程度にしているのは、故障時のコピー容量を抑えるため。容量は必要に応じて増やす予定。 f:id:jijiken0417:20210524062410p:plain

最終的にwindows 10のディスクをnvmeSSD128GBからnvmeSSD1TBへ換装できた。

余談

Windowsだけでやる場合は、AOMEIはMBR形式なら無料版でできる。GTP形式はProfessional版 5480円で可能。Windows向けのバックアップフリーソフト | AOMEI Backupper Standard

WindowsでもWSL2やVirtualboxLinuxが使えるのでddでコピーするのが良い。今回はその容量すらなかったためGuesut Ubuntuを利用した。Windowsのみでddでコピーする方法の需要があればコメント下さい。

HC-SR04が未検知状態で異常動作する

未検知状態はエコーが返ってこない状態を指す。

室内では周辺のものがあるためエコーが返るため正常動作するが、
室外(見通し)だと室内同様に検知できなかった。
未検知状態では回路の違いにより、正常・異常動作するものがある事が分かった。注意する事。 Ultrasonic distance sensor HC-SR04 lack of timeout problem - #71 by DaveEvans - Sensors - Arduino Forum

左:正常 右:異常 f:id:jijiken0417:20210507230523j:plain 左右センサ共にどこで購入したか不明。今後管理していきたい...。

異常状態

  • 異常なものはタイムアウトが機能しない、たまにフリーズする。
  • 結果、センサの前に手を置いた場合に距離(赤色)が正しく測定できない事が頻発する。赤色が一定値になるはずだが、10~200cmとばたついている。
  • 異常なセンサでは数十ms間隔でサンプリングできないため、品選びに注意する必要がある。
    f:id:jijiken0417:20210507184543p:plain
    異常。赤色が距離。

正常状態

正常なものは距離(赤色)が常に測定できる。

f:id:jijiken0417:20210507184438p:plain
正常。赤色が距離

int Trig = 13;
int Echo = 12;
unsigned long Duration;
float Distance;
unsigned long startMillis,stopMillis,millisPrevious;
unsigned long millisPerRead = 10; //10ms以下は正常に超音波センシングできない

void setup() {
  Serial.begin(115200);
  delay(10);

  pinMode(2, OUTPUT);
  pinMode(Trig,OUTPUT);
  pinMode(Echo,INPUT);
  startMillis = millis();
}

void loop() {

  if ( (millis() - millisPrevious) > millisPerRead ) {
    millisPrevious = millis();
    digitalWrite(Trig,LOW);
    delayMicroseconds(2);
    digitalWrite(Trig,HIGH);
    delayMicroseconds(10);
    digitalWrite(Trig,LOW);
    Duration = pulseIn(Echo,HIGH,millisPerRead*1000); // ★340m/s x 0.007s x 0.5 ≒ 110cm
    if(Duration==0){
      Distance = 200;
    }
    else if (Duration>0) {
      Distance = (Duration/2.0)*340*100/1000000; // ultrasonic speed is 340m/s = 34000cm/s = 0.034cm/us 
    } 

    Serial.print(millis() - millisPrevious);
    Serial.print(",");
    Serial.println(Distance);
    
  }  
}

備考

偉大なるESP-MESH

ESP-MESH

ESP-MESH - ESP32 - — ESP-IDF Programming Guide latest documentation

ESP-MESHは通常のWiFiルーターにoot Nodeが接続して一般的なWiFi規格上で双方向Mesh通信できるようになっている。 各ノードは上位にはStationが接続し、SoftAPが機能している。 f:id:jijiken0417:20210425115536p:plain

更に一般的なネットワークで使われるTCP/IPプロトコルへの接続可用性も残し、

WiFi規格上に独自のESP-MESHパケットを内包する事でMACルーティングテーブルに基づく双方向Mesh通信を可能としている。ルートノードはTCP / IPでルーターと通信する事で外部IPネットワークとの間でパケットを送受信できる f:id:jijiken0417:20210425125512p:plain

・各ノードとルーター間の信号強度に基づくルートノードを動的選択できる。

・親ノードの自己修復ができる。  ”1つ以上の子ノードを持つ親ノードが故障した場合、または親ノードとその子ノード間の接続が不安定になった場合に発生します。ESP-MESHの子ノードは、新しい親ノードを自律的に選択し、それとアップストリーム接続を形成して、ネットワークの相互接続性を維持できる。”

MACアドレスに基づくマルチキャスト通信 ができる。
・動的な物理チャネル切り替えが可能である。

これらにより柔軟な自律ネットワークが構成される。

条件:

“各ノードは、同じメッシュネットワークID、ルーター構成、およびsoftAP構成で構成する必要がある。” メッシュネットワークID、softAP構成を特に変わるもので無いため良い。 各ノードでルーター構成を同じにするという事はルーターが1台の場合には問題ないが、複数の場合には接続先のルーター情報(SSID/PW/暗号化方式)を同じにしておく必要があるという事だ。

WiFiテザリングとの違い:

上位WiFiルーターに接続しているWindowsPCやスマホテザリングを数珠繋ぎにする構成だと、上位から下位以下へ接続ができない。これは基本的にはRouting tableが無いためだ。勿論ファイアウォールで制限されている可能性もある。SSIDを選択しなければ接続できないため、完全自動でリーフノードが最上位へ接続できるわけではない。

考察

 物理チャネルはSTAとSoftAPで同一チャネルとなってしまうのか?分けられないのか?

SoftAPの静的IP設定

Wifi.softAPConfig() sometimes set the wrong IP address · Issue #985 · espressif/arduino-esp32 · GitHub を参照

参考コードは下記。

#include <WiFi.h>

const char *ssid = "ESP32ap";
const char *password = "12345678";

void setup() {
  Serial.begin(115200);
  Serial.println("Configuring access point...");

  WiFi.mode(WIFI_AP);
  WiFi.softAP(ssid, password);
  Serial.println("Wait 100 ms for AP_START...");
  delay(100);
  
  Serial.println("Set softAPConfig");
  IPAddress Ip(192, 168, 1, 1);
  IPAddress NMask(255, 255, 255, 0);
  WiFi.softAPConfig(Ip, Ip, NMask);
  
  IPAddress myIP = WiFi.softAPIP();
  Serial.print("AP IP address: ");
  Serial.println(myIP);
}

void loop() {
}

備考

 SoftAP ---->ESP32 NAT Router---->PC のような構成で同一セグメントにすると正常に動かない。

ESPxxのWiFi Repeater検証

背景

必要だったのでesp wifi repeaterを検索してみた所、下記が見つかった。 順に試していきたい。

esp_wifi_repeater

dockerでbuildまでできて、写真の下の基盤に書き込みできた。但し上の基盤はできない。何か書き込みモードでもあるのか?

f:id:jijiken0417:20210424165706j:plain
ESP8266

## 結果 インターネットに向けてspeedtestすると500kbps程度であった。
ブラウジングにはほとんど使えないが、AutoMesh機能がこれは優れものだろう。
複数台使えるようになった時に使ってみる。 技適マークが無いので利用には要注意。

## AutoMesh機能 今後書く。

esp32_nat_router

イメージ書き込み注意点

上記githubの通りetpsoolからESP32 or 8266に書き込みを行う。
但しwindowsのesp toolから書き込めなかったため Ubuntu20で行った。

動作画面

接続時の様子。スマホSSID:ESP32_NAR_Routerへ接続し、インターネットへ接続できる。 速度は11Mbpsと一般用に使える。優秀。 f:id:jijiken0417:20210424153105j:plain

備考

  • 2台接続もできるので NAPT動作する。
  • CLIかrESP32_NAR_Router自身のIPを192.168.4.1から変更できる。
  • またPort Mappingも可能なため、外から中へアクセスできる。
  • 上位WiFi Routerと同一セグメントすると、下位ESP32_NAR_Routerが正常に動かない。同一セグメントにDHCP Serverが二つ存在したためかもしれない。
  • M5Atomにも書き込めた。
  • コード改変する場合、恐らく WiFi.mode(WIFI_STA_AP) を利用する。 ESP32 Useful Wi-Fi Library Functions (Arduino IDE) | Random Nerd Tutorials