メイン

2012年08月24日

autofsによるSambaマウントがうまくいかない

Windowsの共有ディレクトリにLinuxサーバからSamba(CIFS)マウントするときにハマったこと。
LinuxサーバはCentOS 6.3です。

基本的には、CentOSプロジェクトサイトのTips And Tricks 'How to mount remote Windows shares' の '4. Even-better method' を参考にしました。
http://wiki.centos.org/TipsAndTricks/WindowsShares

仮にマウント先とマウントポイントは下記のとおりとします。

  マウント先情報
   ディレクトリ \\192.168.1.32\SHARE$
   ユーザ名   user01

  マウントポイント
   /misc/share01

mount.cifs コマンドでマウントできることは確認できました。

# mount.cifs //192.168.1.32/SHARE$ /misc/share01 \
-o username=user01,password=password

次に、'4. Even-better method' のとおり autofs の設定を行います。

 # yum install autofs

# cat /etc/auto.master

--
/misc /etc/auto.misc
--

# vi /etc/auto.misc

-- (以下、1行で書きます)
share01 -fstype=cifs,rw,iocharset=utf8,file_mode=0644,dir_mode=0755,
credentials=/root/credentials.txt ://192.168.1.32/SHARE$
--

ユーザ名とパスワードは、rootユーザ以外は参照できないよう、/root/credentials.txt に記載し、ownerをroot, permissionを700とします。

 # vi /root/credentials_nas.txt

--
username=user01
password=password
--

 # chown root.root /root/credentials_nas.txt
 # chmod 700 /root/credentials_nas.txt

  autofsを起動(または再起動)。

# /etc/init.d/autofs start

これで、/misc/nas01 に何らかのアクセスを行うと、/misc/nas01 がマウントされるはず。

# ls /misc/nas01
ところが、「/misc/nas01 そのようなファイルやディレクトリはありません。」のエラーとなります。

いろいろ調べたところ、マウント先のディレクトリ名にドル記号 '$' が含まれていることが原因だとわかりました。
(末尾が $ の場合のみ注意する必要があるのかもしれません。)

ディレクトリ名の指定で、'$' の前に '\' でエスケープしてあげると、うまくマウントできるようになりました。

# vi /etc/auto.misc

--(以下、1行で書きます)
share01 -fstype=cifs,rw,iocharset=utf8,file_mode=0644,dir_mode=0755,
credentials=/root/credentials.txt ://192.168.1.32/SHARE\$
--

もしくは、ディレクトリ名全体を、ダブルクォート '"' で囲んでもうまくいきました。

# vi /etc/auto.misc

--(以下、1行で書きます)
share01 -fstype=cifs,rw,iocharset=utf8,file_mode=0644,dir_mode=0755,
credentials=/root/credentials.txt "://192.168.1.32/SHARE$"
--

解決!

以下の情報がヒントとなりました。
http://www.fastriver.net/~ryo/index.php?%C6%FC%B5%AD%2F2008-06


そもそも「なぜ共有ディレクトリ名の末尾に $ をつけるのだろう?」と思って調べてみました。
Windowsでは共有名の末尾に $ をつけると、クライアントの「参照可能なリスト」として表示されず、「隠し共有」の状態にできるという仕様なのですね。
知りませんでした。

(参考)
Microsoftサポート
共有名の最後に「$」文字を非表示になっています。
http://support.microsoft.com/kb/90929/ja

2011年05月16日

CentOS 5ホストのXenゲストOSとしてScientific Linux 6をインストール

そろそろRHEL 6/CentOS 6の調査をしておきたい、と思っていたのですが、CentOS 6はなかなかリリースされないので、同じくRedHatクローンのScientific Linux 6(以下、SL6)を使用することにしました。

適当なサーバが手元になかったので、XenのゲストOSとして、virt-installコマンドを使用してインストールします。
ホストOSはCentOS 5です。
その際にハマったことがあったので、ここに記載しておきます。

・ホストOSのxenのバージョン
ホストOSのバージョンはCentOS 5.2、xenは3.0.3-41だったのですが、virt-installコマンドを実行すると、下記のようなエラーとなりました。

...
[2011-05-11 17:22:43 xend 3190] ERROR (SrvBase:88)
Request create failed.
Traceback (most recent call last):
File "/usr/lib/python2.4/site-packages/xen/web/SrvBase.py",
line 85, in perform return op_method(op, req)
File "/usr/lib/python2.4/site-packages/xen/xend/server
/SrvDomainDir.py", line82, in op_create
raise XendError("Error creating domain: " + str(ex))
XendError: Error creating domain: (2, 'Invalid kernel',
'xc_dom_find_loader: no loader found\n')

調べたところ、比較的新しいOSのLinuxカーネルイメージ(2.6.30以降?vmlinux - Wikipediaより)は、gzip圧縮ではなくbzip2による圧縮を使用したbzImageという新しい形式になったそうです。
それで、xenがbzImage形式に対応していないので、カーネルイメージをロードできなくてエラーとなったようです。

