メンテナンスシェル分割エラーの原因は何ですか?

メンテナンスシェル分割エラーの原因は何ですか?

私は、Windows Server 2012 R2のMicrosoft Hyper-V仮想マシンでUbuntu 14.04 Trusty Tahrを実行しています。 VMを停止し、EXT4フォーマットされた仮想ディスクボリューム(/ dev / sdb)を新しい(フォーマットされていない)ディスクボリュームに置き換えて、VMを再起動しました。次のメッセージが表示されます。

ファイルシステムの確認またはインストールに失敗しました。これでメンテナンスシェルが起動します。 CONTROL-Dはシェルを終了し、ファイルシステムを再試行してから起動を続行します。追加のエラーは無視されます。メンテナンスのためにルートパスワードを入力してください(または続行するにはControl-Dと入力してください)。

ルートパスワードを入力すると、次のようになります。

セグメンテーションエラー

分割エラーを引き起こすプロセスとその理由を確認したいと思います。私は私の注目を集めた問題を再現しており、分割エラーの説明を提供したいと思います。 Ubuntu 14.04のバグですか?もしそうなら、解決策はありますか?解決策がある場合は、ここに文書化されているものを見たいと思います。

ベストアンサー1

OPと私はこの問題を解決するために協力しました。詳しくは、コメントとチャットをご覧ください。まず、問題のプロセスと場所を見つけます。/etc/init/mountall-shell.conf

/sbin/sulogin

に変更されました

/usr/bin/ltrace -S -f -o /root/sulogin-ltrace.log /bin/sulogin

ログ抜粋:

837 crypt("password", "x") = nil
837 strcmp(nil, "x" <no return ...>
837 --- SIGSEGV (Segmentation fault) 

ログは、NULLを返すsulogin次のコードでsegfaultが発生したことを示していますcrypt

if ((p = getpasswd(pwd->pw_passwd)) == NULL) break;
if (pwd->pw_passwd[0] == 0 ||
    strcmp(crypt(p, pwd->pw_passwd), pwd->pw_passwd) == 0)
        sushell(pwd);

次の質問は、cryptがNULLを返す原因は何ですか?

OPは、暗号化パスワードが実際にあることを確認しました。 Ubuntu 14.04では、ルートxroot:x:16273:0:99999:7:::暗号化パスワードはしばらく前!に変更され、x今回は初めてシングルユーザーを使用する必要がありました。その後のモード。

sulogin特別な暗号化パスワードには固有の説明があります。*または、この場合、!ユーザーはパスワードなしでログインできます。それ以外はいくつかの検証を行いますが、通過しましたがxcryptにせず(塩が十分長くないですか?)NULLを返します。

OPはバグレポートを送信しますsysvinit-utils。 NULL戻り値はより適切に処理するsulogin必要がありますcrypt

おすすめ記事