アクセス不可能になったインスタンスを QEMU を使用してリカバリーする

QEMU または IBM SmarterCloud Enterprise の機能を利用して、災害発生後のシステムでイメージのリカバリーを行う

何らかの問題が発生して、IBM SmarterCloud Enterprise 上の Linux インスタンスにアクセスできないものが見つかったとしたら、どうしますか?この記事では、アクセス不可能になった Linux インスタンスをリカバリーする手順を説明します。その手順とは、プライベート・イメージを取り込み、そのイメージを永続ストレージにコピーし、QEMU を使用してイメージをブートするか kpartx でイメージをマウントして問題を修正した後、クラウドに再びインポートするというものです。

Claudiu Popescu (claudiu.popescu@ro.ibm.com), Subject Matter Expert, IBM

Claudiu Popescu photoClaudiu Popescu は、IBM SmartCloud Enterprise および Enterprise+ の L3 カスタマー・サポートとイメージ開発を専門とするサブジェクト・マター・エキスパートです。彼は、クラウド・コンピューティング、仮想化、プログラミング、ネットワーク・アーキテクチャーに関心を持っています。



Mihai Criveti (mihai.criveti@ro.ibm.com), IT Architect, IBM

Mihai Criveti photoMihai Criveti は IT アーキテクトであり、主にクラウド・コンピューティングと仮想化を中心とした業務を行っています。彼が関心を持っている分野には、クラウド・コンピューティング、仮想化、エンタープライズ・アーキテクチャー、SOA、ミドルウェア、デジタル・フォレンジック、UNIX システムなどがあります。



2012年 11月 22日

慌てることは禁物です

不測の事態に備えておくのは大事なことです。この記事ではベアメタル・リカバリーに相当する処置をクラウド上で実行するために、IBM SmarterCloud Enterprise のインポート機能とコピー機能を使用する方法を説明します。


クラウドでベアメタル・リカバリーが必要になる場合

ベアメタル・リカバリーのプロセスは、完全自動の管理ツールを使用する場合よりも複雑ですが、それぞれを使用する状況はある程度似ています。このようなリカバリー措置が必要になる理由として考えられるものの一部を以下に記載します。

  • 以下をはじめとするさまざまな原因で、インスタンスにアクセスできない場合。
    • ファイアウォールの構成に誤りがあるため、SSH 接続が許可されない。
    • SSH サービスを誤って構成したか、秘密鍵または authorized_hosts ファイルを削除したために、インスタンスにログオンすることができない。
    • idcuser アカウントを削除した後、他のアカウント用の SSH ログインを構成しなかった。
    • GRUB、runlevels、または起動スクリプトの構成に誤りがあることから、システムがネットワークや SSH サービスをブートまたは起動しなくなった。
    • アカウント・パスワードをリセットするか、リカバリー・メディアを使用して環境にアクセスする必要がある。
    • シングル・ユーザー・モードでファイルシステムの破損をリカバリーする必要がある。
    • SSH を使用してイメージにアクセスできなくなった理由が不明なため、問題を調べてトラブルシューティングを行う必要がある。
    • シングル・ユーザー・モードまたはリカバリー・メディアを使ってフル・バックアップや再パーティション化などのシステム保守を行う必要がある。
  • インスタンスの OS を新しいメジャー・リリースにアップグレードするために、インストール・メディアからブートしなければならない場合。
  • 独自の Linux オペレーティイング・システムをインストールおよびインポートして、クラウド上で直接イメージをビルドする場合。
  • インスタンスのセキュリティーが侵害された可能性があり、フォレンジックを行えるようにするために、接続されているストレージにインスタンスをコピーする必要がある場合。この場合、kpartx などのツールを使用してイメージ・ファイルを読み取り専用としてマウントすることも、QEMU を使用してフォレンジック・ライブ CD をブートすることもできます。QEMU は、オープンソースの汎用マシン・エミュレーター兼バーチャライザーです。QEMU をマシン・エミュレーターとして使用すると、ある特定のマシン用に作成された OS やプログラムを別のマシンで実行することができます。QEMU にホスト専用ネットワーク機器を接続すれば、発信ネットワーク接続を調査することもできます。

SmarterCloud の Image Import/Copy (イメージのインポート/コピー) 機能を使用できるようになる前までのことを考えてみてください。インスタンスにアクセスできなくなると、大抵は、インスタンスを再プロビジョニングしなければなりませんでした。ところがこの SmarterCloud の新しい機能のおかげで、今では以下のようなステップに従ってアクセス不可能になったインスタンスをリカバリーできるようになっています。

  • インスタンスのプライベート・イメージを取り込む。
  • このイメージを永続ストレージ・デバイスにコピーする。
  • イメージをコピーした永続ストレージ・デバイスを Linux インスタンスに接続する。
  • QEMU を使用して、クラウドで直接 OS イメージをブートする。
  • VNC クライアントを使用して、エクスポートしたイメージに接続する (GRUB ブート・ローダー・シーケンスに匹敵するほど、すぐにイメージを操作することができます)。
  • SSH を使用してイメージにアクセスできない理由を調査し、その問題を修正する。
  • SSH クライアントを使用してログイン・テストを行う。
  • イメージをインポートしてクラウドに戻す。
  • リカバリー後のイメージをベースに、新しいインスタンスをプロビジョニングする。システムのホスト名とネットワーク設定を維持する場合は、予約された IP が必要です。

リカバリー・ツール

この記事で説明する手順に従うには、以下のツールを使用して環境をセットアップしてください。

  • SmarterCloud の Image Import/Copy (イメージのインポート/コピー) API
  • KVM (Kernal-based Virtual Machine)
  • libvirt
  • QEMU
  • IBM Rational Asset Manager (REST クライアント/curl)

それぞれのツールについて簡単に説明しておきます。

SmarterCloud Linux Import/Copy (インポート/コピー) API およびツールは、独自の仮想マシンを SmarterCloud にインポートしたり、データ・センター間でイメージをコピーしたりするために使用します。使用方法、サンプル・スキーマ・ファイル、検証ツールを含め、この機能の詳細な説明については、SmarterCloud ドキュメント・ライブラリーに用意されている「Creating and Customizing Images and Software Bundles (イメージのカスタマイズおよびソフトウェア・バンドル)」ガイドを参照してください。このライブラリーへのリンクは、SmarterCloud Web ユーザー・インターフェースの「Support (サポート)」タブにあります。また、アセット・カタログ検索機能を使って、これらのアセットを調べることもできます。この記事では、以下の 3 つの機能について説明します。

  • イメージのインポート機能: 永続ストレージに配置された外部イメージ (または内部イメージ) をインポートする機能です。
  • イメージのコピー機能: Rational Asset Catalog で「Copy Allowed = Y」という属性に設定された VirtIO 対応のイメージを、ext3 でフォーマットされた永続ストレージ・デバイスのいずれかにコピーします。
  • 永続ストレージの複製機能: 永続ストレージ・ボリュームを別のデータ・センターに複製します。この機能を利用することで、コピーしたイメージを別のデータ・センターに移動して、インポートすることができます。

