VFAT ファイル システムの種類が無効になった後、Azure Linux 仮想マシンの起動に失敗する
適用対象: ✔️ Linux VM
Note
この記事で参照されている CentOS は Linux ディストリビューションであり、EOL (End Of Life) に到達します。 適宜、使用と計画を検討してください。 詳細については、「 CentOS End Of Life ガイダンスを参照してください。
この記事では、仮想ファイル割り当てテーブル (VFAT) ファイル システムの種類を無効にした後に Azure Linux 仮想マシン (VM) を起動できない問題の解決策について説明します。
VFAT は、次のシナリオで必要です。
Azure 上の動作保証済み Linux ディストリビューション VM は、 /boot/efi ファイル システムをマウントします。
Linux Gen2 VM (UEFI ベース) には、 /boot/efi ファイル システムが必要ですが、Gen1 (BIOS ベース) Linux イメージに含まれています。
Azure Disk Encryption(ADE)を使用して、Azure Linux VM の OS ディスクとデータ ディスクの両方を暗号化します。
VFAT を無効にすると、Azure Linux VM の起動に失敗します。 いくつかの強化ツールにより、VFAT を無効にすることができます。 この種の問題を回避するには、VFAT がセキュリティ強化から除外され、有効になっていることを確認します。
前提条件
コンソールが有効になっており、Linux VM で機能していることを確認します。
ブートの問題を特定する方法
ブートの問題を特定するには、 AZ CLI または Azure portal を使用して、ブート診断ウィンドウまたはシリアル コンソール ウィンドウで VM のシリアル コンソール ログ出力を表示します。 VFAT が無効になっている場合は、次の問題が発生します。
/boot/efi のマウントに失敗しました
/boot/efiファイル システムのマウントに失敗すると、次の出力のうち 1 つ以上が表示されます。
出力 1
[[1;31mFAILED[0m] Failed to mount /boot/efi. See 'systemctl status boot-efi.mount' for details. [[1;33mDEPEND[0m] Dependency failed for Local File Systems. [[1;33mDEPEND[0m] Dependency failed for Relabel all filesystems, if necessary. [[1;33mDEPEND[0m] Dependency failed for Migrate local... structure to the new structure. [[1;33mDEPEND[0m] Dependency failed for Mark the need to relabel after reboot.
出力 2
[FAILED] Failed to mount /boot/efi. See 'systemctl status boot-efi.mount' for details. [DEPEND] Dependency failed for Local File Systems. [DEPEND] Dependency failed for Mark the need to relabel after reboot.
出力 3
[ 17.707983] ------------[ cut here ]------------ [ 17.714144] request_module fs-vfat succeeded, but still no fs? [ 17.714426] RPC: Registered named UNIX socket transport module. [ 17.721163] WARNING: CPU: 1 PID: 933 at fs/filesystems.c:275 get_fs_type+0xcd/0xe0 [ 17.738587] RPC: Registered udp transport module. [ 17.722103] Modules linked in: fat sunrpc(+) rdma_ucm ib_srpt ib_isert iscsi_target_mod target_core_mod intel_rapl_msr intel_rapl_common isst_if_mbox_msr isst_if_common ib_iser libiscsi nfit scsi_transport_iscsi ib_umad libnvdimm rdma_cm ib_ipoib iw_cm ib_cm kvm_intel kvm irqbypass mlx5_ib crct10dif_pclmul crc32_pclmul ib_uverbs ghash_clmulni_intel rapl pcspkr ib_core i2c_piix4 hv_balloon hv_utils joydev ip_tables xfs libcrc32c mlx5_core mlxfw tls pci_hyperv pci_hyperv_intf ata_generic sd_mod t10_pi sg hv_storvsc hv_netvsc hyperv_keyboard scsi_transport_fc hid_hyperv hyperv_fb ata_piix libata hv_vmbus crc32c_intel serio_raw dm_mod [ 17.766462] RPC: Registered tcp transport module. [ 17.722103] CPU: 1 PID: 933 Comm: mount Not tainted 4.18.0-305.17.1.el8_4.x86_64 #1 [ 17.722103] Hardware name: Microsoft Corporation Virtual Machine/Virtual Machine, BIOS 090008 12/07/2018 [ 17.722103] RIP: 0010:get_fs_type+0xcd/0xe0 [ 17.722103] Code: 5d 41 5c c3 80 3d 6a 7a 49 01 00 75 ec 48 89 da 44 89 e6 48 89 04 24 48 c7 c7 c8 47 ce b7 c6 05 50 7a 49 01 01 e8 6c 67 da ff <0f> 0b 48 8b 04 24 e9 66 ff ff ff 0f 1f 84 00 00 00 00 00 0f 1f 44 [ 17.722103] RSP: 0018:ffffabd68394fe70 EFLAGS: 00010282 [ 17.722103] RAX: 0000000000000000 RBX: ffffa04a1e6879e0 RCX: 0000000000000000 [ 17.722103] RDX: ffffa04a37d267a0 RSI: ffffa04a37d167c8 RDI: ffffa04a37d167c8 [ 17.722103] RBP: 0000000000000000 R08: 0000000000000000 R09: 0000000000000092 [ 17.722103] R10: 00000000ff000000 R11: ffffabd682fec020 R12: 0000000000000004 [ 17.722103] R13: ffffa04a1d80f920 R14: ffffa04a1e6879e0 R15: 0000000000000000 [ 17.722103] FS: 00007fb0630e1080(0000) GS:ffffa04a37d00000(0000) knlGS:0000000000000000 [ 17.722103] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 17.722103] CR2: 00007fb86bb7a0c0 CR3: 000000029bfe4004 CR4: 00000000003706e0 [ 17.722103] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [ 17.722103] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400 [ 17.722103] Call Trace: [ 17.722103] do_mount+0x1f2/0x950 [ 17.722103] ksys_mount+0xb6/0xd0 [ 17.722103] __x64_sys_mount+0x21/0x30 [ 17.722103] do_syscall_64+0x5b/0x1a0 [ 17.722103] entry_SYSCALL_64_after_hwframe+0x65/0xca [ 17.874253] RPC: Registered tcp NFSv4.1 backchannel transport module. [ 17.722103] RIP: 0033:0x7fb06211192e [ 17.722103] Code: 48 8b 0d 5d 15 2c 00 f7 d8 64 89 01 48 83 c8 ff c3 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f 1e fa 49 89 ca b8 a5 00 00 00 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d 2a 15 2c 00 f7 d8 64 89 01 48 [ 17.722103] RSP: 002b:00007fff02a92b78 EFLAGS: 00000246 ORIG_RAX: 00000000000000a5 [ 17.722103] RAX: ffffffffffffffda RBX: 00005626752f3460 RCX: 00007fb06211192e [ 17.722103] RDX: 00005626752f36e0 RSI: 00005626752f3700 RDI: 00005626752f53d0 [ 17.722103] RBP: 00007fb062ebe184 R08: 00005626752f3670 R09: 0000000000000003 [ 17.722103] R10: 00000000c0ed0000 R11: 0000000000000246 R12: 0000000000000000 [ 17.722103] R13: 00000000c0ed0000 R14: 00005626752f53d0 R15: 00005626752f36e0 [ 17.722103] ---[ end trace 910fa795ff1c6c89 ]--- [[0;1;31mFAILED[0m] Failed to mount /boot/efi. See 'systemctl status boot-efi.mount' for details.
ADE で暗号化された VM がルート ボリュームにアクセスできない
OS が暗号化され、VFAT が無効になっている VM が起動に失敗すると、次に示すように、対応する出力が表示されます。 システムがタイムアウトすると、シリアル コンソール ログの末尾に dracut または initramfs シェルが表示されます。
OS ディスクが暗号化され、VFAT が無効になっている Ubuntu VM:
[ 24.062228] dracut-initqueue[261]: +++ '[' -z 0 ']' [ 24.065039] dracut-initqueue[261]: + luksname=osencrypt [ 24.068026] dracut-initqueue[261]: + ask_passphrase=1 [ 24.070498] dracut-initqueue[261]: + '[' /dev/sda2 '!=' /dev/sda2 ']' [ 24.073528] dracut-initqueue[261]: + device=/dev/sda2 [ 24.076046] dracut-initqueue[261]: + numtries=1 [ 24.078410] dracut-initqueue[261]: + info 'luksOpen /dev/sda2 osencrypt' [ 24.081822] dracut-initqueue[261]: + check_quiet [ 24.084663] dracut-initqueue[261]: + '[' -z no ']' [ 24.087067] dracut-initqueue[261]: + '[' no '!=' yes ']' [ 24.089711] dracut-initqueue[261]: + echo 'luksOpen /dev/sda2 osencrypt' [ 24.092857] dracut-initqueue[261]: luksOpen /dev/sda2 osencrypt [ 24.095737] dracut-initqueue[261]: + ls '/mnt/azure_bek_disk/LinuxPassPhraseFileName*' [ 24.099506] dracut-initqueue[261]: ls: cannot access /mnt/azure_bek_disk/LinuxPassPhraseFileName*: No such file or directory [ 24.104460] dracut-initqueue[261]: + mkdir -p /mnt/azure_bek_disk/ [ 24.107648] dracut-initqueue[261]: + mount -L 'BEK VOLUME' /mnt/azure_bek_disk/ [ 24.111029] dracut-initqueue[261]: mount: unknown filesystem type 'vfat' [ 24.114456] dracut-initqueue[261]: ++ ls '/mnt/azure_bek_disk/LinuxPassPhraseFileName*' [ 24.118570] dracut-initqueue[261]: ls: cannot access /mnt/azure_bek_disk/LinuxPassPhraseFileName*: No such file or directory [ 24.124108] dracut-initqueue[261]: + cryptsetupopts='--header /osluksheader' [ 24.127630] dracut-initqueue[261]: + '[' -n '' -a '' '!=' none -a -e '' ']' [ 24.131265] dracut-initqueue[261]: + '[' 1 -eq 0 ']' [ 24.134614] dracut-initqueue[261]: + sleep 1 [ 24.817478] dracut-initqueue[261]: + info 'No key found for /dev/sda2. Will try 1 time(s) more later.' [ 24.823243] dracut-initqueue[261]: + check_quiet
OS ディスクが暗号化され、VFAT が無効になっている RHEL 7.x VM:
%G%G[[32m OK [0m] Found device Virtual_Disk BEK_VOLUME. Mounting /bek... [[1;31mFAILED[0m] Failed to mount /bek. See 'systemctl status bek.mount' for details.
OS ディスクが暗号化され、VFAT が無効になっている RHEL 8.x VM:
[ 11.592932] dracut-initqueue[470]: + systemctl start bek.mount [ 11.600362] dracut-initqueue[470]: Bus n/a: changing state UNSET → OPENING Mounting /bek... [ 11.611171] dracut-initqueue[470]: Bus n/a: changing state OPENING → AUTHENTICATING [ 11.616206] dracut-initqueue[470]: Executing dbus call org.freedesktop.systemd1.Manager StartUnit(bek.mount, replace) [ 11.622972] dracut-initqueue[470]: Bus n/a: changing state AUTHENTICATING → RUNNING [ 11.628048] dracut-initqueue[470]: Sent message type=method_call sender=n/a destination=org.freedesktop.systemd1 path=/org/freedesktop/systemd1 interface=org.freedesktop.systemd1.Manager member=StartUnit cookie=1 reply_cookie=0 signature=ss error-name=n/a error-message=n/a [ 11.639221] dracut-initqueue[470]: Got message type=method_return sender=org.freedesktop.systemd1 destination=n/a path=n/a interface=n/a member=n/a cookie=1 reply_cookie=1 signature=o error-name=n/a error-message=n/a[[0;1;31mFAILED[0m] Failed to mount /bek. See 'systemctl status bek.mount' for details.
一部の古いシステムでは、Azure シリアル コンソールに次のエラーが表示されることがあります。
不明なファイル システムの種類 'vfat' エラー。
この問題が発生したすべての VM は、最終的に dracut/initramfs でスタックし、シリアル コンソール ログの最後に表示されます。
RHEL/CentOS/SLES:
///lib/dracut/hooks/emergency/80-\x2fdev\x2fmapper\x2frootvg-rootlv.sh@1(source): warn '/dev/mapper/rootvg-rootlv does not exist' //lib/dracut-lib.sh@79(warn): echo 'Warning: /dev/mapper/rootvg-rootlv does not exist' Warning: /dev/mapper/rootvg-rootlv does not exist /bin/dracut-emergency@19(main): echo ... /bin/dracut-emergency@29(main): '[' -f /run/dracut/fsck/fsck_help_auto.txt ']' /bin/dracut-emergency@30(main): '[' -f /etc/profile ']' /bin/dracut-emergency@30(main): . /etc/profile //etc/profile@1(source): PS1='dracut:${PWD}# ' /bin/dracut-emergency@31(main): '[' -z 'dracut:${PWD}# ' ']' /bin/dracut-emergency@32(main): exec sh -i -l dracut:/#
Ubuntu:
Gave up waiting for root file system device. Common problems: - Boot args (cat /proc/cmdline) - Check rootdelay= (did the system wait long enough?) - Missing modules (cat /proc/modules; ls /dev) ALERT! /dev/mapper/osencrypt does not exist. Dropping to a shell! BusyBox v1.27.2 (Ubuntu 1:1.27.2-2ubuntu3.4) built-in shell (ash) Enter 'help' for a list of built-in commands. (initramfs)
ブートの問題を解決するには、 Online のトラブルシューティング または オフラインのトラブルシューティングに移動します。
Note
OS ディスクが暗号化されておらず、ADE を使用してデータ ファイル システムのみが暗号化されている場合、VFAT が無効になっているため、ADE で暗号化されたデータ ディスクのマウントに失敗します。 この場合、この問題を解決するには、 Online のトラブルシューティング または オフラインのトラブルシューティング の同じ手順に従います。
オンライン トラブルシューティング
ヒント
VFAT が無効になる前に VM の最近のバックアップがある場合は、 バックアップから VM を復元 ブートの問題を解決します。
シリアル コンソールは、この問題を解決するための最速の方法です。 これにより、システム ディスクを復旧 VM に提示しなくても、問題を直接修正できます。 ディストリビューションに必要な前提条件を満たしていることを確認します。 詳細については、「Linux 用の仮想マシンのシリアル コンソールを参照してください。
暗号化されていない VM が /boot/efi のマウントに失敗する
Azure シリアル コンソールを使用して、シングル ユーザー モードで VM を起動します。 詳細については、「シリアル コンソールを使用して GRUB とシングル ユーザー モードにアクセスする」を参照してください。
シングル ユーザー モードで VM を起動するには、GRUB メニュー レベルでブート プロセスを中断し、メイン カーネル エントリを編集して、
linux
で始まる GRUB 行にinit=/bin/bash
カーネル オプションを追加します。必要なすべてのファイル システムがマウントされ、ルートが読み取りおよび書き込みモードになっていることを確認します。
init=/bin/bash
カーネル オプションを使用してシステムを起動する場合は、次のコマンドを実行して、必要なファイル システムを準備します。mount -o rw,remount / mount -a
VFAT を再度有効にします。
システムを再起動します。
Note
VM が Gen1 であり、暗号化されていない場合は、Gen1 VM では/boot/efi
が必要ではないため/etc/fstab から /boot/efi
エントリをコメント アウトすることもできます。 詳細については、「 fstab エラーによる Linux VM の起動に関する問題のトラブルシューティングを参照してください。
ADE で暗号化された VM の起動に失敗する
OS ディスクが暗号化された VM:
OS ディスクが暗号化されている場合、Azure シリアル コンソールからこの問題のトラブルシューティングを行うことはできません。
/etc/fstab の問題により、暗号化されたデータ ディスクのみが含まれる VM の起動に失敗する:
VM データ ディスクのみが暗号化されている場合 (OS ディスクは暗号化されていません)、システムを起動するには、Azure シリアル コンソールを使用して、
nofail
マウント オプションを /etc/fstab シングル ユーザー モードから の対応するエントリに追加します。 詳細については、「 fstab エラーによる Linux VM の起動に関する問題のトラブルシューティングを参照してください。VM が起動したら、 VFAT を再度有効にして VM を再起動します。
オフライン トラブルシューティング
ヒント
VFAT が無効になる前に VM の最近のバックアップがある場合は、 バックアップから VM を復元 ブートの問題を解決します。
Azure シリアル コンソールが特定の VM で動作しない場合、またはサブスクリプションのオプションではない場合は、復旧/修復 VM を使用してこの問題のトラブルシューティングを行います。
暗号化されていない VM が /boot/efi のマウントに失敗する
vm 修復コマンドを使用して影響を受ける VM の OS ディスクのコピーがアタッチされた修復 VM を作成します。 chrootを使用して、修復 VM に OS ファイル システムのコピーをマウントします。
Note
または、Azure portalを使用して手動で復旧 VM を作成することもできます。 詳細については、「Azure portal で OS ディスクを復旧 VM に接続して Linux VM のトラブルシューティングを行う」を参照してください。
VFAT を再度有効にします。
VFAT が再び有効になった後、次のアクションを実行します。
chroot を終了し、復旧/修復 VM からファイル システムのコピーのマウントを解除します。
az vm repair restore
コマンドを実行して、修復された OS ディスクを VM の元の OS ディスクにスワップします。 詳細については、「 Azure 仮想マシンの修復コマンドを使用して Linux VM を修復するの手順 5 を参照してください。Azure シリアル コンソールを確認するか、VM に接続して、VM を起動できるかどうかを検証します。
Note
VM が Gen1 であり、暗号化されていない場合は、Gen1 VM では/boot/efi
が必要ではないため/etc/fstab から /boot/efi
エントリをコメント アウトすることもできます。 詳細については、「 fstab エラーによる Linux VM の起動に関する問題のトラブルシューティングを参照してください。
ADE で暗号化された VM の起動に失敗する
vm 修復コマンドを使用して影響を受ける VM の OS ディスクのコピーがアタッチされた修復 VM を作成します。
ADE を使用して VM を暗号化すると、 Azure VM 修復コマンド 暗号化されたファイル システムのロック解除とマウントが自動的に行われます。 暗号化されたファイル システムは、
/investigateroot/*
および/investigateboot
としてマウントされます。 chrootを使用して、修復 VM にサインインし、ファイル システムを目的のマウント ポイントに再マウントできます。Note
または、Azure portal を使用し、VM 作成時に暗号化された OS ディスクのコピーをアタッチすることで、手動で復旧 VM を作成することもできます。 詳細については、「Azure portal で OS ディスクを復旧 VM に接続して Linux VM のトラブルシューティングを行う」を参照してください。
VFAT を再度有効にします。
VFAT が再び有効になった後、次のアクションを実行します。
chroot を終了し、復旧/修復 VM からファイル システムのコピーのマウントを解除します。
az vm repair restore
コマンドを実行して、修復された OS ディスクを VM の元の OS ディスクにスワップします。 詳細については、「 Azure 仮想マシンの修復コマンドを使用して Linux VM を修復するの手順 5 を参照してください。Azure シリアル コンソールを確認するか、VM に接続して、VM を起動できるかどうかを検証します。
VFAT を再度有効にする
次のコマンドを実行して、VFAT を無効にするファイルと対応する行番号を特定します。
grep -nr vfat /etc/modprobe.d/
対応するファイルを変更し、VFAT エントリをコメント アウトまたは削除します。 最も一般的なエントリは、
install vfat /bin/true
です。vi /etc/modprobe.d/disable.conf
Note
disable.conf
を、VFAT が無効になっている対応するファイル名に置き換えます。次の対応するコマンドを使用して、initramfs ファイルを再生成します。
Azure シリアル コンソールからコマンドを実行します。
RHEL/CentOS/Oracle Linux 7/8
dracut -f /boot/initramfs-$(uname -r).img $(uname -r)
SLES 12/15
dracut -f /boot/initrd-$(uname -r) $(uname -r)
Ubuntu 18.04
mkinitramfs -k -o /boot/initrd.img-$(uname -r)
修復/復旧 VM からコマンドを実行します。
重要
オフラインのトラブルシューティングの手順 1 に従いこれらのコマンドが chroot 内で実行されていることを確認します。
RHEL/CentOS/Oracle Linux 7/8
dracut -f /boot/initramfs-3.10.0-1160.59.1.el7.x86_64.img 3.10.0-1160.59.1.el7.x86_64
重要
3.10.0-1160.59.1.el7.x86_64
を対応するカーネル バージョンに置き換えます。SLES 12/15
dracut -f /boot/initrd-5.3.18-150300.38.53-azure 5.3.18-150300.38.53-azure
重要
5.3.18-150300.38.53-azure
を対応するカーネル バージョンに置き換えます。Ubuntu 18.04
mkinitramfs -k -o /boot/initrd.img-5.4.0-1077-azure
重要
5.4.0-1077-azure
を対応するカーネル バージョンに置き換えます。
次のステップ
特定のブート エラーが VFAT の無効な問題でない場合は、 Azure Linux 仮想マシンのブート エラーをトラブルシューティングする方法 を参照してください。
お問い合わせはこちらから
質問がある場合やヘルプが必要な場合は、サポート要求を作成するか、Azure コミュニティ サポートにお問い合わせください。 Azure フィードバック コミュニティに製品フィードバックを送信することもできます。