(参考)
http://old.nabble.com/rawhide-domU-on-RHEL5.2-dom0--td19828250.html
https://bugzilla.redhat.com/show_bug.cgi?id=457199

xenのみアップデートすれば解決したのかもしれませんが、せっかくなので、ホストOSのカーネルを含めた全アップデートを実施し、CentOS 5.6、xen-3.0.3-120としたところ、'no loader found'のエラーは出なくなりました。

・インストール時のゲストOSへのメモリ割り当て
ゲストOSのメモリ割り当ては最小限にしたかったので、virt-install時の引数で --ram=128 のように128MBを指定しました。
すると、SL6のCUIインストーラが起動したのち、
'You do not have enough RAM to install Scientific Linux on this machine.'
というメッセージが出て終了してしまいます。
256MBにしても同様のエラーとなり、結局、384MB割り当てると、無事インストールを完了できました。

virt-installコマンドの引数は下記のような感じです。

# virt-install \
--paravirt \
--uuid=0e20a1b5-f72b-4dbd-a7b6-3886b713ff24 \
--name=sl6server \
--vcpus=1 \
--ram=384 \
--mac=00:16:3e:59:1f:01 \
--file=/var/lib/xen/images/sl6server.img \
--file-size=10 \
--location=http://ftp.riken.jp/Linux/scientific/6.0/i386/os/ \
--nographics

インストールが終了すれば、その後SL6へのメモリ割り当てを128MBに減らしても、OSは問題なく起動します。
ホストOS側で、XenゲストOSのconfigファイル
/etc/xen/sl6server を編集し、memory = 128 を指定します。

なお、SL6はCUIインストールだと、こちらではほとんど指定できず、下記のようになります。


  • パーティションは /boot が485MB、/ はLVMで残り全部、SWAPもLVMで768MBとなる。(指定したディスクサイズによるのかもしれませんが。)
  • パッケージは最小構成。
  • SELinuxは有効。

これが気に入らなければ、virt-managerを使うなりしてGUIインストールするとよいでしょう。

ファイルシステム、cronなど、RHEL 5からRHEL 6への変更点がいくつかあるようです。
これからいろいろ触ってみます。

2009年04月06日

64bitサーバへのJ2EE 5のインストール

CentOS 5.3(x86_64)環境にJ2EE 5(GlassFish Java EE)のJDKなし版をインストールしたときにハマったこと。
まず最初に、J2EEはlibstdc++5を必要とするので、このライブラリを含むcompat-libstdc++-33パッケージをインストールします。

# yum install compat-libstdc++-33

続いてJ2EEのインストールを実行します。
ちなみに、エラーメッセージは端末エミュレータの文字コードをEUCにしないと見れません。

# chmod 755 java_ee_sdk-5_07-linux-nojdk-ml.bin
# ./java_ee_sdk-5_07-linux-nojdk-ml.bin -console

すると、、、

使用可能なディスク容量をチェックしています...
Java(TM) 2 Runtime Environment をチェックしています...
Java(TM) 2 Runtime Environment ファイルを抽出しています...
エラー: 必要なバージョンの Java(TM) 2 Runtime Environment が
見つかりませんでした。
このアプリケーションには、バージョン 1.5 以上の Java(TM) 2
実行時環境が必要です。必要な Java(TM) 2 実行時環境がインストール
されていない場合、次の Web サイトからダウンロードできます:
http://java.sun.com/j2se
また、必要な Java(TM) 2 実行時環境がすでにインストールされて
いる場合は、次の使用法でこのアプリケーションを再実行して
みてください:
'java_ee_sdk-5_07-linux-nojdk-ml.bin' -javahome \

なるほど、J2EEのインストーラはJavaの実行環境が必要なのですね。
すでにJDK 6 Update 13(x86_64)をインストール済みだったので、パスを指定して実行します。

# chmod 755 java_ee_sdk-5_07-linux-nojdk-ml.bin
# ./java_ee_sdk-5_07-linux-nojdk-ml.bin \
-console -javahome /usr/local/jdk1.6.0_13

そうすると、、、

使用可能なディスク容量をチェックしています...
Java(TM) 2 Runtime Environment をチェックしています...
Java(TM) 2 Runtime Environment ファイルを抽出しています...
インストールファイルを抽出しています...
Java(TM) 2 Runtime Environment を起動しています...
Attach to native process failed
一時ファイルを削除しています...

やっぱり途中で失敗してしまいます。
しょうがないので、Googldeで'Attach to native process failed java install'で検索すると、、、出ました。

http://forums.sun.com/thread.jspa?threadID=5226774&start=15

the installer requires 32-bit JDK on a 64-bit system.

ということで、J2EEのインストーラは「32bitの」JDKが必要なのですね。
手元にインストーラがあったJDK 6 Udpate 12(i586)をインストールしました。

-javahomeオプションで、32bit版JDKのディレクトリを指定して再度J2EEのインストールにチャレンジ。

