Linuxリカバリ:FSTABエラーのためにLinux VMにSSHできません。
fstabの構文が正しくない場合、およびデータディスクが欠落している(VMに接続されていない)場合やその他の理由で、VMが正常に起動しなくなることがあります。
Linuxでは、通常、fstabで次のフォーマットを使用してscsiデバイスをマウントできます。
/ dev / sdc1 / data ext4デフォルト0 0
しかし、クラウド環境では毎回同じscsi IDを保証する方法がないため、UUIDを使用して確実にディスクをマウントすることが最善の方法です。フォーマットは次のように近いでしょう。
UUID = "8be9efc9-61e7-4cc7-806s6-2d014745ae99" / data ext4デフォルト0 0
Linux VMにデータディスクを正しく追加する方法の詳細については、次の記事を参照してください。
Linux仮想マシンにデータディスクを接続する方法
ブートしていないLinux VMからブート診断を調べた後、
V 仮想マシン> VMNAME>すべての設定>ブート診断
以下の4つの例に似たメッセージが表示されます。
(1)UUIDの代わりにscsi idでマウントされていたディスクの例:
[K [[1; 31m TIME [0m]デバイスdev-incorrect.deviceを待ってタイムアウトしました。
[[1; 33mDEPEND [0m] / dataの依存関係が失敗しました。
[[1; 33mDEPEND [0m]ローカルファイルシステムの依存関係が失敗しました。
...
緊急モードへようこそ! ログイン後、 "journalctl -xb"をビューシステムのログに、 "systemctl reboot"を再起動する、 "systemctl default"を入力してデフォルトモードに再起動します。
保守のためのrootパスワードを与える
(またはControl + Dキーを押して続行します)。
(2)CentOS上のデバイスが見つからない場合の例
ファイルシステムのチェック中...
util-linuxからのfsck 2.19.1
すべてのファイルシステムをチェックしています。
/ dev / sdc1:存在しないデバイス(このデバイスをスキップするために "nofail" fstabオプションを使用することができます)
/ dev / sdd1:存在しないデバイス(このデバイスをスキップするために "nofail" fstabオプションを使用することができます)
/ dev / sde1:存在しないデバイス(このデバイスをスキップするために "nofail" fstabオプションを使用することができます)
[/sbin/fsck.ext3(1) - / CODE] sck.ext3 -a / dev / sdc1
fsck.ext3:/ dev / sdc1を開こうとしている間、そのようなファイルやディレクトリはありません
/ dev / sdc1:
スーパーブロックを読み取ることができなかったか、正しいext2を記述していません
ファイルシステム。 デバイスが有効で、本当にext2が含まれている場合
ファイルシステム(スワップやufsなど)ではなく、スーパーブロック
壊れていて、代わりのスーパーブロックでe2fsckを実行しようとするかもしれません:
e2fsck -b 8193 <device>
[/sbin/fsck.xfs(1) - / GLUSTERDISK] fsck.xfs -a / dev / sdd1
/sbin/fsck.xfs:/ dev / sdd1は存在しません。
[/sbin/fsck.ext3(1) - / DATATEMP] fsck.ext3 -a / dev / sde1 fsck.ext3:/ dev / sde1を開こうとしているときにそのようなファイルやディレクトリがありません
(3)fstabの設定ミスやVMがもはやVMに接続されていないためにVMが起動できないことを示す例
/ var / lib / mysqlのディスクドライブがまだ準備されていないか、存在しません。
待つか、Sキーを押してマウントをスキップするか、Mキーを押して手動リカバリを実行します
(4)不正なUUIDを示すシリアルログの例
ファイルシステムの確認
すべてのファイルシステムをチェックしています。
[/sbin/fsck.ext4(1) - /] fsck.ext4 -a / dev / sda1
/ dev / sda1:クリーン、70442/1905008ファイル、800094/7608064ブロック
[/sbin/fsck.ext4(1) - / datadrive] fsck.ext4 -a UUID = "85171d07-215e-4fc7-a50a-bf09c7f2d2d9"
fsck.ext4: 'UUID = "85171d07-215e-4fc7-a50a-bf09c7f2d2d9"を解決できません
[FAILED
***ファイルシステムチェック中にエラーが発生しました。
***あなたをシェルに落とす。 システムが再起動します。
***あなたがシェルを離れるとき。
***警告 - SELinuxはアクティブです
***システム回復のためのセキュリティ実施を無効にする。
*** 'setenforce 1'を実行して再び有効にします。
タイプ= 1404監査(1428047455.949:4):強制= 0 old_enforcing = 1 auid = 4294967295 ses = 4294967295
保守のためのrootパスワードを与える
(またはControl + Dキーを押して続行します)。
VMを通常の状態に戻すには、アクセスできないVMを削除し、OSDiskを保持し、アクセスできないVMと同じLinuxディストリビューションとバージョンを使用して新しいリカバリVMを配備する必要があります。
注 :回復プロセスの手順を実行する前に、アクセスできないVMからVHDのバックアップを作成することを強くお勧めします 。https://storageexplorer.com で入手可能なMicrosoft Storage Explorerを使用してVHDのバックアップを作成できます。
手順は以下のとおりです。
A =元のVM(アクセスできないVM)
B =新しいVM(新しいリカバリVM)
Azure Portal経由でVM Aを停止する
Resource Manager VMでは、削除する前に現在のVM情報を保存することをお勧めします
- Azure CLI: azure vm show ResourceGroupName LinuxVmName> ORIGINAL_VM.txt
- Azure PowerShell: Get-AzureRmVM -ResourceGroupName $ rgName -Name $ vmName
VMを削除するが、「 接続されたディスクを保持する」を選択する
注: アタッチされたディスクを保持するオプションは、従来のデプロイメントでのみ使用できます。リソースマネージャでは、VMを削除するとデフォルトでOSDiskが常に保持されます。リースがクリアされたら、Azureポータル、仮想マシン、「 B 」、「 ディスクの接続 」を介して、 AからVM Bにデータディスクを接続します
VM " B "では、最終的にディスクが接続され、マウントすることができます。
VM " B "のマウントするドライブ名を探してください。それぞれのLinuxは少し異なります。
- grep SCSI /var/log/kern.log(ubuntu、debian ) grep SCSI / var / log / messages (centos、suse、oracle、redhat)
マウントされたディスクをmountpoint / rescueにマウントするdf -h
mkdir /レスキューRed Hat 7.2+の場合 mount -o nouuid / dev / sdc2 / rescueCentOS 7.2以降
mount -o nouuid / dev / sdc1 / rescueDebian 8.2+、Ubuntu 16.04+、SUSE 12 SP4 + mount / dev / sdc1 / rescue
元のOSディスクが存在する/ etcディレクトリに移動する
- cd / rescue / etc /
cp fstab fstab_orig
- cd / rescue / etc /
fstabのバックアップを作成したので、viやnano、お気に入りのテキストエディタを使って必要な変更を進めることができます。行の先頭に#を付けてコメントアウトすることもできます。
- vi fstab
cd /
umount / rescue
- vi fstab
Azureポータル経由でVM Bからディスクを切り離す
修復されたVHDから元のVM Aを再作成する
クラシックVMの場合:
オリジナルのVM A ( ギャラリーを作成し、[ マイディスクを選択])を再作成すると、VM Aを参照するディスクが表示されます。元のクラウドサービス名を選択します。
Resource Manager VMの場合、PowershellまたはAzure CLIツールを使用する必要があります。以下の記事では、元のVHDからVMを再作成する手順を示しています。