2012-05-27

簡単? FileMakerで在庫管理(1) ―― 在庫算出の基本

 本稿は2012年5月に投稿されたものです。2018年2月現在、最新の FileMaker のバージョンは 16 となっていますが、本稿及び続稿で記述した在庫に関するの設計手法は現在も有効と思われます。
 ただ、iBeacon/EddyStone の登場等や、記事に気になる点があったため、今回、加筆修正することにしました。また、SQLを使った在庫の繰越処理などについても加筆したいと思っているのですが、これについては別の機会にしたいと思います。
(土屋企画)

 本稿では FileMaker を使用した在庫算出の方法について考えます。ただ本論に入る前に、在庫算出の3つの手法を大雑把に見てみます。それぞれの手法に便宜的に名前を付けていますが、これらは筆者が勝手に名付けたもので、社会、業界で一般的に利用されている名称ではありませんので、他所で「入出庫小計差分法を採用したいのですが…」とか言っても、相手の方は「???」となるでしょう。

在庫算出3つの手法

入出庫小計差分法

  この手法は当方の様々な在庫管理システムで使用している方法で、FileMaker で在庫算出する際の一般的な手法と思われます。いつの時点の在庫を知りたいのか(以下[在庫基準日])を決め、その時点までの入庫数計と出庫数計を計算、その差分が在庫となります。下図の4/30時点の在庫は、4/30迄の入庫計=20と出庫計=6の差分で[在庫]=14となります。
 Excelでは、出庫数の横に在庫列を作成して「D4+B5-C5」などとすれば簡単に在庫が求められますが、リレーショナルデータベースではそうした計算はできません。なぜならリレーションの無い行同士の演算はできないからです。無理に外部キーを振ったり、スクリプトのループで加減演算しても、結局は破綻します。
この方法は比較的単純ですが、特定の商品が頻繁に取引されるようなシステムでは、在庫算出処理に想定外の時間を要する可能性があります。

在庫マスタ逐次書換法

本手法は下図のように入出庫に変動があった場合、在庫マスタの[在庫]フィールドを即時更新する、というものです。下図を例に説明すると、3/31に[入庫数]=10を入力してコミットすると、在庫マスタテーブルの商品Aの[在庫]は即刻10に更新され、4/1に[出庫数]=1を入力すると[在庫]は9に即更新されます。
この方法は、入出庫伝票更新時に在庫マスタを即更新するため、その後発生する在庫照会や在庫表印刷の処理では各商品の在庫算出を行うことはなく、高速です。ただ、実装方法が難しいこと、上述の在庫基準日を指定できないこと、入庫日と出庫日には未来の日付を入力できないことなど、デメリットは少なからずあります。 ただ、同一商品の入出庫が頻繁に発生し、リアルタイムに在庫を把握する必要がある業態では、この手法を採用することが多いでしょう。実は2009年に本手法に関する投稿とサンプルファイル(現在リンク切れ)を公開しています。興味があるかたはこちらをどうぞ。

ビーコン信号カウント法

近年リリースされた iBeacon/EddyStone(以下、ビーコン) は少ない電力(電池)でユニークな値(UUID/UID)を含む信号を数カ月~数年、0m~100mほどの範囲で発信する装置です。
土屋企画で使用するビーコン ― 左の小さいタグ型ビーコンは 40mm×28mm 
このビーコンを製品に取り付け、その信号を取得・処理することでほぼリアルタイムに商品の在庫を把握することができます。以下のシステム図は 、Raspberry Pi と呼ばれる超小型Linux機(価格は約3000円/台)を広い倉庫内に万遍なく配置、ビーコン信号を漏れなく取得し、データベースの在庫テーブルを更新するというものです。
 入出庫システムからは独立して、在庫数の把握が可能となります。

本手法はビーコンが高価(500円~数千円~)であること、取り付けが不能・不向きな製品があること、電池に寿命があり交換が必要なこと等、ビーコン特有の問題があります。ビーコンについてはこちらを参照してください。


在庫算出の基本

さて、それでは上述の「入出庫小計差分法」について以下そのしくみを見ていきます。

 「2012年6月20日時点の在庫」というような特定時点(在庫基準日)の在庫数を算出するために、以下のようなTOG(テーブル・オカレンス・グループ)を作成してみます。


 商品マスタと出庫明細と入庫明細をリレートするだけですのでシンプルですね。
実際アプリケーションでは、出庫明細や入庫明細を格納するための出庫と入庫のテーブルが必要ですが、ここでは省略します。
 以下は上記リレーション |×| で示された部分のリレーション編集イメージです。


 [g在庫基準日]は日付のグローバルフィールドという特殊なフィールドで、詳しくは FileMaker のマニュアルを参照してください。ユーザはこのフィールドで在庫算出の起点となる日付 ― 在庫基準日 を指定します。

 そして、こちらが在庫算出用フィールド=[c在庫数]の計算式です。