# chmod 755 java_ee_sdk-5_07-linux-nojdk-ml.bin
# ./java_ee_sdk-5_07-linux-nojdk-ml.bin \
-console -javahome /usr/local/jdk1.6.0_12

これで、無事インストーラが起動しました。
インストーラは日本語で対話形式となっていますが、こちらはEUCではなくてUTF-8ですので要注意。

また、JDKなし版のせいか、途中でApplication Serverが使用するJDKについて確認がありますが、こちらはJ2EEのインストール(のみ)に使用した32bit版ではなくて、64bit版を使用したいので、そちらのディレクトリを指定します。

Sun Java System Application Server は JDK を必要とします。
JDK 5.0 以降へのパスを指定してください。
  [/usr/local/jdk1.6.0_12] {"<" 戻る,"!" 終了}
  /usr/local/jdk1.6.0_13


以上

2008年10月03日

CentOSでNTFSの外付けHDDをマウント

CentOS 5のサーバで、NTFSでフォーマットされたUSB外付けハードディスクをマウントしたときの手順です。
デフォルトのOSインストールでは、NTFSはマウントできないのですね。

・デバイスファイル名の確認
まず、サーバにUSBディスクを接続します。
デバイスファイル名は、/var/log/messages に記録されます。
以下の例では、/dev/sdb1 であることがわかります。

-- /var/log/messages
Oct 2 14:11:48 test-svr kernel: SCSI device sdb: 1250263728 512-byte hdwr sectors (640135 MB)
Oct 2 14:11:48 test-svr kernel: sdb: Write Protect is off
Oct 2 14:11:48 test-svr kernel: sdb: assuming drive cache: write through
Oct 2 14:11:48 test-svr kernel: SCSI device sdb: 1250263728 512-byte hdwr sectors (640135 MB)
Oct 2 14:11:48 test-svr kernel: sdb: Write Protect is off
Oct 2 14:11:48 test-svr kernel: sdb: assuming drive cache: write through
Oct 2 14:11:48 test-svr kernel: sdb: sdb1
Oct 2 14:11:48 test-svr kernel: sd 2:0:0:0: Attached scsi disk sdb
Oct 2 14:11:48 test-svr kernel: sd 2:0:0:0: Attached scsi generic sg3 type
--

念のため、fdiskコマンドでディスク情報を確認します。
ファイルシステムがNTFSであることがわかります。

 # /sbin/fdisk -l /dev/sdb

Disk /dev/sdb: 640.1 GB, 640135028736 bytes
255 heads, 63 sectors/track, 77825 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes

デバイス Boot Start End Blocks Id System
/dev/sdb1 1 77825 625129281 7 HPFS/NTFS

・マウント試行
このままの状態で、試しにNTFSとしてマウントしようとすると、「NTFSというファイルシステムは知らない」と怒られます。

 # mount -t ntfs /dev/sdb1 /mnt/usbdisk

mount: unknown filesystem type ‘ntfs’

・調査 - ググる
CentOS 5では、デフォルトインストールの状態では、NTFSを認識しないようです。
調べたところ、fuse, fuse-ntfs-3g, dkms, dkms-fuse といったパッケージをインストールすると、NTFSを認識することがわかりました。

(参考)
Domain Name Yahoo, Easy Help Troubleshoot Your Linux Box:
http://www.domainnameyahoo.info/failed-to-mount-ntfs-on-centos/

r271-635 An Archive Area, CentOSでfuseモジュールを使いNTFSにアクセス
http://netlog.jpn.org/r271-635/2008/06/centosfusentfs.html

参考サイトでは、centosplusリポジトリから、これらをインストールできる、という記述がありましたが、centosplusリポジトリをenableにしても、yumコマンドではパッケージが見つかりませんでした。
そのため、rpmパッケージファイルを取得してからインストールすることにしました。

・パッケージファイルの取得
DAG Packagesなどから、必要なRPMパッケージファイルを取得します。

DAG Packagesなどから、必要なfuse, fuse-ntfs-3g, dkms, dkms-fuseのパッケージファイルを取得します。
Redhat5向けのものがそのまま使用できます。
dag.wieers.com のdkms-fuse だけは、なぜかリンクが切れているので、rpmfind.net から取得します。

http://dag.wieers.com/rpm/packages/
http://rpmfind.net/linux/RPM/dag/redhat/8.0/i386/dkms-fuse-2.7.2-1.nodist.rf.noarch.html

・インストール
rpmコマンドでインストールします。

 # rpm -ivh fuse-2.7.3-1.el5.rf.i386.rpm \
fuse-ntfs-3g-1.913-1.el5.rf.i386.rpm \
dkms-2.0.17.6-1.el5.rf.noarch.rpm

 # rpm -ivh dkms-fuse-2.7.2-1.nodist.rf.noarch.rpm

・マウント
まず、カーネルにfuseモジュールを読み込ませます。

 # modprobe fuse

マウントします。

 # mount -t ntfs-3g /dev/sdb1 /mnt/usbdisk

