Linux-起動プロセスと起動障害のトラブルシューティング(MBRセクター障害の修復とGRUB起動障害の修復)


1つは、Linuxオペレーティングシステムの起動プロセスです。

システムの起動は、オペレーティングシステムの操作の始まりです。ユーザーがシステムに正常にログインする前に、Linuxの起動プロセスは一連の初期化タスクを完了し、ユーザーログインの準備に必要なプログラムとコマンド端末をロードします。

1.ブートプロセスの概要

マーク

1.1パワーオンセルフテスト

  • サーバーホストの電源を入れた後、CPU、メモリ、グラフィックカード、キーボードなどのデバイスは、マザーボードBIOS(基本入力出力システム)の設定に従って事前にテストされます。テストが成功すると、システム制御は事前設定された起動シーケンスに従って転送されます。ほとんどの場合、転送されます。ローカルハードドライブへ
  • ハードディスクや光ドライブなど、システムを起動できる最初のデバイスを検出します

1.2MBRブート

  • ローカルハードディスクからシステムを起動する場合は、最初に、ハードディスクの最初のセクターのMBR(マスターブートレコード)設定に従って、またはMBRレコードのブートに従って直接、オペレーティングシステムのブートファイルを含むパーティションにシステム制御を転送します。ブートメニューを呼び出すための情報(例:GRUB)
  • MBRセクターに配置されたブートGRUBブートプログラムを実行します

1.3GRUBメニュー

  • Linuxオペレーティングシステムの場合、GRUB(Unified Boot Loader)は、最も広く使用されているマルチシステムブートローダープログラムです。
    システム制御がGROBに渡されると、ユーザーが選択できるように、選択したオプションに従って(またはデフォルト値を使用して)ブートメニューが表示されます。 )Linuxカーネルファイルをロードしてから、システム制御をカーネルに転送し
    ます。Centos7はGRUB2ブートローダーを使用します。GRUB
    ブートプログラムはGRUB構成ファイル/boot/grub2/grub.cfgを読み取り、カーネルとミラーファイルシステムの設定を取得します。

1.4Linuxカーネルをロードする

  • Linuxカーネルは、さまざまなハードウェアリソースとシステムプログラムの間にある、コンパイル済みの特別なバイナリファイルであり、リソースの割り当てとスケジューリングを担当します。
    カーネルがシステムの制御を引き継いだ後、Linuxオペレーティングシステム全体の実行プロセスを完全に制御します。
  • Centos 7システムでは、デフォルトのカーネルファイルは「/boot/vmlinuz-3.10.0-514.e17.x86_64」にあります。
  • カーネルとミラーファイルシステムをメモリにロードします

1.5初期化プロセスの初期化

  • さらなるシステムブートプロセスを完了するために、Linuxカーネルは最初にシステム内の「/ sbin / init」プログラムをメモリにロードして実行し(実行中のプログラムはプロセスと呼ばれます)、initプロセスはシステム全体の初期化を完了し、最後にユーザーが続行するのを待ちます。ログインする
  • ハードウェアドライバーをロードすると、カーネルはinitプロセスをメモリにロードして実行します

2.initプロセス

  • Linuxシステムのプロセス(実行中のプログラム)には番号が付けられています。各プロセスの識別番号はPIDと呼ばれます。Linuxを起動するプロセスでは、「/ sbin / init」がカーネルによってロードされる最初のプログラムです。したがって、初期化プロセスに対応するPID番号は常に「1」です。
  • initプロセスの実行後、システム内の他のプログラムを実行し続け、新しいプロセスを継続的に生成します。これらのプロセスは、initプロセスの子プロセスと呼ばれます。一方、initプロセスは、これらのプロセスの親プロセスです。
    もちろん、これらの子プロセスは、さらに生成することもできます。それぞれのサブプロセスは一度に増殖し続け、最終的には緑豊かなプロセスツリーを形成し、ユーザーにサービスを提供します。
  • Initは、Linuxシステム全体を維持するすべてのプロセスの「祖先」であるため、initプロセスを簡単に終了することはできません。
    異なるシステム動作状態を切り替える必要がある場合は、initプロセスに正しい実行パラメーターを送信できます。これはinit自体によって実行されます。関連する操作