繰越在庫数- Sum(出庫明細_商品::数量) + Sum(入庫明細_商品::数量)


 システム導入時、[繰越在庫数]には各商品の導入時点での在庫数を入力します。導入時、在庫が無い商品については「0」を入力しておきます。
 上記の計算式もシンプルで、[繰越在庫数](=ここでは導入時点の在庫数)から[g在庫基準日]以前に出庫した商品数量を差し引いて、さらに[g在庫基準日]以前に入庫した商品数量を加え、在庫を算出しているだけです。
 [g在庫基準日]より後の日付の入出庫が[c在庫数]の計算式の対象とならないのは、上図「在庫算出TOG」のリレーションで「≧」によりそのように定義されているからです。
注:
  1. 本稿読者で「出庫明細/入庫明細テーブルに[出庫日]/[入庫日]があるのはおかしいではないか。  本来、この二つのフィールドは出庫ヘッダ/入庫ヘッダテーブルにあるべきで、冗長で正規化されていないではないか?」と考えた方 、 御尤もです。ただ、FileMaker 内蔵DBを使用し、在庫算出基準日を任意に指定可という仕様を前提にした場合、正規化を崩しても明細に日付を持たせるのが良い、というのが小社の知見です。
  2. 但し、ExecuteSQL 関数によるSQLクエリを使用して出庫と出庫明細、入庫と入庫明細を結合(JOIN)すれば、[出庫日]/[入庫日]がそれぞれの明細テーブルに存在しなくても、在庫数を取得することができます。ただ、FileMaker の結合は実行速度が非常に遅くなることがあるので、留意が必要です。この手法についてはこちらを参考にしてください。
  3. 上記1の通りに設計する場合、出庫ヘッダ/入庫ヘッダの[出庫日]/[入庫日]と、出庫明細/入庫明細テーブルの[出庫日]/[入庫日]は常に一致するようにシステム的に保証しなければなりません。ユーザがヘッダ部の[出庫日]/[入庫日]を変更することは頻繁にあるので、スクリプトトリガを使用して、うまく制御してください。

 上記の注2 の部分が少し面倒ですが、ここまでは比較的簡単にアプリを作成できると思います。

 ただ、入出庫レコードが数千、数万と増えるに従い、在庫(c在庫数)の表示には時間がかかるようになります。在庫算出処理の時間を短くするためには、繰越処理を行い、[c在庫数]の計算対象となる入出庫レコードを減らす必要があります。 繰越処理とそれに伴う処理については、 簡単? FileMakerで在庫管理(2)―― 繰越処理の考え方 をご覧ください。

TOG(テーブル・オカレンス・グループ) とは?

FileMaker Pro 7 以降に導入されたリレーションシップグラフでは、テーブルを別名、または同一名で定義して配置できます。
 たとえば「商品」というテーブルは、リレーションシップグラフ上では「商品Table1」、「商品テーブル」、「商品」など自由に名前をつけて配置したり、同一のテーブルを別名で複数配置したりできます。

 リレーションシップシップウィンドウに配置されたテーブルは、単に”テーブル”と呼ばれたり、テーブルのエイリアスあるいはTO(テーブル・オカレンス)と呼ばれることもあります。

 FileMaker界隈 では TO という呼び名が一般的になってきているようです。また、処理別やレイアウト別に TO をグループ化したものを TOG (テーブル・オカレンス・グループ)と呼んでいます。


 以下の動画では『FMEasy在庫 IWP/WD 1.5』という製品を使用し、在庫算出に関して説明しています。




 その他の在庫関連記事を読む

(土屋)

2012-03-30

FileMaker の分離モデル - 2

 前回、分離モデルのメリットは以下の4点と書いた。

  1. 仕様変更時のダウンタイムを最小限にする
  2. 同一システムが複数の拠点やユーザにより運用される場合、アップグレードが容易
  3. データベースに重大な損傷が発生した場合、データファイルのみ再構築すれば良い
  4. 公開マスタ(郵便番号、宅配便仕訳コード等)の更新・入替が容易
 2.は、多数のユーザが運用するアプリケーション、パッケージやネットからダウンロードするようなアプリケーションで大いに役立つ。