「-o force で強制的にマウントするとよい」というアラートが表示されるので、そのとおりにします。

 # mount -t ntfs-3g /dev/sdb1 /mnt/usbdisk -o force

dfコマンドなどで、マウントされたことを確認します。

・アンマウント

 # umount /mnt/usbdisk

デバイスビジーでアンマウントに失敗する場合は、強制的に実行するオプションをつけます。

 # umount -l -f /mnt/usbdisk

・OS起動時の自動マウント
OS起動時に自動マウントしたいのであれば、/etc/fstab に追記するとよいでしょう。

-- /etc/fstab
/dev/sdb1 /mnt/usbdisk ntfs defaults 0 0
--

(2011.11.16追記)
上記のfuse-ntfs-3g, fuseに加えて、ntfsprogsパッケージをインストールすると、ディスクをNTFSでフォーマットできます。
パッケージはRPMforge改めRepoforgeなどからOSの種類、バージョンに適したファイルを取得します。

http://pkgs.repoforge.org/ntfsprogs/

# rpm -ivh ntfsprogs-1.13.1-1.el5.rf.i386.rpm

もしくは、Repoforgeのリポジトリを追加済みであれば、yumコマンドでインストールできます。

# yum install ntfsprogs

mkntfsコマンドを使って、NTFSでフォーマットします。

# mkntfs /dev/sdb1


これにより、例えばAmazon EC2で、NTFSでフォーマットしたEBSボリュームをLinuxサーバとWindowsサーバ間でそのまま引き継いで使用する、というような使い方ができます。

EBSボリュームをLinuxサーバにアタッチしてNTFSでフォーマット、マウント
→Linuxサーバ上で必要な処理を実行し、EBSボリュームにデータを保存し、アンマウント、デタッチ
→そのEBSボリュームをWindowsサーバにアタッチ、マウント
→Windowsサーバ上でEBSボリューム上のデータに対してWindowsプログラムによる必要な処理を実行する。

もちろん、WindowsサーバでフォーマットしてからLinuxサーバに引き継ぐこともできます。

2008年09月26日

HP DL360G5 + HP MSA1000 + CentOS 5 + LVM

先日、サーバ:HP Proliant DL360 G5, ストレージ:HP MSA1000, OS:CentOS5.2 (i386)という環境を構築したのですが、ソフトウェアのインストールや設定を行う順序など、少し注意すべきポイントがあったので概要をまとめておきます。
(概要といいつつ)けっこう長くなってしまいました。
RedHat Enterprise Linux(RHEL)ではなく、CentOSでも問題なく動作しています。

  • 前提条件

    • サーバDL360 G5、ストレージサーバMSA1000の設置が完了していること。
    • MSA1000上の論理ドライブ作成が完了していること。
    • DL360 G5とMSA1000スイッチ間のファイバーのケーブリングが完了していること。

  • ポイント

    • OSをインストールする際は、ファイバーケーブルを外しておくこと。
    • RAID用のSmartアレイドライバは、RHEL5/CentOS5に同梱されている。
      (RedHat4には同梱されていなかった)
    • HPサポートパック(ProLiant Support Pack = PSP)のインストールが必要だが、その前に、カーネルほかのパッケージをアップデートしておいたほうがよい。つまり、インターネットに接続するためのネットワークの設定も行う。
    • PSPのインストール時、CentOS5をRHEL5だと思わせる設定が必要。
    • ファイバーチャネルのフェイルオーバー(Qlogic Failover)の設定が必要。

おおまかな手順は下記のとおりとなります。


  1. CentOS5のインストール
  2. ネットワークの設定
  3. ソフトウェアパッケージのアップデート
  4. HPサポートパック(PSP)のインストール
  5. ファイバーチャネルのフェイルオーバー(Qlogic Failover)の設定
  6. MSA1000上のディスク設定

■CentOS5のインストール
インストールの前に、サーバを停止した状態で、ファイバーケーブルを抜いておきます。
電源をONにして、あらかじめ用意したCentOS5のメディアでインストールを開始します。
なお、RHEL4までは、インストール開始の入力待ち状態のときに、事前に作成したRAID用のSmartアレイドライバーのディスケットを読み込ませる必要があったそうです。
RHEL5からはこのドライバーがOSに含まれるようになったため、不要となったようです。
念のため、事前にディスケットを用意していましたが、CentOS5.2でも同様に不要でした。

この、DL360 G5 + RHEL5用のSmartアレイドライバーに関する情報は以下にあります(32bit版)。

http://h50222.www5.hp.com/support/DUMDL360G5SVR/more_info_soar_MTX-1704d42bcb74489390637fbbf8.html

CentOS5をお好みの内容でインストールします。

(このサーバ、OSに限りませんが)インストール完了後は、OSから参照できるCPU, メモリ, ディスク, NICなどのスペック情報が正しいかどうか、確認するようにしています。