KVM (Kernel-based Virtual Machine) は SmarterCloud 内にあり、Linux カーネルを対象とした仮想化インフラストラクチャーになっています。KVM は、仮想化拡張機能 (Intel VT または AMD-V) を備えた x86 ハードウェアでのネイティブ仮想化をサポートしていますが、KVM 自体でエミュレーションを行うことはしません。KVM の長所の 1 つは、ネットワーク・カード、ディスク I/O コントローラー、VGA グラフィック・インターフェースの準仮想化です。準仮想化によって、完全仮想化よりも優れたパフォーマンスを実現します。

libvirt は、ハイパーバイザー (KVM や Xen など) を操作するために使用するツール・セットです。ハイパーバイザーを管理するには、libvirt の多目的 API を使用するか、またはコマンド・ラインで「>virsh」を使用します。

QEMU は、高速の汎用マシン・エミュレーターです。KVM との組み合わせで、仮想化をサポートします。

IBM Rational Asset Manager は、企業が再利用可能なソフトウェア・パッケージをソフトウェア・ライブラリーの一部としてカタログ化し、制御、管理、保守するために使用するツールです。


リカバリー手順の前提

手順を開始する前に、この記事で使用する表記規則と、環境をセットアップする際に考慮すべき事項を説明しておきます。

  • システムで root として実行するコマンドには、接頭辞 root@host# を付けています。
  • sudo を使用してシステムで root として実行するコマンドには、接頭辞 user@host# sudo を付けています。
  • システムで一般ユーザーとして実行するコマンドには、接頭辞 user@host $ を付けています。
  • コマンドとコマンド出力の間には、1 行空行を挿入することで区切り、コマンド出力は右に 1 タブ分インデントを挿入しています (以下のコード・ブロックを参照)。

注: この記事に記載するコード・ブロックは、意図的に、コード・セクション全体をコピーしたり、貼り付けたりできないように作成してあります。これらのコードはガイドラインとして記載しており、お使いの環境、ID、スコープなどに合うようにコードを変更する必要があるためです。

root@host# 1st command - to be run as root
root@host# 2nd command - to be run as root (previous command has no output)

    output from 2nd command

user@host$ 3rd command - to be run as user

    output from 3rd command

特権の昇格が要求されるコマンドについては、sudo (または、sudo -s) を使用して実行します。sudo bash は使用しないでください。これを使用すると、idcuser 環境設定が適用されるためです。特権の昇格が要求されるコマンドの例: sudo yum install rpmdevtools rpm-devel rpm-build.

要件

次のものが用意されている必要があります。

  • コピーするイメージを収容できるだけの大きさを持つ SmarterCloud 永続ストレージ・ボリューム。このストレージを、QEMU を実行する Linux インスタンスに接続します。
  • SmarterCloud 64 ビット版 RHEL (Red Hat Enterprise Linux) または SLES (SUSE Linux Enterprise Server) インスタンス。このインスタンスに QEMU をインストールし、永続ストレージを接続して、リカバリー手順を実行します。このインスタンスを「R1」と呼びます。
  • SmarterCloud Linuxインスタンスまたはイメージ。これは、リカバリー対象のインスタンスです。このインスタンスを「U1」と呼びます。
  • SmartCloud 資料ライブラリーに用意されているドキュメント。「Creating and Customizing Images and Software Bundles (イメージのカスタマイズおよびソフトウェア・バンドル)」、「Command Line Tool Reference (コマンド・ライン・ツールのリファレンス)」、および「REST API Reference (REST API リファレンス)」。この資料ライブラリーには、イメージのインポート/コピーを実行するために必要なことを説明したドキュメントとそのためのツールが含まれています。

以下の経験も必要です。

  • SmarterCloud のコマンド・ライン・ツールまたは API の操作経験。
  • シングル・ユーザー・モードで Linux インスタンスをブートした経験、またはインストール・メディアからリカバリー作業を行った経験。SSH (Secure Shell) を介して VNC のトンネリングを行い、Linux ファイアウォールを操作した経験。これらの手順は、システム管理者が物理ハードウェアまたは仮想ハードウェア上で行う場合の手順と同様です。
  • QEMU または KVM の使用経験、および Linux 上でソフトウェアのビルドとインストールを行った経験。

また、皆さんに常に変わらぬ忍耐力と意志の強さがあれば、それも望ましいです。仮想イメージを QEMU でブートして、仮想マシン上で実行状態にするプロセスは、時間がかかり、間違いを起こしやすいものです。インスタンスとイメージ・サイズによっては、インポート/コピーのプロセスにも時間がかかります。一度でも誤りを犯せば、すべて最初からやり直さなければなりません。このことを、前もって警告しておきます。


リカバリー手順の要約

手順を開始する準備は整いました。これから行うリカバリー手順を以下に要約します。

  • Rational Asset Catalog にイメージを取り込み、エクスポートできる状態にする。
  • 取り込んだイメージを編集して、CopyAllowed = N を CopyAllowed = Y に変更する。
  • イメージをストレージ・デバイスにコピーし、そのストレージを別の Linux インスタンス (R1 インスタンス) に接続してマウントする
  • QEMU 1.1.1 をインストールする (./configure、make、make install)。
  • ポート 5900 を ssh を介してトンネリングする
  • QEMU を使用して、イメージをブートする。例: /usr/local/bin/qemu-system-i386 -cdrom /root/IF-YOU-NEED-A-RECOVERY-DISK.iso -boot d -m 1024 -drive file=BWVoPePtRACvZVO3Srl1lQ.img,if=virtio--daemonize
  • VNC クライアントを使用して localhost:0 に接続する
  • 問題を修正する
  • ボリュームをアンマウントして取り外す
  • イメージをインポートしてクラウドに戻す
  • 新規イメージをプロビジョニングしてテストする

以上の手順は一貫して、同じデータ・センターで行います。


リカバリー手順

準備ができたので、リカバリー手順を開始します。

アクセスできなくなったインスタンスのプライベート・イメージを作成する

WebUI を使用してプライベート・イメージを取り込むには、以下の操作を行います。

  1. SmarterCloud Enterprise Web インターフェースにログインします。
  2. 「Control Panel (コントロール・パネル)」 > 「Instances (インスタンス)」の順に進み、リカバリーする必要のあるインスタンスを選択して「Create private image (プライベート・イメージの作成)」をクリックします。
  3. 「Submit (送信)」をクリックし、イメージの作成が完了するまで待ちます。

