ablog

不器用で落着きのない技術者のメモ

Meadow から ssh を使えるようにする方法

Meadow から M-x shell でシェルモードにして、ssh を使うと、

$ ssh neo@192.168.153.101
Pseudo-terminal will not be allocated because stdin is not a terminal.

と怒られたので、以下の通り対応したら解決した。

  • Cygwin を起動して以下のコマンドを実行する。
$ cd /cygdrive/c/meadow
$ mkdir work
$ cd work
# fakecygpty.c をダウンロードする
$ wget -O fakecygpty.c http://www.meadowy.org/meadow/browser/trunk/nt/fakecygpty.c?format=txt
# fakecygpty.c をコンパイルする。
$ gcc -o fakecygpty.exe fakecygpty.c
# fakecygpty.exe を meadow/bin 以下にコピーする。
$ cp fakecygpty.exe ../bin/
  • .emacs に以下を追記する。
(setq mw32-process-wrapper-alist
	'(("/\\(bash\\|tcsh\\|svn\\|ssh\\|gpg[esvk]?\\)\\.exe" .
	(nil . ("fakecygpty.exe" . set-process-connection-type-pty)))))

mke2fs の -i オプションに指定する値はどうやって決めたらよいか

$ mke2fs -c -b 4096 -i 4096 -j /dev/hda9

などと ext3ファイルシステムを作る時に -i オプションに指定する値はどうやって決めたらいいのかわからないので、調べてみた。

man で見てみると、

$ man mk2sfs

...

       -i bytes-per-inode
              Specify  the  bytes/inode  ratio.   mke2fs  creates an inode for
              every bytes-per-inode bytes of space on the  disk.   The  larger
              the  bytes-per-inode  ratio,  the  fewer inodes will be created.
              This value generally shouldn't be smaller than the blocksize  of
              the  filesystem,  since  then  too many inodes will be made.  Be
              warned that is not possible to expand the number of inodes on  a
              filesystem  after it is created, so be careful deciding the cor-
              rect value for this parameter.

しばらく眺めてて、やっと理解できた。

まとめ

10MB = 10485760 byte
10485760 byte / 4096 byte = 2602.571358 個 <-- 作られる inode の数
2602.571358 個 * 128 byte = 333129.1338 = 約25 KB <-- inode に使われる容量
10485760 byte - 333129.1338 byte = 10152630.87 byte = 約9.7 MB <-- データブロックに使われる容量
※正確にはスーパーブロックに使われる容量もあるのでもう少し減るはず。
  • mke2fs でファイルシステムを作るときに、「-i の値 > -b の値」とすると、inode が枯渇する可能性がある。
  • 逆に、「-i の値 < -b の値」とすると、必要以上に inode が作られて、無駄にディスク容量を使う。
  • 「-i の値 = -b の値」とすると、inode が枯渇することはないはず。1 byte のファイルでも物理的には1つのデータブロックが使われるので、1 byte のファイルというか 4096 byte 以下のファイルでパーティションを埋め尽くした場合、データブロックも inode も 100% 使用された状態になる。
  • 例えば、Oracle のデータファイルをおく領域の場合、ファイルサイズは大きいので、-i の値を大きくして inode の数を少なくするとデータブロックに使用できる領域が大きくなりディスクを効率的に使えると思う。

補足

*1:ファイルタイプ・アクセス権・所有者・所有グループ・ファイルサイズ・作成日時など

Oracle + ext3 を使う時の「オレオレ」ベストプラクティス

以下のベストプラクティスは過去の記事に書いてるけど、設定方法を書いてなかったので、調べて書いてみた。

  • I/O スケジューラ: deadline
# vi /boot/grub/grub.conf
        kernel /vmlinuz-2.6.18-128.el5 ro root=/dev/VolGroup00/LogVol00 rhgb quiet elevator=deadline
# shutdown -r now
  • ブロックサイズ(-b)毎に inode(-i) を作成する
# mke2fs -c -b 4096 -i 4096 -j -m 1 /dev/sda1
  • fschk が走らないようにする
# tune2fs -c -1 -i 0 /dev/sda1
# mount -t ext3 -o data=ordered,relatime /dev/sda1 /u02

relatime はカーネル2.6.20以降。relatime を使えない場合は noatime を使う。
↓は fstab に書く場合の例

# cat /etc/fstab
...

LABEL=/u01              /u01                    ext3    defaults,noatime,data=ordered        1 2
  • 設定確認方法
# tune2fs -l /dev/sda1
# dumpe2fs /dev/sda1
# ls /dev/sd[a-z][0-9]* | xargs -n1 tune2fs -l | egrep 'Maximum mount count|Check interval'

参考


追記(2010/05/05):
こんな確認方法もあるな。

# df -t ext3|awk '{print $1}'|xargs -n1 tune2fs -l| egrep 'Maximum mount count|Check interval'
Maximum mount count:      -1
Check interval:           0 (<none>)
Maximum mount count:      -1
Check interval:           0 (<none>)
...

関連


追記(2009/12/07):
現在のI/Oスケジューラが何になってるか確認する方法

# cat /sys/block/sda/queue/scheduler