今日は上記1.について。

 FileMaker Ver6以前は1ファイルに1テーブルしか付属させることができず、更にそのファイル毎にリレーション、スクリプト、値一覧、アクセス権限といったオブジェクトも作成・管理をしていた。

 小社のある得意先は、FileMaker Ver5.5のデータベースを現在も運用しており、そのファイル数は約60、そのうち数千~200万弱のレコードを保持するファイルが数十ある。 FileMaker Ver3で開発を初め、納品後に仕様変更と追加を十数年にわたり重ねてきた。 FileMakerのバージョンが上がりアップグレードを行いたいのは山々であったが、規模が大きくなり過ぎアップグレードには多くの費用がかかるため、今日まで旧システムを延命してきている。 

 さて、このようなシステムで仕様変更が発生し、その変更が多くのファイルに及んだ場合、どうやって納品するか? システム屋は大変である。 まず最初に考えられるのは、開発を行ったデータベース(開発版)のクローン(ファイルのデータ無コピー)を作成し、そのクローンに運用中のデータベース(運用版)の全データを取り込むことが考えられる。この方法は単純だが、レコード数が数十万を超えるファイルが多くそのファイルに仕様変更が含まれる場合、非常にデータ移行作業に時間がかかり、システムのダウンタイムも長くなる。 また、作業中のミス、例えばデータ取込ミスや、取込後の主キーの設定漏れ、などの重大なリスクも抱えている。

 次に考えられるのが、仕様変更があったファイルを、a.レコード数が少ないファイル、b.仕様変更が多いファイル、3.仕様変更が少なくデータが多いファイルに分け、a.とb.については上述のクローンへのデータ取り込みで、c.については、運用版のファイルに開発版で行ったのと同じ変更を直接入れる、という方法である。 この方法は「データの多いファイルに変更が少ない」場合、システムのダウンタイムを大幅に減らせる可能性があるが、逆に作業のリスクは増すことになる。つまり、FileMaker Ver6以前で規模の大きな仕様変更が発生すると、簡単な納品方法はなかったのである。

 もし、上記のような仕様もデータも大規模なシステムが、データとアプリケーションに厳密に分離されているシステムであったらどうだろうか。 仕様変更がデータ側、つまりテーブルに及ばないのであれば、アプリケーションファイルを入れ替えるだけ、ダウンタイムはせいぜい1分前後となる。 仕様変更が複数のテーブルに及んだり、テーブルの新規追加があったとしても、一部フィールドを追加し、新規テーブルをコピーすればよいだけである。この作業はオンラインでバックアップを取った後であればサーバを落とすことなく実行可能である。 データファイルの作業を行った後、アプリケーションファイルを入れ替えれば作業終了である。

 ダウンタイムを最小限にしたい、“落せないシステム”において、分離モデルは特に有用である。

(土屋)



【関連リンク】
分離モデルにおけるSUM/ExcecuteSQL関数の問題と対策
土屋企画の講習 ― 分離モデルに基づく請求書システムを作る(対象者:中級、4時間×2日)
FileMaker の分離モデル



【分離モデルに基づく在庫管理テンプレートのご案内】
分離モデルに基づき開発された在庫管理システムテンプレート「FMEasy在庫」の紹介記事は→こちら
「FMEasy在庫」フリー版/開発版のダウンロードは→こちら

【FMEasy在庫 の画面】

(2012/12/20追記)

2012-03-21

Hyper-V のゲスト OS の BIOS 不良で泣かされる

Hyper-V てはゲスト OS を複数運用できるため、今となっては弊社の業務に欠かせない存在ですが、当方のブログでもたびたび記事を書いているとおり、過去にも色々とトラブルに泣かされていることも確かです。

 さて、今回も月曜日の朝からゲスト OS が起動して来ないというトラブルに見舞われました。
 Hyper-V マネージャ画面を見ると、「仮想マシンの構成記憶域に接続できません」というエラーメッセージが表示されています。しかも状況は「重大」のようです。



 試しに起動してみると、以下のようなエラーメッセージが返されました。



 
 ゲスト OS の設定を確認してみると、BIOS の読み込みに失敗したとあります。
 BIOS 設定に何らかの障害が発生し、起動不能になった模様です。



 ネットを調べ回ったところ、仮想マシンを削除(仮想ディスクはそのまま残すこと)し、再度追加することで解決するとあったので試したところ、復活しました。

 ただし、システムの状態によっては Windows ライセンス認証がもう一度必要になったり、IP アドレス設定が丸々飛んだりしたりするので、その辺の微調整は必要になるかもしれません。

 ただ、今回のように突然ゲスト OS が起動しなくなる可能性がありますので、同じように BIOS による起動トラブルが発生した場合は、今回の方法をダメ元で試してみるのも一つの方法かもしれません(ただし、自己責任ということでお願いします)

【備忘録】 Team Foundation Server で公開されているソースを取得する方法

Team Foundation Server で共有されているソースにアクセスし、クライアントコンピュータで使用するまでの手順をまとめてみました。

 本記事は、Team Foundation Server がインストール済みであり、かつソースが公開設定されていることが前提になっていますので、Team Foundation Server 側の設定については省略してあります。

 なお、ユーザインタフェースは英語表記になっていますが、一応注釈を付けておりますので、日本語のメニューと読み替えてください。
1. Visual Studio 2010 を起動し、トップ画面の一番上に表示される Connect to Team Foundation Server (Team Foundation Server に接続) をクリックするか、メニューバーより、「Team」→「Connect to Team Foundation Server」を選択します。



2. Connect to Team Project (チームプロジェクトに接続)というダイアログが表示されます。
 初回起動時は接続可能な Team Foundation Server が未登録の状態ですので、サーバを登録する必要があります。
 “Servers...”をクリックします。


3. Add/Remove Team Foundation Server (Team Foundation Server の追加と削除)というダイアログが表示されますので、“Add...”(追加)をクリックします。



4. Team Foundation Server がインストールされているサーバの URL、または Team Foundation Server の名前を入力し、“OK” をクリックします。



5. 上記で登録した Team Foundation Server への接続が行われ、Connect to Team Project (チームプロジェクトに接続) というダイアログに、利用可能なチームプロジェクトの一覧が表示されます。

 特定のプロジェクトを選択することも、すべてのプロジェクトを選択することも可能です。
 以下は、すべてを選択した状態を示しています。
 選択が終わったら、“Connect” (接続)ボタンをクリックします。



