1/30/2011

うちのOS変えた

最近の変更でいうと、GentooからUbuntuに変えて一年半くらい使ってて
26日にArch Linuxに変えた。

その理由としては、まずFSをbtrfsに変えてみたくなったのとpacmanとABSに興味があった。
あと最近Linuxの先端に疎くなってきているのを感じたので
新しめのkernelとミドルをイジる必要性を感じた(仕事柄もあって)。

まずArchの導入について、感想を言うと
すごく簡単だった。10年以上前に雑誌のオマケにLinuxが付いてた時期(VineとかLaserとか)に導入経験がある人間なら何の苦もなくできる。むしろ自動認識の技術が進歩したり、XもKMSとかHALあたりのおかげで凄く導入しやすい。
最近のUbuntuとかRedhatなんかと比べても手順もそんなに多くはない、ただインストール画面は素気なくて退屈。

デフォルトではbtrfsを作成できないので、CD bootしたあとプロンプトに落ちてから、setupを叩く前にnetcfgしてネットワークを繋げたあと、pacman -Syし、pacman -S btrfs-progs-unstableする必要がある(ちょっとbtrfs-progの名前は今しっかり思いだせない、progだったかprogsだったか…)
とりあえず、これでbtrfsを作成可能になる。

あとはfdiskでパーティション切ったあとbtrfsで初期化して、setupを実行、パーティションの作成と初期化の工程を飛ばせばそのまま導入可能です。

私はその手順ではなく、一度ext4で入れてからbtrfsにコンバートしてみた。
これも難無く終る。ただし、rootfsのパーティション(またはディスク)をbtrfs化するにはCD bootが必要。
変換のためにはbtrfs-progsが要るので、先の手順で落してから変換する。

構成はrootfsのsubvolumeは切らずにrootfsとhomeを別パーティションにして、各ホームディレクトリはサブボリューム化、rootfsのバックアップはrootfs配下にバックアップ格納用サブボリューム(/.rootfs_bk)を作って、その中にスナップショットを格納するようにした。tmpもバックアップされちゃうけどまあいいという事にする。rootfsはsubvolume化するメリットが見付からないのと、rootfs配下の各ディレクトリ全部をサブボリューム化するメリットも特に見付からなかった。よってこの構成。

私が色々と困ったポイントを挙げておく(勘違いしていたのもあるけど)
・領域のサイズ変更はファイルシステム単位でサブボリュームには適用できない(ユーザーディレクトリのquota的な目的には使えない)
・サブボリュームはあえてマウントしなくてもいい(作った時点でマウントされてる、mountコマンドでもmtabでも見えないけど)
・あえてmountしてもいいし,fstabに書いてもいいけど、dfとかでは個別に取り扱われず元パーティションの情報そのまんま出てくる
・dfやmountやその他APIやツールがbtrfsのサブボリュームっていう概念にまだきちんと対応してないので色々と不便(上位のパーティションと同じ情報しか持ってこれない)
・マウントオプションを間違えて(subvolをsubvolumeとか書いちゃって)もエラーにはならず正常終了する、その時はマスターボリュームがdestにbindされる。たぶんmount側での対応がまだでエラーチェックされてない。サブボリューム名を間違えたときは「正しいブロックデバイスではない」と表示される。

あれっと思った部分はいくつかあったけど、結構快適だしスナップショットは便利。安定度も個人で使ってるぶんには不満はない。ただしオンラインリサイズしながら大量の「移動」をしてるとカーネルパニックを起したりする。過負荷は禁物なのか、それとも低いレイヤにアクセスしてる最中に何かすると安定しないのか。まあ普通に使う分には問題ない。



Archそのものの感想としては、結構良いディストリだと思う。システムの見通しもいい。ただ、他のディストロだと快適に使うために予めやってくれてるようなカスタマイズやパッチ当てをあえてしないらしく、ちょっと遅いかなと思う部分もあった。そこらへんの改善メモを遺しておく。

sysctl.confに下記を追加
vm.swappiness=20
vm.vfs_cache_pressure=50

あとkernel 2.6.38で取り込み予定の、噂の高速化パッチと同等の機能を加える変更もいれとく
Archの場合は、rc.localに
mount -t cgroup cgroup /sys/fs/cgroup -o cpu
mkdir -m 0777 /sys/fs/cgroup/user
echo "/usr/local/sbin/cgroup_clean" > /sys/fs/cgroup/release_agent
と書いておく。

.bashrc(ここはログインシェルの同等ファイルに合わせて読み替えて)



if [ "$PS1" ] ; then
           mkdir -m 0700 /sys/fs/cgroup/user/$$
           echo $$ > /sys/fs/cgroup/user/$$/tasks
           echo "1" > /sys/fs/cgroup/user/$$/notify_on_release
fi

と書く

/usr/local/sbin/cgroup_clean を以下の内容で作る(実行権限も与える)
#!/bin/sh
rmdir /sys/fs/cgroup/$1

とりあえずこれで快適、かなり速くなった。今まで色々つかってきたけど、今回が一番高速に動作してるかもしれん。

これでshellから何か実行したときは、特別なスケジューリングがなされる。
(どういう原理なのかはcgroupのドキュメントを見ればわかる、けど私はまじめに読んでないんので知らない)

あとGUI上で何でもかんでもに適用したい場合は、xprofileにmkdirとechoの3行だけ書き足せばOK。
あんまりローレベルすぎる部分に仕込みまくるのは逆効果っぽいので、xprofileまでにしとくのが無難。

No comments:

Post a Comment

WSKY Bluetooth 5.0 トランスミッター レシーバー買いました

安くレシーバーモードでapt-x HDが使えるものというと非常に限られますが そのなかで高音質と評判のよかったものをということで購入しました。 音質は安いなりですね、apt-x HDで接続されている状態でも元がなんであれ痩せた音になります。 SBSにしか対応していない...