イメージ・アセットを編集する

このステップでは、Web ユーザー・インターフェースまたは Rational Asset Manager の REST API を使用することができます。Web ユーザー・インターフェースを使用する場合は、以下の作業を行います。

  1. イメージの取り込みが完了したら、「Control panel (コントロール・パネル)」 > 「View asset catalog (アセット・カタログの表示)」 > 「My Assets (マイ・アセット)」の順に進みます。
  2. 保存したイメージを検索して、それを選択します。
  3. ページの右上にある、鉛筆の形をしたアイコンをクリックします。
    図 1. Rational Asset Manager でイメージ・アセットを修正する
    Rational Asset Manager でイメージ・アセットを修正する
  4. 「Operating System (オペレーティング・システム)」の下にある「More (その他)」をクリックします。
    図 2. RAM でのイメージの「Assets (アセット)」タブで「More (その他)」を展開する
    RAM でのイメージの「Assets (アセット)」タブで「More (その他)」を展開する
  5. 「Copy Allowed: (コピーの許可:)」を「N」から「Y」に変更した後、ページの右下にある「Update (更新)」をクリックして変更を保存します。変更について説明するコメントを入力し、もう一度「Update (更新)」をクリックします。
    図 3. Rational Asset Manager でのイメージの「Assets (アセット)」タブを更新する
    Rational Asset Manager でのイメージの「Assets (アセット)」タブを更新する

イメージをストレージにエクスポートして、ストレージをマウントする

  1. コマンド・ライン・ツールまたは REST API を使用して、イメージをストレージ・デバイスにエクスポートします (エクスポート先のストレージ・デバイスは、ext3 でフォーマットされている必要があります)。SmarterCloud のコマンド・ライン・ツールを使用する場合、以下のコマンドを実行します。
    user@host$ ic-copy-to.sh -u|--username username -w|--passphrase passphrase 
    -g|--file-path filepath -v|--volume-id volumeID -I|--image-id imageID
  2. イメージがストレージにコピーされていることを確認します。それには、SmarterCloud のコマンド・ライン・ツールで、以下のコマンドを実行します。
    user@host$ ic-describe-volume.sh -u $OWNER -g cmihai.key -v $STORAGEID -w pass \
    | grep State
    
        State: UNMOUNTED
  3. ストレージを R1 インスタンスに接続します。この例では、動的ディスク接続機能を使用して、プロビジョニング済みのインスタンスにディスクを接続します。それには、SmarterCloud のコマンド・ライン・ツールで、以下のコマンドを実行します。
    user@host$ ic-attach-volume.sh -u|--username username -w|--passphrase passphrase
    -g|--file-path filepath -l|--instance-id instanceId -v|--volume-id volumeId

    出力は以下のような内容になります。

    user@host$ ic-attach-volume.sh -g <your.key> -u <your.email@ibm.com> -w \
    <your.passphrase> -v <your.volume.id> -l <your.instance.id>
    
        Executing action: AttachVolume  ...
        The request has been submitted successfully.
        Executing AttachVolume  finished
        
    user@host$ ic-describe-volume.sh -g <your.key> -u <your.email@ibm.com> \
    -w <your.passphrase> -v <your.volume.id> \
    | grep State
    
        State: MOUNTED

    注: インスタンスが動的ディスク接続機能をサポートしていない場合は、例えば WebUI ウィザードを使用して新しい Linux インスタンスをプロビジョニングし、インスタンスの作成中にストレージを接続するという方法をとることができます。

  4. R1 インスタンスに接続されたストレージをマウントします。それにはまず、新しく接続されたディスクを R1 インスタンス上で特定します。新しく接続されたディスクの特定は、dmesg ログを調べることで行うことができます。新規ディスクは、VirtIO (この例では vde1) を使用して接続されているはずです。
    user@host# sudo dmesg | tail
    
        virtio-pci 0000:00:07.0: using default PCI settings
        virtio-pci 0000:00:08.0: no hotplug settings from platform
        virtio-pci 0000:00:08.0: using default PCI settings
        pci 0000:00:0a.0: no hotplug settings from platform
        pci 0000:00:0a.0: using default PCI settings
        virtio-pci 0000:00:0a.0: enabling device (0000 -> 0003)
        virtio-pci 0000:00:0a.0: PCI INT A -> Link[LNKB] -> GSI 11 (level, high)
        virtio-pci 0000:00:0a.0: irq 35 for MSI/MSI-X
        virtio-pci 0000:00:0a.0: irq 36 for MSI/MSI-X
        vde: vde1

    あるいは、fdisk を使用してパーティション・テーブルを一覧表示することもできます。

    user@host$ sudo /sbin/sudo fdisk -l

    該当するディスクを特定したら、次に mount コマンドを使用してマウントします。

    user@host$ sudo mkdir /mnt/storage                            
    user@host$ sudo mount /dev/vde1 /mnt/storage

    /mnt/storage の内容を確認します。

    user@host$  sudo find /mnt/storage/ -type f -exec \
    sh -c 'du -h {}; printf "\t"; file -b {};' \;
    
        3.6G    /mnt/storage/image/gqlhq2tfTsmBUqFcld4r1Q.img
            x86 boot sector; GRand Unified Bootloader, stage1 version 0x3, 
            boot drive 0x80, 1st sector stage2 0xe0800, GRUB version 0.94; 
            partition 1: ID=0x83, active, starthead 32, startsector 2048, 
            2048000 sectors; partition 2: ID=0x83, starthead 155,
            startsector 2050048, 7426866 sectors, code offset 0x48
        8.0K    /mnt/storage/image/gqlhq2tfTsmBUqFcld4r1Q.ovf
            XML  document text
        28K     /mnt/storage/image/Terms.zip
            Zip archive data, at least v2.0 to extract
        4.0K    /mnt/storage/image/leZ8NeYxSti8pXxnzd3_Tg/vhost0133_DataDisk1.img
            data
        8.0K    /mnt/storage/image/BSS.zip
            Zip archive data, at least v2.0 to extract
        4.0K    /mnt/storage/image/S40E4IiKR923NAsiZTyf0A/vhost0133_DataDisk2.img
            data
        104K    /mnt/storage/image/RAM.zip
            Zip archive data, at least v2.0 to extract

    皆さんの出力に示されるディスクの名前と番号は、取り込んだインスタンスの種類次第で、上記の出力例とは異なる結果となるはずです。また、この例では取り込むデータだけを収容するようにディスクを縮小してあるため、ディスク・サイズも異なるはずです。