3.Systemd

  • Systemdは、Linuxオペレーティングシステムの初期化ソフトウェアです。
  • CentOS7は、新しいSystemd起動方法を使用して、従来のSysVinitを置き換えます
  • 従来のSysVinitは、シェルスクリプトのシリアル実行に依存してサービスを開始するため、効率が低下し、システムの起動が遅くなります。
  • Systemdは、より多くのサービスプロセスを並行して開始でき、オンデマンドでサービスを開始する機能を備えているため、開始されるプロセスが少なくなり、システムの起動速度が向上します。
  • CentOS7で実行される最初の初期化プロセスは/ lib / systemd / systemdです

4.システム化されたユニットタイプ

ユニット型 拡張子名 説明
サービス 。サービス システムサービスについて説明する
ソケット 。ソケット プロセス間通信用のソケットについて説明する
端末 。端末 カーネルによって認識されるデバイスファイルを記述します
マウント 。マウント ファイルシステムのマウントポイントを説明する
自動マウント .automount メモリスワップデバイスまたはスワップファイルについて説明する
スワップ 。スワップ メモリスワップデバイスまたはスワップファイルについて説明する
。道 ファイルシステム内のファイルまたはディレクトリを説明する
タイマー 。タイマー 説明-タイマー(cronのようなスケジューリングタスクを実装するために使用されます)
スナップショット .snapshot systemdの状態を保存するために使用されます
範囲 。範囲 systemdのバスインターフェイスを使用して、プログラムで外部プロセスを作成します
スライス 。スライス Cgroupの階層別に編成された管理システムプロセスのグループを説明する
目標 。目標 systemdユニットのセットを説明する

5.実行レベルに対応するSystemdターゲット

実行レベル Systemdのターゲット 説明
0 目標 シャットダウン状態、このレベルを使用するとホストがシャットダウンされます
1 レスキュー。ターゲット シングルユーザーモードでは、パスワードの確認なしでシステムにログインできます。主にシステムのメンテナンスに使用されます
2 multi-user.target ユーザー定義/ドメイン固有の実行レベル。デフォルトは3です(ネットワークへのアクセスはサポートされていません)
3 multi-user.target 文字インターフェイスを備えた完全なマルチユーザーモード。ほとんどのサーバーホストはこのレベルで実行されます
4 multi-user.target ユーザー定義/ドメイン固有の実行レベル。デフォルトは3に相当します
5 Graphical.target グラフィカルインターフェイスのマルチユーザーモードは、グラフィカルなデスクトップ操作環境を提供します
6 restart.target 再起動します。このレベルを使用すると、ホストが再起動します

2.起動時の障害を排除します

1.MBRセクターの障害を修復します

1.1失敗の原因

  • ウイルス、トロイの木馬などによる被害。
  • 誤ったパーティション操作、ディスクの読み取りおよび書き込みエラー

1.2故障現象

  • ブートプログラムが見つかりません。開始が中断されました
  • オペレーティングシステムを読み込めません

1.3ソリューション

  • バックアップファイルは事前に作成する必要があります
  • インストールCDを使用して緊急モードで起動します
  • バックアップファイルから復元

1.4練習

1.4.1 MBRセクターデータを他のディスクにバックアップする(/ dev / sdb1)

  • まず、新しいハードドライブを追加します
  • 新しいパーティション
