コンテナの移行準備

Refers to:

  • Plesk=Linux=

Created:

2016-12-12 03:48:15 UTC

Modified:

2016-12-21 20:32:45 UTC

0

Was this article helpful?


Have more questions?

リクエストを送信

コンテナの移行準備

情報

この記事に従って、移行中に発生する問題を予防することができます。移行に関連する問題の多くは、OS テンプレートを最新に維持し、すべてのアプリケーションと OS の EZ テンプレートに有効なリポジトリを用意することで回避可能です。この解決策は、既に移行済みのコンテナにも適用できます。

症状

移行後にコンテナが起動しません。以下のようなエラーが表示されます。

~# vzctl start 102
Starting the Container ...
Container is mounted
Setting permissions 20002 dev 0x7d00
Set up ioprio: 4
Adding offline management to Container(1): 4643 8443
Adding IP addresses: 10.20.30.40
Error: Unable to execute bash: No such file or directory
Container is unmounted
Failed to start the Container

この他、一部のディレクトリでファイルのプロパティを表示できないなどの症状もあります。

CT-102-bash-4.2# ls -al /usr/bin/ | grep '\\?'
ls: cannot access /usr/bin/mailq: No such file or directory
ls: cannot access /usr/bin/hoststat: No such file or directory
ls: cannot access /usr/bin/praliases: No such file or directory
ls: cannot access /usr/bin/purgestat: No such file or directory
ls: cannot access /usr/bin/newaliases: No such file or directory
?????????? ? ? ? ? ? hoststat
?????????? ? ? ? ? ? mailq
?????????? ? ? ? ? ? newaliases
?????????? ? ? ? ? ? praliases
?????????? ? ? ? ? ? purgestat
CT-12264-bash-4.2#

これにより、SSH などの重要なサービスの起動が影響を受ける可能性があります。

# /etc/rc.d/init.d/sshd restart
Stopping sshd: [FAILED]
Starting sshd: /usr/sbin/sshd: error while loading shared libraries: libpam.so.0: cannot open shared object file: No such file or directory
[FAILED]

この場合、マウント済み/起動済みのコンテナに対して以下のコマンドを実行すると、例えば find: ...: No such file or directory のような出力が返されます。

~# find /vz/root/$CTID -xdev -ls >/dev/null

("$CTID" は実際のコンテナの ID に置き換えてください。)

解決策

