woremacx.com

WD80EAAZ の IntelliPark 回避がうまくいっているようだ

WD80EAAZ に対して ATA NOP Command を送ることにより、IntelliPark を回避できるか試していたが、無事成功している。

前回の記事より 20 ほどロードサイクル進んでしまっているが、全体の初期化や、何度か再起動や初期化などを行った際に増えてしまった。

1 週間前

root@ds223j:~# date; for n in 1 2;do smartctl -a -d sat /dev/sata$n|grep Load_Cycle;done
Wed Oct 23 12:35:38 PM JST 2024
193 Load_Cycle_Count  0x0032 200 200 000 Old_age Always - 91
193 Load_Cycle_Count  0x0032 200 200 000 Old_age Always - 96

この記事の post 時点

root@ds223j:~# date; for n in 1 2;do smartctl -a -d sat /dev/sata$n|grep Load_Cycle;done
Thu Oct 31 08:28:04 PM JST 2024
193 Load_Cycle_Count  0x0032 200 200 000 Old_age Always - 91
193 Load_Cycle_Count  0x0032 200 200 000 Old_age Always - 96

WD の IntelliPark 付き HDD の Load_Cycle_Count 増加を抑制する

Synology DS223j に IntelliPark を無効化できない WD80EAAZ (x2) を載っけてみました。

ディスクにダミーの読み書きアクセスをすることなくヘッドのアンロードを防ぎたかったので、他の方法を採用しました。

ATA NOP Command という何もしないコマンドを送ってみたところ、無事 Load_Cycle_Count が増えることなく動いているようです。

NAS 内に常駐させる場合の流儀とか調べるのが面倒だったので、コンテナを常時起動させることにしました。

ソース

AI() 様にほとんど書いてもらった。

動かし方

Container Manager を入れる

docker pull する

以下の記事によれば、ghcr.io は web 画面から設定できないようなので、docker pull する。

Adding ghcr (Github Docker Regustry) to Synology docker results in “Registry returned bad result” - Stack Overflow

root@ds223j:~# docker pull ghcr.io/woremacx/go-ata-nop:latest
latest: Pulling from woremacx/go-ata-nop
2af3ff7d3219: Pull complete
Digest: sha256:ad03a840f450bccfcd6fc3f0f01fc2a9117689c4757512f361e2d035aaa540b6
Status: Downloaded newer image for ghcr.io/woremacx/go-ata-nop:latest
ghcr.io/woremacx/go-ata-nop:latest

web から pull できていることを確認。

起動させる

root@ds223j:~# docker run --restart=always --detach \
--privileged \
-u 0:0 \
-v /dev/sata1:/dev/sata1 \
-v /dev/sata2:/dev/sata2 \
ghcr.io/woremacx/go-ata-nop \
/app/go-ata-nop -verbose /dev/sata1 /dev/sata2

-verbose つけてあるのでログが出ている。通常利用する場合は、-verbose 不要。

観察してみる

root@ds223j:~# while [ 1 ];do date; for f in /dev/sata?;do smartctl -a -d sat $f|grep Load;done;sleep 300;done
Sun Oct 20 05:32:38 PM JST 2024
193 Load_Cycle_Count  0x0032 200 200 000 Old_age Always - 72
193 Load_Cycle_Count  0x0032 200 200 000 Old_age Always - 78

---

Sun Oct 20 05:54:56 PM JST 2024
193 Load_Cycle_Count  0x0032 200 200 000 Old_age Always - 72
193 Load_Cycle_Count  0x0032 200 200 000 Old_age Always - 78

やってみたいこと

毎秒 /proc/diskstats をみて、一定時間アクセスがないと判断できた場合は NOP コマンドを送るようにしてみたい。

Windows 10 の入ったディスクのバックアップが clonezilla で外形的にできることがわかった

systemrescuecd に同梱されている clonezilla を使ってまるまる取った Windows 10 のバックアップが戻せるか不安で仕方なかったので、VirtualBox に戻せるか試した。

そもそもなぜ clonezilla を試したかったのか?

  • OSS のツールが欲しかった。
  • 確実に余計なことをしないツールが欲しかった。
  • OSS なやつの NTFS サポートが 2020 年の Windows 10 時代においても戦えるものなのか知りたかった。

clonezilla のウィザードに従っては自動レストアできなかった

ターゲットディスクのパーティションが作り直されたあとで、書くパーティションごとのレストアを進行するはずだが、

"gzip: stdin: unexpected end of file"

みたいなやつがでて、そもそも個々のイメージをうまく読み込めない致命的な問題が発生。

*.gz.aa を全部結合したうえで展開して sda4.ntfs-ptcl-img のようなファイルに置き換えてもダメ。

ログに残っていた ocs- から始まるコマンドを実行してみてもダメ。

partclone.restore で手作業レストアで解決

partclone.restore というコマンドがあったので、これを試したらうまくいった。

cat sda4.ntfs-ptcl-img.gz.* | gunzip | partclone.restore --overwrite /dev/sda4

各パーティションごとにやれば何も問題なく完了。

理由は知らないけど、dstat で見てると 10MB/s くらいずつしか処理されてない感じがあってちょっとつらかった。

レストア終了後にやったこと

AQUOS テレビのリモコンが効かなくなったので代替手段を Arduino 的な物で代替できるか調べる

自宅の AQUOS テレビのリモコンが効かなくなりました。