6. Team Explorer (チームエクスプローラ)が表示されますので、その中から一番下の Source Control (ソースコントロール)をダブルクリックします。



7. Source Control Explorer (ソースコントロールエクスプローラー)が開きます。
 ソースを取得したいプロジェクトを右クリックし、表示されるサブメニューより、Get Latest Version (最新バージョンを取得)を選択します。



8. Map (マップ)というダイアログが表示されますので、ローカルコピーを保存するためのフォルダを指定します。

 以下では、ローカルのドキュメントフォルダに NekoTFS というプロジェクトフォルダを指定しています。
 “Map” をクリックすると、Team Foundation Server から現在の最新バージョンのソースがコピーされるとともにマッピング設定が行われます。



 これで Team Foundation Server にアクセスしながらソース管理を行うための下準備が整いました。

2012-03-09

FileMaker の分離モデル

 今日はお問い合わせ上昇傾向のFileMaker分離モデルについて。 小社ではFileMakerの分離モデル講習をおこなっており、先日もその講習会を開かせて頂いた。

 当方がFileMaker 7以降で開発したパッケージ製品、及び受託開発システムは、必ずほんとんど分離モデルを採用している。 なぜか? その理由、つまり分離モデルのメリットは以下の4点。

  1. 仕様変更時のダウンタイムを最小限にする
  2. 同一システムが複数の拠点やユーザにより運用される場合、アップグレードが容易
  3. データベースに重大な損傷が発生した場合、データファイルのみ再構築すれば良い
  4. 公開マスタ(郵便番号、宅配便仕訳コード等)の更新・入替が容易
仕様変更が予想される業務システムは、仕様変更の度にシステムを長時間ダウンさせるわけにはいかず、かといってシステム担当者( or 業者)に休日・深夜労働させるのは酷な(だけではなくミスの原因!)ので、1.は特に重要。
 アプリファイルだけの仕様変更であれば、1ファイル入替だけですべてのアップグレード作業が完了。 データファイルに変更があった場合でも、ほとんどの場合は、非常に短い時間でアップグレードを完了させることができる。 
 その為には、単純にアプリとデータのファイルに分けるだけではなく、データファイル側ではビジネスロジック(フィールドオプション/計算式、リレーション、スクリプト)を組み込まないことがキモとなる。

 今回の受講者のはdBaseで長く開発してこられ、事前のFMの勉強もバッチリだったため、ER図と資料を見ながら サンプルアプリ(請求書発行システム)を 一人でほぼ作れるレベルだったので、8時間の講習のうち多くの時間を分離モデルの説明とQ&Aにあてることができた。 これをステップに過去のシステムに劣らない立派なシステムを構築して頂きたい。

(土屋)


【関連リンク】
土屋企画の講習 ― 分離モデルに基づく請求書システムを作る(対象者:中級、4時間×2日)
FileMaker の分離モデル - 2


【分離モデルに基づく在庫管理テンプレート】
分離モデルに基づき開発された在庫管理システムテンプレート「FMEasy在庫」の紹介記事は→こちら
「FMEasy在庫」フリー版/開発版のダウンロードは→こちら

【FMEasy在庫 の画面】

(2012/12/20追記)

2011-11-03

『売上猫くん on MySQL』開発日記 - 番外23 … FileMkaer vs Access ~ 実行速度編 ~

FileMaker と Access をフロントエンドアプリとして 、MySQL 上のデータベースを操作した場合の実行速度を比較テストしてみた。 比較テストの動画は→こちら(Youtubeへ)。 


テスト方法:
FileMaker Pro 11 で開発し、今年1月にリリースした『売上猫くん on MySQL R5.0β』を使用。 さらに今回のテストのため、本製品のAccess版を作成した。 といっても、機能は売上・請求機能に限定し、その機能のいくつかも削られたプロトタイプとなっている。 システム構成は以下の通り。


MySQL上のデータベース「neko」には、FM猫からもAccess猫からも同時に接続・操作が可能となっている。

テスト結果
以下がテスト結果である。 

テスト内容Access FileMaker
1. プログラム起動 (Program startup)54
2. レコード表示 (Records display)54
3. レコード検索 (Records find)35
4. レコードソート (Records sort)52
5. レコード入力 (Record input)53
合計点(Total)2318
注:各項目を1~5点で評価


表にあるテスト項目の他にも、80ページ程度の請求書の一括印刷テストも行ったが、FM/ACCESSいずれもストレスを感じること無く、印刷(PDF化)できた。今回のテストは、売上テーブルで11.6万件、売上明細テーブルで170万件を入れて行っているが、数百万件、数千万件のレコードを扱うのであれば、開発者によるカスタムのSQLクエリを発行できるAccessの優位度が増すことになる。


ダウンロード:
本テストで使用した『売上猫くん on MySQL R5.0β』のDOWNLOADは→こちら
尚、今回使用したAccess版は非公開。

以上


【変更履歴】
12/06/05 記事タイトル変更

2011-09-28

How to fine tune your WordPress settings to allow image file uploads on IIS7

