私は、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では、ルートx
のroot:x:16273:0:99999:7:::
暗号化パスワードはしばらく前!
に変更され、x
今回は初めてシングルユーザーを使用する必要がありました。その後のモード。
sulogin
特別な暗号化パスワードには固有の説明があります。*
または、この場合、!
ユーザーはパスワードなしでログインできます。それ以外はいくつかの検証を行いますが、通過しましたがx
気crypt
にせず(塩が十分長くないですか?)NULLを返します。
OPはバグレポートを送信しますsysvinit-utils
。 NULL戻り値はより適切に処理するsulogin
必要がありますcrypt
。