2010年11月7日日曜日

Windowsのエクスプローラーがフリーズする現象

ここ数ヶ月の間Windowsのエクスプローラーの調子がおかしかったのでぐぐって直した。

症状
  • アイコンをダブルクリックしてもエクスプローラーがハングアップする。数分待つと関連付けされたアプリが起動する。
  • アイコンを右クリックするとエクスプローラーがハングアップする。待つとメニューが出る。
  • 普通にアプリにドラッグアンドドロップする分にはフリーズしない。

ググッたところ同様に悩んでいる方がいた。
ファイルの起動が遅い

レジストリに存在しないマシンへのファイル共有のリンクがあるとフリーズするらしい。
大体の原因がわかったのでregeditでレジストリをエクスポートしてテキストエディタから「\\\\」(UNCの最初の\\を\でエスケープした文字列)で検索して片っ端からファイル共有へのリンクがないかチェックした。

案の定4,5個ぐらい存在しないマシンの共有ファイルへリンクしていた。やった覚えはないんだけどなぁ。。

当該箇所を削除したところ再起動なしでエクスプローラーがフリーズしなくなりました。
再インストールも考えていたので助かりました。

2010年10月21日木曜日

kickstartで最小限の構成でインストール

最小限の手間でサーバーを配備できるようにしたいのでkickstartインストールをやってみました。
とりあえずの目標としては以下の2点。
  • 最小構成でインストール。必要なdaemonはsshdだけ
  • DAGリポジトリからPuppetをインストール。これは次回以降の自動設定の布石
設定ファイルを作った手順は以下のような感じ
  1. 実際に手動で最小限の構成でインストールしてみる
  2. インストール後に/root/anaconda-ks.cfgを参考に編集。オプションの詳しい説明はRedHatのマニュアルウノウラボさんのblogを参考にした。
  3. 編集した設定ファイル(ks.cfg)をhttpでアクセスできる場所にアップロード。自分はDropboxのPublic領域にコピー。これで自前のWebサーバーを準備する手間が省ける
  4. VMWare Playerで実際にkickstartインストールできるか確認。思ったとおりにいってない箇所があれば2に戻る。
で、できた設定ファイルが以下のようになります。一部()で囲っている部分は適宜置き換えてください。
install
url --url http://ftp.iij.ad.jp/pub/linux/centos/5.5/os/i386

lang ja_JP.UTF-8
keyboard jp106
timezone Asia/Tokyo

network --device eth0 --bootproto dhcp --hostname (ホスト名) --noipv6
firewall --enabled --port=22:tcp

rootpw --iscrypted (暗号化パスワード)
authconfig --enableshadow --enablemd5
selinux --permissive

bootloader --location=mbr --driveorder=sda
clearpart --all --initlabel --drives=sda
part /boot --fstype ext3 --size=100 --ondisk=sda
part pv.2 --size=0 --grow --ondisk=sda
volgroup VolGroup00 pv.2
logvol swap --fstype swap --name=swap --vgname=VolGroup00 --size=512
logvol /usr --fstype ext3 --name=usr --vgname=VolGroup00 --size=8000
logvol /home --fstype ext3 --name=home --vgname=VolGroup00 --size=5000
logvol /var --fstype ext3 --name=var --vgname=VolGroup00 --size=4000 --grow
logvol / --fstype ext3 --name=root --vgname=VolGroup00 --size=2000

## DAG RPM repository for installing Puppet
#repo --name=dag --baseurl=http://ftp.riken.jp/Linux/dag/redhat/el5/en/x86_64/dag
repo --name=dag --baseurl=http://ftp.riken.jp/Linux/dag/redhat/el5/en/i386/dag

## set startup services
services --disabled=gpm,haldaemon,ip6tables,mcstrans,messagebus,netfs,rawdevices,restorecond

## user add
user --name=(ユーザー名) --groups=users

%packages --nobase
@core
telnet
vim-enhanced
screen
puppet

%post

## sshd deny password authentication
sed -i 's/^PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config