■ネットワークの設定
PSPをインストールする前に、カーネルほか、CentOS5のソフトウェアパッケージをアップデートしておくのが望ましいそうです。
yumコマンドでアップデートできるよう、ネットワークの設定を行い、インターネットにアクセスできるようにします。
必要に応じて、iptablesを使用してFirewallの設定を行うのもよいですね。


■ソフトウェアパッケージのアップデート
インストール済みのソフトウェアパッケージをすべてアップデートします。
yumコマンドを使用しますが、もっとも近くのミラーサイトを見つけてくれるfastestmirrorプラグインをインストールすると、アップデートに要する時間が短くて済みます。

# yum install yum-fastestmirror

全アップデートを実施します。

# yum update

CentOS5.2のメディアからインストールし全アップデートをかけると、2008年8月末の時点では3分程度で完了しました。


■HPサポートパック(PSP)のインストール
PSPは以下からダウンロードします。
2008年9月時点の最新版は、v8.1.0です。
http://h50222.www5.hp.com/support/DUMDL360G5SVR/more_info_soar_MTX-f1c0a8ddfbe04a049f30711816.html

rpm-devel、glibcなどがインストールされていないと、PSPのインストーラが起動しないため(PSPインストールスクリプト実行時にアラートで教えてくれます)、インストールします。

# yum install rpm-devel glibc

また、PSPインストールスクリプトの実行時は、OSのディストリビューションをRHEL5であると騙す必要があります。
/etc/redhat-release の内容を書き換えます。

-- /etc/redhat-release(変更前)
CentOS release 5.2 (Final)
--

-- /etc/redhat-release(変更後)
Red Hat Enterprise Linux ES release 5 (Tikanga)
--

なお、/etc/redhat-release の書き換えについては、以下を参考にさせていただきました。
ググッてみたところでは、Oracleのインストールなどでも同様の方法が使えるみたいです。

勢いで買ったHP Proliant ML150 - cys b:
http://d.hatena.ne.jp/yotena/20080119/1200715723

PSPインストールスクリプトを実行します。

# ./install810.sh

GUIではなく、キャラクターベースでインストールする場合は、--nuiオプションを付けて起動します。

# ./install810.sh --nui

必要なパッケージがインストールされていないときは、エラーメッセージで「〜をインストールしますか?」のような表示をされるので、「Y」を入力します。
インストール時はたくさん質問されますが、がんばって進んでいきます。
インストールログは、/var/log/hppldu.log にあります。

インストール完了後、OSを再起動します。
試しに、FirefoxなどのブラウザでHP System Management Homepage(SMH)を表示してみます。

https://localhost:2381/

ID、パスワードはOSのrootユーザのものを入力します。
サーバの情報が表示されればOKです。


■ファイバーチャネルのフェイルオーバー(Qlogic Failover)の設定
設定コマンドを実行します。

 # /opt/hp/src/hp_qla2x00src/set_param

1 の"XP/MSA/EVA FailOver" を選択し、

Would you like to create a new initrd to reflect the changes in the parameters (Y/n)?

は、Y を選択。
q "Quit" で終了します。


■MSA1000上のディスク設定
MSA1000上に作成した論理ディスクに対して、OSからパーティショニング、ファイルシステムの作成、マウントを行います。

まず、サーバを停止し、抜いておいたファイバーケーブルを挿し、サーバを起動します。
MSA1000での設定が正しく行われていれば、fdiskコマンドでディスクを確認できるはずです。
なお、HP ProLiantサーバでのデバイスファイル名は、下記のとおり割り当てられるそうです。


  • ProLiant内蔵Smart Arrayコントローラ配下のディスクは /dev/cciss/cXdY
  • FC HBA配下のFibre Channel接続の外部ストレージのディスクは /dev/sdX

(参考)[ThinkIT] 第1回:外部ストレージの設定と運用について (3/3):
http://www.thinkit.co.jp/cert/article/0604/1/1/3.htm

単純にext3のパーティションを作成するだけなら、下記の手順のとおりfdiskでパーティショニング→mkfsでファイルシステムを作成→マウントで終了です。

日本HP_Linux_技術文書_ドライバロード後の MSA1000セットアップ方法:
http://h50146.www5.hp.com/products/software/oe/linux/mainstream/support/doc/option/fibre/msa1000/setup_msa1000.html

せっかくなので、ディスク容量が足りなくなったときに容量を増やせるよう、LVMとします。
今回は、RAID後の実効サイズとして293GBの論理ディスクが見えているものとします。

LVMボリュームの作成については例えば、DBマガジン 2008/07号「Linux-DBサーバー構築入門 第2回 論理ボリュームマネージャ(LVM)を活用する」などが参考になります。

設定するLVMは下記のとおりです。


  • ボリュームグループ構成情報

    • ボリュームグループ名: VolGroup01
    • PEサイズ: 8MB
    • デバイスファイル: /dev/sda1

  • 論理ボリューム構成情報

    • ボリュームグループ名: VolGroup01
    • 論理ボリューム名: LVMTEST
    • 容量: すべて
    • マウントポイント: /mnt/test
    • タイプ: ext3

