次の方法で共有


データ ディスクを Linux 仮想マシンに接続する方法

重要

クラシック VM は 2023 年 3 月 1 日に廃止される予定です。

ASM の IaaS リソースを使用する場合は、すぐに移行の計画を開始し、2023 年 3 月 1 日までに完了してください。ASM の IaaS リソースを使用する場合は、すぐに移行の計画を開始し、2023 年 3 月 1 日までに完了してください。 Azure Resource Manager の多数の機能強化を活用するために、早急に切り替えを行うことをお勧めします。

詳細については、「2023 年 3 月 1 日までに IaaS リソースを Azure Resource Manager に移行する」を参照してください。

Note

Azure には、リソースの作成と操作に関して、2 種類のデプロイ モデルがあります。Resource Manager とクラシックです。 この記事では、クラシック デプロイ モデルの使用方法について説明します。 最新のデプロイメントでは、リソース マネージャー モデルを使用することをお勧めします。 Resource Manager デプロイ モデルを使用してデータ ディスクを接続する方法を参照してください。

空のディスクと、データが含まれているディスクのどちらも Azure VM に接続できます。 どちらの種類のディスクも、Azure ストレージ アカウントの .vhd ファイルです。 Linux マシンへのディスクの追加では、ディスクを接続した後、初期化とフォーマットを行って使用できるようにする必要があります。 この記事では、空のディスクと、データが含まれているディスクの両方を Azure VM に接続し、新しいディスクを初期化してフォーマットする方法について詳しく説明します。

Note

仮想マシンのデータを格納するには、1 つ以上の個別のディスクを使用することをお勧めします。 Azure の仮想マシンを作成するとき、オペレーティング システム ディスクと一時ディスクが表示されます。 永続データの格納に一時ディスクを使用しないでください。 名前が示すとおり、D ドライブは一時的なストレージのみを提供します。 Azure Storage に配置されていないため、冗長性やバックアップは提供しません。 一時ディスクは通常、Azure Linux Agent によって管理され、/mnt/resource (または Ubuntu イメージでは /mnt) に自動的にマウントされます。 一方で、データ ディスクには Linux カーネルによって /dev/sdc のような名前が付けられる場合があります。その場合、このリソースをパーティション分割し、フォーマットしてからマウントする必要があります。 詳細については、「Azure Linux エージェント ユーザー ガイド」を参照してください。

ディスクの詳細については、仮想マシン用のディスクと VHD に関するページを参照してください。

Attach an empty disk

  1. Azure クラシック CLI を開いて、Azure サブスクリプションに接続します。 Azure サービス管理モード (azure config mode asm) であることを確認します。

  2. 次の例に示すように「azure vm disk attach-new」と入力し、新しいディスクを作成して接続します。 myVM は Linux 仮想マシンの名前で置き換え、ディスクのサイズを GB 単位で指定します (この例では 100 GB)。

    azure vm disk attach-new myVM 100
    
  3. データ ディスクが作成されて接続されると、次の例に示すように azure vm disk list <virtual-machine-name> の出力に表示されます。

    azure vm disk list TestVM
    

    出力は次の例のようになります。

    info:    Executing command vm disk list
    
    * Fetching disk images
    * Getting virtual machines
    * Getting VM disks
     data:    Lun  Size(GB)  Blob-Name                         OS
     data:    ---  --------  --------------------------------  -----
     data:         30        myVM-2645b8030676c8f8.vhd  Linux
     data:    0    100       myVM-76f7ee1ef0f6dddc.vhd
     info:    vm disk list command OK
    

既存のディスクの接続