We have been testing WordPress 3.2.1 and found out that it would not upload any image files.

You may end up with the following error or something similar when you try to upload an image:
Unable to create directory *********/wp-content/uploads. Is its parent directory writable by the server?

This error occurs when you have not given the IUSR account write-access to uploads directory.

You may be able to fix this problem with the following steps:
(Note: we assume that the PHP environment is properly set up, so the detailed instructions on php.ini settings are not mentioned here.)

1. Make sure a folder named uploads exists in wp-content.
This directory is oftentimes not automatically created in the IIS environment, so you may have to create it on your own.

2. Right-click on uploads directory to bring up Security tab.
Add IUSR to the user list and assign write-access to it.

3. Now, go back to the WordPress media settings and make sure if the URL for file uploads is wp-content/uploads.

IIS7 にインストールされた WordPress からファイルのアップロードができない場合の調整方法

 Windows Server 2008 R2 の IIS7 環境に WordPress 3.2.1 をインストールしてみたのですが、デフォルトのままでは WordPress から画像やファイルをアップロードできないことがわかりました。

 まず、アップロードを試みると、以下のようなエラーメッセージが出てしまいます。

ディレクトリ /wp-content/uploads/YYYY/MM を作成できませんでした。この親ディレクトリのアクセス権はサーバーによる書き込みを許可していますか ?

これは明らかにディレクトリパーミッションが問題で発生するトラブルですので、以下の順に確認しながら調整します。
(php.ini の設定ではファイルアップロードを有効にしていることを前提にしていますので、php 設定についてはここでは省略します。)

1. wp-content フォルダの下に uploads フォルダがあることを確認。
uploads フォルダがなければ作成してください。



2. uploads フォルダのアクセス権に IUSR が登録されていることを確認。
IUSR がなければ、図のように IUSR を追加して、書き込み権限だけを与えます。

注意:デフォルトの IIS_IUSRS だけではアップロードするための権限が足りないため、ローカルコンピュータの IUSR を手動で追加する必要があります。



3. WordPress のメディア設定の「アップロードするファイルの保存場所」が wp-content/uploads になっていることを確認します。



 これで当方は画像のアップロードができるようになりました。
 当方で試した WordPress のバージョンは 3.2.1 ですが、以前のバージョンでもアップロード設定で躓いた方は、この方法で試してみると解決するかもしれません。

2011-08-15

ターミナルサービスのライセンスサーバーが無効化されていて大慌て

 Windows Server 2008 のターミナルサービスにユーザライセンス(CAL)を追加しようとしたところ、ターミナルサービスライセンスサーバが無効になっていたため、アクティブ化しようとしたら次のようなエラーが発生しました。



 そこでイベントビューアでエラーを調べてみると、以下のような ID 38 のエラーが連続で記録されていました。

次のエラーのため、ターミナル サービス ライセンス サーバーはターミナル サービス クライアント アクセス ライセンス (TS CAL) をクライアントに発行できません: 証明書をストアに追加できません。エラー c0010020




 ID 38 の情報を調べまわったところ、以下の方法で対処できることがわかりました。

【ID 38 エラーの解消方法】

1. ターミナルサーバーライセンスサービスを停止する。



2. regedit でレジストリエディタを開き、以下の 3 つのキーを削除する。


HKEY_LOCAL_MACHINE\Software\Microsoft\TermServLicensing\Certificates

HKEY_LOCAL_MACHINE\System\CurrentControlSet\services\TermservLicensing\Parameters\Certificates.000

HKEY_LOCAL_MACHINE\System\CurrentControlSet\services\TermservLicensing\Parameters\Certificates.001

3. ターミナルサーバーライセンスサービスを開始する。
4. ターミナルサーバーライセンスマネージャを起動し、ライセンスサーバが有効化していることを確認する。




ちなみに、Microsof Open License のサイトにある問い合わせ電話番号から問い合わせをしようとすると、自動音声サービスで、ライセンスの技術情報に関するサポートは有償になると言われるので要注意です。

参考:
“The License Server Activation Wizard encountered an internal error from the license server. Message Number: 0xc0110011″(英語)

2011-08-03

NAS のディスクが壊れて大慌て

 サーバデータのバックアップを I-O データ製の NAS HDL-GT R-Series 2.0 に取るタスクが先日から失敗していたのでおかしいと思っていたところ、Status ランプが明滅した状態になっていました。
 そこでログを調べてみると、以下のようなエラーが発生していました。



上図のとおり、ディスク 2 (上から二番目のディスク)に障害が発生し、修復できなかったためディスク交換が必要な状態となっていました。

 このような状態になると、たいていの場合はディスク横のランプが赤色になるらしいのですが、弊社の場合は青色のままだったため、ディスク障害に気付きませんでした。
 ハードウェアは故障するのを前提に使うものですが、やはりこういう現象が発生すると焦りますね。


 以下のサポートページに従ってディスク交換ができます。

ハードディスク(カートリッジ)が故障した場合の交換方法について教えてください。


 以下の手順で操作すると良いでしょう。

1. NAS の電源を落とす。
2. 破損したディスクを取り外す。
3. NAS の電源を入れ、残ったディスクが正常に動作していることをログとシステム状態で確認する(下図参照)。

