pbcopy は簡単で、clip.exe を呼べばいいだけ。

pbpaste は一発でできる Windows コマンドがなぜかないので PowerShell の Get-Clipboard を利用する。

pbcopy

#!/bin/sh
exec /mnt/c/Windows/System32/clip.exe

pbpaste

#!/bin/sh
exec /mnt/c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe Get-Clipboard

これらをパスが通るところに置いておけば不便なし (シェルのエイリアスにするより実行ファイルにしたほうが他プログラムから呼ぶ場合など便利)

  1. トップ
  2. tech
  3. WSL2 で pbcopy/pbpaste

こまごま Windows Tips みたいのを書いてるけどメインPCを macOS から Windows に移す決心をしていろいろやってる。

macOS は本物の UNIX だけあってシステムそのもののトラブルシューティングとかがしやすいし、付属のユーティリティもよくできてて気に入ってる。けどどうも最近の macOS ハード・ソフトの不安定さと、Notarize 必須化みたいなコンピュータを不自由にしていく流れに耐え切れなくなってきた。

可能なら Linux Desktop にしたいけど、Lightroom Classic を筆頭にいろんなソフト・ハードの対応を考えて、Windows + WSL2 (Ubuntu) に移行することにした。

最低限の環境

  • IME: CorvusSKK (ほぼ設定なしで快適)
  • Google Chrome
  • PowerToys

実際、このぐらいで普段インタ~ネットする上では全く困らない。ほとんどブラウザ上でなんかしてることが多いので違和感ない。

開発環境

  • WSL2 Ubuntu を入れる

WSL 内からホスト側のファイルシステムも自動で見えるようになっているので、ダウンロードしたファイルをコマンドラインから処理したい、みたいなのは案外違和感なくできる。

Windows Terminal もよくでてきて今のところは不満ない。ときどき PowerShell で実行したいコマンドもあるのでどちらも使えるのは快適。

Windows Terminal 上で WSL2 の Ubuntu を開き、tmux を起動しておけば、作業環境としてはほぼ macOS で常に Terminal.app 開いておくみたいなのと似たようなものになる。

バックアップ

Time Machine の代替にはならないのだけど、Windows 標準で「ファイルの履歴」という機能があり、これでNAS上にバックアップをとるようにしてみてる。ただ、あんまり信用してない。AppData とかはデフォルトでバックアップされないので、(AppData 以下にある) WSL2 の vhdx とかがバックアップされない。

  1. トップ
  2. tech
  3. メインPCのWindows 移行

NAS を導入した。導入したのはQNAP TS-473A

QNAP(キューナップ) TS-473A AMD Ryzen クアッドコア搭載 2つの2.5GbE対応ポートと、NASの機能を拡張できる2つのPCIeスロットを備えたSMB向け4ベイNAS - QNAP(キューナップ)

QNAP(キューナップ)

5.0 / 5.0

動機

macOS → Windows 移行にともない、データディスクのファイルシステムをいろいろ考えた結果、中立にしたいという気持ちになった(特に恨みはないけど NTFS をデータディスクにしたくない)

構成

TS-473A 本体以外に

  • 4*6TB HDD (データ)
  • 2*500GB SSD (キャッシュ)
  • 16GB ECC メモリ

を買った。

QNAP の OS にはおもに QTS と QuTS hero の2系統がある。QTS はコンシューマ向け、QuTS hero ハイスペック向けという感じ。機種によって対応OSが違う。

TS-473A は OS としては QuTS hero に対応しており、なんとなくそちらを使うことにした。QuTS hero は ZFS ベースになっている (QTS は ext4)。

メモリはファイルサーバなのでECCメモリにしてみることにした。デフォルトの 8GB でもメモリが足りているように見えたが、どうやら搭載メモリ量によってARC(ファイルキャッシュ)量が変わるようで、16GB にすると8GB常に使用済みになる。メモリを増やすと管理画面の動作も若干はやくなるように感じる。

デフォルトのメモリ量である8GBだとオンライン重複排除 (ZFS dedup) は利用できず、16GB だと利用できるみたいだが、dedup は罠も多い雰囲気を感じたので、一旦まったく利用しない形にしている。

RAID6 vs RAID10

結論からいうと RAID10 (RAID1+0) にした。RAID10 はパフォーマンスが比較的良く、耐障害性では条件付きで2台故障まで可

RAID6 (2台までの障害対応) と比べると

  • RAID10 のほうがパフォーマンスが良い
    • パリティ計算をしないため
    • 通常のパフォーマンスもそうだがリビルドが早い
  • RAID10 のほうが耐障害性が低い
    • RAID1のディスクセット内で2台同時故障すると全て失われる
    • 別々の RAID1 に配置されていれば2台故障しても大丈夫
  • RAID10 のほうがディスク利用効率が低い (50%)

ネットワーク