サーバからマウントするまで、下記の手順を行います。

(0)パーティショニング(fdisk)
(1)物理ボリュームの作成(pvcreate)
(2)ボリュームグループの作成(vgcreate)
(3)論理ボリュームの作成(lvcreate)
(4)ファイルシステムの作成(mkfs)
(5)マウント(mount)

・(0)パーティショニング(fdisk)

まず、fdiskで共有ストレージのディスクが見えていることを確認します。
以下、// の後はここで付与したコメントです。

 # fdisk -l /dev/sda

Disk /dev/sda: 293.6 GB, 293630238720 bytes
255 heads, 63 sectors/track, 35698 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes

ディスク /dev/sda は正常な領域テーブルを含んでいません

fdiskコマンドで、/dev/sda のパーティションのシステムタイプをLVMとして保存します。

 # fdisk /dev/sda

デバイスは正常な DOS 領域テーブルも、Sun, SGI や OSF ディスクラベルも含んでいません
新たに DOS ディスクラベルを作成します。あなたが書き込みを決定するまで、変更は
メモリ内だけに残します。その後はもちろん以前の内容は修復不可能になります。

このディスクのシリンダ数は 35698 に設定されています。
間違いではないのですが、1024 を超えているため、以下の場合に問題を生じうる事を
確認しましょう:
1) ブート時に実行するソフトウェア (例. バージョンが古い LILO)
2) 別の OS のブートやパーティション作成ソフト
(例. DOS FDISK, OS/2 FDISK)
警告: 領域テーブル 4 の不正なフラグ 0x0000 は w(書き込み)によって
正常になります

コマンド (m でヘルプ): p // パーティションテーブルを表示

Disk /dev/sda: 293.6 GB, 293630238720 bytes
255 heads, 63 sectors/track, 35698 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes

デバイス Boot Start End Blocks Id System

コマンド (m でヘルプ): n // 新しいパーティションを作成
コマンドアクション
e 拡張
p 基本領域 (1-4)
p // 基本領域を指定
領域番号 (1-4): 1 // 領域1を指定
最初 シリンダ (1-35698, default 1): // デフォルト1を指定
Using default value 1
終点 シリンダ または +サイズ または +サイズM または +サイズK (1-35698, default 35698):
  // 全サイズを1パーティションとするのでデフォルトの終点を指定
Using default value 35698

コマンド (m でヘルプ): p // パーティションテーブルを表示、
// 作成されたパーティションが表示されることを確認

Disk /dev/sda: 293.6 GB, 293630238720 bytes
255 heads, 63 sectors/track, 35698 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes

デバイス Boot Start End Blocks Id System
/dev/sda1 1 35698 286744153+ 83 Linux

コマンド (m でヘルプ): t // システムタイプを指定
Selected partition 1
16進数コード (L コマンドでコードリスト表示): 8e
// LVMのシステムタイプコードは8e
領域のシステムタイプを 1 から 8e (Linux LVM) に変更しました

コマンド (m でヘルプ): p // パーティションテーブルを表示
// システムタイプがLinux LVMとなっていることを確認

Disk /dev/sda: 293.6 GB, 293630238720 bytes
255 heads, 63 sectors/track, 35698 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes

デバイス Boot Start End Blocks Id System
/dev/sda1 1 35698 286744153+ 8e Linux LVM

コマンド (m でヘルプ): w // 編集内容を保存して終了
領域テーブルは交換されました!

ioctl() を呼び出して領域テーブルを再読込みします。
ディスクを同期させます。

これで、パーティション/dev/sda1 が作成されました。

・(1)物理ボリュームの作成(pvcreate)
作成したパーティションに対して、pvcreateコマンドで物理ボリュームを作成します。

 # pvcreate /dev/sda1

Physical volume "/dev/sda1" successfully created

ステータスを確認します。
物理ボリュームの一覧と割り当てサイズ(PSize)が確認できます。

 # pvs

PV VG Fmt Attr PSize PFree
/dev/sda1 lvm2 -- 273.46G 273.46G

 # pvdisplay /dev/sda1

"/dev/sda1" is a new physical volume of "273.46 GB"
--- NEW Physical volume ---
PV Name /dev/sda1
VG Name
PV Size 273.46 GB
Allocatable NO
PE Size (KByte) 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID vM1W94-WagK-bWrO-wS9r-PxSX-vnCt-3Bafh8

・(2)ボリュームグループの作成(vgcreate)
vgcreateコマンドで、ボリュームグループVolGroup01を作成します。
-sオプションで指定するPEサイズ(physical extentサイズ)はデフォルト4MBですが、今回は8MBしました。

 # vgcreate -s 8M VolGroup01 /dev/sda1

Volume group "VolGroup01" successfully created

物理ボリュームのステータスを確認します。
(1)とは違い、VGのところにボリュームグループが表示されていることがわかります。

 # pvs

--
PV VG Fmt Attr PSize PFree
/dev/sda1 VolGroup01 lvm2 a- 273.46G 273.46G
--

