LPIC101 パーテーション、ブートローダー、ライブラリについて調べてみた
はじめに
こんにちは!AWS大好き学生みゃっちーです🦔
AWSばっかり触ってオンプレの知識が乏しい…ということでLPIC試験に挑戦することにしました!
TwitterでもLPIC大事!というツイートをちょくちょく見かけますが、勉強すればするだけほんとにその通りだなって思いが強くなってきてます。最近寒いです。
検証環境
AWS EC2 Amazon linux
パーテーション
ハードディスクやSSDは容量を複数の領域に分割して使用する。この分割した区画のことをパーテーションと呼ぶ。
何故分割して使用するの?
1.データ管理とデータ整理
ユーザデータとシステムファイルを分離することでデータの管理が容易になる
2.バックアップの復元
特定のパーテーションを集中的にバックアップし、データ損失最小限に抑えることができる。またシステムが壊れた時にOSは再インストールせずに、重要なデータのパーテーションのみを復元するなどができる。
3セキュリティ
パーテーションごとにアクセス制御を設定することができる。
エラー時の影響制限
ディスクの一部が壊れたほかのパーテーションに格納あれているデータに影響を与えずデータを損失を制限できる。
独立したパーテーションに割り当てるディレクトリ
/home
一般ユーザが利用するファイルが格納され、ユーザー別のパーテーションを分けることで管理が便利になる。
/ver
ログ、メールなど更新頻度が高いファイルが格納される。そのためルートファイルなどが同じパーテーションにあると容量を使い切って影響を与えてしまう恐れので別のパーテーションに分けておくことがお勧め
/usr
各ユーザが共通して利用するプログラムやライブラリなどがおかれるファイル。
/boot
ブートローダーの設定ファイル(GRUBやLILO)が格納されている。
パーテーションのレイアウト
そのサーバの使用用途によってよく使われるディレクトリが異なってくるため、その用途に合わせてパーテーションを分割する必要がある。
例
ユーザー数が多い
→homeディレクトリに割り当てる容量を増やす
webサーバーとして使用する
→/var/logの容量を増やす。(サーバのログを記録するため)
ブートローダーについて
ブートローダはハードディスクやストレージからOSを読み込んで起動するプログラムで代表的なものはGRUB、GRUB2がある。
GRUBのインストール
インストールには下記のコマンドを使用する。
/dev/sdaはマスターブートレコードと呼ばれ、起動ドライブの一番最初。ここからBIOSはブートローダを読み込む。※下記の起動手順の2番
grub-install /dev/sda
システムの起動手順
1.BIOS/UEFIが起動する。
2.ハードウェアのチェック、初期化を行いブーストローダーを呼び出す。
3.ブーストローダーがカーネルをメモリ上へ読み込む
4.カーネルがメモリの初期化やシステムの起動に必要なデバイスドライバをマウントする。
※マウントとはファイルシステム内のデータやリソースへのアクセスを可能にすること。
5.ルートファイルシステムが使えるようになるとカーネルが最初のプロセスである、init(最近はsystemd)プロセスを実行する
6.init(systemd)が必要なサービスに起動していき、最終的にログイン画面を表示する。
GRUBの設定
設定ファイルは/boot/grub/menu.lstに存在する。
※Amazon linuxはGRUB2を使っている。
具体的な設定パラメータとしては次のようなものがある。
GRUB設定
# /boot/grub/menu.lst
# ブートデバイスの定義。GRUBのインストール先
boot=/dev/sda
# デフォルトで起動するエントリ番号。デフォルトは1番目のエントリ
default=0
#メニューを表示する時間。デフォルトは5秒
timeout=5
#起動時に選択メニューを表示しない
hiddenmenu
#メニューの表示画面の画像
splashimage=(hd0,0)/grub/splash.xpm.gz
#メニューに表示されるエントリ名。1番目のエントリ
title CentOS (2.6.32-358.el6.i686)
#ルートファイルシステムの指定。GRUBでは、/dev/sda1を(hd0,0)、/dev/sdaを(hd0,1)と表示
root (hd0,0)
#起動するカーネルイメージファイルと起動オプションの指定
kernel /vmlinuz-2.6.32-358.el6.i686 ro root=UUID=15a29eb8-6f0c-4e3b ~ quiet
#初期RAMディスクファイルの指定
initrd /initramfs-2.6.32-358.el6.i686.img
GRUB2の設定
GRUB2の設定ファイルは/boot/grub/grub.cfgにある。
各セクションの詳細は下記の通りです。
GRUB設定
00_headerセクション: このセクションはGRUBのヘッダー情報を設定します。GRUB2の設定ファイルは自動生成され、一般的に編集しないでくださいというコメントが含まれています。
01_usersセクション: このセクションはユーザー関連の設定を含み、GRUB2_PASSWORD環境変数が設定されている場合に、rootユーザーによるスーパーユーザーアクセスを有効にします。パスワードはPBKDF2アルゴリズムを使用して保存されています。
10_linuxセクション: このセクションはLinuxカーネルの起動設定を提供します。特に、kernelopts変数にカーネルパラメータが設定されています。このセクションでは、カーネルイメージをロードする設定も行われています。
10_reset_boot_successセクション: このセクションは、前回のブートが成功した場合や、最初のブート試行の場合にメニューを非表示にする設定を提供します。また、boot_successとboot_indeterminate変数のリセットも行います。
12_menu_auto_hideセクション: このセクションはメニューを自動的に非表示にするための設定を提供します。
14_menu_show_onceセクション: このセクションは、一度だけメニューを表示するための設定を提供します。menu_show_once_timeout変数に表示時間が設定されます。
40_customセクション: このセクションはカスタムメニューエントリを追加するための場所です。ユーザーが独自のメニューエントリを追加することができます。
41_customセクション: このセクションもカスタムメニューエントリを提供しますが、異なる場所から設定情報を読み込むためのバックアップオプションとして機能します。
また、この設定ファイルの一番最初に書いてある通り、直接このファイルの内容を書き換えることは一般的には行わず、/etc/default/grubを書き換えて、grub-mkconfigコマンドを使用し、boot/grub/brub.cfgの設定を変更する。
/etc/default/grub
/etc/default/grub 設定項目
GRUB_CMDLINE_LINUX_DEFAULT: この行では、カーネルのデフォルトのコマンドライン引数を設定しています。これらの引数はLinuxカーネルの起動時に適用されます。この設定にはさまざまなカーネルパラメータが含まれており、セキュリティ、ログ出力、NVMeデバイスのタイムアウト、SELinux、およびその他のカーネル設定が指定されています。
GRUB_TIMEOUT: GRUBメニューを表示するまでの待ち時間を設定します。現在の設定では、GRUBメニューが表示されずに直ちにデフォルトのエントリがブートされます(GRUB_TIMEOUT=0)。
GRUB_DISABLE_RECOVERY: この設定は、復旧モードのエントリを無効にするか有効にするかを制御します。現在の設定では、復旧モードのエントリが無効になっています(true)。
GRUB_TERMINAL: この設定は、GRUBのターミナルモードを設定します。ec2-consoleという値が指定されており、AWS EC2インスタンスのコンソール出力に関連します。
GRUB_ENABLE_BLSCFG: この設定は、Boot Loader Specification (BLSCFG) を有効にするかどうかを制御します。BLSCFGは、BootLoaderSpecファイルを使用してブートエントリを定義するための仕組みです。現在の設定では、BLSCFGが有効になっています(true)。
GRUB_X86_USE_32BIT: この設定は、32ビットモードを使用するかどうかを制御します。現在の設定では、32ビットモードが有効になっています(true)。
GRUB_DEFAULT: この設定は、デフォルトのブートエントリを選択します。savedという値が指定されており、/boot/grub2/grubenvに保存されたsaved_entryを使用してデフォルトエントリを選択します。
GRUB_UPDATE_DEFAULT_KERNEL: この設定は、デフォルトのカーネルを自動的に更新するかどうかを制御します。現在の設定では、カーネルが自動的に更新されます(true)。
試しに設定項目のGRUB_TIMEOUTを変更してgrub-mkconfigコマンドを使用してみます。
timeoutの値を10に変更し、/boot/grub/grub.cfgにgrub-mkconfigコマンドで書き換えを行いました。
すると/boot/grub/grub.cfgファイルのtimeouが10になっていることがわかります
共有ライブラリの管理
そもそもライブラリとは何なにか一番自分がわかりやすいと感じた説明です。
ライブラリ(library)とは、汎用性の高い複数のプログラムを他のプログラムから呼び出して利用できるように部品化したものです。
https://medium-company.com/library/
またライブラリには静的ライブラリと共有ライブラリが存在するらしい。
静的ライブラリ
→プログラム実行時にその実行ファイル内に読み込まれるもの
共有ライブラリ
→プログラム実行時に複数のプログラム間で共有されるプログラム
スタティックリンクダイナミックリンク
C言語などでプログラムを動かすときは様々なライブラリ関数を利用(リンク)する。スタティックリンクはライブラリをプログラムの中に埋め込んで使う。そのため何回もリンクする場合、リンクする場所すべてにそのライブラリを埋め込むことになり無駄が発生してしまう。そこで埋め込まずに共通のライブラリをプログラムから使うことをダイナミックリンクという。
そしてその共通のライブラリが保管されている場所を共有ライブラリと呼ぶ。
実行ファイルが必要としている共有ライブラリはlddコマンドで調べることができる。
プログラムの実行時に必要なライブラリの検索は/libと/usr/libディレクトリで行われるが、それ以外のディレクトリにも検索を行ってほしい場合は/etc/ld.so.confファイルに設定する必要がある。
ただし、プログラム実行の度にこれらのディレクトリを検索するのは手間がかかるため、/etc/ld.so.cacheにキャッシュされている。
共有ライブラリを変更してキャッシュの再構築が必要な場合はldconfigコマンドを使用する。
※管理者権限いるみたいです。
参考
とても分かりやすくてさすが小豆本。一択ですね。
Discussion