幸いにも RS-232C で制御できるタイプのテレビであったため、Arduino 的な物で代替できるか調べることにしました。

まずは、RS-232C の口が生きているかの確認です。 Go で実装されている Go Library for SHARP AQUOS TV の example を使って、コマンドが実行され生きていることを確認しました。

手元に USB の RS-232C 接続ケーブルがなかったので、 FT232RL USBシリアル変換モジュール から 3V,3.3V,5V系−RS232レベル変換基板 につないで、信号レベルを RS-232C レベルにし、 IC テストクリップでテレビから延長してきた RS-232C コネクタのオスのピンをつまみ実験しました。

続いて、Arduino 的な物についてです。

困ったときにいつも参照させて頂いている ChaN 氏の 赤外線リモコン制御モジュール を 手元の ダ・ヴィンチ32U 上で動くようにし、USART につないだ FT232RL 経由で、リモコンのコマンドを受け取れるところまで確認できました。

ここで、なぜか SONY 形式の信号が検出され、SHARP の AEHA 形式な信号が来ないことから BDレコーダのリモコンのTVメーカー設定がなぜかずれていたことに気づくことになりました。 再設定したところ、無事テレビが使えるようになりました。めでたしめでたしというしょーもない終わりになりました。

まー、やりたいことができること一応確認するという意味で、受け取ったリモコンの信号で RS-232C に指定した文字を吐くってのを PC 上でできたところで今回はおしまいということに。

テレビが壊れて無くてヨカッタ。

おかげで、AVR と、各種電解コンデンサの詰め合わせと、赤外線受光モジュールのストックを確保できました。 また、電線繋いで、Web で公開されているプログラムを動かすぐだけではありますが、久しぶりに “電子工作” を再開することができました。

めでたしめでたし。

go-slackproxy というものを作った

複数の slack のネットワークにつないでいて、滅多に発言無いけど超重要なネットワークがあった場合、普段使ってる側に全文転送したい。

そこで、outgoing webhook で中継用の http な go-slackproxy に POST して、go-slackproxy が別の slack の incoming webhook を叩く君を作った。

slack のインテグレーションの設定画面で迷子になったけど、便利になった!

https://github.com/woremacx/go-slackproxy

2015年の振り返り

2015年も残りわずかとなったわけですが、自分にとっては初の試みである振り返りをしてみる。

8月

変な電子工作頑張った。

12月

qiita の advant calendar がんばった。

まとめ

  • 来年はもうちょい「これやったよー!」って言えること頑張っていきたい!

Atmel AVR ATmega32U4 で Matias Half Keyboard っぽいのを作った

背景

タブレットの裏にキーボード貼ったら iikanji に使えるんじゃねと思い、部品集めて作ってみました。

Matias Half Keyboard ってのが過去に出てたことはあるけど、すでに本家サイトでしか買えるところがなく、値段がかなり跳ね上がっておりました。

Matias Half Keyboard は左手で使う用に作られています。普通に文字を打つと、左手でタイプした文字が入力されます。 一方で、スペースキーを押している間だけ、右手領域の文字をタイプしたことにできるキーボードです。 詳しくは 半分サイズのキーボード「Matias Half-Keyboard」を読むと書いてあります。

それを作りたかったので、それっぽいものを作ってみました。

部品

使った部品は以下の通り。

ハードウェアとソフトウェア

ソフトウエアは以下の通り。

tmk_keyboard が、既存のキーボードの基板を AVR で置き換えてキーバインドをこねくりまわすことに特化したソフトウェアで、データの取り方とかマトリックスの配列書くだけで、Fn とかの処理まで全部やってくれて、とても素敵でした。

ハードウェア的には、AVR 内蔵のプルアップ抵抗使ったので、がんばって電線を半田付けしただけのカンタン工作です。

キーボードマトリクスの ROW として PD0-1,PD4-7、COL として PB0-5 にキーボードの左半分を繋ぎました。 PD2-3 は、RXD TXD なので、デバッグ用として残してあります。

ROW は行の選択、COL は選択された行で押されているボタンの検出に使います。

まず、COL をプルアップ付き入力にしておきます。 つぎに、ROW を全部ハイインピーダンスにして切り離しておきます。

読み取りたい ROW だけを L にするループを回します。 それぞれの ROW に対して COL の状態を読み取りマトリックスに反映します。 COL は、プルアップされているので、1 になってるビットは押されてない、0 になってるビットは押されてるという風な流れです。

このような感じでマトリックスを作っておけば、あとは tmk_keyboard が色々面倒いところをやってくれるのです。

使い心地

タブレットの裏にキーボード貼って頑張って使おうとすると、腕がつりそうになることがわかりました。

Enter キーの割り当てがよくないところにあるなーとか思っておりますが、完成初日以来二度と使っておりません。。。

最後に

満足感は半端ないので、ヨカッタ。

OSX の TimeMachine で exFAT な USB ハードディスクにバックアップ

やりたいこと

タイトルの通り、OSX の TimeMachine で exFAT な USB ハードディスクにバックアップをとりたい。

手順

  • ディスクユーティリティでスパースバンドル作る
  • 開いたスパースバンドルを開く
  • diskutil list でどの /dev/diskXsY に割り当てられているか調べる
  • diskutil enableOwnership /dev/diskXsY
  • tmutil setdestination '/Volumes/hogehoge'
  • システム環境設定の TimeMachine 見るとバックアップ先が変わっている

参考