- zfs importでimport可能なpoolを検出
- zfs import <pool>で実際にimportを行う。このcommandが完了するとmountも行われる
2016年9月24日土曜日
ZoLでZFSのdiskをmountする
zpool createでpoolを作製すると自動でmountされるが、これをexplicitに行う方法。
PostgreSQL 9.5→9.6へupgradeに伴うMediaWikiへの影響と対策
Debian Sidで、PostgreSQLが9.5→9.6にupgradeされた。MediaWikiをPostgreSQL +textsearch_jaで使っている人は、clusterのupgradeをする前にtextsearch_jaのinstallが必要。
実際にいろいろとやってみた結果、上記の手順なら不具合が出ないか少なくて済むと思う。
なお、以下の個別の詳細手順については↑とは一致しない。というのも、aptitudeでupgradeすると、9.6がinstallされた時点でserverが9.6の空cluster+port 5433でstartしてしまっているから。
ざっくりまとめると、install scriptによって新しいversion (9.6)の空っぽのclusterが自動で作られるので、それをdropしてから古いversion (9.5)のclusterを9.6にupgradeしてね、ということ。
pg_dropcluster 9.6 main
pg_upgradecluster 9.5 main
なお、不要になった古いversionのclusterは、変換したclusterが正常であることを確認した後に削除して良い。
portが変更されたままだとphp-fpmとかがPostgreSQLを見付けられなくなる。
textsearch_jaのdirectoryにて:
make PGXS_USE=1
sudo make PGXS_USE=1 install
これで/usr/share/postgresql/9.6/contrib/あたりに関連filesがinstallされる。
※この手順が終わるより前にpg_upgradeclusterを実行すると、functionが見付からないとかでMediaWiki関連のdatabaseでerrorが大量に出る。
具体的には"LANGUAGE 'C'" → "LANGUAGE c"に全て変更する。
cf. http://stackoverflow.com/questions/12514664/postgresql-procedural-language-c-not-found
修正後、
psql -f /usr/share/postgresql/9.6/contrib/textsearch_ja.sql <database>
既にfunctionがあるとかでerrorが出る場合は、一旦
psql -f /usr/share/postgresql/9.6/contrib/uninstall_textsearch_ja.sql <database>
を実行してから、あらためてやりなおす。
Upgrade手順の概要
- database clusterのbackupを取る
- (aptitudeとかで) PostgreSQLをupgrade (今回は9.5→9.6)
- PostgreSQLやweb serverなどを停止
- textsearch_jaを9.6のdevelopment filesでrebuild & install
- pg_upgradeclusterでclusterをupgrade
- textsearch_ja.sqlを修正し、対象databseに適用
- web serverなどをstart
- MediaWikiの動作確認
- 古い (9.5の)clusterをdrop
実際にいろいろとやってみた結果、上記の手順なら不具合が出ないか少なくて済むと思う。
なお、以下の個別の詳細手順については↑とは一致しない。というのも、aptitudeでupgradeすると、9.6がinstallされた時点でserverが9.6の空cluster+port 5433でstartしてしまっているから。
PostgreSQLのupgrade
PostgreSQLそのもののupgradeに関しては/usr/share/doc/postgresql-9.6/README.Debian.gzを参照のこと。ざっくりまとめると、install scriptによって新しいversion (9.6)の空っぽのclusterが自動で作られるので、それをdropしてから古いversion (9.5)のclusterを9.6にupgradeしてね、ということ。
pg_dropcluster 9.6 main
pg_upgradecluster 9.5 main
なお、不要になった古いversionのclusterは、変換したclusterが正常であることを確認した後に削除して良い。
portの修正
この時点で9.5のserverがport 5432を使っていたため、9.6のserverはport 5433を使ってしまった。/etc/postgresql/9.6/main/postgresql.confにportの設定があるので、これを5432に修正しておく。portが変更されたままだとphp-fpmとかがPostgreSQLを見付けられなくなる。
MediaWiki関連のupgrade
textsearch_jaの更新
MediaWikiで全文検索できるようにするため、PostgreSQLで日本語の全文検索を行うためのtextsearch_jaをinstallする。SourceからbuildするのにPostgreSQLのdeveloment packageが必要なのでpostgresql-server-devをinstallしておく。textsearch_jaのdirectoryにて:
make PGXS_USE=1
sudo make PGXS_USE=1 install
これで/usr/share/postgresql/9.6/contrib/あたりに関連filesがinstallされる。
※この手順が終わるより前にpg_upgradeclusterを実行すると、functionが見付からないとかでMediaWiki関連のdatabaseでerrorが大量に出る。
textsearch_jaの適用
MediaWikiが使用しているdatabaseにtextsearch_jaをinstallする。しかし、その前にPostgreSQLの仕様変更に伴う修正をtextsearch_ja.sqlに行う必要がある。具体的には"LANGUAGE 'C'" → "LANGUAGE c"に全て変更する。
cf. http://stackoverflow.com/questions/12514664/postgresql-procedural-language-c-not-found
修正後、
psql -f /usr/share/postgresql/9.6/contrib/textsearch_ja.sql <database>
既にfunctionがあるとかでerrorが出る場合は、一旦
psql -f /usr/share/postgresql/9.6/contrib/uninstall_textsearch_ja.sql <database>
を実行してから、あらためてやりなおす。
ラベル:
MediaWiki,
PostgreSQL
2016年9月9日金曜日
GCC 5.x → GCC 6.xへ完全移行 @Debian Sid
Debian GNU/Linux Sidではしばらく前にdefaultのGCCが5→6になったのだが、Firefoxのbuildに不具合がありGCC 5.xを残してあった。
今日、Firefox 49 (release)をbuildしてみた所、mach packageがうまくいかない不具合が解消されていたので、晴れてGCC 5 seriesをuninstallした。
helm-swoopのwindowを下部にfull widthで表示する
動機
Full HD (1920x1080)のLCDを使っている関係で、Emacsを縦に3分割 (こんな感じ → [||])している。
この使い方だと、複数のbuffersの内容を参照できて便利だ。一方で、window widthが2分割に比べて狭くなるので、helm関連のwindowでは一度に表示できる情報量が減ってしまう。
特に困るのはhelm-filelist+のように1行の情報量が多いbufferを表示する時で、これを解決するためにhelm関連windowはframeのwidthいっぱいに表示する設定をしている。
(add-to-list 'display-buffer-alist
`(,(rx bos "*helm" (* not-newline) "*" eos)
(display-buffer-in-side-window)
(inhibit-same-window . t)
(window-height . 0.4)))
しかし、helm-swoopのwindowには何故か適用されず困っていた。
原因と対策
helm-swoopはbufferを表示する際に何らかの理由でhelm標準となっているfunctionを使っていないらしく (おそらくはswoop.elとの兼ね合いか、helmの更新が早過ぎて書き換えられていないか)、これを変更すれば他のhelm関連windowと同じ設定にできる。
(setq helm-swoop-split-window-function
'(lambda (buffer)
(helm-default-display-buffer buffer)))
cf. [How do I make helm-swoop to open at bottom with full window width? · Issue #4117 · syl20bnr/spacemacs · GitHub](https://github.com/syl20bnr/spacemacs/issues/4117)
2016年9月8日木曜日
Linux kernel 4.8-rc4でZoL (2016-12-26更新)
ZFS on Linux (ZoL)を試してみたいと思い、Linux kernel 4.8-rc4 (注: 9/8現在の最新版は4.8-rc5)で実験してみた。
(2016-12-26追記)
Linux kernel 4.9.0でも利用可能。
(2016-12-03追記)
Linux kernel 4.8.12でも以下の手順でZoLを利用可能。
まずはSPL (Solaris Porting Layer)から:
% git clone https://github.com/zfsonlinux/spl.git
% cd spl
% ./autogen.sh
% make
% sudo make install
ZFSも手順は同じ:
% git clone https://github.com/zfsonlinux/zfs.git
% cd zfs
% ./autogen.sh
% make
% sudo make install
これで、spl.koやzfs.koなどのkernel modulesや、zfs、zpool、zdb commandsなどがinstallされるはず。
もしかしたら、buildの際にlibzfsとかのdevelopment package (header file)が必要かも知れない。
% sudo modprobe zfs
多分、自動的にdependencyが解決されてsplとかも突っ込まれるはず。
% lsmod | grep zfs
あたりでcheckする。
% sudo zpool create -o ashift=12 -f -m <mount_point> <pool> <disks>
Poolが作られると自動的にmountされる。
ちなみに、最近のHDDはAFTを使っていると思うのでその場合はashift=12を指定すると速くなるとのこと。
% sudo mkdir /etc/zfs/
% sudo zpool set cachefile=/etc/zfs/zpool.cache <pool>
これでgenerateされたので、後は好き放題zdbを使えるはず。
% sudo zdb -C -U /etc/zfs/zpool.cache <pool>
でも、
% sudo zdb -S -U /etc/zfs/zpool.cache <pool>
でもissueし放題。
cf. [FAQ · zfsonlinux/zfs Wiki · GitHub](https://github.com/zfsonlinux/zfs/wiki/faq)
どんなdataを抱えているかにもよるが、一度zdb -Sでどのくらい節約できるかを見てみると良い。ratioが2を割るようであれば無駄かなと。何しろ仕組み上ものすごく時間が掛かるし、diskに負荷も掛かるので。
cf. [How To Size Main Memory for ZFS Deduplication](http://www.oracle.com/technetwork/articles/servers-storage-admin/o11-113-size-zfs-dedup-1354231.html)
(2016-12-26追記)
Linux kernel 4.9.0でも利用可能。
(2016-12-03追記)
Linux kernel 4.8.12でも以下の手順でZoLを利用可能。
Installation
Debian package版ではbuildに失敗した (確か9/8現在で対応しているkernel versionは4.6が最新)ので、gitから直接build & installする。まずはSPL (Solaris Porting Layer)から:
% git clone https://github.com/zfsonlinux/spl.git
% cd spl
% ./autogen.sh
% make
% sudo make install
ZFSも手順は同じ:
% git clone https://github.com/zfsonlinux/zfs.git
% cd zfs
% ./autogen.sh
% make
% sudo make install
これで、spl.koやzfs.koなどのkernel modulesや、zfs、zpool、zdb commandsなどがinstallされるはず。
もしかしたら、buildの際にlibzfsとかのdevelopment package (header file)が必要かも知れない。
Pool作り
まず、zfs関連のkernel moduleをmodprobeして突っ込む。% sudo modprobe zfs
多分、自動的にdependencyが解決されてsplとかも突っ込まれるはず。
% lsmod | grep zfs
あたりでcheckする。
% sudo zpool create -o ashift=12 -f -m <mount_point> <pool> <disks>
ちなみに、最近のHDDはAFTを使っていると思うのでその場合はashift=12を指定すると速くなるとのこと。
zdbが"no such file or directory"を吐く問題
必要な(?) cache fileがgenerateされていないのが原因っぽい。Package systemとかDKMSとかで入れれば何かしらのscriptで自動生成されたりするんだろうか?% sudo mkdir /etc/zfs/
% sudo zpool set cachefile=/etc/zfs/zpool.cache <pool>
これでgenerateされたので、後は好き放題zdbを使えるはず。
% sudo zdb -C -U /etc/zfs/zpool.cache <pool>
でも、
% sudo zdb -S -U /etc/zfs/zpool.cache <pool>
でもissueし放題。
cf. [FAQ · zfsonlinux/zfs Wiki · GitHub](https://github.com/zfsonlinux/zfs/wiki/faq)
In-band deduplication
ZFSを使う利点 (というか動機)にもなるであろうdeduplication (重複排除)だが、どんなdataを抱えているかにもよるが、一度zdb -Sでどのくらい節約できるかを見てみると良い。ratioが2を割るようであれば無駄かなと。何しろ仕組み上ものすごく時間が掛かるし、diskに負荷も掛かるので。
cf. [How To Size Main Memory for ZFS Deduplication](http://www.oracle.com/technetwork/articles/servers-storage-admin/o11-113-size-zfs-dedup-1354231.html)
2016年9月3日土曜日
Mercurialのhg histeditでやらかした時、unbundleで元に(近い状態に)戻す
概要
Mercurial (以下hg)には、履歴を改編する為のhisteditという拡張がある。履歴を見易く綺麗にするには便利なのだが、うっかり「やらかして」しまったので、その顛末について残しておく。
やらかした内容
- 関連のあるchangesetをまとめるためにhg histeditを実行した
- 順序を変える必要があるのを忘れてうっかりeditor (vim)を終了
- commit logの変更に進んでしまい、そこで:q!を実行してabortしたつもりがhisteditが実行された
復旧の手順
- hg unbundleを使い、histeditを実行した際に保存されているbackup (bundle file)から復旧する
- 実行するとheadsが2つに増えた。この状態でhisteditは使えないので、一旦rebaseして履歴をlinearにする
- histeditを改めて実行して、commitを意図した順に並び換えた上で、不要なcommitをdrop
最後に
- やらかしても慌てない
- 自動backupと、hg unbundleは救世主 (間違ってstripした場合とかも戻せる)
ラベル:
hg histedit,
Mercurial
登録:
投稿 (Atom)