カラクリサイクル

『輝かしい青春』なんて無かった人の雑記

ファイルシステムがぶっ壊れたため、 NixOS を再インストールした

と言う、夏にぴったりな話題です。


何が起きた?

なにがどうなってそうなったのか良く判ってないんですが、今朝、 いつもの様に sudo nixos-rebuild switch をした後、普通に再起動したら boot しなくなり、 NixOS Live USB から fsck とか掛けたら、ファイルシステムのデータが盛大にぶっ壊れたため、 やむなく再インストールを行いました。

そのため、色々とデータが飛んだ。

ファイルシステムは?

僕はなんとなくで f2fs を使ってたんですが、もしかすると、これがマズかったのかもしれません。

と言うか、本当にファイルシステムがぶっ壊れた理由が良く判らないため、とりあえず今回は ext4 でフォーマットしました。

現状

まーデータについては、バックアップを取ってなかった部分に関しては飛びましたが、 以前、バックアップした部分については丸っと残ってるため、それを利用して復旧しようかなぁ、と思っています。 (まだ作業してない)

それで、システムを再インストールしたまでは良かったんですが、 Gnome3 の環境を復帰させるのに、 まるっと午前中、朝の 5 時から 10 時ぐらいまでを費やしたのと、あと、昨日、上手く寝付けなかった影響で、 睡眠時間が数時間ぐらいしかなったので、結構つらみのある感じになっていました。 そのため、昼からはかなり昼寝していましたです。はい。

以上

とりあえずは復旧出来たし、環境も整理出来た点は良かったんですが、 なんでファイルシステムがぶっ壊れたのかは謎です。はい。

NixOS を使う上で気を付けたい三つのコト

とりあえず、今日はブログに取り立てて書く事がないので、 NixOS を使う上でのちょっとした小ネタを。


1. システムへのストレージの割り当ては多めに

NixOS は、システムの状態を宣言的に書くコトができ、かつ、そのシステムへの変更をも簡単にロールバックする事が出来る、 というのが最大の魅力であり、僕もそれが気に入っているが故に、今もなお NixOS を使っているのですが、NixOS はその魅力の代償、 と言うか要求リソースとして、システムのストレージが結構要求されます。

それで、僕は今のマシン (Dell XPS 9560) の内部ストレージ (SSD・512GB) の容量の割り当ては、

  • /boot - 256MB
  • swap - 32GB
  • / - 64GB
  • /data - 残り全部

という感じになっているんですが、正直言って、 NixOS を使うのに、 / への割り当て(正確には /nix/store で使える容量) が 64GB しかないのは、結構心許無い感じです。

と言うのも、僕は良く nixpkgs に無いパッケージのパッケージ定義については、自前でなんとかしているのですが、 その作業の過程で、結構コンパイルし損ねたパッケージの残骸とか、あるいは、 パッケージのコンパイルに失敗した理由を探るために残した一時ファイルなどで、 割と直ぐに Disk Full になってしまうので、 64GB の割り当ては、ちょっと失敗だったかなーと考えています。

2. boot.cleanTmpDirtrue にしておく

これも上記の (1) と関連するのですが、/tmp を boot 毎に揮発させる様なファイルシステムを使っていない限り、 /tmp に結構、自作 nixpkgs のビルドした失敗の残骸とかが残り続けるので、 boot.cleanTmpDirtrue にしておくのがベターなんじゃないかな、と思っています。

というか、僕は先日までこの設定をしていなかった影響で、なんかシステムに割り当てた 64GB の内、 半分近くを /tmp が喰っていて、このフラグを有効にしてシステムを reboot したら、 ディスク使用量が半分になったでござる、という怖い話が有りました。

とは言え、/tmp を RAM disk に載せてしまえば不要な気もするので、その辺り、僕の設定がアレなだけかもしれませんが。

3. NixOS であろうとも、バグ等でシステムが壊れる事もある

基本、 NixOS はシステムの設定ファイル等でをミスしていても、 bootさせる事さえ出来れば、 システムのロールバックで失敗した設定のリカバリーとかが出来るのですが、極まれに、 NixOS (と言うか nixpkgs 側の処理) の側でのバグ等で、システムが壊れることが有ります。

そのため、万が一 NixOS が boot しなくなった、とか、あるいは、 boot はするけどログイン出来ない (現実に僕がなった) と言う場合に備えて、

  • NixOS の Bootable Live System (USB や CD/DVD 等)

は作っておいた方が、安心出来るかと思います。はい。

以上

とりあえず、今日は以上です。

なんか、割とサクと書けるかと思いきや、分量を結構書いてしまった……

最近生活が乱れている

とは言っても、主に睡眠とか PC やり過ぎとかその辺りの話です。


ここの所、不調の波があった影響も有ってか、どうにも生活が不規則になってきている。

と言うのも、最近なんか寝る時間が不安定だし、あと、PC を触ってる時間がどうも長くなってきているので、 その辺りもあんまし良くはない。

それで、僕の場合、その生活の乱れが、結果として精神状態に影響されて反映されてしまうので、 まあ、ぐるっと一周して、悪循環ですねっていう。


ま、そういう訳で今日はもう寝ます。はい。

もうそろそろ関数型言語等で本格的にプログラミングしたい

と思っているものの、あんまり良い候補が見付からず。


一応、関数型言語の特徴的なモノの捉えかたに関して言えば、 これは NixOS の Nix expression language で割と鍛えられているので、 その辺りの Switch で困る事はなさそう……とは思ってるんだけど、 肝心の言語が定まらない、って言う。

それで、僕の要件……と言うか、やりたい事としては、関数型言語で GUI プログラミングをしたいんだけど、 これを Cross-platform だとか、あるいは Mobile だとか、もしくは Serverless で、とか考えていると、 やっぱりき切りがない感じで候補が定まらない。

なお、一応、候補として上がってるのは、

  • Elm
  • Elixir (elixirscript ?)
  • Haskell
  • OCaml

ぐらいだけど、どれも自己完結的なモバイル開発は本格的には厳しそうだし、 かと言って他の良さそうな言語はあんまりないし、という感じになっている。

まあ、なんか無いですかねぇ。この辺り。本当。