4. NAS の電源が入ったままで新しいディスクを実装する。すると、自動的に RAID の再構築が行われるので、再構築が始まっていることを確認(下図参照)。

5. 再構築が終われば利用可能。

操作に当たっては、事前にデータのバックアップを取ることをお忘れなく。

2011-06-01

Hyper-V のゲスト OS からサウンドを出す方法(裏技的な使い方)

 Hyper-V のゲスト OS は、サーバ機能に特化した機能以外はほとんど使えないようになっているようです。
 USB ポートやサウンドカード等のサポートがこれに該当するため、Hyper-V のゲスト OS にはサウンドボードのエミュレータは組み込まれていません。

 32-bit のサポートを謳っていない Skype や AIM などの通信アプリケーションでは、64-bit であるホストでは正常に動作しないため、32-bit のゲスト OS 環境にそれらをインストールして使用する必要があります。

 しかし、上記の説明どおりゲスト OS からはサウンドを出すことができないため、リモートデスクトップを使うことによってこれを解決できます。

 リモートデスクトップ接続ウィンドウから“オプション”ボタンをクリックし、「ローカルリソース」タブの「リモートオーディオ」というセクションから“設定(S)...”というボタンをクリックすると、以下のようなダイアログが表示されます。



 上図のように設定して“OK”を選択してからゲスト OS にリモートデスクトップ接続を行い、接続先のゲスト OS で正しくサウンドデバイスを設定すると、サウンドが有効になります。

 今まで Hyper-V ゲスト OS からサウンドデバイスが有効にならないため諦めていた方は、駄目元で試してみると良いでしょう。


参考:Sound Card Emulation in Hyper-V?(英文)
http://social.technet.microsoft.com/Forums/en-US/winserverhyperv/thread/a060720c-833e-4855-921b-6d5c79dc98d9/

2011-05-20

P2V 変換した Windows Server 2003 の仮想マシンに統合サービスセットアップディスクをインストールできずに泣かされる

 前々回の記事で、本ブログで物理マシンを仮想マシンに変換して Hyper-V で運用する方法について説明しましたが、disk2vhd で変換された仮想ディスクを使って起動した仮想マシン(Windows Server 2003)に統合サービスセットアップディスクを入れようとすると、「HAL をアップグレードしています」というダイアログが表示され、その後にマシンを再起動すると、このメッセージが再び表示される(つまりループ状態となる)現象が発生しました。


 二日間ほど悩んでネットを探し回った結果、以下の方法にたどり着きました。

disk2vhd で作成されたディスクはデュアルブートになっている

 仮想マシンを起動した直後は、以下のようなデュアルブート選択画面が表示されます。
 待ち時間はデフォルトで 3 秒間なので、素早く Disk2vhd でない方(下)を選択して起動します。



 この手順で起動した方のシステムに統合サービスセットアップディスクをインストールすると成功します。


デュアルブートのブート順を入れ替える

 上記で統合サービスセットアップディスクのインストールに成功したら、今度のためにもブート順を入れ替えておいた方が良いでしょう。

 上記の要領でシステムを起動してから、コンピュータのプロパティを表示させ、「詳細設定」タブの「起動と回復」セクションに表示されている“設定”ボタンをクリックします。



 表示されるダイアログの「起動システム」セクションで、Disk2vhd という表記がない方のシステムを選択し、“OK” をクリックします。 



 これによって、次回の起動時より Disk2vhd でない方のシステムがデフォルトとして選択されるようになります。
 今後も起動するシステムを選択したい場合は、上記の画面で待ち時間を 10 秒くらいにしておくと選択するときに慌てなくてよいでしょう。


参考:Integration services cannot upgrade HAL(英文ページ)

サイズ可変の仮想ディスクを固定にしてサイズを縮小する方法

 サイズ可変の仮想ディスクが異様に膨れ上がったことにより、物理ディスク領域を圧迫したために起動しなくなるというトラブルを以前経験したことがあり(詳細はこちら)、当方では固定ディスクの使用を推奨しておりますが、最初にサイズ可変の仮想ディスクを作成してしまった場合、固定ディスクに変換すると、そのサイズが 5 倍~ 6 倍にも膨れ上がることがあります。

 たとえば、10G だったはずのサイズ可変仮想ディスクを固定ディスクに変換したとたん、サイズが 50G に膨れ上がってしまい、物理ディスク領域を圧迫してしまう可能性があります。

 この場合、以下の手順を踏むことで固定仮想ディスクのサイズを縮小することが可能です。
 (縮小率は使用済み領域によって左右されますのでご注意ください。)

1. サイズ可変ディスクのサイズを縮小する。

 ホストマシン(Windows Server 2008)から「スタート」→「管理ツール」→「コンピュータの管理」の順に選択し、左ペインに表示される項目より「記憶域」→「ディスクの管理」の順に選択して右クリックし、サブメニューより「VHD の接続」を選択します。



 サイズを縮小したい可変仮想ディスクを選択すると、そのディスクが接続されますので、接続後にパーティションを右クリックすることによって、サイズを縮小することができます。
 サイズは可能な限り小さくしてください。
 ディスク領域が縮小されると、残りのパーティションは未使用領域として表示されます。



 処理が終わったらディスク名(上図ではディスク 6)を右クリックし、「VHD の切断」を選択してください。