既存のディスクを接続する場合は、ストレージ アカウントで利用できる .vhd を持っている必要があります。

  1. Azure クラシック CLI を開いて、Azure サブスクリプションに接続します。 Azure サービス管理モード (azure config mode asm) であることを確認します。

  2. 接続する VHD が Azure サブスクリプションに既にアップロードされているかどうかを確認します。

    azure vm disk list
    

    出力は次の例のようになります。

     info:    Executing command vm disk list
    
    * Fetching disk images
     data:    Name                                          OS
     data:    --------------------------------------------  -----
     data:    myTestVhd                                     Linux
     data:    TestVM-ubuntuVMasm-0-201508060029150744  Linux
     data:    TestVM-ubuntuVMasm-0-201508060040530369
     info:    vm disk list command OK
    
  3. 使用するディスクが見つからない場合は、azure vm disk create または azure vm disk upload を使用してローカル VHD をサブスクリプションにアップロードできます。 disk create の例は、次のようになります。

    azure vm disk create myVhd .\TempDisk\test.VHD -l "East US" -o Linux
    

    出力は次の例のようになります。

    info:    Executing command vm disk create
    + Retrieving storage accounts
    info:    VHD size : 10 GB
    info:    Uploading 10485760.5 KB
    Requested:100.0% Completed:100.0% Running:   0 Time:   25s Speed:    82 KB/s
    info:    Finishing computing MD5 hash, 16% is complete.
    info:    https://mystorageaccount.blob.core.windows.net/disks/myVHD.vhd was
    uploaded successfully
    info:    vm disk create command OK
    

    azure vm disk upload を使用して、特定のストレージ アカウントに VHD をアップロードすることもできます。 Azure 仮想マシン データ ディスクの管理用コマンドの詳細については、こちらを参照してください。

  4. ここで、必要な VHD を仮想マシンに接続します。

    azure vm disk attach myVM myVhd
    

    myVM は仮想マシンの名前に、myVHD は目的の VHD に置き換えてください。

  5. ディスクが仮想マシンに接続されたことを確認するには、 azure vm disk list <virtual-machine-name>を使用します。

    azure vm disk list myVM
    

    出力は次の例のようになります。

     info:    Executing command vm disk list
    
    * Fetching disk images
    * Getting virtual machines
    * Getting VM disks
     data:    Lun  Size(GB)  Blob-Name                         OS
     data:    ---  --------  --------------------------------  -----
     data:         30        TestVM-2645b8030676c8f8.vhd  Linux
     data:    1    10        test.VHD
     data:    0    100        TestVM-76f7ee1ef0f6dddc.vhd
     info:    vm disk list command OK
    

Note

データ ディスクを追加した後、仮想マシンがストレージとしてそのディスクを使用できるように、仮想マシンにログオンしてディスクを初期化する必要があります (ディスクを初期化する方法の詳細については次の手順を参照)。

