M.2 SSDでびゅー

ふと思い立って数ヶ月前の話を書きます。嘘です。書く気があったのを放置してました。


HDD遅すぎて死にました。 死んだのでM.2のNVMe SSDを買いました。

Amazon.co.jp: HIKSEMI 2TB NVMe SSD PCIe Gen 4×4 最大読込: 7,450MB/s 最大書き:6,750MB/s) PS5確認済み 放熱シート付き M.2 Type 2280 内蔵 SSD 3D TLC 国内正規品 メーカー5年保証 FUTURE70-02TB : パソコン・周辺機器

なぜかアホみたいに安くて心配になる中華SSDです。 噂によるとApple様のお陰らしいのでAppleアンチですが有り難く頂戴しておきます。

でGWにインストール。

このPCにはすでにSSDとHDDが積まれていて( *1 の回で乗せたもの)、こんな感じの構成になっていました。

SSD (256GB)
├── ESP (512MB)
├── C: (Windows; 160GB、うち140GB使用)
└── / (Gentoo Linux; 60GB、うち7.5GB使用)
HDD (2TB)
├── D: (Windows; 1TB、うち520GB使用)
├── /usr (Gentoo Linux; 200GB、うち16GB使用)
├── /home (Gentoo Linux; 200GB、うち148GB使用)
├── /var (Gentoo Linux; 100GB、うち72GB使用)
└── 不使用 200GB

なんというか計画性がありませんでした。特に/homeと/var。

ともあれ、起動速度をなんとかしたいのでESPは今回買ったSSDに乗せます。あと他のデータも全部今回のやつに乗せたいです(それはそう)。 ということでこれまでに使っていた人は一旦リストラして、足りなくなった時に予備的に使うことにしました。 パーティションは使用状況を見て次のとおりにしました。

SSD (2TB)
├── ESP (1GB)
├── C: (Windows; 1.5TB)
└── / (Gentoo Linux; 500GB)

全部クローンとかするとそれはそれでめんどくさい(特にHDD)のでぜんぶクリーンインストールすることにしました。

#WindowsInstallBattle

普通にインストールして終わりです。

ちなみにログインする時に不定期でOffice買え!!!!!!!!!!!!(意訳)って言ってくるやつは設定の「通知」→「追加の設定」のチェックを外すといいらしいです。

#GentooLinuxInstallBattle

3回以上やってるのでもうBattleって感じでもありません。

そのまま入れてもおもしろみがないのでなんかします。 白羽の矢が立ったのは以前見つけていたsystemd-homedで、Arch wikiの記事を眺めているとbtrfsという単語が目に入ったのでついでにファイルシステムもbtrfsにしてみることにしました*2。 といってもやることはext4とそんなに変わらなくて、Gentoo wikiの記事見ながらmkfs.btrfsしてカーネルコンフィグいじって終わりです。

あとはブートオーダーをいじります。 GRUBならよしなにしてくれるのかもしれませんが私はsystemd-boot派なので手動でなんとかします。 適当にいじってたらWindowsが4つに分裂しました。

この機会にざっくりbcdeditの概念をさらって完全に理解して解決しました。 エイリアスまわりとかは↓の記事がよかった気がします(メモにそう書いてあった)。

atmarkit.itmedia.co.jp

あとは普段通りにprofileを設定しt……

なんか見つけてしまった。見つけてしまったのでやります。 どうせ最近はあんまり開発とかしてないので多少致命傷を負っても問題にはならないはずです(ラップトップもあるし)。 といいながら選んだのですがprofileって選んだらあとは勝手に動くようになってるもので(experimentalとはいえ)、特に問題ありませんでした。

カーネルコンパイルも問題なくできて動いています。 LLVM=1LLVM_IAS=1をつけること*3だけ忘れないようにしないといけませんね(そうじゃないとgccコンパイルしちゃうので)。

その後

しばらくの間は旧ディスクも常時接続しておいて設定等を参照したくなった時にいつでも見られるようにしていましたが、2週間程度で外し、基本的にSSD1枚だけで繋ぐようにしました。 こうなると起動も爆速でとても快適です。

clangを使うのに合わせてリンカをmoldにしたり、Thin-LTO*4を有効化しようとするといろいろコケて、clangじゃなくてgccならいいのか!?moldじゃなくてlldならいいのか!?みたいな(しょうもない)悩みを爆発させていたのですが、私の設定が悪かった(CFLAGSだけじゃなくLDFLAGSにも-flto=thinをつけるべきだった)ようです。 実際build.log見てるとそうせざるを得ないパッケージもありました。

yaneuraou.yaneu.com ↑背中を押してくれたブログ

ということで$LDFLAGSがだいぶ長くなりました。

COMMON_FLAGS="-O2 -pipe -flto=thin"
LDFLAGS="-fuse-ld=mold -flto=thin -rtlib=compiler-rt -unwindlib=libunwind -Wl,--thinlto-cache-dir=/var/cache/thinlto -Wl,-O1 -Wl,--as-needed"

不具合的なやつとか

  • GCCは普通に入ったんですがなぜかアプデができません(install phaseでコケます)。これはマジで原因がわからんので困っています。
    • build.logをそのへんに貼っつけようとしたら60万行あったのでやめました。
  • Neovimをターミナルで開いてるとlibunwind: __unw_add_dynamic_fde: bad fde: FDE is really a CIEとか出ます。これは多分私が悪いのでなんとかします。

たすけてもらえると私がたすかります。

*1:https://xecua.hatenablog.com/entry/2020/12/20/204000

*2:LUKSという単語も目に入りましたがなんとなく億劫でやめました。

*3:https://wiki.gentoo.org/wiki/Clang#Kernel

*4:https://clang.llvm.org/docs/ThinLTO.html