2. 仮想ディスクを固定にする。

 Hyper-V マネージャを開き、右ペインに表示されるメニュー項目から「ディスクの編集」を選択し、ウィザードに従ってディスクを固定に変換します。


 
 この時点でディスクサイズが数倍に膨れ上がります。

3. 専用のツールを使って固定ディスクのサイズを縮小する。

 vmToolkit で配布されている無償のツール vhdresizer をダウンロードします。

 vhdresizer をインストールしてから起動すると、ディスク指定画面が表示されますので、上記 2. で固定化した仮想ディスクを指定します。



以下を指定してから“Resize” をクリックすると、ディスクサイズが縮小されます。

[Destination Vhd] に変換後のディスクの名前を入力。
[Type]が Fixed (固定)になっていることを確認。
[New Size]に可能な限り小さな値を指定。上図では、指定可能最小サイズが 17gb となっているが、17 では Resize ボタンがアクティブにならないため、18 を指定。

“Resize” ボタンをクリックすると、指定したサイズにが縮小されます。


参考:この操作によって、手順 1. の可変ディスクの縮小時にできた「未使用領域」がなくなるため、ディスクの中は一つのパーティションとなります。

ディスクのパーティションを削除、移動するためのツール

 ディスクのパーティションを削除して縮小したり、ディスクパーティションの位置を移動するには、専用のツールを使用する必要があります。

 今回使用したのは、MiniTool Partition Wizard です。

 Windows 7、Windows Server 2008 を使ってディスクマネージャから仮想ディスクを繋ぎ、MiniTool Partition Wizard を使うことによって、パーティションの編集ができます。



 パーティションの削除と移動が簡単に行えるので、あると便利なツールです。

 その他のパーティションツールとしては、EASEUS Partition Master も有力候補かと思います。
 EASEUS Partition Master のサイト(日本語) (2017/10/14 更新)



おまけ:
利用を検討したが、断念したツール群

Gnome Partition Editor
ブート CD を使ってパーティションを操作できるツールだが、vhd を USB 経由で参照するのに対応していなかったため使用を断念。

Cute Partition Manager
64 bit 環境で動作しないため、使用を断念。

2011-05-17

物理マシンを Hyper-V 仮想マシンに移行する(P2V)

 本ブログでは、Hyper-V の仮想マシンに OS をインストールしたり、仮想マシンを別のコンピュータの仮想マシンとして移行したりする方法を紹介してまいりましたが、今回は、運用中の物理マシン(タワー型マシン)の環境をごっそり仮想マシンに変換(P2V)して、Hyper-V で運用する方法について紹介します。

 手順は次の 3 ステップとなります。

1. 物理マシンのドライブをそれぞれ仮想ハードディスク(.vhd)に変換する。

MicroSoft 社の Windows SysInternals で提供されている disk2vhd というツールを使うことによって、物理ドライブを仮想ディスクに変換する。



注意:Hyper-V で運用可能な仮想ディスクを作成する場合は、ダイアログボックス右上の [Prepare for use in virtual PC]というチェックボックスに必ずチェックを入れてください。

 私が使っているマシンのディスクドライブは、C、E、F に分かれているため、C、E、F 個別に変換を行い、計 3 つの仮想ディスクを作成しました。

 外付けデバイス、CD/DVD-RW ドライブは変換しないようにしてください。

注意: C、E、F を一度に変換すると、場合によっては作成される仮想ディスクファイルが 1 つになったり、2 つになったりする可能性がありますが、この内部基準に関することは今のところはっきりとわかっておりません(調査不足ですみません)。
ドライブを複数に分けている場合は、個別に変換されることを強くお勧めします。

2. Hyper-V マネージャを開き、新しい仮想マシンを作成し、仮想ディスク接続先を 1. で作成した 3 つのドライブにする。
(参考:今回は仮想環境の C、E、F ドライブにするディスク領域を iSCSI で構築しています。)

 移行先のホストマシンに、1. で作成した 3 つの vhd を格納するディスクドライブを用意します。
 一度に全部の環境を一度にバックアップを取るようにスケジュールするのであれば、3 つの vhd を一つのドライブに入れても良いですが、データドライブのみ、アプリケーションドライブのみ、といったようなバックアップスケジュールを組みたい場合は、vhd を格納するドライブをそれぞれ分けた方が良いでしょう。


 以下の例は、ホストOS から見た H ドライブにゲスト OS の変換済みのドライブ E の vhd ファイルを配置したところです。
 このように、1 ドライブに 1 つの vhd ファイルを配置しても良いですし、一度に仮想マシン全体をバックアップする予定であれば、1 ドライブに 3 つの vhd ファイルを配置してもかまいません。



 ここまで終わったら、Hyper-V マネージャを開き、仮想マシンを新規作成した後で、それぞれの vhd ファイルを関連付けます。

 当方で動作検証したところ、SCSI コントローラで vhd を関連付けたところ E/F ドライブが認識されなかったため、IDE コントローラーで関連付けを行いました。

 IDE コントローラを使って C、E、F ドライブの関連付けを行うと、以下の図のようになります。



