備忘録:Ryzen 5 3600のLinuxでUnixBench

じゃんくはっく
じゃんくはっく

WordPressの仕事が終わったんで、今日は好きなことやるよ!

WordPressの仕事もやってるのね!

ぴー
ぴー
じゃんくはっく
じゃんくはっく

だいたい、何でも頼まれたらやっちゃうよ!w

で、Linuxはubuntuですか?

ぴー
ぴー

そういえば、だいぶ前にRyzen 5 3600をメインマシンにしたんですが、これでLinux動かしてなくて、UnixBenchのスコアが気になっていました。Diskはさくっと入れ替えられるよう、2.5inchの脱着ベイをつけてありますので今回はこのマシンにUbuntuを入れてUnixBenchを計測してみようと思います。

Intelチップ、2022年までしばらくさようなら!
投稿日:  更新日:2020年11月13日

Link

もう1年以上使っていますね。intelがRyzenを盛り返すまで繋ぎで使っているんですが、なかなかintelは画期的なのを出しませんね。AppleはM1のオリジナルCPU出してきたし、5年後はintelが昔のAMDみたいになっていなければいいんですが。

Ubuntu 20.04.1 LTSでUnixBench

MacOS10.14.x でUnixBenchを計測した時は、マルチCPUで2323.1でした。Ubuntu 20.04.1 LTSで、Ryzen 5 3600は以下のスコアです。

UNIX Benchmarks (Version 5.1.3) on AMD Ryzen 5 3600

Single-Core Score:2422.6
Multi-Core Score:7919.0

詳細は以下です。SSDは、SLCのsata2 64GBです。

   BYTE UNIX Benchmarks (Version 5.1.3)

   System: mone: GNU/Linux
   OS: GNU/Linux -- 5.4.0-42-generic -- #46-Ubuntu SMP Fri Jul 10 00:24:02 UTC 2020
   Machine: x86_64 (x86_64)
   Language: en_US.utf8 (charmap="UTF-8", collate="UTF-8")
------------------------------------------------------------------------
Benchmark Run: 日  5月 30 2021 00:29:08 - 00:57:06
12 CPUs in system; running 1 parallel copy of tests