[root@localhost ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。

Device does not contain a recognized partition table
使用磁盘标识符 0xbd9ad88f 创建新的 DOS 磁盘标签。

命令(输入 m 获取帮助):n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
分区号 (1-4,默认 1):
起始 扇区 (2048-83886079,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-83886079,默认为 83886079):
将使用默认值 83886079
分区 1 已设置为 Linux 类型,大小设为 40 GiB

命令(输入 m 获取帮助):w
The partition table has been altered!

Calling ioctl() to re-read partition table.
正在同步磁盘。
  • フォーマット
[root@localhost ~]# mkfs.xfs /dev/sdb1
meta-data=/dev/sdb1              isize=512    agcount=4, agsize=2621376 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=10485504, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=5119, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

  • マウント
[root@localhost ~]# mkdir /backup
[root@localhost ~]# mount /dev/sdb1 /backup/

  • バックアップ
[root@localhost ~]# cd /backup/
[root@localhost backup]# ls
[root@localhost backup]# dd if=/dev/sda of=/backup/mbr.bak bs=512 count=1
记录了1+0 的读入
记录了1+0 的写出
512字节(512 B)已复制,0.000197902 秒,2.6 MB/秒
[root@localhost backup]# ls
mbr.bak

1.4.2MBRブートセクター破壊のシミュレーション

  • シミュレートされた破壊
[root@localhost backup]# dd if=/dev/zero of=/dev/sda bs=512 count=1
记录了1+0 的读入
记录了1+0 的写出
512字节(512 B)已复制,9.7308e-05 秒,5.3 MB/秒
  • システムを再起動してテストします
[root@localhost backup]# init 6
Connection closing...Socket close.

Connection closed by foreign host.

Disconnected from remote host(CentOS 7-3) at 16:58:38.

Type `help' to learn how to use Xshell prompt.
[D:\~]$ 

1.4.3ブートインターフェイス

  • 再起動後、システムインターフェイスが入力されていないことがわかりましたが、インストールウィザードが表示されました
    マーク
  • ここでは、「トラブルシューティング」オプションを選択して緊急モードに入ります
    マーク
  • 「1」を入力して[続行]を選択し、Enterキーを押して続行します
    マーク
  • もう一度Enterキーを押して、「sh-4.2#」プロンプトでBashShell環境に入ります。
sh-4.2# mkdir /backupdir
sh-4.2# mount /dev/sdb1 /backupdir        ##挂载带有备份文件的分区
sh-4.2# dd if=/backupdir/mbr.bak of=/dev/sda bs=512 count=1        ##恢复备份数据
sh-4.2# exit       ##执行exit命令退出临时Shell环境,系统将会自动重启
  • OKシステムが再起動を開始し、正常であることが判明した場合は、システムに直接入ることができます

2.GRUBブート障害を修復します

2.1失敗の原因

  • MBRのGRUBブートプログラムが破損しています
  • grub.confファイルがありません、ブート構成が正しくありません

2.2故障現象

  • システムの起動が停止し、「grub>」プロンプトが表示されます

2.3ソリューション

  • 手動でbootコマンドを入力してみてください
  • 緊急モードに入り、バックアップからgrub.confを書き換えまたは復元します
  • grubプログラムをMBRセクターに再構築します

2.4練習

  • ブートインターフェイスが緊急モードになり、GRUBメニュー構成ファイルが再構築されます

2.4.1シミュレートされた障害

/boot/grub/目录下的包是用于启动菜单的背景图片及样式
/boot/grub2/grub.cfg        ##Grub配置文件
  • grub.cfgを削除して、障害をシミュレートします
  • ここでは直接再構築されるため、バックアップする必要はありません。
[root@localhost boot]# cd grub2
[root@localhost grub2]# ls
device.map  fonts  grub.cfg  grubenv  i386-pc  locale
[root@localhost grub2]# rm -rf grub.cfg
[root@localhost grub2]# ls
device.map  fonts  grubenv  i386-pc  locale
  • 再起動を入力して再起動すると、このインターフェイスに入ります
    マーク
  • 注意してください、この時点でどのようにブートインターフェイスに入るのですか、手の速度は速くなければなりません、再起動をクリックした直後に「ESC」を押して、数回試してください、それは常に成功します
    マーク
  • ここではCDを選択します
    マーク

2.4.2ブートインターフェイス

  • 緊急モードに入り、CenOSシステムを復元します
    マーク
    マーク
  • 1を入力し、Enterキーを押します
    マーク
  • システムルート環境に切り替えます(今回はTABキーを使用して完了できます)
sh-4.2# chroot /mnt/sysimage
bash-4.2#
  • GRUBブートプログラムを最初のハードディスク(/ dev / sda)のMRBセクターに再インストールします
bash-4.2# grub2-install /dev/sda
  • GRUBメニューの構成ファイルを再構築します
bash-4.2# grub2-mkconfig -o /boot/grub2/grub.cfg
  • chroot環境を終了し、再起動します
bash-4.2# exit
sh-4.2# reboot
  • OK、システムインターフェイスに入ることができます。もう一度確認して、grub.cfgにもう一度あることを確認しましょう。
[root@localhost ~]# cd /boot/grub2
[root@localhost grub2]# ls
device.map  fonts  grub.cfg  grubenv  i386-pc  locale

おすすめ

転載: blog.csdn.net/weixin_51486343/article/details/110202636