3. 仮想マシンを起動して、E、F ドライブを認識させる。

 上記のとおり設定を行ったところで、仮想マシンを起動します。
 disk2vhd でうまく vhd 変換できていれば、OS は正常に起動できると思います。

 起動直後は、以下のようなライセンス認証ダイアログが表示されることがありますので、期間内にライセンス認証を行ってください。



 「スタート」→「管理ツール」→「コンピュータの管理」の順に選択し、左ペインに表示される「ディスクの管理」を開きます。E および F ドライブのディスクがオフライン状態となっていることがありますが、ディスク名を右クリックし、「オンライン」を選択することによってディスクをオンライン状態にできます。

 すべてのディスクをオンライン状態にすると、ディスク構成は次のようになります。



 上記でおかしな点は、ディスク 1 に E と F というドライブ名がついていますが、ディスク 2 のドライブ名は設定されていないことです。
 ディスク 1 に E、ディスク 2 に F というドライブ名が設定されることを想定しているにもかかわらず、ディスク構成が上記のようになってしまうことがあります。

 disk2vhd の変換機能の仕様によるものなのかもしれませんが、ドライブ名を正しく指定するには、ディスク 1 の二番目のパーティションを空欄にし、ディスク 2 の二番目のパーティションに F を指定すると、想定しているディスク構成で元のファイル群を参照できるようになります。


 しかし、この方法ですと、ディスク 1 の二番目のパーティション、ディスク 2 の先頭のパーティションがゴミとして残ってしまいますので、専用のツールを使ってパーティションの削除、移動をする必要があります。

2011-05-09

Hyper-V のゲスト OS を起動しようとすると、「一般のアクセスが拒否されました」というメッセージが表示される (ID: )

今まで稼動させていた Hyper-V の仮想マシンの仮想ハードディスク (.vhd) の可変→固定 変換を行った直後に、変換後の .vhd を起動すると、以下のメッセージが表示されるようになりました。


権限が足りないために起動できなくなったようですが、.vhd に Authenticated Users というユーザをフルアクセスで割り当てることで事なきを得ました。

参考:
SQL Server をメインにしたいと思いつつ Microsoft 製品の勉強内容を日々投稿
SCVMM で共有ディレクトリの ISO イメージがマウントできない場合の対応



しかし、このような現象が発生した場合は、Hyper-V マネージャのゲスト OS 設定から一度当該のディスクを削除し、再度割り当てることによって、起動のために必要な権限が割り当てられるようになる模様ですので、こちらの方がやり方としてはお勧めです。(2011/09/28追記)


1. 起動時に問題を引き起こしている仮想ディスクを削除します(下図参照)。

2. 1. で削除した仮想ディスクを追加するために、ディスクコントローラーを追加しなおします。
下図は、SCSI コントローラを追加しなおしているところですが、元々 IDE コントローラを使用していた場合は、IDE コントローラを追加してください。

3. 1. で削除した仮想ディスクを追加し、適用させます。


4. ゲスト OS の電源を入れ、無事起動すれば成功です。



参考:
仮想マシンの起動時に「IDE/ATAPIアカウントには、アタッチメント(VHDファイル名)を開くのに十分な特権がありません。」のエラーが表示される

2011-04-21

SonicWall Global VPN Client のインストールが失敗したり、クラッシュしてしまうときのちょっとした改善案(Windows Vista, Windows 7 編)

 Sonic Wall Global VPN Client (以降 SWGVC) がインストール先の OS によって正しく動作しないという記事を過去に書きましたが、今回、Vista/Windows 7 環境でも不具合が発生することがあったため、裏技的な対応方法をご紹介します。

【現象】(テスト時の SWGVC のバージョンンは 4.2.6.0305)

 SWGVC を起動すると、「Failed to open the IPSec driver.」 というエラーメッセージが表示され、接続できない。
 もしくは、SWGVC の起動まではできるが、Enable をクリックすると同様のエラーが表示されるか、接続が Enabled にならない。


【対応方法】

1. スタートメニューより、「コンピュータ」を右クリックしてから「プロパティ」の順に選択し、デバイスマネージャーを開きます。

2. デバイスマネージャーの「表示」メニューより、「非表示のデバイスの表示(W)」を選択します。


3. 左ペインに表示されるデバイスの一覧から、「SonicWall IPSec Driver」を右クリックし、「プロパティ」を選択します。




4. プロパティシートの「ドライバ」タブより、スタートアップの種類を「自動」に変更し、“開始”ボタンをクリックしてドライバを開始させ、コンピュータを再起動します。




5. SWGVC を起動し、接続を試みます。


 当方の場合は、最新版の SWGVC ではどうしても接続がうまくいかなかったため、旧版の SWGVC をインストールしなおし、上記の操作をしてみたところ、正常に接続されるようになりました。


 今までいろいろやってみて、どうしてもうまくいかなかった方は、ダメ元でお試しください。

参考:SonicWall Global VPN Client (GVC) Troubleshooting