Dhrystone 2 using register variables       50630225.0 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                     9059.2 MWIPS (9.9 s, 7 samples)
Execl Throughput                               7946.0 lps   (29.9 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks       1256459.1 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks          338174.5 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks       3192098.2 KBps  (30.0 s, 2 samples)
Pipe Throughput                             2633467.7 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                 364452.5 lps   (10.0 s, 7 samples)
Process Creation                              10672.3 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                  10448.3 lpm   (60.0 s, 2 samples)
Shell Scripts (8 concurrent)                   5218.2 lpm   (60.0 s, 2 samples)
System Call Overhead                        3716288.0 lps   (10.0 s, 7 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0   50630225.0   4338.5
Double-Precision Whetstone                       55.0       9059.2   1647.1
Execl Throughput                                 43.0       7946.0   1847.9
File Copy 1024 bufsize 2000 maxblocks          3960.0    1256459.1   3172.9
File Copy 256 bufsize 500 maxblocks            1655.0     338174.5   2043.4
File Copy 4096 bufsize 8000 maxblocks          5800.0    3192098.2   5503.6
Pipe Throughput                               12440.0    2633467.7   2116.9
Pipe-based Context Switching                   4000.0     364452.5    911.1
Process Creation                                126.0      10672.3    847.0
Shell Scripts (1 concurrent)                     42.4      10448.3   2464.2
Shell Scripts (8 concurrent)                      6.0       5218.2   8697.0
System Call Overhead                          15000.0    3716288.0   2477.5
                                                                   ========
System Benchmarks Index Score                                        2422.6

------------------------------------------------------------------------
Benchmark Run: 日  5月 30 2021 00:57:06 - 01:25:17
12 CPUs in system; running 12 parallel copies of tests

Dhrystone 2 using register variables      377415057.2 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                    85109.8 MWIPS (9.8 s, 7 samples)
Execl Throughput                              38242.8 lps   (29.9 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks        870656.3 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks          231207.7 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks       2754722.9 KBps  (30.0 s, 2 samples)
Pipe Throughput                            17510677.3 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                1622682.3 lps   (10.0 s, 7 samples)
Process Creation                              70024.7 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                  67019.5 lpm   (60.0 s, 2 samples)
Shell Scripts (8 concurrent)                  10011.7 lpm   (60.0 s, 2 samples)
System Call Overhead                       16785255.3 lps   (10.0 s, 7 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0  377415057.2  32340.6
Double-Precision Whetstone                       55.0      85109.8  15474.5
Execl Throughput                                 43.0      38242.8   8893.7
File Copy 1024 bufsize 2000 maxblocks          3960.0     870656.3   2198.6
File Copy 256 bufsize 500 maxblocks            1655.0     231207.7   1397.0
File Copy 4096 bufsize 8000 maxblocks          5800.0    2754722.9   4749.5
Pipe Throughput                               12440.0   17510677.3  14076.1
Pipe-based Context Switching                   4000.0    1622682.3   4056.7
Process Creation                                126.0      70024.7   5557.5
Shell Scripts (1 concurrent)                     42.4      67019.5  15806.5
Shell Scripts (8 concurrent)                      6.0      10011.7  16686.2
System Call Overhead                          15000.0   16785255.3  11190.2
                                                                   ========
System Benchmarks Index Score                                        7919.0

同じRyzenだと、ThinkCentre M75q-1 Tiny のRyzen 5 Pro 3400GE (3.30GHz, 2MB) が以下のスコアです。

UNIX Benchmarks (Version 5.1.3) on Ryzen 5 Pro 3400GE (3.30GHz, 2MB)

Single-Core Score:2151.7
Multi-Core Score:6552.1

Ryzen 5 3600のが速いですが、このマシンも頑張っていますね。これは以下で紹介しています。

130W電源でThinkCentre M75q-1 Tinyのベンチマーク

URL

ちなみに、このマシンはWEBサーバにしようと思いっていたのですがフォートナイトやるっていうんで息子に持っていかれてしまいました。。。なので、このブログはスマホPixel3のWEBサーバでがんばっています!

まとめ

今回、なんとなくわかったのは以下となります。

・Ryzen 5 3600 は、シングル2422.6 マルチ7919.0 のUnixbenchスコア
・2021/05/30時点でintelの次のCPUは、「Alder Lake」を2021年後半に発売予定
・これは10nmのようです
・特に困っていないので、7nmとか5nmのintelが出るまでじっくり待ちます

あとがき

Intelがこのまま、黙ってAMDを先行させるだけではないと思っていますが、苦戦しているようです。まぁ、しかし、普通の作業をしているだけであれば、Core i7 3770; (Ivy Bridge)でもぜんぜん十分で、いまだにサブマシン(メインマシンに近い存在)で頑張っています。このCPUは、第3世代のもので、今から約10年前にリリースされました。macosも10.8くらいから10.15(現在)でずっと使っています。重い作業するのは、ビルドするときくらいでしょうか。あとはアプリケーションを同時に30個くらい開いたりしながら作業するとき、少しもたつくくらいです。

著者にメッセージ

間違いのご指摘など、コメントじゃなくて、個人的にやりとりしたい場合はこちらからどうぞ。お返事が遅くなるときもありますが、ご了承を。

    Apple純正のUSキーボードの分解メモ

    じゃんくはっく
    じゃんくはっく

    メルカリで純正ワイヤレスキーボードのUS配列をゲットしたよ!

    またジャンクですか〜?

    ぴー
    ぴー
    じゃんくはっく
    じゃんくはっく

    一応、完動品っぽい!ジャンクじゃないよー

    めずらしぃ!

    ぴー
    ぴー

    アップルのワイヤレスキーボードとはこんな製品です。今は、Magic Keyboard(充電式) っていうタイプなんで、乾電池を入れるこのタイプは古い製品ですね。写真は日本語配列ですが、これのUS配列でかたかながないタイプです。記号の位置や、英数・かなボタンが無いタイプとなります。

    で、この古いタイプのワイヤレスキーボードは電池が3本のタイプと、2本のタイプがありますが、安ければどっちでもよかったので3本タイプをゲットしておきました。

    状態を確認!

    ぱっと見は、結構綺麗なんですが写真のようにスペースキーが少し変です。左側が沈んで、右側は浮いています。たぶん、清掃して組む時にちゃんとハマっていなかっただけっぽいので、押し心地もよくないしちょっとバラしてみることにしました。

    バラすとこんな感じです

    このタイプのキーはパンタグラフのプラスチックがキートップにハマっているだけです。外すのは、キートップを上側か、下側から持ち上げれば外れます。スペースキーなど、少し大きめのキーは、針金で補強されています。

    良くみると、パンタグラフの一部と、金属部分が少し曲がっています。がーん! 左が沈んで右が浮いていた原因はこれですね。

    パンタグラフは爪折れが右側にあったので、左右入れ替えて、右側が浮かないようにして対応。これでうまく治らない場合はまた考えることにします。あと、針金を受ける金属部分が曲がっていたので、ストロークが動かず、左側が沈んでしまっていたようです。金属部分は修正しておきました。

    ハメ方のコツ

    嵌める前に、掃除もしておきました。多分、前のオーナーが掃除してくれたんだと思います。あまり汚れはなかったのですが、ブラシと綿棒で軽く清掃。

    で、ハメるコツですが、スペースキーなど、補強に針金が入っているキーはまず片一方を穴に通してやると簡単にハマります。

    この薄型のキーボードは見かけによらず長持ちしますので、末長く使うなら保守用のジャンクを購入して修理するのもありかなと。今は使わない日本語キーボードを保守用のドナーにしておいても良いかも。薄い割には押し心地が結構よくて、気に入っています。毎日使っていても、かなり長持ちします。

    下の写真は修理が終わったところ。浮いていた部分もしっかりハマって、折れていた爪も今のところ問題なく、しっかりタイプできるようになりました。

    純正の場合は、このように電池残量が見えたりします。

    あと、キーボード設定で「F1、F2などのキーを標準のファンクションキーとして使用」のオプションが表示されます。

    まとめ

    今回、なんとなくわかったのは以下となります。

    ・メルカリ相場は2000円〜4000円くらい
    ・Apple Wireless Keyboardは、電池3本のA1255と、2本のA1314とがある
    ・パンタグラフの爪は弱そうなので、バラして掃除するときは要注意
    ・キートップだけ外して、パンタグラフはつけたまま掃除のほうが良いです
    ・やっぱりUS配列は使いやすい
    ・パチモノとは大違い、Apple純正はタイプしやすいです!

    あとがき

    10年以上、このワイヤレスの日本語配列を使っていたのですが、拠点が複数になり1年前から英語配列のパチモノキーボードを使っていました。もともと英語配列のキーボードを使っていたので、すっかり慣れてしまったのですが、トニカクこのパチモノキーボードの押し心地が非常によくありません。

    あえて言葉で表現するなら、Apple純正はしっとりした感じ。パチモノは軽くてキートップから滑る感じなんですよね。純正は薄くてもしっかりとした打鍵感がありますが、パチモノは打鍵感が弱いんです。うーん、言葉ではうまく表現できないですね。w まぁ、安いのでしかたありません。Bluetoothキーボードが1000円ちょっとで手に入るのはある意味、驚異的ですからね。

    で、毎日触るキーボードですので、Apple純正の、US配列をゲットすることにしたのです。

     この薄型のキーボード、見た目は押しにくそうですが実は結構快適にタイプできます。キーストロークがあるタイプだと疲れてしまうのでこの薄い、ストロークがほとんどないこのキーボードが好きなんです。最近はこれの後継でMagic Keyboardというのがあるようで、次に壊れたら、これを使ってみようかなと思います。

     このキーボードが好きな理由は他にもあって、ESC横のF1〜F4あたりのキーに触りやすくて、ミッションコントロールなど特殊キーを割り当てています。いつかは、メカニカルスイッチのキーボードをDIYしたいので、こういう薄型タイプからは卒業しないといけないのですが、、、

    著者にメッセージ

    間違いのご指摘など、コメントじゃなくて、個人的にやりとりしたい場合はこちらからどうぞ。お返事が遅くなるときもありますが、ご了承を。

      6年使ったSSDが突然、認識せず、あれこれした記録

      じゃんくはっく
      じゃんくはっく

      6年使ったSSDが突然、認識されなくなって困った・・・

      バックアップとか大丈夫だった?

      ぴー
      ぴー
      じゃんくはっく
      じゃんくはっく

      丁度いいタイミングでOS載せ替えようとしてた時だったから、大丈夫だったよ!

      SSDの寿命って実際どのくらいなんでしょうね?

      ぴー
      ぴー

      ということで、ちょうどOSを載せ替えようとSSDを調達して、大事なデータをコピーし終えたところで、突然認識しなくなりました。認識しなくなったSSDはこれ。当時のカタログの切り抜きを。

      正式な型番と購入した値段、時期は以下です。

      Samsung SSD840 500GB MZ-7TD500B/IT

      2013年8月2日当時に購入したものですが、当時は結構高かったですね!1年後くらいに1回壊れたので、保証があったので新品にしていだきました。なので、2014年12月から、2021年3月まで使っていたことになります。約6年ですね。

      順番は前後しますが、壊れたからSSDを新調したわけではなくOSを載せ替えようと、新しいSSDを先に購入しておいたわけです。ラッキーでした!

      新しいSSDは何にするか品定め!

       さて、OSを載せ替えるので新しいSSDを調達しようと思います。価格と相談ですが、容量どのくらいにしようかと久しぶりにリサーチ。

       なんと1TBが、¥10,980じゃないですか!7年前の価格に換算すると、5万ちょいですよ。しかもCrucialで国内正規品。これでいいやということで速攻ぽちっとしました。当時は500GBでも十分と思っていましたが、あれこれ動画編集とかアプリとかいろいろ入れるので500GBだとちょっと窮屈でした。1TBあればだいぶ余裕ができますね。

      Amazon : Crucial SSD 1000GB MX500
      ¥10,980

      https://amzn.to/2ORFRiK

      このSSDのスペックは以下です。5年保証で、360TBのTBWがあります。きっと5年では、使いきれない書き込み総量ですね。

      Crucial SSD 1000GB MX500 CT1000MX500SSD1/JP
      発売時期:2018年 10月
      Micron 3D TLC NANDフラッシュを採用
      Silicon Motion SM2258 SSDコントローラを搭載
      2.5インチフォームファクター、厚さ7mmの薄型モデル
      SATA 6Gbpsインターフェース対応
      読込速度 最大560MB/s
      書込速度 最大510MB/s
      4kランダム読込 95,000IOPS
      4kランダム書込 90,000IOPS
      ファイルの保存や転送の高速化するDynamic Write Accelerationテクノロジー
      AES 256ビットのハードウェア暗号化によりデータを安全かつ確実に保護
      Acronis True Image for Crucialに対応
      Crucial Storage Executiveに対応
      250GB、500GB、1TB、2TBの容量をラインナップ
      5年間の制限付保証
      総書込容量(TBW)360TB
      (1日当たり197GBの書込を5年間行った場合に相当)

      参考

      https://chimolog.co/bto-ssd-mx500-1tb/
      https://www.crucial.jp/ssd/mx500/ct1000mx500ssd1
      PDF

      macos10.15.7にしてデータ戻し中・・

      順調にmacos10.15.7 にアップデートしてデータなどを戻し中にコピーが終わったあと、突然認識しなくなりました。データコピーはSSDをUSB3.0に繋ぐケーブルで接続していました。

      aliexpress:USB 3.0 to Sata Cable

      URL

      アリエクで500円くらいのものです。結構、便利でUSBだと遅いし容量も欲しい時なんかに重宝します。1本あると便利ですよ。

      なんとか認識させる!

      Testdisk でパーティション検出させようと1日以上かけてパーティション解析。このツールのインストールはbrewで入ります。

      $ brew install testdisk
      $ sudo testdisk

      なんかおかしいですよね! このDISKはパーティションは2つしかないのですが、複数見つかります。ほげー。あ、ちなみにtestdisk はログは取らない方がよいです。あとでわかりましたが、でかいログファイルを消すことになりました。Disk Drillのクリーンアップ画面です。

      testdiskを実行する際は、ログを意図的に残したい場合意外は、[ No Log ]を選択 して実行したほうが無難です。操作全般は以下が参考になります。

      データ復旧大図鑑:Mac版TestDiskの使い方

      https://jisaku-pc.net/hddhukyuu/archives/8354

      だめもとで、いらないパーティションを削除して書き込んでみます。

      上下矢印で行を選択、左右矢印でD状態にできます。OKだったらEnter。

      じゃ、書き込んでみます。

      はい、ダメでした! ま、大事なデータはすでにコピー済ですから問題ありません。

      じゃ、ディスクユーティリティーでフォーマットしましょうか。

      ぐぬぬ。フォーマットさえ出来ないとは! 以下のパターンもありました。

      “Samsung SSD 840 Series Media”(disk2)を消去して“500G”を作成中
       ディスクをマウント解除中
       パーティションマップを作成中
       パーティションのアクティベートを待機中
       disk2s2をMac OS拡張(ジャーナリング)、名前を500Gとしてフォーマット中
       Initialized /dev/rdisk2s2 as a 466 GB case-insensitive HFS Plus volume with a 40960k journal
       ディスクをマウント中
       disk2s2を消去した後にマウントできませんでした
       空のAPFSコンテナを新規作成中
       内部エラーが起きました。:(-69614)
       操作が失敗しました…

      根本理由はわかりませんが、EFI領域が邪魔しているのかもしれません。試しにリブートして、リカバリーモードでディスクユーティリティーを起動したらうまくフォーマットできました。同じようなエラーコードでフォーマットできないときは、お試しを。実機だとコマンド+Rですね。Hackintoshだと、リカバリーモードをEFIブート時に選択します。

      Smart情報を見てみる!

      一応、無事にフォーマットできたので、ディスクユーティリティーのFastAidでチェックしておきましたが問題はありませんでした。今度は有償ツールですが、Disk Drillで見てみます。

      なんか「寿命」の文字がたくさん出ています。しかし、それほど気にしてはいけません。

      Smart情報は各社、独自で出しているようなので仕様が完全に共通化していません。ここでは以下くらいが参考になるかなと。16326時間、稼働していて電源は5116回付けたと。最後の書き込み量は単位はなんでしょうか? 赤字で記載した部分はよくない数字です。

      Reallocated sector count 43
      Power-on hours count 16326
      Power cycle count 5116
      Used Reserved Block Count 43
      Runtime Bad Count (total) 43
      Total LBAs Written 3541977737

      Linuxのsmartctlコマンドだと以下のように出るようです。同じ型番のサンプルデータはGITHUBにあったのでリンクしておきます。このSSDは赤字相当の数字は0ですね。書き込み総量は33.13 TBもあるのにね。

      Github:SMART/SSD/Samsung/SSD 840/SSD 840 Series 500GB
      Link

      ID# ATTRIBUTE_NAME          FLAGS    VALUE WORST THRESH FAIL RAW_VALUE
        5 Reallocated_Sector_Ct   PO--CK   100   100   010    -    0
        9 Power_On_Hours          -O--CK   091   091   000    -    40511
       12 Power_Cycle_Count       -O--CK   096   096   000    -    3871
      177 Wear_Leveling_Count     PO--C-   086   086   000    -    169
      179 Used_Rsvd_Blk_Cnt_Tot   PO--C-   100   100   010    -    0
      181 Program_Fail_Cnt_Total  -O--CK   100   100   010    -    0
      182 Erase_Fail_Count_Total  -O--CK   100   100   010    -    0
      183 Runtime_Bad_Block       PO--C-   100   100   010    -    0
      187 Uncorrectable_Error_Cnt -O--CK   100   100   000    -    0
      190 Airflow_Temperature_Cel -O--CK   069   048   000    -    31
      195 ECC_Error_Rate          -O-RC-   200   200   000    -    0
      199 CRC_Error_Count         -OSRCK   099   099   000    -    122
      235 POR_Recovery_Count      -O--C-   099   099   000    -    1745
      241 Total_LBAs_Written      -O--CK   099   099   000    -    71143537386
                                  ||||||_ K auto-keep
                                  |||||__ C event count
                                  ||||___ R error rate
                                  |||____ S speed/performance
                                  ||_____ O updated online
                                  |______ P prefailure warning

      書き込み量のTotal LBAs Writtenは、どうやらセクターサイズを掛けるようです。testdisk とかでみると、セクターサイズは512byteのようです。

      以下の計算機で算出すると、1.65 TBとなりました。

      SSD Total Bytes Written (TBW) Calculator

      https://www.virten.net/2016/12/ssd-total-bytes-written-calculator/

      Samsung SSD840のTBWは?

      当時のカタログをみても、TBWは記載されていませんでした。書いてある記載は、MTBF(平均故障間隔)として、150万時間とあります。

      以下に当時のレビューがありましたが、その中に以下とあります。

      総書き込み容量(TBW)は、当社規定で1日あたり20GBで計算しています。そして、840では毎日20GB書き込む人でも3年間は十分保証できる品質を実現した、ということです。

      https://akiba-pc.watch.impress.co.jp/hotline/20121117/sp_fline.html

      つまり、21.9TByteがTBWということですかね。ということは、まだ1.65 TBしか書き込みしていませんが、Reallocated sector count 43など出ていますので、かなり要注意が必要ですね。これは実際に不良セクタが発生した数なので、今後もっと増えていくはずです。つまり、即ダメになるわけじゃないですが、もう寿命に近づいていると思って間違いありません。SMART情報をモニタリングしながら、軽めの作業に使うことにします。音楽再生用のキャッシュとか、データが飛んでも問題ないような用途です。

      TechTool Pro 13でチェック

      ちょっと違うツールを使って、SSDをチェックしてみることします。TechTool Pro 13のサーフェーススキャンとSmartチェックをやってみます。

      サーフェイーススキャンは問題ありませんでした。

      注意は必要そうですが、まだ行けそうな感じですかね。Windowsマシンにくっつけて、SAMSUNG Magician Softwareでチェックしてみるのがいいんですが面倒なんでやめました。またの機会に確認してみます。

      SAMSUNG Magician Software

      https://www.samsung.com/semiconductor/minisite/jp/support/tools/

      現状のSSD速度ベンチマーク

      実質、購入してから6年使っているSSDのベンチマークを計測しておきます。

      SSDに記録されている時間は、16326時間で約680日、トータル書き込み量は1.65 TBの、Samsung SSD 840 Series MZ-7TD500B/IT です。

      あと、今回購入したCrucial SSD 1000GB MX500 CT1000MX500SSD1/JPは以下です。

      まとめ

      今回、なんとなくわかったのは以下となります。

      ・バックアップは大事
      ・不良セクタは43個あった。今後増えそう
      ・書き込み総量は超えていないが、そろそろ寿命と判断していいだろう
      ・耐用年数を超えたら、TMP領域など軽めのDISK用途に使う
      ・心配なら廃棄すれば間違いないです
      ・SMART情報は各社違うので、要確認必要
      ・Disk DrillのSMART表示、監視は参考程度に
      ・TechTool Pro 13のほうが、Disk関連のチェックは豊富
      ・今回はtestdisk では復旧できず
      ・ディスクユーティリティーで初期化出来ない時は、OSをリカバリーモードで起動してやれば今回はフォーマットできた
      ・紹介しなかったけど、TechTool Pro 13のスナップショット機能は便利
      ・SSDはHDDと比べても結構、耐久性あるな!
      ・最近のSSDは、保証期間中に書き込み総量を超えるのはまず、無理
      ・しかし、故障するかどうかは使う環境により左右される

      あとがき

      SSDの寿命というのは、今回体験したようにいつか訪れます。稼働部品がないHDDとは違いSSDならずっと使えるはずと思いガチです。長年ずっと使い続けているなら、ちょっと点検してみるのもいいかもしれませんね。

      加えて、ファイルシステムの不整合というのは、使っているうちにどうしても発生してしまいます。5、6年の間には停電もあり、ブレーカー落ちることもあり1年に一回くらいは、OSをクリーンインストールしてバックアップ(DropBoxやGoogleDriveなど)に大事なデータは分散バックアップしておくのがやっぱり大事だなーと改めて思いました。今回は、特に大事なデータは消失しませんでしたが、運がよかったなーと思います。ちょっと違うタイミングだったら結構慌てていたかもしれません。

       ついつい面倒になって、クリーンインストールは腰が重いですが、これからは1年に一回くらいはやろうと思います。あと、SMART情報のモニタリングはやっておいたほうがいいですね。今回、死にかけのSSDの寿命が完全に尽きたらまたレポートしようかなと思います。

       あと、HDDですが6TBが1万で買えるんですね! みんなNAS用途で使ってるみたいですが、何入れてるんでしょうか。TVの録画データとかですかね。

      著者にメッセージ

      間違いのご指摘など、コメントじゃなくて、個人的にやりとりしたい場合はこちらからどうぞ。お返事が遅くなるときもありますが、ご了承を。

        XIAOでMacのスクリーンショット専用USBキーを作るDIY

        じゃんくはっく
        じゃんくはっく

        スクショの専用キーがほしい!

        Macだと、シフト+コマンド+3とかの?

        ぴー
        ぴー
        じゃんくはっく
        じゃんくはっく

        Mac標準だとそうだけど、Skitchっていうスクショツール使ってるからシフト+コマンド+5だね。

        いろんな需要があると思うからカスタマイズできるといいね

        ぴー
        ぴー

        今回のDIYは、ちょっと実用的なものを作ろうかと思います

        最近、はまっている小さくて安いArduino互換機、XIAOを使ってカスタマイズできるキーボードを作ろうと思います! 冒頭でも少し触れましたが、MacのスクショアプリでSkitchっていうツール使っているんですが、このスクショのショート専用のキーボードを作ろうかと。ショートカットは、シフト+コマンド+5ですが、3つもボタンを押さないといけないので、1ボタンだと助かります。

        その後、Skitchの編集メニューから「画像をコピー」でクリップボードに入れてWordPressのローカルアプリに貼り付けるのが、一連の動きです。このショートカットがシフト+コマンド+C です。

        構想では、この2つのボタンが専用であるといいなと。キャンセルしたいときにESCキーがあると便利かもしれませんね。

        使えるUSBライブラリは?

        TinyUSB Mouse and Keyboard library

        https://github.com/cyborg5/TinyUSB_Mouse_and_Keyboard/

        このライブラリは、Chris Youngさんが統合したTinyUSBです。以下で紹介されています。

        Mouse and Keyboard Control Using TinyUSB and BLE

        examplesを試したのですが、記述がわかりやすいし使いやすそうだったのでこれでやってみることにします。他にも、Seeedの紹介ページにAdafruitのライブラリを使った例がありますが、examplesを見た限りでは使いにくそうでしたのでこちらはパスです。

        Seeeduino XIAOをUSBデバイス(TinyUSB)として使う

        ライブラリを入れる

        マスターのZIPをArduinoIDEから入れて、例題をやってみます。

        ZIP : TinyUSB_Mouse_and_Keyboard

        URL

        Arduino IDEからライブラリをいれるのは、以下からです。

        ZIPのライブラリを入れると、以下のように同じところから見えていると思います。

        提供されたライブラリは、Macだと以下に入るようです。直接ここに入れてもOKです。

        /Users/USERNAME/Documents/Arduino/libraries/

        ちなみに、ArduinoIDE組込(デフォルトの)は以下です。

        /Applications/Arduino.app/Contents/Java/libraries/

        XIAOのボード関連は以下にあります。

        /Users/USERNAME/Library/Arduino15/packages/Seeeduino/

        ライブラリとか、PGのディレクトリ以下に格納しておいたほうが後からわかりやすいかもしれません。数年後、また動かそうとすると環境変わっていたりしますからね。その場合は、includeをダブルクオートで囲って記載すればカレントディレクリ(現在のディレクトリのこと)を参照します。

        #include "TinyUSB_Mouse_and_Keyboard.h"

        サンプルを動かしてみる

        Macユーザーで、Launchpad のショートカットをF5にしていれば動作します。

        $ git clone https://github.com/take-i/XIAO-USB-example.git
        $ cd XIAO-USB-example/xiao_usb1/
        $ open xiao_usb1.ino 

        XIAOに書き込んで、見てください。ブラウザが起動して JunkHackのページが見えていれば成功です。

        サンプル例では、Launchpadが開き、コマンドFで検索、英字モードに切り替えてterminalをタイプしてターミナルを開きます。ターミナルからはURLをオープンしています。macの場合、コマンドの修飾キーは以下のようにKEY_LEFT_GUIが相当します。WindowsだとWINキーです。

          // New terminal windows
          Keyboard.press(KEY_LEFT_GUI);
          Keyboard.write('n');
          Keyboard.releaseAll();

        Keyboard.pressは、押しっぱなし状態になるのでKeyboard.releaseAll()でリリースします。delayを入れないと、速すぎて期待する動作にならないので適当に調整します。

        4ボタンの専用キーボードを作る!

        さて、サンプルはうまく動いたので実際にボタンをつけて日常的に使える状態にします。こんなコードにしました。

        https://github.com/take-i/XIAO-USB-example/tree/master/ss-key

        Pin接続は、A7 , A8 , A9 , A10 とGNDの5つです。なお、このPGは同時にボタンを押した時の考慮はしていませんのでご注意を。クリティカルなボタンの場合は、何かキーが押されている場合は違うキーの処理に入らないようにする必要があります。

        筐体に組み込む!

        3Dプリンターとメカニカルスイッチで作るのが面倒だったので、適当なジャンク品のキーボードを漁ってきました。

        15年くらい前の無線キーボードです。エンターキーが無くなっているのは、子供に剥がされたからです。それ以来、使っていませんでしたがここに来て約に立ちそうです。

        このタイプのキーボードはノートPCと同じで、キーボードの下はフィルムのメンブレンスイッチになっています。これにジャンパー配線するのは厳しいので、端っこのパーツを使うことにしました。

        こっちは基盤があって、なんとかなりそうです。キーボード筐体をグラインダーで切断し、左側部分を使うことにしました。こんな感じ。

        配線はこんな感じ。XIAOは小さいので、ほんと助かります。

        黒い線がGNDで、それ以外はボタンからのプリント基板の配線からジャンパー線を出して使っています。

        こんな感じで、無線キーボードの上に置いてあります。

        右側からESC、スクショ、スクショのコピー、https://www.canva.com/ を開く の4機能を持たせてあります。今もこの記事を書いているときにこのボタンを使っていますが、かなり便利ですね! canvaを割り当てているのは、ブログ記事のサムネイルをいつもここで作るからです。今回はこんな感じかな?

        Macからはこんな感じで認識されています。

        キーボードの修飾キーにも、出ていますね

        MacのKeycodeを確認

        ※追記
        MacだとどんなKeycodeがタイプされるのか確認しておきたかったので、macosで動作するキーロガーのソースを少し修正してDecで数字を出すように改修したものが以下にあります。

        Mac OS X Keylogger

        https://github.com/take-i/keylogger-macos

        オリジナルは、アトランタのアプリ開発者、ケーシー・スカボローさんが作ったものです。簡単に使い方を記載しておきます。

        $ sudo touch /var/log/keystroke.log
        $ sudo chmod 644 /var/log/keystroke.log
        $ git clone https://github.com/take-i/keylogger-macos.git && cd keylogger-macos/
        $ make
        $ sudo ./keylogger

        ログは以下のパスに数字で出力されます。

        $ tail -f /var/log/keystroke.log

        たとえば、Macのキーボード配列の場合、F3キーはMission Controlのキーとなり、Keycodeは、160となります。F3の場合は99です。純正キーボードの場合は、以下のようにキーボード設定に「F1、F2などのキー標準のファンクションキーとして使用」のチェックボックスがでます。社外キーボードの場合、これはでないようです。

        DIYキーボードをUSB接続したとき、macのキーボードだと認識させてMission Controlのコードとして認識させるようにする方法を模索したのですが、ちょっとよくわかりませんでした。また、いつか再チャレンジしたときに覚書として書いておきます。

        まとめ

        今回、なんとなくわかった・わからなかったのは以下となります。

        ・Seeed XIAOは簡単にキーボード・マウスのデバイスが作れる
        ・スイッチOn,OffタイプであればPinの数分、キーは作れる(最大、11Key)
        ・ライブラリは、TinyUSB Mouse and Keyboard libraryが使いやすかった
        ・KeycodeというのがUSBの仕様で決まっているようです(hut1_12v2.pdf
        ・こっちのUSB仕様書のほうが新しいかな?(hut1_21_0.pdf
        ・macの場合は、Mac OS X Keylogger を少し手直しすれば番号がわかる
        ・しかし、USBの仕様書とは違う値が帰る(例:F3は、macだと10進で160または99、USB仕様書では、60)
        ・PGの定義は、0xC4で10進だと196
        ここによれば、0x88以上は、その値から0x88を引いた数(10進だと136)となるようです。つまり、196-136=60 なるほど!PGの定義からは謎がとけました
        ・しかし、macのkeycodeは違う値を出す。ここがよくわからない
        ・おそらく、macはkeycodeのマッピングテーブルを持っているのだろう
        ・または、キーボード種類によってF3はMission ControlになるようOSがマッピングしているのだろう
        ・keycodeとUSBデバイスのレイアウトの関係はまだ奥が深そうだ
        ・フィルムのメンブレンスイッチって自作できないかな?
        ・アルミテープとラミネートフィルムで作れないかな?

        あとがき

        作ってみて、実際に使ってみたらすごく具合がいいです。USBデバイスをこんなに簡単に作れるとは、驚きですね。いつか、本格的なキーボード作りもしてみたいです。40%キーボードとか小さくて可愛いので使ってみたいんですが、何から手をつけていいのかよくわかりません。あと、薄いMacのキーボードに手が馴染んでしまったのでという理由もあります。

        まぁ次キーボード作る機会もあると思うので、その時は自作したいですね。

        著者にメッセージ

        間違いのご指摘など、コメントじゃなくて、個人的にやりとりしたい場合はこちらからどうぞ。お返事が遅くなるときもありますが、ご了承を。

          ポートフォワードの経路で、Uターン NATとかヘアピンNATが使えないルータの場合のあれこれ

          先日、以下のように困っていました。

          Termuxのapache2+php+mariadbのチューニング前のwordpressの速度とか
          ::
          まぁ、速度的なことより困っていることがあります。それは、ローカルのマシンから、termux上で動作しているwordpressにグローバルIPでアクセスできないことです。この場合、ルータの管理画面にアクセスしちゃうんで、どうしようかなと。こういうのなんていうんでしたっけか? とにかく、今の拠点のルータ(PR-400KI)は、内側ネットワークから外側のグローバルアドレスにアクセスしたものを、変換(最終的にサーバのプライベートアドレスに変換)してくれないのです。

          これ、言葉で書くとよくわかりませんが、どんな問題かというと以下のようになります。

          こういう表現として、UターンNATとか、ヘアピンNATとか呼ぶようです。これが出来るルータとできないルータがあり、NTTから借りているルータではできませんでした。いろいろ解決方法があるとは思いますが、一番簡単なのは、クライアントPCをVPNで外部のネットワークからアクセスさせる方法です。つくば大学のVPN Gateを使えば簡単に解決できますが、インターネット経路となりいまいちです。プレイベート間の通信なのでリバースプロキシを経由する方法が良さそうです。ポート変換がなければ、hosts を書き換えるか、内部DNSを立ち上げればいいのですが、今回の場合は、スマホサーバで提供しているポートは8080です。80と8080を対応付ける必要があり、hosts だけでは無理なので、リバースプロキシを通して、アクセスしてみることにします。

           ブログの更新は、クライアントPCからしか行わないのでこのPC中に設置してみました。もちろんリバースプロキシを分離して、内部DNSを立ち上げれば、理論上は何台でも違うポートとIPを使って好きなドメインでアクセスできます。そのうち、IoTデバイスとか、スマホサーバでクラスタリングとかロードバランサーとか使い出したら内部DNSやリバースプロキシは欲しくなってくるのですが、それはその時にまた考えることにします。

           ということで、クライアントにリバースプロキシを作って、スマホサーバの8080ポートで提供されているWordPress にアクセスしてみることにします。幸い、クライアントはMacなので nginx とかで簡単に作れます。

          Macでリバースプロキシをnginxで作る

          経路のイメージはこんな感じでしょうか。まずは、nginx を入れます。

          $ brew install nginx

          起動と再起動、停止は以下のようにします。

          ・起動
          $ sudo nginx
          ・再起動
          $ sudo nginx -s reload
          ・停止
          $ sudo nginx -s stop

          設定を以下のように書き換えます。server_nameや、proxy_passのIPやポートなど読み替えて書き換えてみてください。

          /usr/local/etc/nginx/nginx.conf
          ::
          worker_processes 1;
          error_log /usr/local/var/log/nginx/error.log;
          
          events {
            worker_connections  1024;
          }
          
          http {
            # This should be in the same directory as this conf
            # e.g. /usr/local/etc/nginx
            include       mime.types;
            default_type  application/octet-stream;
            
            # Note this log_format is named 'main', and is used with the access log below
            log_format   main '$remote_addr - $remote_user [$time_local]  $status '
              '"$request" $body_bytes_sent "$http_referer" '
              '"$http_user_agent" "$http_x_forwarded_for"';
          
            sendfile        on;
            keepalive_timeout  65;
          
            # Without this I got this error: 'upstream sent too big header
            # while reading response header from upstream'
            proxy_buffer_size   128k;
            proxy_buffers   4 256k;
            proxy_busy_buffers_size   256k;
          
            server {
                listen 80;
                server_name jh.gpl.jp;
                proxy_set_header    Host    $host;
                proxy_set_header    X-Real-IP    $remote_addr;
                proxy_set_header    X-Forwarded-Host       $host;
                proxy_set_header    X-Forwarded-Server    $http_host;
                proxy_set_header    X-Forwarded-For    $proxy_add_x_forwarded_for;
                access_log /usr/local/var/log/nginx/reverse-proxy.access.log  main;
          
                location / {
                    proxy_pass         http://192.168.1.38:8080;
                }
            }
          }

          hosts を書き換えます。

          $ cat /etc/hosts
          ::
          127.0.0.1 jh.gpl.jp

          nginx を再起動して、ブラウザでドメインに対してアクセスすればOKです。

          ちなみに、wp-config.php に以下を追記すると、接続元が192.168.1.26 の時だけWordPress のドメイン名が www.gpl.jp に書き換わります。もちろん、アクセスするクライアントのhosts は書き換える必要があります。

          if( $_SERVER['REMOTE_ADDR'] == '192.168.1.26' ){
              define('WP_HOME','http://www.gpl.jp');
              define('WP_SITEURL','http://www.gpl.jp');
          }

          ということで、macos で簡単にリバースプロキシーを立ち上げて、内部ネットワークの違うポートで提供されているWordPress にアクセスする方法でした。

          Lan内部のスマホからもアクセスしたい場合は、内部DNSをDHCPで配布して、リバースプロキシーと対応付けしないとだめですので、完璧を求めるならそれらが必要です。そのうち、作る機会があれば紹介したいなと思います。

          備忘録:macosの静的ルートの追加

          いつも忘れてしまうので、メモしておくことに。Linuxとは、少し違い永続的な設定方法は専用コマンドがあります。networksetup コマンドです。

          ・ネットワークデバイス名の一覧

          $ networksetup -listallnetworkservices
          An asterisk (*) denotes that a network service is disabled.
          Built-in Serial Port (1)
          Ethernet
          iPhone USB
          Wi-Fi
          Bluetooth PAN

          ・ネットワークデバイスの情報

          $ networksetup -getinfo Ethernet
          DHCP Configuration
          IP address: 192.168.1.26
          Subnet mask: 255.255.255.0
          Router: 192.168.1.1
          Client ID: 
          IPv6: Automatic
          IPv6 IP address: none
          IPv6 Router: none
          Ethernet Address: 90:2b:34:d0:02:80

          ・静的経路の追加と削除

          永続的に追加。この例では、124.41.83.243/32 あては、192.168.1.38 へ送ります。

          $ sudo networksetup -setadditionalroutes Ethernet 124.41.83.243 255.255.255.255 192.168.1.38

          削除。何もパラメータに設定しないと消えます。

          $ sudo networksetup -setadditionalroutes Ethernet
          There are no additional IPv4 routes on Ethernet.

          再起動すると消えますが一時的に設定したい場合

          sudo route -n add 124.41.83.243/32 192.168.1.38

          削除は

          sudo route -n delete 124.41.83.243/32

          ・確認

          $ networksetup -getadditionalroutes Ethernet
          124.41.83.243 255.255.255.255 192.168.1.38

          または、

          $ netstat -rn
          Routing tables
          
          Internet:
          Destination        Gateway            Flags        Refs      Use   Netif Expire
          default            192.168.1.1        UGSc           67        5     en0
          124.41.83.243      192.168.1.38       UGHS            0        0     en0
          ::