Linux での新しいデータ ディスクの初期化

  1. VM に SSH 接続します。 詳細については、「Linux を実行する仮想マシンにログオンする方法」を参照してください。

  2. 次に、データ ディスクの初期化のためにデバイスの ID を検索する必要があります。 この作業を実行する 2 つの方法があります。

    a) 次のコマンドのように、ログの SCSI デバイスを検索します。

    sudo grep SCSI /var/log/messages
    

    最新の Ubuntu ディストリビューションの場合は、/var/log/messages へのログ記録が既定で無効になっていることがあるため、sudo grep SCSI /var/log/syslog の使用が必要になる場合があります。

    表示されたメッセージで、最後に追加されたデータ ディスクの識別子を確認できます。

    ディスク メッセージに取得

    OR

    b) lsscsi コマンドを使用してデバイス ID を調べます。lsscsi は、yum install lsscsi (Red Hat ベースのディストリビューション) または apt-get install lsscsi (Debian ベースのディストリビューション) のいずれかでインストールできます。 検索対象のディスクは、その LUN ( 論理ユニット番号) で検索できます。 たとえば、ディスクに割り当てた LUN は、azure vm disk list <virtual-machine> から以下のように簡単に確認することができます。

    azure vm disk list myVM
    

    次のように出力されます。

    info:    Executing command vm disk list
    + Fetching disk images
    + Getting virtual machines
    + Getting VM disks
    data:    Lun  Size(GB)  Blob-Name                         OS
    data:    ---  --------  --------------------------------  -----
    data:         30        myVM-2645b8030676c8f8.vhd  Linux
    data:    0    100       myVM-76f7ee1ef0f6dddc.vhd
    info:    vm disk list command OK
    

    このデータを、同じサンプル仮想マシンに対する lsscsi の出力と比較します。

    [1:0:0:0]    cd/dvd  Msft     Virtual CD/ROM   1.0   /dev/sr0
    [2:0:0:0]    disk    Msft     Virtual Disk     1.0   /dev/sda
    [3:0:1:0]    disk    Msft     Virtual Disk     1.0   /dev/sdb
    [5:0:0:0]    disk    Msft     Virtual Disk     1.0   /dev/sdc
    

    各行のタプルの最後の番号は lun です。 詳細については、「 man lsscsi 」を参照してください。

  3. プロンプトで、次のコマンドを入力して、デバイスを作成します。

    sudo fdisk /dev/sdc
    
  4. 表示されるプロンプトで「n」と入力すると、パーティションが作成されます。

    デバイスの作成

  5. 求められたら、「 p 」と入力して、パーティションをプライマリ パーティションにします。 「 1 」と入力して最初のパーティションにし、Enter キーを押してシリンダーの既定値をそのまま使用します。 システムによっては、シリンダーではなく、最初と最後のセクターの既定値が表示される場合があります。 これらの既定値をそのまま使用することもできます。

    Create partition

  6. p 」を入力すると、パーティション分割されたディスクに関する詳細情報が表示されます。

    ディスク情報の表示

  7. w 」と入力すると、ディスクの設定が書き込まれます。

    Write the disk changes

  8. これで、新しいパーティションにファイル システムを作成できます。 パーティション番号をデバイス ID に追加します (次の例では /dev/sdc1)。 次の例では、ext4 パーティションを /dev/sdc1 に作成します。

    sudo mkfs -t ext4 /dev/sdc1
    

    Create file system

    Note

    SuSE Linux Enterprise 11 システムでは、ext4 ファイル システムへのアクセスは読み取り専用のみサポートされます。 これらのシステムには ext4 ではなく ext3 として新しいファイル システムの書式設定することをお勧めします。

  9. 次のように、新しいファイル システムをマウントするディレクトリを作成します。

    sudo mkdir /datadrive
    
  10. 最後に、次のように、ドライブをマウントできます。

    sudo mount /dev/sdc1 /datadrive
    

    これで、データ ディスクを /datadriveとして使用する準備ができました。

    ディレクトリの作成とディスクのマウント

  11. 新しいドライブを /etc/fstab に追加します。

    再起動後にドライブを自動的に再マウントするために、そのドライブを /etc/fstab ファイルに追加する必要があります。 また、ドライブを参照する際に、デバイス名 (つまり /dev/sdc1) だけではなく、UUID (汎用一意識別子) を /etc/fstab で使用することもお勧めします。 UUID を使用すると、OS が起動中にディスク エラーを検出した場合に、間違ったディスクが特定の場所にマウントされて残りのデータ ディスクにそれらのデバイス ID が割り当てられるのを防ぐことができます。 新しいドライブの UUID を検索するには、 blkid ユーティリティを使用します。

    sudo -i blkid
    

    出力は次の例のようになります。

    /dev/sda1: UUID="11111111-1b1b-1c1c-1d1d-1e1e1e1e1e1e" TYPE="ext4"
    /dev/sdb1: UUID="22222222-2b2b-2c2c-2d2d-2e2e2e2e2e2e" TYPE="ext4"
    /dev/sdc1: UUID="33333333-3b3b-3c3c-3d3d-3e3e3e3e3e3e" TYPE="ext4"
    

    Note

    /etc/fstab ファイルを不適切に編集すると、システムが起動できなくなる可能性があります。 編集方法がはっきりわからない場合は、このファイルを適切に編集する方法について、ディストリビューションのドキュメントを参照してください。 編集する前に、/etc/fstab ファイルのバックアップを作成することもお勧めします。

    次に、テキスト エディターで /etc/fstab ファイルを開きます。

    sudo vi /etc/fstab
    

    この例では、前の手順で作成した新しい /dev/sdc1 デバイスに対して UUID 値を使用し、マウント ポイントとして /datadrive を使用します。 次の行を /etc/fstab ファイルの末尾に追加します。

    UUID=33333333-3b3b-3c3c-3d3d-3e3e3e3e3e3e   /datadrive   ext4   defaults,nofail   1   2
    

    または、SuSE Linux に基づいたシステムでは、わずかに異なる形式を使用する必要がある場合があります。

    /dev/disk/by-uuid/33333333-3b3b-3c3c-3d3d-3e3e3e3e3e3e   /datadrive   ext3   defaults,nofail   1   2
    

    注意

    nofail オプションを使用すると、ファイル システムが壊れているか、ブート時にディスクが存在しない場合でも VM が起動されるようになります。 このオプションがないと、「 FSTAB エラーが原因で Linux VM に SSH 接続できない」の説明に従って動作が発生する可能性があります。

    これで、ファイル システムが正しくマウントされるかどうかをテストできます。そのためには、ファイル システムをマウント解除してから、もう一度マウントします。つまり、前の手順で作成したサンプルのマウント ポイント /datadrive を使用します。

    sudo umount /datadrive
    sudo mount /datadrive
    

    mount コマンドでエラーが発生した場合、/etc/fstab ファイルの構文が正しいかどうかを確認してください。 追加のデータ ドライブやパーティションを作成する場合は、それらも /etc/fstab に個別に入力します。

    次のコマンドを使用して、ドライブを書き込み可能にします。

    sudo chmod go+w /datadrive
    

    注意

    この後、fstab を編集せずにデータ ディスクを削除すると VM は起動できません。 これが頻繁に発生する場合、大部分のディストリビューションでは nofail または nobootwait fstab オプションが提供されます。これによって、起動時にディスクのマウントが失敗してもシステムを起動することができます。 これらのパラメーターの詳細については、使用しているディストリビューションのドキュメントを参照してください。