install -d -m 0700 -o tsuyosh -g users /home/(ユーザー名)/.ssh
cat > /home/(ユーザー名)/.ssh/authorized_keys <<KEY
(sshの公開鍵データ)
KEY
chown (ユーザー名):users /home/(ユーザー名)/.ssh/authorized_keys
インストールCDからbootしてksオプション付きでlinuxを起動させます。自分の場合はnetinstall CDを使いました。
linux ks=(設定ファイルのURL)
なお、httpでkickstartファイルを落としているのでDHCPでIPアドレスを自動取得できて設定ファイルをダウンロードできる環境にサーバーを置く必要があります。

2010年7月20日火曜日

WD20EARSで超簡単なベンチを取ってみる

2TBなのに9000円割れを起こしているWestern DigitalのWD20EARSだが物理セクターが4KiB(4096 byte)で論理セクターを512byteにエミュレートしている代物なのでパーティションの切り方に注意しないとパフォーマンスが低下する。

詳しい内容についてはLinux Kernel Watchを参照。

要はパーティションの開始位置が8の倍数(8は4096÷512の結果)であればいい。
通常、fdiskなどでパーティションを切っていると以下のように第一パーティションが第63セクターから始まるのでこのケースだとパフォーマンスが落ちます。(63は8で割り切れないため)
[root@enterprise ~]# parted /dev/sda
GNU Parted 1.8.1
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) unit s
(parted) p

Model: ATA WDC WD20EADS-22R (scsi)
Disk /dev/sda: 3907029167s
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start        End          Size         Type     File system  Flags
 1      63s          1953134504s  1953134442s  primary               raid

今回は書き込み性能だけパフォーマンスの増減を確認した。

time dd if=/dev/zero of=test1 bs=128k count=32768
32768+0 records in
32768+0 records out
4294967296 bytes (4.3 GB) copied, 78.149 seconds, 55.0 MB/s

real    1m18.721s
user    0m0.055s
sys     0m8.456s

time dd if=/dev/zero of=test2 bs=128k count=32768
32768+0 records in
32768+0 records out
4294967296 bytes (4.3 GB) copied, 133.031 seconds, 32.3 MB/s

real    2m19.676s
user    0m0.064s
sys     0m8.659s

time dd if=/dev/zero of=test3 bs=128k count=32768
32768+0 records in
32768+0 records out
4294967296 bytes (4.3 GB) copied, 103.591 seconds, 41.5 MB/s

real    1m49.534s
user    0m0.049s
sys     0m8.402s

time dd if=/dev/zero of=test4 bs=128k count=32768
32768+0 records in
32768+0 records out
4294967296 bytes (4.3 GB) copied, 92.4522 seconds, 46.5 MB/s

real    1m33.231s
user    0m0.044s
sys     0m8.058s

time dd if=/dev/zero of=test5 bs=128k count=32768
32768+0 records in
32768+0 records out
4294967296 bytes (4.3 GB) copied, 96.5241 seconds, 44.5 MB/s

real    1m42.806s
user    0m0.050s
sys     0m8.364s

● partedを使ってGPTでパーティション開始位置が8の倍数になるように設定した場合
[root@enterprise ~]# parted /dev/sdd
(parted) unit s
(parted) mkpart primary 40 1953125039
(parted) mkpart primary 1953125040 3906250039
(parted) p

Model: ATA WDC WD20EARS-00M (scsi)
Disk /dev/sdd: 3907029167s
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start        End          Size         File system  Name     Flags
 1      40s          1953125039s  1953125000s  ext3         primary
 2      1953125040s  3906250039s  1953125000s               primary
(parted) unit GB
(parted) p

Model: ATA WDC WD20EARS-00M (scsi)
Disk /dev/sdd: 2000GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start   End     Size    File system  Name     Flags
 1      0.00GB  1000GB  1000GB  ext3         primary
 2      1000GB  2000GB  1000GB               primary

[root@enterprise ~]# time /sbin/mkfs.ext3 /dev/sdd1
real    4m4.347s
user    0m0.763s
sys     0m19.149s