当面、メインPCとNASの間だけ10Gにできればいいので、ネットワークカード2つとダイレクトアタッチケーブルを購入した。SFP+ シングルポートなカードがあんまり見当らないので Aliexpress で買った。若干あやしいが今のところ普通に動いている。ハブを導入しなければ1万円ちょっとぐらいで10Gにはできるので案外良いなと思う。

Intel X520-DA2 は QNAP の互換リストに入っているので、X520-DA1 もいけるだろうと踏んで購入してとりつけてみたが大丈夫だった。特にドライバインストールなども必要なく認識して使えている。メインマシン側も同様。注意点として PCIe v2.0 8レーン なので、PCIe レイヤーでの実効速度は1レーンあたり 0.5GB/sになる。最低でも x2 以上 (普通はx4)の PCIe スロットにつけないと頭打ちになる。スロットが足りなかったため、使ってなかった M2 SSD を1つ取り外した。

IPv6 で接続する場合、特に IPv4 アドレスは設定せず直結するだけが良さそう。IPv6 アドレスを UNC パスにするときは変な変換が必要なのでググって設定する。IPv6 は自動でつくリンクローカルアドレスを指定すれば特に設定はいらない。

IPv4 でも接続する場合、既存のネットワークとかぶらないように IP アドレスとサブネットマスクを設定する必要がある。どちらも試してみたがパフォーマンス的には IPv4 も IPv6 も変わらないので設定がいらないほうが楽そう。

計測ごとにバラつきが多いがこのぐらいの速度になった。実際は SMB のプロトコルオーバーヘッドが大きいので、綺麗に速度が出ることは少なそう。

備考:速度一覧

速度一覧

  • 10GBASE-T は 1.25GB/s
  • SATA 3.0 は 0.6GB/s
  • PCI Express 2.0 * 2 で 1GB/s
  • PCI Express 3.0 * 2 で 1.969GB/s
  • NVMe SSD は read 3.2G/s write 1.2G/s など ref
  • HDD はシーケンシャルで R/W 0.1GB/s 程度 (RAID10 の seq Read で 0.5GB/s 程度)

実際のところはネットワーク速度である 1.25GB/s か、HDD を採用するなら 0.1GB/s~0.5GB/sで律速される。キャッシュにヒットしてれば相応にSSDの速度まで上がる。

QNAP で機種を選択する場合、実行速度一覧があるのでこれを参考にするとよさそう。オールフラッシュで一番パフォーマンスがでる状態で測定されているので、スペックの上限を知ることができる。QNAP の実効速度

現実的にはまだフルフラッシュストレージはコスパ的に厳しいので HDD + SSDキャッシュが良いと思っている。

  1. トップ
  2. tech
  3. QNAP TS-473A で ZFS + 10G イーサな NAS を導入

どうしても一部のキーバインドをなんとかしたい。こういうのは本当によく使う一部だけでもリマップするととても快適になる。Win+ナントカはほぼノーリスクで置き換えられる。

  • Win+Tab → Alt+Tab (「ウィンドウ一覧」→「アプリケーション切り替え」)
  • Win+A → Ctrl+A (「アクションセンターを開く」→「全選択」)
  • Win+C → Ctrl+C (「Cortona を開く」→「コピー」)
  • Win+N → Ctrl+N (「なし?」→「新規ウィンドウ」)
  • Win+S → Ctrl+S (「検索開始」→「保存」)

ユーザー権限のままだと昇格したアプリのウィンドウで変な挙動になってしまうので、設定から「常に管理者として実行」を有効にするしかない。

Ctrl-ナントカ を置き換えるか?

たとえば以下のようなことをしたいが、これをやってしまうと Windows Terminal で本来のキーを入力することができなくなってしまう。PowerToys は特定のアプリだけ除外することができない。

  • Ctrl+A → Home (「全選択」→「行頭に」)
  • Ctrl+E → End (「?」→「行末に」)
  • Ctrl+N → Down (「新規ウィンドウ」→「下矢印」)
  • Ctrl+P → Up (「プリント」→「上矢印」)

とりあえずこれらは諦めてる。

これらも PowerToys でリマップしつつ、Windows Terminal 側で以下のような設定をして再度マップしなおしてなんとかしてみている。

        {
            "command":  { "action": "sendInput", "input": "\u0008" },
            "keys": "backspace"
        },
        {
            "command":  { "action": "sendInput", "input": "\u0010" },
            "keys": "up"
        },
        {
            "command":  { "action": "sendInput", "input": "\u000e" },
            "keys": "down"
        },
        {
            "command":  { "action": "sendInput", "input": "\u0001" },
            "keys": "home"
        },
        {
            "command":  { "action": "sendInput", "input": "\u0005" },
            "keys": "end"
        },
  1. トップ
  2. tech
  3. Windows PowerToys の Keyboard Manager を使って macOS からの移行を支援する