表 1 に、storage/image 内で検出されたファイルを記載します。

表 1. storage/image 内で検出されたファイル
ファイル・パス説明
$UID.ovfOVF コンテナー
$UID.imgロー・ディスク・イメージ
$UID/$HOSTNAME_DataDisk$ID.img追加のディスク
BSS.zip圧縮された BSS.xml
RAM.zip圧縮された Rational Asset Manager 成果物
Terms.zip圧縮された使用条件文書

ルート・パーティションのサイズを変更する

ルート・パーティションのサイズの変更が必要になるのは、新しいパッケージを QEMU でブートした後、あるいは chroot 内にインストールすることを予定している場合のみです。イメージをエクスポートした後のルート・パーティション上の空き容量は約 10MB です。イメージ上にパッケージをインストールする必要がある場合、またはファイルをコピーしなければならない場合には、パーティションのサイズを変更してください。

RHEL 上のルート・パーティションのサイズを変更する場合

guestfs ツールを使用して、以下の手順を実行します。

  1. libguestfs-tools をインストールします。
    yum install libguestfs-tools
  2. 古いイメージ・ファイルを新しいイメージ・ファイルに複製して、その新規イメージ・ファイルのサイズを増やします。
    root@host# virt-filesystems -l -h --all -a <your.image.img>
    
        Name       Type        VFS   Label  MBR  Size  Parent
        /dev/sda1  filesystem  ext3  -      -    94M   -
        /dev/sda2  filesystem  ext3  /      -    4.2G  -
        /dev/sda1  partition   -     -      83   94M   /dev/sda
        /dev/sda2  partition   -     -      83   4.2G  /dev/sda
        /dev/sda   device      -     -      -    4.3G  -
                            
    root@host# truncate -r <your.image.img> <your.new.image.img>
    root@host# truncate -s +5G newdisk

    新規イメージ・ファイルに新しいサイズが反映されます。この例でのサイズは 9.3G です。

  3. イメージ・ファイルは 5G 大きくなっているので、ルート・パーティションを拡張します。
    root@host# virt-resize --expand /dev/sda2 olddisk newdisk
                        
        Examining <your.image.img> ...
        100% [##################################################] 00:00
        **********
                        
        Summary of changes:
                        
        /dev/sda1: This partition will be left alone.
                        
        /dev/sda2: This partition will be resized from 4.2G to 9.2G.  The 
        filesystem ext3 on /dev/sda2 will be expanded using the 'resize2fs' 
        method.
                        
        **********
        Setting up initial partition table on <your.new.image.img> ...
        Copying /dev/sda1 ...
        100% [##################################################] 00:00
        Copying /dev/sda2 ...
        100% [##################################################] 00:00
        100% [##################################################] 00:00

    これ以降は、この新しいイメージ・ファイルを使用して、QEMU でのブートまたは kpartx を使用したリカバリー手順を行う必要があります。

SLES 上のルート・パーティションのサイズを変更する場合

標準の Linux ツールを使用して、以下の作業を行います。

  1. すべてがアンマウントされて、ループ・デバイスが削除されていることを確認します。
  2. 作業を容易に行えるようにするために RAWIMAGE をエクスポートします。
    root@host# export RAWIMAGE=<your.image.img>

    これはスパース・ディスク・イメージであることに注意してください。

  3. 見かけ上のイメージ・サイズを出力します。
    root@host # du -m --apparent-size $RAWIMAGE
                            
        4628    <your.image.img>
  4. 通常、見かけ上のサイズは使用中のディスク・スペースを上回ります。
    root@host# du -m $RAWIMAGE
                                
        3628    <your.image.img>
  5. ディスクのサイズを変更します。変更後のサイズは、見かけ上のイメージ・サイズより大きくなるようにしてください。dd を使用して、イメージをスパース・ファイルとして拡張します。
    root@host# export DESIREDSIZE="9000"
    root@host# dd if=/dev/zero of=$RAWIMAGE bs=1M count=0 seek=$DESIREDSIZE
  6. イメージ・ファイルが新しいサイズに拡張されたことを確認します。
    root@host# du -m --apparent-size $RAWIMAGE
                        
        9000    <your.image.img>
  7. これで、ループ・デバイスを作成することができます。
    root@host# losetup /dev/loop0 $RAWIMAGE
    root@host# fdisk -l /dev/loop0
    root@host# kpartx -av /dev/loop0
  8. ファイルシステムのチェックを実行します。
    >root@host# e2fsck -fy /dev/mapper/loop0p1
  9. 古いパーティションを削除して、代わりに古いパーティションよりサイズを大きくしたパーティションを作成することで、パターンのサイズを変更します。ここで操作を誤ると、データが失われる可能性があります。パーティションのレイアウトに注意して、以下のコマンドをお使いのイメージに合わせて変更してください。

    注: 下記コード・セクションでは、ユーザー入力を太字で示します。

    root@host# fdisk /dev/loop0
        Command (m for help): p
                        
        Disk /dev/loop0: 9437 MB, 9437184000 bytes
        255 heads, 63 sectors/track, 1147 cylinders
        Units = cylinders of 16065 * 512 = 8225280 bytes
        Sector size (logical/physical): 512 bytes / 512 bytes
        I/O size (minimum/optimal): 512 bytes / 512 bytes
        Disk identifier: 0x0003ee5f
                        
        Device Boot      Start         End      Blocks   Id  System
        /dev/loop0p1   *           1         128     1024000   83  Linux
        Partition 1 does not end on cylinder boundary.
        /dev/loop0p2             128         590     3713433   83  Linux
        Partition 2 does not end on cylinder boundary.
                        
        Command (m for help): d
                     
        Partition number (1-4): 2
                        
        Command (m for help): n
        Command action
        e   extended
        p   primary partition (1-4)
    p
        Partition number (1-4): 2
        First cylinder (128-1147, default 128):
        Using default value 128
        Last cylinder, +cylinders or +size{K,M,G} (128-1147, default 1147):
        Using default value 1147
                        
        Command (m for help): p
                        
        Disk /dev/loop0: 9437 MB, 9437184000 bytes
        255 heads, 63 sectors/track, 1147 cylinders
        Units = cylinders of 16065 * 512 = 8225280 bytes
        Sector size (logical/physical): 512 bytes / 512 bytes
        I/O size (minimum/optimal): 512 bytes / 512 bytes
        Disk identifier: 0x0003ee5f
                        
        Device Boot      Start         End      Blocks   Id  System
        /dev/loop0p1   *           1         128     1024000   83  Linux
        Partition 1 does not end on cylinder boundary.
        /dev/loop0p2             128        1147     8188253+  83  Linux
        
        Command (m for help): w
        The partition table has been altered!
                        
        Calling ioctl() to re-read partition table.
                        
        WARNING: Re-reading the partition table failed with error 22: Invalid argument.
        The kernel still uses the old table. The new table will be used at
        the next reboot or after you run partprobe(8) or kpartx(8)
        Syncing disks.
  10. パーティション・テーブルを再び読み込みます。
    root@host# kpartx -dv /dev/loop0
    root@host# losetup -d /dev/loop0
    root@host# losetup /dev/loop0 $RAWIMAGE
    root@host# fdisk -l /dev/loop0
    root@host# kpartx -av /dev/loop0
  11. パーティションのサイズを変更します。
    root@host#resize2fs /dev/mapper/loop0p2
        resize2fs 1.41.12 (17-May-2010)
        Resizing the filesystem on /dev/mapper/loop0p2 to 2047063 (4k) blocks.
        The filesystem on /dev/mapper/loop0p2 is now 2047063 blocks long.
  12. もう一度、ファイルシステムのチェックを実行します。
    root@host# e2fsck -fy /dev/mapper/loop0p2

QEMU をインストールする

ストレージを接続してマウントしたインスタンスにログインして、QEMU をインストールします。

RHEL に QEMU をインストールする場合

  1. QEMU RPM と SRC RPM をビルドします。まずは、ソースが必要です。
    user@host$ wget http://wiki.qemu.org/download/qemu-1.1.1.tar.bz2
  2. RPM をビルドするには、.spec ファイルが必要です。
    user@host$ cat > qemu-1.1.1.spec <<'EOF'
    Name            : qemu
    Version         : 1.1.1
    Release         : 1
    License         : LGPL, GPL
    Summary         : A generic and open source processor emulator.
    Group           : Applications/Emulators
    URL             : http://fabrice.bellard.free.fr/qemu/
    Vendor          : Fabrice Bellard >fabrice@bellard.org<
    Packager        : Your Name >recipient@domain.tld<
    BuildRoot       : %{_tmppath}/%{name}-buildroot
    Source0         : %{name}-%{version}.tar.gz        
    Requires        : gcc
    BuildRequires   : gcc
    AutoReq         : no
    AutoProv        : no
            
    %description
    QEMU emulator.
            
    %prep
    rm -rf %{buildroot}
            
    %setup -q
            
    %build
    ./configure --prefix=/usr
    make
            
    %install
    mkdir -p %{buildroot}/usr/lib/debug
    make install prefix=%{buildroot}/usr bindir=%{buildroot}/usr/bin \
    datadir=%{buildroot}/usr/share/qemu docdir=%{buildroot}/usr/share/doc/qemu \ 
    mandir=%{buildroot}/usr/share/man
            
    %clean
    rm -rf %{buildroot}
            
    %files
    %defattr(-,root,root)
    %doc Changelog COPYING COPYING.LIB LICENSE README README.distrib TODO VERSION
    %{_bindir}/qemu*
    %{_docdir}/qemu
    %{_mandir}/man1/qemu*
    %{_datadir}/qemu
    * Thu Aug 02 2012 Your Name >recipient@domain.tld< 1.0-1
    - qemu 1.1.1
            
    EOF
  3. バイナリー RPM およびソース RPM をビルドします。

    RHEL では、yum を使用して RPM ビルド・ツールをインストールします。

    root@host# yum install rpmdevtools rpm-devel rpm-build

    SLES では、zypper を使用して RPM ビルド・ツールをインストールします。

    root@host# zypper install rpmdevtools rpm-devel rpm-build
  4. RPM をビルドします。RPM は、一般ユーザー (推奨) または root としてビルドすることができます。
    root@host# cp qemu-1.1.1.spec /usr/src/packages/SPEC
    root@host# cp qemu-1.1.1.tar.bz2 /usr/src/packages/SOURCES/qemu-1.1.1.tar.bz2
    root@host# rpmbuild -ba /usr/src/packages/SPEC/qemu-1.1.1.spec

SLES に QEMU をインストールする場合

  1. インストールされている glib2 のバージョンを調べます。
    user@host$ sudo zypper info glib2 | grep Version
    
        Version: 2.22.5-0.4.3
  2. 使用している glib2 のバージョンがわかったので、それと同じバージョンを取得してビルドする必要があります。以下のようにダウンロードして解凍します。
    user@host$ wget http://wiki.qemu.org/download/qemu-1.1.1.tar.bz2
    user@host$ wget http://zlib.net/zlib-1.2.7.tar.gz  
    user@host$ wget http://ftp.acc.umu.se/pub/GNOME/sources/glib/2.22/glib-2.22.5.tar.bz2
    user@host$ wget ftp://sourceware.org/pub/libffi/libffi-3.0.10.tar.gz
    user@host$ tar zxf qemu-1.1.1.tar.bz2
    user@host$ tar zxf zlib-1.2.7.tar.gz
    user@host$ tar jxf glib-2.22.5.tar.bz2
    user@host$ tar zxf libffi-3.0.10.tar.gz
  3. libffi をビルドします。
    user@host$ cd libffi-3.0.10/
    user@host$ ./configure && make && sudo make install && cd..
  4. zlib をビルドします。
    user@host$ cd zlib-1.2.7/
    user@host$ ./configure && make && sudo make install && cd..
  5. glib2 をビルドします。
    user@host$ cd glib-2.22.5
    user@host$ ./configure && make && sudo make install && cd..
  6. QEMU をビルドします。
    user@host$ cd qemu-1.1.1/
    user@host$ ./configure && make && sudo make install && cd..

イメージをブートする

QEMU を実行してイメージをブートする前に、vncviewer を起動して新しいセッションを開始してください。また、GRUB 構成の行を編集して、シングル・ユーザー・モードでイメージがブートされるようにする必要もあります。イメージのブートを停止するための猶予期間は、5 秒だけです。

  1. 最初に、VNC の ssh トンネルをセットアップします。それには、SSH または PuTTY のいずれかを使用することができます。PuTTY はオープンソースの telnet 兼 SSH クライアントです。

    SSH を使用して VNC ポートを転送するには、以下のコマンドを使用します。

    user@host$ ssh -i /pub_key-g -L 5910:127.0.0.1:5901 idcuser@instance-R1

    PuTTY を使用して VNC ポートを転送します。

    1. PuTTY を起動します。ホスト名には、Linux インスタンスのパブリック IP アドレスを入力します。
      図 4. 新規 PuTTY セッション
      PuTTY セッション
    2. 「Category (カテゴリ)」ボックス内の「SSH」をクリックして、「Enable compression (圧縮を有効にする)」チェック・ボックスを選択します。
      図 5. PuTTY で SSH の圧縮を有効にする
      PuTTY で SSH の圧縮を有効にする
    3. SSH」を展開して「Auth (認証)」をクリックします。「Browse (参照)」をクリックして .ppk 鍵が保管されている場所までナビゲートし、暗号化された .ppk 鍵をロードします。
      図 6. PuTTY での「Auth (認証)」
      PuTTY での「Auth (認証)」
    4. Tunnel をクリックします。ローカルで使用する「Source port (源ポート)」として「5910」と入力し、転送先とする「Destination (送り先)」として「127.0.0.1:5901」を入力します。
      図 7. PuTTY でのポート・フォワーディング
      PuTTY でのポート・フォワーディング
    5. 「Category (カテゴリ)」ボックス内の「Session (セッション)」をクリックしてから「Open (開く)」をクリックします。
  2. R1 インスタンスの iptables ルールを追加して、ファイアウォールで VNC を許可します。
    	user@host$ sudo /sbin/iptables -A INPUT -p tcp --dport 5900:5920 -j ACCEPT
    	user@host$ sudo /sbin/service iptables save
  3. イメージをブートします。

    64 ビット版の場合:

    root@host$ /usr/local/bin/qemu-system-x86_64 -vnc 127.0.0.1:1 -m 1024 \
    -drive file=<your.image.img>,if=virtio -daemonize

    32 ビット版の場合:

    root@host# /usr/local/bin/qemu-system-i386 -vnc 127.0.0.1:1 -m 1024 \
    -drive file=<your.image.img>,if=virtio -daemonize

ローカル・ワークステーションから VNC を使用して接続する

接続する準備が整いました。

UNIX では、vncviewer を実行します。

user@host$ vncviewer 127.0.0.1:5910

Windowsでは、無料の VNC Viewer プログラムのいずれかを (例えば、RealVNC など) 使用することができます。

RHEL の場合

イメージがブートされる様子を確認することができます。

  1. VNC ウィンドウの内側をクリックし、スペース・バーを押してブート・プロセスを停止します。プロセスが停止したら、編集を開始するために「e」と入力します。
    図 8. RHEL 5 ― GRUB ブート・メニュー
    RHEL 5 ― GRUB ブート・メニュー
  2. カーネルの行を選択して「e」と入力します。
    図 9. RHEL 5 ― GRUB カーネルの行
    RHEL 5 ― GRUB カーネルの行
  3. シリアル・コンソールの行を削除します。カーネルの行に「Single」と入力します。
    図 10. RHEL 5 ― GRUB カーネルの編集
    RHEL 5 ― GRUB カーネルの編集
  4. Enter キーを押してから、「b」と入力してブートします。例えば、シングル・ユーザー・モードでイメージをブートするには、カーネルの行を以下のように編集します。
    kernel /vmlinuz-2.6.32-131.0.15.el6.x86_64 ro \
    root=UUID=252e009f-8fc9-455e-9e65-400e5baa413d \
    rd_NO_LUKS rd_NO_LVM rd_NO_MD rd_NO_DM \
    LANG=en_US.UTF-8 SYSFONT=latarcyrheb-sun16 KEYBOARDTYPE=pc \
    KEYTABLE=us crashkernel=auto rhgb quiet \
    console=ttyS1,9600 console=ttyUSB0,115200n8 elevator=deadline Single

    注: シリアル・コンソールの行は削除してください。

RHEL インスタンスのリカバリー方法についての詳細は、「参考文献」にリンクが記載されている Red Hat Enteprise のドキュメントを参照してください。

SLES GRUB ブート・メニューを使用する場合

  1. イメージをブートします。
    図 11. SLES ― GRUB の編集 ― init=/bin/bash
    SLES GRUB の single ブート・オプション

    リカバリー・モードで SLES インスタンスをブートする方法についての詳細は、公式ドキュメントを参照してください。

  2. init=/bin/bash を使用してイメージをブートしたら、idcuser のパスワードを設定します。
    user@host$ passwd idcuser
  3. ランレベル 3 でマシンを起動します。
    user@host$ init 3
  4. idcuser でログインして、sshd サービスを有効にします。
    user@host$ sudo /sbin/service sshd start
    user@host$ sudo /sbin/chkconfig sshd on
  5. QEMU でブートしたイメージをシャットダウンします。

ストレージまたはボリュームからイメージをインポートする

リカバリー・プロセスの完了まで、あと一歩です。

  1. QEMU でブートしたイメージをシャットダウンした後、FileValidation.sh スクリプト (Rational Asset Catalog にあります) をイメージ・フォルダーにコピーします。
  2. イメージ・フォルダー内に格納されているすべてのファイルを検証します。検証の結果が失敗だった場合は、FileValidation.sh スクリプトを使って新しい manifest.mf ファイルを作成します。
  3. .mf ファイルを作成したら、ストレージを R1 インスタンスから取り外します。
  4. ストレージから U1 イメージをインポートします。
    user@host$ ic-import-image.sh u [username] -g [auth file full path] -w [passphrase] 
        -v [volume id] -n [name of image]
  5. インポートが正常に完了した場合には、SCE で「Control panel (コントロール・パネル)」 > 「Images (イメージ)」の順に選択したタブに、新しく作成されたプライベート・イメージが表示されます。
  6. このプライベート・イメージから子インスタンスを作成し、その子インスタンスにアクセスしてみます。子インスタンスが正常にプロビジョニングされていれば、ssh を使用してアクセスできるはずです。

QEMU の代わりに kpartx を使用してイメージ・ファイルをマウントする方法

フォレンジックを行う場合や、秘密鍵を authorized_keys ファイルにコピーするだけの場合など、エクスポートしたイメージの「ループバック」をマウントするだけで十分な場合もあります。このセクションでは、その場合の方法を説明します。

初期コピー手順

初期段階で行うイメージのコピー手順は、QEMU を使用する場合の手順と同様です。

  1. リカバリー対象のインスタンスのプライベート・イメージを取り込みます。
  2. 同じデータ・センターで、イメージを収容するのに十分な大きさの、ext3 でフォーマットされた永続ストレージを作成します。
  3. 取り込んだイメージに対応する Rational Asset Catalog のエントリーで、「Copy Allowed (コピーの許可)」属性を「Y」に設定します。
  4. WebUI、API、または CMD ツールを使用して、取り込んだイメージのイメージ ID と、作成したストレージのストレージ・ボリューム ID を入手します。
  5. ic-copy-to.sh コマンドまたは API を使用して、イメージをストレージにコピーします。
  6. イメージをコピーしたストレージを既存の Linux インスタンスに接続するか、新規 Linux インスタンスを作成して、そのインスタンスに接続します。

エクスポートしたイメージをマウントする

  1. ストレージをマウントする Linux インスタンスに SSH を使用してアクセスし、イメージをマウントします。
    root@host# losetup /dev/loop0 /mnt/storage/image/<your.image.img>
    root@host# fdisk -l /dev/loop0
    
        Disk /dev/loop0: 4852 MB, 4852179968 bytes
        255 heads, 63 sectors/track, 589 cylinders
        Units = cylinders of 16065 * 512 = 8225280 bytes
        Sector size (logical/physical): 512 bytes / 512 bytes
        I/O size (minimum/optimal): 512 bytes / 512 bytes
        Disk identifier: 0x0003ee5f
        
        Device Boot      Start         End      Blocks   Id  System
        /dev/loop0p1   *           1         128     1024000   83  Linux
        Partition 1 does not end on cylinder boundary.
        /dev/loop0p2             128         590     3713433   83  Linux
        Partition 2 does not end on cylinder boundary.
    
    root@host# kpartx -av /dev/loop0
    
        add map loop0p1 (253:0): 0 2048000 linear /dev/loop0 2048
        add map loop0p2 (253:1): 0 7426866 linear /dev/loop0 2050048
    
    root@host# mkdir /mnt/myimage
    root@host# mount /dev/mapper/loop0p2 /mnt/myimage
    root@host# mount /dev/mapper/loop0p1 /mnt/myimage/boot

    <your.image.img> のパーティション・テーブルを一覧表示するには、fdisk -l /dev/loop0 を使用します。

  2. イメージがマウントされました。

    追加のパーティション (他のディスク上にあるパーティションなど) をマウントしなければならない場合もあります。その場合には、上記のステップを皆さんのパーティション・スキームに合わせて変更します。LVM でパーティションをマウントする部分には他のステップ (pvs、lvdisplay、vgscan など) もあることに注意してください。ルート・パーティションがすでにマウントされている場合には、(ホスト OS のマウント・ポイントが接頭辞として付けられた) 既存のマウント・ポイントを再利用することもできます。

    イメージのツールとバイナリーを使用するには、chroot コマンドを使用することができます。以下の手順に従ってください。

    1. イメージに /proc /sys /dev、および /dev/pts をマウントします。
      root@host# mount -o bind /proc /mnt/myimage/proc
      root@host# mount -o bind /sys /mnt/myimage/sys 
      root@host# mount -o bind /dev /mnt/myimage/dev
      root@host# mount -o bind /dev/pts /mnt/myimage/dev/pts
    2. この時点で、chroot コマンドを使用することができます。
      root@host# chroot /mnt/myimage
    3. OS とカーネルのバージョンを確認します。
      user@host$ cat /etc/issue
      user@host$ uname -a
    4. 問題がある場合にはそれを修正してから、シェルを終了します。
      exit

      yum や zypper などをはじめとする、あらゆる OS ツールを利用することができます。マウントする前に、必要に応じてパーティションのサイズを変更してください。

    イメージの修正に取り掛かる前に、追加のパーティションもマウントしなければならない可能性があることに注意してください。もう 1 つの注意点として、イメージのツールとバイナリーを使用するには、chroot コマンド (chroot /mnt/myimage/ /bin/bash) も使用することができます。

  3. 作業が完了したら、イメージをアンマウントします。必要に応じて、chroot を終了します。chroot 用に特殊なデバイスをマウントした場合には、それらのデバイスを最初にアンマウントしてください。
    root@host# umount /mnt/myimage/proc/
    root@host# umount /mnt/myimage/dev/pts
    root@host# umount /mnt/myimage/dev
    root@host# umount /mnt/myimage/sys
  4. マウント・ポイントを使用している他のパーティションからアンマウントします。以下はその一例です。
    root@host# umount /mnt/myimage/boot/
  5. ルート・イメージをアンマウントします。
    root@host# umount /mnt/myimage/
  6. パーティションのマッピング、そしてルート・デバイスを削除します。
    root@host# kpartx -dv /dev/loop0
        del devmap : loop0p2
        del devmap : loop0p1
    
    root@host# losetup -d /dev/loop0
  7. FileValidationTool.sh を実行して、SHA1SUM コードを含む .mf ファイルを再作成します。/mnt/myimage/image ディレクトリーにある「Creating and customizing images」ガイドを参照してください。
  8. 永続ストレージ・ボリュームを取り外して、修正したイメージをインポートしてクラウドに戻します。

まとめ

この記事では、アクセスできなくなった Linux インスタンスをリカバリーする方法を説明しました。その手順は、プライベート・イメージを取り込み、そのイメージを永続ストレージにコピーし、QEMU を使って永続ストレージ・デバイスに接続された Linux イメージをブートし、問題を修正してから、イメージをクラウドに再びインポートするというものです。さらに、もう 1 つの方法として kpartx を使ってイメージ・ファイルをマウントする手順も説明しました。これらのプロセスは、正常な状態にリカバリーするのに役立ちますが、時間と忍耐、そして Linux の基礎知識を必要とします。


付録 A: ストレージの状態コードとその意味

以下の表に、ストレージの状態コードとその意味を記載します。

ストレージ状態コード意味ストレージ状態コード意味ストレージ状態コード意味
0 新規 5 接続済み 10 接続中
1 作成中 6 失敗 11 取り外し中
2 削除中 7 削除保留中 12 コピー中
3 削除済み 8 複製元として使用中 13 インポート中
4 取り外し済み 9 複製中 14 転送再試行中

付録 B: Rational Asset Manager の REST API

Rational Asset Manager が提供する REST API を使用して、アセットおよび成果物でトランザクション操作を行うことができます。

図 12. IBM Rational Asset Manager の REST モデル ― 検索
Rational Asset Manager の検索 API

付録 C: Rational Asset Manager の REST API の使用方法

これがまさに Rational Asset Manager の REST API の使用方法です!REST API を使用することに乗り気でないとしたら、遠慮することなく WebUI を使ってください。REST API では間違いを起こしやすいので、十分な注意が必要です。

  1. 作業を容易にするために、USER、PASSWORD、OWNER、BASE_URL を設定します。

    イメージをストレージにエクスポートして、ストレージをマウントする」のセクションで、既にこれらの変数を定義してある場合は、このステップをスキップしてください。

    user@host$ export OWNER=<your.ibm.id@domain.tld>
    user@host$ read PASSWORD
    user@host$ export LOGIN="$OWNER:$PASSWORD"
    user@host$ export BASE_URL=\
    https://www-147.ibm.com/computecloud/enterprise/api/rest/20100331/
  2. 保存したイメージの ID を調べる必要があります。注: xmllint で --xpath 関数を使用するために、上記の例では新しいバージョンの libxml2 をインストールする必要がありました。ベスト・プラクティスとしては、一般ユーザーとしてパッケージをビルドすることをお勧めします。
    root@host# yum install tidy rpm-build rpmdevtools xz-devel python-devel
    root@host# rpm -ivh ftp://xmlsoft.org/libxml2/libxml2-2.8.0-1.src.rpm
    root@host# cd ~/rpmbuild/SPECS/
    root@host# rpmbuild -ba libxml2.spec
    root@host# rpm -Uvh /root/rpmbuild/RPMS/x86_64/libxml*

    XPath 式を使用して、私のプライベート・イメージを出力しました。

    user@host$ curl -s -k -H 'Accept: application/xml' \
    -u $LOGIN $BASE_URL/offerings/image \
    |xmllint --xpath \
    "//Image[Visibility=\"PRIVATE\" and Owner=\"$OWNER\"]/ID \
    | //Image[Visibility=\"PRIVATE\" and Owner=\"$OWNER\"]/Name" - \
    | tidy -xml -q
                            
    <ID>20059014</ID>
    <Name>RHEL-58-x32-COPPER-IMG1</Name>
    <ID>20059016</ID>
    <Name>RHEL-62-BRONZE</Name>
    <ID>20059017</ID>
    <Name>SLES-11SP1-X64 7/23/12 2:38 AM</Name>
  3. IMAGEID 変数を設定します。
    user@host$ export IMAGEID=<your.image.id>
  4. 固有のイメージを ID を取得して、{ } の中身を置き換えます。
    user@host$ export GUID=$(curl -s -u $LOGIN \
    $RAM_BASE_URL'/search?q=({owner:("'$OWNER'")id\:("'$IMAGEID'")})' \
    | xml_grep -t //GUID)
                            
    user@host$ export RAMGUID=$(echo $GUID \
    | sed -e 's/{/%7B/g' | sed -e 's/}/%7D/g')

    注: xml_grep や XPath ツールを使用できない場合は、grep、awk、sed などの標準 Linux ツールを使用することができます。以下は一例です。

    RAMGUID=%7B`curl -s -u $LOGIN \
    $RAM_BASE_URL'/search?q=({owner:("'$OWNER'")id\:("'$IMAGEID'")})' \
    | grep '/GUID' | awk -F{ '{print $2}' \
    | awk -F} '{print $1}'`%7D
  5. 編集するために XML を保存します。
    curl -s -u $LOGIN "$RAM_BASE_URL/assets/$RAMGUID/1.0" > $IMAGEID.xml
  6. 任意のテキスト・エディターを使って XML を編集します (vim $IMAGEID.xml)。「Copy Allowed (コピーの許可)」というテキストが含まれる //ram:attributeValue//dce:title 要素を探します。以下の value 要素を「Y」に変更します。
    <ram:attributeValue>
    <attribute rel="related" href="internal/attributes/classif/assetTypesSchema.xmi
    %23copy_allowed.xml">
    <dce:title>Copy Allowed</dce:title>
    </attribute>
    <value>Y</value>
    </ram:attributeValue>
  7. これで、以下のコマンドを実行してアセットを更新することができます。
    curl --header "Content-Type:application/xml" -X PUT -u $LOGIN -d @$IMAGEID.xml \
    "$RAM_BASE_URL/assets/$RAMGUID/1.0"

    注: アセットを再び更新する場合は、ステップ 5 で説明した手順を使って新しいバージョンのアセット XML をダウンロードする必要があります。


付録 D: SmarterCloud の REST API の使用方法

SmarertCloud の REST API を Linux の curl ツールと合わせて使用することで、WebUI やコマンド・ライン・ツールを使用した場合と同じアクションを実行することができます。

SmarterCloud の REST API: イメージをストレージにコピーする (ic-copy-to)

ic-copy-to.sh コマンド・ライン・ツールと同じコマンドを REST API を使用して実行することができます。Linux の場合、curl コマンドを使用します。以下はその一例です。USER、PASSWORD、IMAGE、STORAGE の値は、皆さんに固有の値に置き換えてください。

エクスポートされる変数は、この文書全体にわたって何度も使用されるので、API 呼び出し用に変数をエクスポートした端末のみを使用する必要があります。

user@host$ export LOGIN=<your.ibm.id@domain.tld:your.password>
user@host$ export BASE_URL=https://www-147.ibm.com/computecloud/enterprise/api/rest\
/20100331
user@host$ export IMAGE=<your.image.id>
user@host$ export STORAGE=<your.storage.id>
user@host$ curl -s -u $LOGIN -X PUT -d "imageId=$IMAGE" --location-trusted \
$BASE_URL/storage/$STORAGE

RAM で Copy Allowed フラグをセットしていないと、次のエラーを受け取ります。「Error 501: CopyTo feature is not allowed for this image

SmarterCloud の REST API: イメージがストレージにコピーされたことを確認する (ic-describe-volume)

REST API を使用して ic-describe-volume.sh コマンド・ライン・ツールと同じコマンドを実行することができます。Linux の場合、curl コマンドを使用します。以下に一例を記載します。USER、PASSWORD、IMAGE、STORAGE の値は、皆さんに固有の値に置き換えてください。

user@host$  curl -s -k -H 'Accept: application/xml' \
-u $LOGIN $BASE_URL/storage/$STORAGEID \
| tidy -xml -q | grep "State"

    <State>12</State>

「API User's Guide」の「Storage state code and meaning」セクションを参照してください。「12」は、コピー中であることを意味します。「取り外し済み」を意味する <State>4</State> になるまで待ってください。

SmarterCloud の REST API: 動的ディスク接続 (ic-attach-volume および ic-describe-volume)

まず、作業を容易にするために以下の変数を定義する必要があります。

user@host$ export INSTANCEID=<your.instance.id>
user@host$ export STORAGEID=<your.storage.id>
user@host$ export DATA="type=attach&storageID=${STORAGEID}"

ディスクを接続します。

user@host$ curl -s -u $LOGIN -X PUT -d "$DATA" --location-trusted \
$BASE_URL/instances/${INSTANCEID}

状態を確認します。

user@host$ curl -s -k -H 'Accept: application/xml' \
-u $LOGIN $BASE_URL/storage/$STORAGEID \
| tidy -xml -i -q | grep State

    <State>10</State>

上記の例では、状態が「接続中」であることを示す「10」になっています。状態が「5」になると、「接続済み」であるということを表し、「4」になると、「取り外し済み」であるということ、つまり接続に失敗したということを表しています。

参考文献

学ぶために

製品や技術を入手するために

議論するために

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Cloud computing, Linux
ArticleID=846121
ArticleTitle=アクセス不可能になったインスタンスを QEMU を使用してリカバリーする
publish-date=11222012