先ほどと同様にddでwriteの速度を5回検証。先ほどよりも2倍ちょっと速い
[root@enterprise ~]# mount /dev/sdd1 /data3
time dd if=/dev/zero of=test1 bs=128k count=32768
4294967296 bytes (4.3 GB) copied, 39.2418 seconds, 109 MB/s

real    0m40.107s
user    0m0.053s
sys     0m8.217s

time dd if=/dev/zero of=test2 bs=128k count=32768
4294967296 bytes (4.3 GB) copied, 54.6037 seconds, 78.7 MB/s

real    0m55.010s
user    0m0.063s
sys     0m8.313s

time dd if=/dev/zero of=test3 bs=128k count=32768
4294967296 bytes (4.3 GB) copied, 47.1927 seconds, 91.0 MB/s

real    0m48.051s
user    0m0.048s
sys     0m8.491s

time dd if=/dev/zero of=test4 bs=128k count=32768
4294967296 bytes (4.3 GB) copied, 50.3923 seconds, 85.2 MB/s

real    0m51.414s
user    0m0.055s
sys     0m8.230s

time dd if=/dev/zero of=test5 bs=128k count=32768
4294967296 bytes (4.3 GB) copied, 55.192 seconds, 77.8 MB/s

real    0m56.192s
user    0m0.064s
sys     0m8.125s

2010年7月18日日曜日

LinuxのHDDを増設してみた

2TBのHDDがお手軽に買えるようになってきたのでLinuxサーバーのHDDを交換・増設してみた。

変更前の状態は以下の通り
sda: WD10EADS
sdb: WD20EADS sdb1,sdb2にそれぞれ1000GBずつ割り当て
sdc: WD20EADS sdc1,sdc2にそれぞれ1000GBずつ割り当て

今回はsdaを取り外してWD20EARSを2台増設する。
あとRAID化されていない領域をRAID-5化する。
総容量は4TBから6TBになる

WD20EARSは普通のHDDと違って物理セクターサイズが4KiBなのでパーティションを適切に切らないとWriteのパフォーマンスは半減する。この辺は簡単なベンチマークをしたので後述。

結局通常のMBRでなくGPTでパーティションを以下のように切りました

GNU Parted 1.8.1
Using /dev/sdd
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) unit s                                                           
(parted) p                                                                

Model: ATA WDC WD20EARS-00M (scsi)
Disk /dev/sdd: 3907029167s
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start        End          Size         File system  Name     Flags
 1      40s          1953134487s  1953134448s  ext3         primary  raid 
 2      1953134488s  3906268935s  1953134448s               primary  raid 

パーティションはこんな感じで作りました。
mkpart 40 1953134487
mkpart 1953134488 3906268935
set 1 raid on
set 2 raid on

さてパーティションの準備ができたのでsdaをraid arrayから切り離してsdd1を追加する。