ボリュームグループのステータスを確認します。

 # vgs

VG #PV #LV #SN Attr VSize VFree
VolGroup01 1 0 0 wz--n- 273.46G 273.46G

 # vgdisplay

--- Volume group ---
VG Name VolGroup01
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size 273.45 GB
PE Size 8.00 MB
Total PE 35002
Alloc PE / Size 0 / 0
Free PE / Size 35002 / 273.45 GB
VG UUID OLK8C9-U30i-kGRJ-7Akj-DtuK-W1gz-20XTA


・(3)論理ボリュームの作成(lvcreate)
lvcreateコマンドで、論理ボリュームを作成します。
-Lオプションでサイズを、-nオプションで論理ボリューム名を指定します。

 # lvcreate -L273.45G -n LVMTEST VolGroup01

Rounding up size to full physical extent 273.45 GB
Logical volume "LVMTEST " created

論理ボリュームのステータス確認します。

 # lvs

LV VG Attr LSize Origin Snap% Move Log Copy% Convert
LVMTEST VolGroup01 -wi-a- 273.45G

 # lvdisplay

--- Logical volume ---
LV Name /dev/VolGroup01/LVMTEST
VG Name VolGroup01
LV UUID aZQEhU-Z1U7-afFO-bAXg-Vgdp-nPZ7-RU4cu9
LV Write Access read/write
LV Status available
# open 0
LV Size 273.45 GB
Current LE 35002
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:2

物理ボリュームのステータスを表示し、(1)(2)とは違い、物理ボリュームの
空き(PFree)がなくなったことを確認します。

 # pvs

PV VG Fmt Attr PSize PFree
/dev/sda1 VolGroup01 lvm2 a- 273.45G

ボリュームグループのステータスを表示し、(2)とは違い、空き容量(VFree)が
なくなったことを確認します。

 # vgs

VG #PV #LV #SN Attr VSize VFree
VolGroup01 1 1 0 wz--n- 273.45G 0

・(4)ファイルシステムの作成(mkfs)
mkfsコマンドで、論理ボリュームに対してext3でファイルシステムを作成します。

 # mkfs -t ext3 /dev/VolGroup01/LVMTEST

mke2fs 1.39 (29-May-2006)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
35848192 inodes, 71684096 blocks
3584204 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=0
2188 block groups
32768 blocks per group, 32768 fragments per group
16384 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616

Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 37 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.

・(5)マウント(mount)
mountコマンドで、ディレクトリ/mnt/test にマウントします。
/etc/fstab の末尾に追記します。

/dev/VolGroup01/TEST /mnt/test ext3 defaults 1 2

マウントポイントのディレクトリ作成し、マウントします。

 # mkdir -p /mnt/test
 # mount /dev/VolGroup01/LVMTEST

マウントされたかどうか、確認します。

 # df -h


Filesystem サイズ 使用 残り 使用% マウント位置
...
/dev/mapper/VolGroup01-LVMTEST
270G 192M 256G 1% /mnt/test

ためしに、一般ユーザで、該当ディレクトリにファイルを読み書きしてみます。
また、念のためOSを再起動して、正しくマウントされることを確認します。


以上でHP DL360 G5へのCentOS5のインストールと、MSA1000ディスク上へのLVMボリュームの作成およびマウントが完了となります。

2008年05月23日

ベンチマークツールdbenchを使用したディスク性能の評価

(2010/09/09追記)
物理的に異なるディスクのベンチマークをとるときは、-cオプションだけではなく、-Dオプションも必要なことがわかったので追記しました。
(というか、-Dオプションだけでよいのかも)
どうりで、NFSマウントしたディスクでもローカルディスクと同じような値がでていたわけだ。

参考 Linux Filesystem Performance Tests mit dbench:
http://www.thomas-krenn.com/de/wiki/Linux_Filesystem_Performance_Tests_mit_dbench

--
Linuxで比較的簡単にディスク性能を評価できるベンチマークツールdbenchについて、インストール方法と使い方をまとめておきます。

dbenchのオフィシャルサイト
http://samba.org/ftp/tridge/dbench/

dbenchは、データを連続的にディスクに書き込み、そのスループットを計測するツールです。
複数クライアントからの同時接続を想定した負荷を計測できます。

・インストール方法

% wget http://samba.org/ftp/tridge/dbench/dbench-4.0.tar.gz
% tar zxvf dbench-4.0.tar.gz
% cd dbench-4.0
% ./autogen.sh
% ./configure
% make
% su
# make install

/usr/local/bin に実行バイナリ dbench がインストールされます。
また、/usr/local/share に負荷パターンファイル client.txt がインストールされます。
とってもかんたんですね。

・ベンチマークの実施

% dbench <同時実行プロセス数>
ex.
% dbench 5

デフォルトでは、120秒のwarmupののち、600秒かけて計測します。
同時実行プロセスの数だけdbenchプロセスが起動され、CPU負荷が急増するので、本番稼動しているサーバなどでは実施タイミングに注意!