Azure における Linux の TRIM/UNMAP サポート

一部の Linux カーネルでは、ディスク上の未使用ブロックを破棄するために TRIM/UNMAP 操作がサポートされます。 これらの操作は主に、Standard Storage で、削除されたページが無効になり、破棄できるようになったことを Azure に通知するときに役立ちます。 ページを破棄すると、サイズの大きいファイルを作成して削除する場合のコストを節約できます。

Linux VM で TRIM のサポートを有効にする方法は 2 通りあります。 通常どおり、ご使用のディストリビューションで推奨される方法をお問い合わせください。

  • 次のように、/etc/fstabdiscard マウント オプションを使用します。

    UUID=33333333-3b3b-3c3c-3d3d-3e3e3e3e3e3e   /datadrive   ext4   defaults,discard   1   2
    
  • 場合によっては、discard オプションがパフォーマンスに影響する可能性があります。 または、 fstrim コマンドを手動でコマンド ラインから実行するか、crontab に追加して定期的に実行することができます。

    Ubuntu

    sudo apt-get install util-linux
    sudo fstrim /datadrive
    

    RHEL/CentOS

    sudo yum install util-linux
    sudo fstrim /datadrive
    

トラブルシューティング

データ ディスクを Linux VM に追加するときに、LUN 0 にディスクが存在しないと、エラーが発生することがあります。 azure vm disk attach-new コマンドを使用して手動でディスクを追加していて、Azure プラットフォームに適切な LUN を判定させるのではなく、LUN を指定する (--lun) 場合は、LUN 0 にディスクが既に存在するようにするか、今後存在するようにしてください。

lsscsiからの出力のスニペットを示す次の例を考えてみましょう。

[5:0:0:0]    disk    Msft     Virtual Disk     1.0   /dev/sdc 
[5:0:0:1]    disk    Msft     Virtual Disk     1.0   /dev/sdd 

2 つのデータ ディスクは LUN 0 と LUN 1 に存在します (lsscsi の出力詳細の最初の列は [host:channel:target:lun] です)。 両方のディスクには、VM 内からアクセスできる必要があります。 LUN 1 で追加対象の最初のディスク、LUN 2 で 2 番目のディスクを手動で指定した場合は、VM 内からこれらのディスクを正しく見ることはできません。

Note

これらの例では Azure の host 値は 5 ですが、選択したストレージの種類によっては変わる可能性があります。

このディスクの動作は Azure の問題ではなく、Linux カーネルが SCSI の仕様に従う仕組みです。 Linux カーネルが接続されているデバイスの SCSI バスをスキャンするときに、デバイスが LUN 0 で検出される必要があります。システムが他のデバイスのスキャンを続行できるようにするためです。 そのため、次のようにしてください。

  • データ ディスクを追加した後に lsscsi の出力を確認し、LUN 0 にディスクがあることを確認します。
  • ディスクが VM 内に正しく表示されない場合は、ディスクが LUN 0 に存在することを確認します。

次の手順

以下の記事で、Linux VM の使用方法について詳しい情報を得ることができます。