移行を行う前に、移行元と移行先のハードウェアノードおよび移行対象のコンテナの準備をしてください。

  1. SCAN_PRIVATE を "yes" に設定し、コンテナのプライベートエリアからの既存のリンクに基づいて Virtuozzo パッケージ管理ツールによってコンテナにインストールされたすべてのパッケージ(およびそのバージョン)が vzpackages ファイルにリストされるようにします。両ノードで /etc/vztt/vztt.conf を編集します。

    ~# grep SCAN_PRIVATE /etc/vztt/vztt.conf 
    #SCAN_PRIVATE="yes"
    ~# sed -i 's/#SCAN_PRIVATE/SCAN_PRIVATE/' /etc/vztt/vztt.conf
    ~# grep SCAN_PRIVATE /etc/vztt/vztt.conf
    SCAN_PRIVATE="yes"

    注: このオプションを使用すると、移行の処理時間が長期化します。移行を実行する前に、再びコメントアウトすることをお勧めします。

  2. 移行するコンテナのパッケージを同期します。

    ~# vzpkg sync_vzpackages $CTID

    ("$CTID" は実際のコンテナ ID に置き換えます。)

  3. また、このステップの前に移行が失敗した場合は、移行済みのコンテナに対して vzpkg repair を実行すると有用な場合があります。通常、このコマンドは、移行中に自動的に実行されます。

    ~# vzpkg repair /vz/private/$CT_ID /etc/sysconfig/vz-scripts/$CTID.conf

    手順 3 で以下のエラーが返される場合があります。

    Error: The next package(s) are not available

    この場合、リストされたパッケージはテンプレートエリアに存在せず、構成済みリポジトリにもありません。このエラーは、これらのパッケージの OS リリースが古いことに起因します。

    例えば、コンテナが centos-5-x86_64 テンプレートをベースにしているとします。

    ~# vzpkg list 113
    centos-5-x86_64 2012-04-16 15:13:10

    エラーは以下のようになります。

    Error: The next package(s) are not available:
    samba-swat.x86_64 0:3.0.33-3.29.el5_5
    samba-common.x86_64 0:3.0.33-3.29.el5_5
    glibc-common.x86_64 2.5-49.el5_5.4
    openldap.x86_64 2.3.43-12.el5_5.2
    krb5-libs.i386 1.6.1-36.el5_5.5
    krb5-libs.x86_64 1.6.1-36.el5_5.5
    nss.x86_64 3.12.6-2.el5.centos
    glibc.i686 2.5-49.el5_5.4
    nscd.x86_64 2.5-49.el5_5.4
    samba.x86_64 0:3.0.33-3.29.el5_5
    dhclient.x86_64 12:3.0.5-23.el5_5.1
    device-mapper-multipath.x86_64 0.4.7-34.el5_5.4

    上記のエラーで存在しないとされたパッケージは、すべて Centos 5.5 リリースのものです(パッケージバージョンに el5_5 と付いていることでわかります)。

    Centos 5.5 リポジトリを追加します(ほかの CentOS リポジトリも同じ方法で追加できます。ただし、"5.5" を該当するリリース ID に置き換えてください)。

    ~# echo http://vault.centos.org/5.5/os/x86_64 >> /vz/template/centos/5/x86_64/config/os/default/repositories
    ~# echo http://vault.centos.org/5.5/updates/x86_64 >> /vz/template/centos/5/x86_64/config/os/default/repositories

    注: リストに多数のリポジトリが含まれていると、メタデータの更新(24 時間の失効タイムアウト後に毎回実行される)が完了するまで時間がかかります。移行が完了した後は、追加リポジトリを削除しておくことをお勧めします。

    リポジトリの追加/削除後、サーバで EZ OS テンプレートのメタデータを更新します。

    ~# vzpkg update metadata centos-5-x86_64 -r

    これで、 vzpkg repair で必要なパッケージが検出できるようになります。

    一部のパッケージにはリリース ID が含まれません。このようなパッケージでは、使用可能なすべてのリポジトリを手動でチェックする必要があります。そのようなパッケージには、 httpd mod_ssl があります。

    .el5_5.2 バージョンに .2 のようなサフィックスが付いている場合、このバージョンはこのリリースのアップデートとしてリリースされたものです。

    注: 上記の手順は、EZ OS テンプレートをベースにしたコンテナがある Virtuozzo、Virtuozzo hypervisor 5.0、Virtuozzo containers for Linux 4.6、4.7 が対象となります。 旧バージョンについては、Virtuozzo hypervisor 4.0(最新リリース)および Virtuozzo containers 4.0(4.0.0-520 以降)のみで有効です。 vzpkg repair コマンドを使用できるのは、該当する OS テンプレートをベースに新規コンテナを作成できる場合のみです。

  4. 場合によっては、ステップ 3 で収集された存在しないパッケージが、どのミラーにも見つからない場合があります。この場合、存在しないファイルを移行元ノードからコピーします。

    ~# rsync -a --ignore-existing --rsh="ssh" root@${SOURCE_NODE}:/vz/template/centos/5/x86_64/ root@${DESTINATION_NODE}:/vz/template/centos/5/x86_64/

    注: このコマンドで ignore-existing オプションは必須です。実行中のコンテナで既に使用されているファイルは更新しなければならないためです。

他にご質問がございましたら、リクエストを送信してください
ログインしてコメントを残してください。