外付けディスクやNASやSANのディスクをマウントするなど、物理的に異なるディスクのベンチマークをとりたい場合もありますね。
そんなときは、負荷パターンファイル /usr/local/share/client.txt をベンチマークしたいディスク上に置いて、-cオプションでファイルを指定します。
また、-Dオプションで、Work Directoryとしてマウントポイントを指定します。

% dbench -c /mnt/foo/client.txt -D /mnt/foo/ 5

ディスクの規格の違い(SATA, SAS)、ディスクの回転数、RAIDコントローラーの有無やスペック、RAIDの実現方法(ハードウェア、ソフトウェア),、RAIDレベル、カーネルのバージョン、仮想環境か否か、ローカルディスクかSANやNAS(NFS)のネットワーク経由かなどなど、いろいろな条件でI/Oパフォーマンスが違ってきますね。
このようなベンチマークツールで定量的な比較をすることは重要だと思います。

--
ところで、dbench-4.0は、なぜかdbench-3.04と比べてスループット値が1桁違います。
たとえば、アンタスで社内開発サーバとして使用している下記スペックのサーバがありますが、、、


  • 機種: DELL PowerEdge 850,
  • OS: CentOS 4
  • CPU: Intel(R) Pentium(R) 4 CPU 3.00GHz x 2
  • メモリ: 2GB
  • ディスク: SATA II 7200rpm x 2, 160GB, Software RAID1

    このサーバで同時アクセス5として、4.0と3.04で結果を比べると、


  • dbench 4.0 - Throughput 38.9394 MB/sec 5 clients 5 procs
  • dbench 3.04 - Throughput 196.114 MB/sec 5 procs

    このように4.0のほうが1/5ぐらいの値となります。
    負荷パターンファイルclient.txtは全く同じなのになぜだろう。
    テスト内容が異なるのかな?


    cf. @IT 実践! Xenで実現するサーバ統合(2)
    http://www.atmarkit.co.jp/flinux/rensai/xen02/xen02a.html

  • 2007年11月20日

    CentOS5 on PowerEdge SC440でXが起動しない

    先日、DELLサーバ PowerEdge SC440にXen環境を構築するため、CentOS 5をインストールしました。
    ところが、インストール完了後、再起動をするとX-Window(というかGNOME)が起動してきません。
    yum updateでカーネルやライブラリをアップデートしても状況は変わりませんでした。

    少し調べたところ、CentOS 5に含まれるディスプレイドライバーが、SC440のATI Radeon ES1000に非対応であることが原因のようです。
    この問題は、Xの設定ファイルでドライバー名を"radeon"から"vesa"に書き換えることで解決できました。
    (参考サイトでは、こうしても640x480でしか表示できない、とのことでしたが、こちらの環境では1280x1024でも問題なく表示できました。)

    -- /etc/X11/xorg.conf
    ...
    Section "Device"
      Identifier "Videocard0"
      Driver "radeon" // → "vesa"に書き換えて、OSを再起動する。
    EndSection

    Section "Screen"
      Identifier "Screen0"
      Device "Videocard0"
      DefaultDepth 16
      SubSection "Display"
        Viewport 0 0
        Depth 24
      EndSubSection
    EndSection
    --

    RedHat Enterpriseが3から4になりたてのときも、同じようにXが起動しなくてハマったことを思い出しました。
    まもなくリリースされるであろう、RHEL5/CentOS5 Update1では解決できているとよいのですが。

    (参考)PowerEdge SC440でVMware Serverを動かす - 在田舎的技術屋:
    http://d.hatena.ne.jp/wetware/20070511

    2007年06月18日

    DELL PowerEdge SC1435とCentOS4.x

    先日、サーバ DELL PowerEdge SC1435にCentOSをインストールしました。

    最初は手元にあったCD-ROMからCentOS 4.3をインストールしてみたのですが、SATAドライバがないようでHDDを認識できず、GUIインストーラーのパーティション作成フェーズで強制終了してしまいます。
    おそらく、RedHat Enterprise 4 Update3でも同様でしょうね。

    OSSTechさんのサイトで、DELL PowerEdge SC1435は、CentOS 4.4には対応していることがわかっていたので、4.4のインストールイメージをサイトからダウンロード→CD-ROM焼き→インストール、で無事完了しました。

    SC1425にはなじみがあったのですが、後継のSC1435は初めて触りました。
    他の方もブログ等で書いていますが、SC1425に比べてファンがかなりうるさいですねえ。
    それだけ、冷却にがんばっているのでしょうが。
    早くデータセンターに運んでしまいたい(笑)

    せっかくなので、クランプメーターで電流を測定しました。
    起動時が最大で1.8A、平常時は1.34A。
    ちなみに、CPUはAMD Opteron 2216 2.4 GHz (2x1MB) L2キャッシュ が1つです。

    (参考)
    OSSTechさんのDELL PowerEdge FreeOS対応状況:
    http://www.osstech.co.jp/dell

    ANTAS(アンタス)