[root@enterprise ~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md1 : active raid5 sdc1[2] sdb1[1] sda1[0]
      1953134208 blocks level 5, 64k chunk, algorithm 2 [3/3] [UUU]
(md1が稼動中。sda1,sdb1,sdc1でarrayを構築)

[root@enterprise ~]# mdadm --manage /dev/md1 --fail /dev/sda1
mdadm: set /dev/sda1 faulty in /dev/md1
(sda1が壊れたフラグを立てる。もちろん壊れてはいないが)

[root@enterprise ~]# mdadm --manage /dev/md1 --remove /dev/sda1
mdadm: hot removed /dev/sda1
(sda1をarrayから切り離す)

[root@enterprise ~]# mdadm --misc --zero-superblock /dev/sda1
[root@enterprise ~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md1 : active raid5 sdc1[2] sdb1[1]
      1953134208 blocks level 5, 64k chunk, algorithm 2 [3/2] [_UU]
(sda1がなくなっているのがわかる)

[root@enterprise ~]# mdadm --manage /dev/md1 --add /dev/sdd1
mdadm: added /dev/sdd1
(sdd1をmd1 arrayに追加)

[root@enterprise ~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md1 : active raid5 sdd1[3] sdc1[2] sdb1[1]
      1953134208 blocks level 5, 64k chunk, algorithm 2 [3/2] [_UU]
      [>....................]  recovery =  0.2% (2126592/976567104) finish=271.5min speed=59814K/sec
(raid arrayのリビルド開始。終わるまで寝るー)


起きたら完了していたので一回shutdownしてsdaを取り外してもう1台のHDDを増設する。こういう構成
sda: WD20EADS sda1,sda2にそれぞれ1000GBずつ割り当て
sdb: WD20EADS sdb1,sdb2にそれぞれ1000GBずつ割り当て
sdc: WD20EARS sdc1,sdc2にそれぞれ1000GBずつ割り当て
sdd: WD20EARS sdd1,sdd2にそれぞれ1000GBずつ割り当て

sddをraid arrayに追加してraid devicesを増やして容量を拡張する。
ちなみにmd1とFS(ext3)の間にLVMを挟んでいるのでオンラインで拡張可能。unmountは不要。

[root@enterprise ~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md1 : active raid5 sdc1[0] sdb1[2] sda1[1]
      1953134208 blocks level 5, 64k chunk, algorithm 2 [3/3] [UUU]

unused devices: 
[root@enterprise ~]# mdadm --manage /dev/md1 --add /dev/sdd1
(sdd1をmd1に追加)
[root@enterprise ~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md1 : active raid5 sdd1[3](S) sdc1[0] sdb1[2] sda1[1]
      1953134208 blocks level 5, 64k chunk, algorithm 2 [3/3] [UUU]

unused devices: 
(この時点ではsdd1はスペアディスク扱い)

[root@enterprise ~]# mdadm -G /dev/md1 -n 4
mdadm: Need to backup 384K of critical section..
mdadm: ... critical section passed.
(RAID-5のデバイス数を3から4に拡大)
[root@enterprise ~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md1 : active raid5 sdd1[3] sdc1[0] sdb1[2] sda1[1]
      1953134208 blocks super 0.91 level 5, 64k chunk, algorithm 2 [4/4] [UUUU]
      [>....................]  reshape =  0.0% (35072/976567104) finish=1391.0min speed=11690K/sec
(arrayのリビルド開始)
いまココ。まだ続く...

1日経過してようやくreshape完了。。。
ここからはLVMやFS(ext3)関係の操作。VG(Volume Group)を拡張、LV(Logical Volume)を拡張、FS(File System)を拡張する。
全てオンラインで拡張できる。
[root@enterprise ~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md1 : active raid5 sdd1[3] sdc1[0] sdb1[2] sda1[1]
      2929701312 blocks level 5, 64k chunk, algorithm 2 [4/4] [UUUU]

unused devices: 
(ほぼ1日がかりでようやくreshape完了。。)

[root@enterprise ~]# pvscan | grep md1
  PV /dev/md1    VG VolGroup01   lvm2 [1.82 TB / 5.38 GB free]
(まだPVの容量は増えていない)
[root@enterprise ~]# pvresize /dev/md1
  Physical volume "/dev/md1" changed
  1 physical volume(s) resized / 0 physical volume(s) not resized
(pvresizeで実際の容量を認識してくれる)
[root@enterprise ~]# pvscan | grep md1
  PV /dev/md1    VG VolGroup01   lvm2 [2.73 TB / 936.70 GB free]
(PVの容量が900GiB近く増えた)
[root@enterprise ~]# vgdisplay VolGroup01
  --- Volume group ---
  VG Name               VolGroup01
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  24
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                7
  Open LV               6
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               2.73 TB
  PE Size               4.00 MB
  Total PE              715259
  Alloc PE / Size       475463 / 1.81 TB
  Free  PE / Size       239796 / 936.70 GB
  VG UUID               VJYgfz-KEYE-bX7w-wyJw-1vSt-sTd8-czljOL
(VGのFree Sizeも増えてる)
[root@enterprise ~]# lvextend -L +900G /dev/VolGroup01/data1
  Extending logical volume data1 to 2.55 TB
  Logical volume data1 successfully resized
(LV(data1)の容量を900GiB拡張。意外とすぐに処理完了)
[root@enterprise ~]# resize2fs /dev/VolGroup01/data1
resize2fs 1.39 (29-May-2006)
Filesystem at /dev/VolGroup01/data1 is mounted on /data1; on-line resizing required
Performing an on-line resize of /dev/VolGroup01/data1 to 683482112 (4k) blocks.
(結構時間かかる19:26-)

[root@enterprise ~]# df | grep data1
/dev/mapper/VolGroup01-data1
                     2407942276 1541393540 744261696  68% /data1
[root@enterprise ~]# df | grep data1
/dev/mapper/VolGroup01-data1
                     2408974404 1541393540 745241408  68% /data1
[root@enterprise ~]# df | grep data1
/dev/mapper/VolGroup01-data1
                     2409877516 1541393540 746098656  68% /data1
[root@enterprise ~]# df | grep data1
/dev/mapper/VolGroup01-data1
                     2410780628 1541393540 746955904  68% /data1
(resize2fsの処理中の状況。徐々に容量が増えていく..)


ちょうど40分でresize2fsの処理完了。これで増設したHDDの半分を割り当てたことになる。

今度はsd[ab]2においてあるファイルを退避させないといけないので先にsd[cd]2を似非raid-5化してそれをVolGroup01に登録して再拡張してデータを退避させる。また時間かかりそうだ。。

[root@enterprise ~]# mdadm --create /dev/md2 --level=5 --raid-devices=2 /dev/sd{c,d}2
mdadm: array /dev/md2 started.
(1本足りない状態だけど2TBのraid array(md2)を作成)

[root@enterprise ~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md2 : active raid5 sdd2[2] sdc2[0]
      976567104 blocks level 5, 64k chunk, algorithm 2 [2/1] [U_]
      [>....................]  recovery =  0.1% (1264640/976567104) finish=321.3min speed=50585K/sec
(なんかブロック数が足りない気がする。。)



上で心配していたようにどうも2TBじゃなくて1TBのデバイスとして認識されているようだ。
RAID5なのにRAID1のような感じになってる。増設したら変わってくるんだろうか。。

[root@enterprise ~]# mdadm --detail /dev/md2
/dev/md2:
        Version : 0.90
  Creation Time : Mon Jul 19 21:05:16 2010
     Raid Level : raid5
     Array Size : 976567104 (931.33 GiB 1000.00 GB)
  Used Dev Size : 976567104 (931.33 GiB 1000.00 GB)
   Raid Devices : 2
  Total Devices : 2
Preferred Minor : 2
    Persistence : Superblock is persistent

    Update Time : Tue Jul 20 23:55:51 2010
          State : clean
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

         Layout : left-symmetric
     Chunk Size : 64K

           UUID : 4f7b6a38:0dabaacc:8799f02a:c89f888f
         Events : 0.2

    Number   Major   Minor   RaidDevice State
       0       8       34        0      active sync   /dev/sdc2
       1       8       50        1      active sync   /dev/sdd2

とりあえず先に進む。このmd2もVolGroup01に追加する。今度はpvresizeの代わりにpvcreate,vgextendが必要。
[root@enterprise ~]# pvcreate /dev/md2
[root@enterprise ~]# vgextend VolGroup01 /dev/md2
[root@enterprise ~]# lvextend -L +910G /dev/VolGroup01/data1
[root@enterprise ~]# resize2fs /dev/VolGroup01/data1

この状態でsd[a,b]2においてあるファイルを全部data1に移転。同じディスク間の読み書きだからかなり時間がかかる。
また寝るー

2010年7月1日木曜日

blogを移転

某所でMTでblogを構築していたが運営が面倒になったのでblogger.comに移転します。
過去のblogも順次こちらに移転する予定です。

blogの題名通りここはちょいと長めのつぶやきを載せていく予定です。
活動のベースはtwitter(@uecchi)です。