Linuxにおける基礎を習得した皆さんは、これからさらに高度な技術を学ぶ段階に進みます。
このカリキュラムでは、システム管理者として必要不可欠なスキルをより深く掘り下げ、実際の現場で即戦力となるための知識と技術を身につけます。
ユーザーとグループの管理から始まり、プロセス管理、ファイルシステムの管理、そしてディスクとパーティションの操作まで、システムのパフォーマンスと信頼性を最大限に引き出すための高度なテクニックを学びます。
この講座を通じて、Linuxシステムの中核を成す重要な管理技術をマスターし、システム運用における様々な課題に対応できるようになることを目指しましょう。
1.ユーザーとグループ管理
高度なユーザー管理
ユーザーの管理
• 新しいユーザーの作成:
useradd コマンドを使用して、新しいユーザーを作成します。この際、ホームディレクトリ、デフォルトシェル、ユーザーID(UID)などの属性を指定することが可能です。
例: sudo useradd -m -d /home/username -s /bin/bash -u 1001 username
• -m オプションはホームディレクトリの作成を指定し、-d オプションはホームディレクトリのパスを指定します。
• -s オプションはユーザーのデフォルトシェルを指定し、-u オプションはユーザーIDを指定します。
• ユーザー属性の設定と管理:
usermod コマンドを使って既存ユーザーの属性を変更できます。例えば、ホームディレクトリの移動やデフォルトシェルの変更、UIDの変更などが可能です。
• 例: sudo usermod -d /new/home/directory -m username
• このコマンドは、ユーザーのホームディレクトリを新しいパスに移動し、ファイルも新しいディレクトリにコピーします。
グループの管理
• グループの作成:
groupadd コマンドで新しいグループを作成できます。グループID(GID)を指定することも可能です。
• 例: sudo groupadd -g 1002 newgroup
• -g オプションでGIDを指定します。
• 既存ユーザーのグループへの追加:
usermod コマンドを使用して、ユーザーを新しいグループに追加できます。セカンダリグループとして追加する場合には、-aG オプションを使用します。
• 例: sudo usermod -aG newgroup username
• -aG オプションは、ユーザーを指定したグループに追加するためのオプションです。
• プライマリグループとセカンダリグループの概念:
プライマリグループは、ユーザーがファイルを作成したときにそのファイルに自動的に適用されるグループです。
• セカンダリグループは、ユーザーが追加で所属しているグループのことを指し、usermod -g オプションでプライマリグループを変更できます。
ユーザーの削除とアカウントロック
• 不要になったユーザーの削除:
userdel コマンドを使って、ユーザーアカウントを削除できます。ホームディレクトリも削除する場合には、-r オプションを使用します。
• 例: sudo userdel -r username
• このコマンドは、ユーザーアカウントとホームディレクトリを一緒に削除します。
• 一時的なアカウントのロック方法:
usermod -L コマンドや passwd -l コマンドでユーザーアカウントをロックすることができます。これにより、該当ユーザーのログインを一時的に無効化できます。
• 例: sudo usermod -L username または sudo passwd -l username
• このコマンドは、ユーザーのパスワードを無効化してアカウントをロックします。
アクセス制御リスト(ACL)の設定
ACLの基礎
• ACLとは:
ACL(アクセス制御リスト)は、標準的なUNIXパーミッションを超えて、特定のファイルやディレクトリに対してユーザーやグループごとの詳細なアクセス権を設定する仕組みです。
• 標準的なパーミッションは、オーナー、グループ、その他の3種類のエンティティに対してのみ権限を付与できますが、ACLを使用すると、
特定のユーザーやグループに対し て個別に権限を設定できます。
ACLの設定と確認
• ACLの設定:
setfacl コマンドを使用して、ファイルやディレクトリに対する特定のユーザーやグループのアクセス権を設定できます。
•例: setfacl -m u:username:rwx /path/to/file
• -m オプションはACLを設定するためのもので、u:username:rwx は特定のユーザーに読み取り、書き込み、実行の権限を与えることを意味します。
• ACLの確認:
getfacl コマンドを使用して、ファイルやディレクトリに設定されているACLを確認できます。
• 例: getfacl /path/to/file
• このコマンドは、指定されたファイルの現在のACL設定を表示します。
デフォルトACLの設定
• デフォルトACLの概要:
ディレクトリにデフォルトACLを設定すると、そのディレクトリ内に新規作成されたすべてのファイルやサブディレクトリが、自動的に特定のACLを持つようになります。
• これは、ディレクトリを共有ディレクトリとして使用する場合に特に有効で、特定のグループやユーザーに対して一貫したアクセス権を設定できます。
• デフォルトACLの設定方法:
setfacl コマンドを使用してデフォルトACLを設定します。
• 例: setfacl -d -m g:groupname:rwx /path/to/directory
• -d オプションはデフォルトACLを設定するためのオプションです。この設定により、新しく作成されるファイルやディレクトリに対して、指定したグループに読み取り、
書き込み、実行権限が付与されます。
Sudoのカスタマイズ
Sudoの基本設定
• visudo コマンドの使用:
visudo コマンドは、/etc/sudoers ファイルを安全に編集するための推奨コマンドです。visudo は、編集時に構文エラーがある場合に警告を出し、保存を防止する機能があり、直接ファイルを編集するよりも安全です。
• visudo を実行するには、スーパーユーザー権限が必要です。sudo visudo コマンドを使ってファイルを開き、編集を行います。
• /etc/sudoers ファイルの構成:
sudoers ファイル内では、各ユーザーやグループに対してどのコマンドがSudoで実行できるかを定義します。
• 基本的な構文は以下の通りです:
user_name ALL=(ALL:ALL) ALL
これは、user_name がどのホストからでも、どのユーザー権限でも、全てのコマンドを実行できることを意味します。
• ユーザーごとのSudo権限設定:
特定のユーザーやグループに対してSudo権限を割り当てることが可能です。
たとえば、特定のユーザーが管理者権限を持つコマンドだけを実行できるように設定することができます。
johndoe ALL=(ALL) /usr/bin/apt-get, /usr/bin/systemctl
これは、johndoe ユーザーが apt-get と systemctl コマンドをSudoで実行できる設定です。
Sudoの制限と権限の細分化
• 特定のコマンドのみをSudoで実行可能にする設定:
sudoers ファイルを編集して、特定のユーザーが特定のコマンドだけを実行できるように制限することが可能です。
janedoe ALL=(ALL) /usr/bin/htop
これは、janedoe ユーザーが htop コマンドのみをSudoで実行できる設定です。
• NOPASSWDオプションの利用:
特定のコマンドに対して、Sudo実行時にパスワード入力を不要にする設定も可能です。
これにより、特定の操作をスムーズに行うことができますが、セキュリティ面での配慮が必要です。
devuser ALL=(ALL) NOPASSWD: /usr/bin/docker
これは、devuser ユーザーが docker コマンドをパスワードなしで実行できる設定です。
• セキュリティリスクの管理:
Sudo権限を細分化し、必要最小限のコマンドに限定することで、セキュリティリスクを低減します。パスワード入力を不要にする場合は、その権限が適切に管理されていることを確認することが重要です。
Sudoログの設定
• Sudoコマンドの使用履歴をログに記録する理由:
Sudoコマンドの使用履歴を記録することで、誰がどのコマンドを実行したかを追跡でき、セキュリティ監査に役立ちます。ログの記録はシステムの透明性を高め、不正行為の検出にも貢献します。
• ログ設定の方法:
デフォルトでは、Sudoコマンドの使用履歴は、システムの一般的なログに記録されます。これらは通常、/var/log/auth.log や /var/log/secure ファイルに保存されます。
ログの詳細な設定は、/etc/sudoers ファイル内で Defaults ディレクティブを使用してカスタマイズすることができます。
Defaults logfile="/var/log/sudo.log"
これにより、Sudoコマンドの実行履歴が /var/log/sudo.log ファイルに記録されます。
• ログファイルの管理:
ログファイルは定期的に監視し、必要に応じてローテーション設定(logrotate の使用など)を行って、ディスクスペースの管理や古いログのアーカイブを適切に行います。
2.プロセス管理
プロセスの優先度管理(nice, renice)
プロセスの優先度とは
• ニース値(Nice Value)の概要:
Linuxでは、プロセスの優先度を「ニース値」で管理します。ニース値が低いほどそのプロセスの優先度は高くなり、CPUリソースをより多く割り当てられます。
ニース値の範囲は -20(最高優先度)から 19(最低優先度)までで、デフォルトのニース値は 0 です。一般ユーザーは自分のプロセスに対してのみニース値を高く(低い優先度)設定できますが、ニース値を低く(高い優先度)設定するにはスーパーユーザー権限が必要です。
• システムパフォーマンスへの影響:
優先度が高いプロセスは、より多くのCPU時間を獲得しやすくなり、他のプロセスよりも速く処理されます。これにより、重要なタスクの応答性が向上しますが、他のタスクのパフォーマンスに影響を与える可能性もあります。
プロセスの優先度の変更
• nice コマンドの使用:
nice コマンドを使用して、新規プロセスのニース値を設定することができます。デフォルトでは、nice はプロセスを優先度0で開始しますが、オプションを指定することで優先度を変更できます。
例: nice -n 10 command
このコマンドは、command をニース値 10(通常より低い優先度)で実行します。
• renice コマンドの使用:
renice コマンドを使用して、既に実行中のプロセスのニース値を変更することができます。プロセスID(PID)を指定して実行します。
例: sudo renice -n -5 -p 1234
これは、PID 1234 のプロセスのニース値を -5 に変更し、優先度を高く設定します。
優先度管理の実践例
• システムリソースが限られている環境での優先度調整:
サーバーや組み込みシステムのようなリソースが限られている環境では、クリティカルなプロセスに対して高い優先度を設定することで、システムの安定性とパフォーマンスを確保できます。
例として、リアルタイム処理が必要なプロセス(例: 音声処理アプリケーション)に対して高い優先度を設定し、バックグラウンドタスク(例: ログ収集プロセス)には低い優先度を設定することで、重要な処理を優先的に実行させることができます。
プロセスのスケジューリングと監視
プロセススケジューリングの基礎
• Linuxカーネルのプロセススケジューリングの仕組み:
Linuxカーネルは、プロセススケジューラを使用してCPU時間を効率的に割り当てます。スケジューラは、プロセスの優先度(ニース値)、I/O待ち時間、プロセスの種類(リアルタイム、通常プロセス)などを考慮して、どのプロセスにCPUを割り当てるかを決定します。
カーネルのスケジューリングアルゴリズムには、CFS(完全公平スケジューラ)やリアルタイムスケジューラがあり、それぞれ異なる用途に最適化されています。
systemdによるプロセス管理
• systemctl コマンドの基本:
systemctl は、systemd によって管理されているプロセスやサービスを制御するためのコマンドです。サービスの開始、停止、再起動、ステータスの確認などが可能です。
• 例:
• サービスの開始: sudo systemctl start apache2
• サービスの停止: sudo systemctl stop apache2
• サービスの再起動: sudo systemctl restart apache2
• サービスのステータス確認: systemctl status apache2
• サービスの自動起動設定:
systemctl を使用して、特定のサービスがシステム起動時に自動的に起動するように設定することができます。
例: sudo systemctl enable apache2
これにより、apache2 サービスがシステム起動時に自動的に開始されます。
逆に、自動起動を無効にするには sudo systemctl disable apache2 を使用します。
プロセス監視ツールの利用
• top コマンド:
top コマンドは、リアルタイムでシステム上のプロセスのリソース使用状況を表示します。
CPU使用率、メモリ使用量、プロセスの優先度(ニース値)などを確認することができます。
top コマンドは、リソース使用が多いプロセスを特定し、必要に応じてプロセスを終了させることが可能です。
• htop コマンド:
htop は top のインタラクティブなバージョンで、より視覚的なインターフェースを提供します。
プロセスのツリービューやフィルタリング機能があり、複雑なシステムのプロセス監視が容易になります。
• ps コマンド:
ps コマンドは、現在実行中のプロセスのスナップショットを取得します。
特定のユーザーが実行しているプロセスや、特定の条件に基づくプロセスのリストを表示するために使用されます。
例: ps -aux
これは、システム上で実行中のすべてのプロセスを詳細な情報とともにリストします。
• pidstat コマンド:
pidstat コマンドは、特定のプロセスに関する詳細な統計情報を収集します。
CPU使用率、ディスクI/O、メモリ使用量など、特定のプロセスに焦点を当てた監視が可能です。
3. systemdのユニット設定
systemdユニットファイルの構造
• ユニットファイルの基本構造:
• systemdのユニットファイルは、システムのサービスやデーモンの動作を定義するテキストファイルです。ユニットファイルは /etc/systemd/system/ または /lib/systemd/system/ に配置されます。
• ユニットファイルの構造は以下の主要なセクションから成り立っています:
• [Unit]: ユニットの説明や依存関係を定義します。
• [Service]: 実際のサービスの起動方法や実行コマンドを定義します。
• [Install]: ユニットがシステム起動時に有効化されるかどうかを定義します。
• ユニットファイルの例:
[Unit]
Description=Example Service
After=network.target
[Service]
ExecStart=/usr/bin/example-command
Restart=on-failure
[Install]
WantedBy=multi-user.target
カスタムユニットの作成
• 独自のサービスを定義する:
カスタムユニットファイルを作成して、自作スクリプトやアプリケーションをサービスとして実行することができます。
カスタムユニットファイルを作成するには、上記の構造に従って /etc/systemd/system/ に .service ファイルとして保存します。
例:
[Unit]
Description=My Custom Service
After=network.target
[Service]
ExecStart=/usr/local/bin/myscript.sh
Restart=always
[Install]
WantedBy=multi-user.target
• ユニットの有効化と管理:
作成したユニットを有効化するには、sudo systemctl enable myservice.service を使用します。
サービスを開始するには、sudo systemctl start myservice.service を使用し、ステータスを確認するには systemctl status myservice.service を使用します。
ユニットの管理
• ユニットの有効化、無効化:
システム起動時に自動的に起動するユニットを設定するには systemctl enable、自動起動を無効にするには systemctl disable を使用します。
• ユニットの再起動:
systemctl restart コマンドで、ユニットを停止して再起動します。
これは、設定変更後にサービスを再ロードする際に使用されます。
• ユニットのステータス確認:
systemctl status コマンドを使用して、ユニットの現在の状態を確認できます。
ユニットが正常に稼働しているか、エラーが発生しているかをチェックすることができます。
3.ファイルシステムの管理
LVM(論理ボリューム管理)の設定
LVMの基礎
• 物理ボリューム(PV)、ボリュームグループ(VG)、論理ボリューム(LV)の概念と役割:
物理ボリューム(PV):
物理ボリュームは、LVMの最も基本的な単位で、物理ディスク全体やその一部(パーティション)を指します。
pvcreate コマンドで作成します。
例: sudo pvcreate /dev/sda1
ボリュームグループ(VG):
ボリュームグループは、複数の物理ボリュームをまとめたもので、その上に論理ボリュームを作成します。
ボリュームグループ内のストレージは、自由に論理ボリュームに割り当てることができます。vgcreate コマンドで作成します。
例: sudo vgcreate vg01 /dev/sda1 /dev/sdb1
論理ボリューム(LV):
論理ボリュームは、実際にファイルシステムを作成し、データを保存するための仮想的なディスク領域です。
物理的なディスクの制約を超え、自由にサイズ変更や管理が可能です。lvcreate コマンドで作成します。
例: sudo lvcreate -L 10G -n lv01 vg01
LVMの設定手順
• 物理ボリュームの作成:
物理ディスクやパーティションをLVMで使用する前に、物理ボリュームとして初期化します。
これにより、そのディスクやパーティションがLVMで管理できるようになります。
例: sudo pvcreate /dev/sda1 /dev/sdb1
• ボリュームグループへの追加:
複数の物理ボリュームをボリュームグループにまとめて管理します。
これにより、物理ボリュームのサイズを1つの大きなストレージプールとして扱えるようになります。
例: sudo vgcreate vg01 /dev/sda1 /dev/sdb1
• 論理ボリュームの作成とフォーマット:
ボリュームグループ内に論理ボリュームを作成し、その上にファイルシステムをフォーマットして使用可能にします。
例:
• 論理ボリュームの作成: sudo lvcreate -L 10G -n lv01 vg01
• ファイルシステムのフォーマット: sudo mkfs.ext4 /dev/vg01/lv01
• 論理ボリュームのマウント:
作成した論理ボリュームをファイルシステムとしてマウントし、使用可能にします。
例: sudo mount /dev/vg01/lv01 /mnt
LVMの管理と拡張
• 論理ボリュームのサイズ変更:
LVMの大きな利点は、論理ボリュームのサイズを動的に変更できることです。拡張には、まずボリュームのサイズを変更し、その後ファイルシステムを拡張します。
例:
• 論理ボリュームの拡張: sudo lvextend -L +5G /dev/vg01/lv01
• ファイルシステムの拡張(ext4の場合): sudo resize2fs /dev/vg01/lv01
• スナップショットの作成とリストア:
スナップショットは、論理ボリュームの特定時点のコピーを作成し、後でリストアできる機能です。システムのバックアップやリカバリに利用されます。
例:
• スナップショットの作成: sudo lvcreate -L 5G -s -n snap01 /dev/vg01/lv01
• スナップショットからのリストア: sudo lvconvert --merge /dev/vg01/snap01
RAIDの構築と管理
RAIDの種類と特徴
• RAID 0, 1, 5, 6, 10の概要:
RAID 0:
ストライピングを使用し、複数のディスクにデータを分散して書き込むことで、書き込み/読み込み速度を向上させますが、冗長性はありません。
RAID 1:
ミラーリングにより、同じデータを複数のディスクに書き込むことで、冗長性を提供します。
1つのディスクが故障してもデータは失われませんが、ストレージ効率は低下します。
RAID 5:
ストライピングとパリティを組み合わせた構成で、データとパリティ情報を複数のディスクに分散します。
1つのディスクが故障してもデータ復旧が可能です。
• RAID 6:
RAID 5のパリティが二重になった構成で、2つのディスクが同時に故障してもデータ復旧が可能です。
• RAID 10:
RAID 1とRAID 0を組み合わせた構成で、ミラーリングとストライピングを併用し、パフォーマンスと冗長性の両方を提供します。
RAIDの設定
• mdadmを使用したソフトウェアRAIDの設定手順:
mdadm ツールを使用してソフトウェアRAIDを構築します。
以下はRAID 5の設定例です。
• RAID 5アレイの作成: sudo mdadm --create --verbose /dev/md0 --level=5 --raid-devices=3 /dev/sda1 /dev/sdb1 /dev/sdc1
• mdadm.confにRAID情報を保存: sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf
• RAIDアレイをフォーマット: sudo mkfs.ext4 /dev/md0
• RAIDアレイをマウント: sudo mount /dev/md0 /mnt
RAIDアレイの管理
• RAIDアレイの状態確認:
RAIDアレイの状態を確認し、ディスクの故障や再構築の進行状況をモニタリングします。
例: sudo mdadm --detail /dev/md0
• ディスク障害時の対応:
1つのディスクが故障した場合、新しいディスクを追加して再構築します。
例:
• 故障したディスクを削除: sudo mdadm /dev/md0 --remove /dev/sda1
• 新しいディスクを追加: sudo mdadm /dev/md0 --add /dev/sdd1
• RAID構成の変更:
RAIDアレイの構成変更(例: RAID 5からRAID 6への移行)やディスクの追加、削除が可能です。
例: sudo mdadm --grow /dev/md0 --level=6 --raid-devices=4
ファイルシステムの拡張と縮小
ファイルシステムの基礎
• 主要なファイルシステムの特徴:
ext4:
もっとも広く使用されているLinuxファイルシステムで、信頼性とパフォーマンスのバランスが取れています。
ジャーナリング機能を持ち、障害時のデータ復旧が容易です。
XFS:
大規模なファイルシステムに適しており、高いパフォーマンスを提供します。
主に大容量ストレージやエンタープライズ環境で使用されます。拡張が容易ですが、縮小がサポートされていません。
btrfs:
次世代ファイルシステムで、スナップショット、データ圧縮、データ整合性チェックなどの高度な機能を提供します。
ただし、まだ開発段階の部分があり、用途によっては慎重に使用する必要があります。
ファイルシステムのサイズ変更
• resize2fs コマンド(ext4の場合):
resize2fs コマンドを使用して、ext4ファイルシステムのサイズを変更します。拡張と縮小の両方に対応しています。
例:
• ファイルシステムの拡張: sudo resize2fs /dev/vg01/lv01
• ファイルシステムの縮小(事前にアンマウントが必要): sudo resize2fs /dev/vg01/lv01 10G
• xfs_growfs コマンド(XFSの場合):
XFSファイルシステムは、拡張のみサポートされています。xfs_growfs コマンドを使用して、ファイルシステムをオンラインで拡張できます。
例: sudo xfs_growfs /mnt
オンライン・オフラインでのサイズ変更
• オンラインでのファイルシステム拡張:
ファイルシステムをアンマウントせずに、そのままの状態でサイズを拡張できる機能です。XFSやext4でサポートされています。
例: sudo lvextend -L +5G /dev/vg01/lv01 && sudo resize2fs /dev/vg01/lv01
• オフラインでのファイルシステム縮小:
ファイルシステムの縮小には、通常、ファイルシステムをアンマウントしてから行います。これは、縮小作業がデータに影響を与える可能性があるためです。
例:
• ファイルシステムをアンマウント: sudo umount /dev/vg01/lv01
• ファイルシステムの縮小: sudo resize2fs /dev/vg01/lv01 10G
4.ディスクとパーティションの管理
fdisk, parted, gpartedを使用したパーティションの作成と管理
fdiskによるパーティション管理
• fdiskの概要:
fdisk は、Linuxで最も基本的なディスクパーティション管理ツールで、MBR(マスターブートレコード)形式のディスクに特化しています。
コマンドラインからパーティションの作成、削除、表示、フォーマットなどの操作が可能です。
• fdiskを使用した基本的なパーティション作成手順:
1. ディスクのリストを表示: sudo fdisk -l
2. ディスクを選択: sudo fdisk /dev/sda
3. 新しいパーティションの作成: n キーを押して、新しいパーティションを作成します。
4. パーティションタイプの選択: p(プライマリ)または e(拡張)を選択。
5. パーティションサイズの指定: セクタ単位またはMB/GB単位でサイズを指定します。
6. 設定を保存して終了: w キーを押して設定を保存し、fdisk を終了します。
• パーティションの削除:
既存のパーティションを削除するには、d キーを押し、削除するパーティション番号を選択します。操作の結果を保存するには w キーを使用します。
• パーティションのフォーマット:
作成したパーティションを使用するために、ファイルシステムを作成する必要があります。
例: sudo mkfs.ext4 /dev/sda1
このコマンドは、指定したパーティションにext4ファイルシステムを作成します。
partedの高度な機能
• partedの概要:
parted は、GPT(GUIDパーティションテーブル)やMBRディスクの管理が可能な強力なコマンドラインツールで、fdisk よりも柔軟な操作が可能です。
ディスク全体の管理やパーティションのリサイズ、再配置がサポートされています。
• GPTパーティションの管理:
parted を使ってGPTパーティションを作成し、管理します。
GPTは、MBRよりも多くのパーティションをサポートし、2TB以上のディスクを扱えるため、大容量ディスクの管理に適しています。
例:
• sudo parted /dev/sda mklabel gpt
• これにより、指定されたディスクにGPTパーティションテーブルが作成されます。
• ディスクのリサイズと再配置:
parted を使用すると、パーティションのサイズを変更したり、再配置したりすることができます。
これは、ディスクの使用状況に応じてパーティションを効率的に管理するのに役立ちます。
例:
• パーティションのリサイズ: sudo parted /dev/sda resizepart 1 50G
• これは、パーティション1のサイズを50GBに変更します。
gpartedによるGUI管理
• gpartedの概要:
gparted は、parted のGUIフロントエンドで、直感的なインターフェースを提供し、パーティション管理を視覚的に行うことができます。
複数のディスクレイアウトシナリオをシミュレーションしたり、パーティションの操作をドラッグアンドドロップで行えます。
• パーティションの作成と管理:
gparted を起動すると、ディスクのパーティション構造が視覚的に表示されます。
新しいパーティションの作成、既存パーティションのリサイズや削除、フォーマットを行うには、右クリックメニューやツールバーのオプションを使用します。
• 複数のディスクレイアウトシナリオ:
gparted では、異なるディスクレイアウトシナリオをシミュレーションし、最適なパーティション構成を検討できます。
また、操作前にパーティションテーブル全体をバックアップすることも推奨されます。
スワップ領域の設定
スワップ領域の役割と設定
• スワップ領域の概要:
スワップ領域は、物理メモリが不足した場合に使用される仮想メモリ領域です。
システムのメモリ管理を補完し、メモリ不足時のパフォーマンス低下を防ぐ役割を果たします。
• スワップサイズの決定方法:
一般的なガイドラインとして、物理メモリの1倍から2倍のスワップサイズが推奨されますが、サーバーの用途や物理メモリの量に応じて調整が必要です。
例: 8GBのRAMがある場合、8GBから16GBのスワップ領域を設定するのが一般的です。
• スワップファイルの作成:
スワップパーティションの代わりに、スワップファイルを使用してスワップ領域を設定することができます。
これは、ディスクの柔軟な管理が可能で、既存のパーティション構造を変更せずにスワップ領域を追加する場合に便利です。
例:
1. スワップファイルの作成: sudo fallocate -l 4G /swapfile
2. スワップファイルの権限設定: sudo chmod 600 /swapfile
3. スワップファイルの設定: sudo mkswap /swapfile
4. スワップファイルの有効化: sudo swapon /swapfile
スワップの有効化と無効化
• swapon, swapoff コマンドの使用:
swapon コマンドを使用してスワップ領域を有効化し、swapoff コマンドを使用して無効化します。
動的にスワップ領域を管理することで、システムのメモリ使用状況に応じた柔軟な対応が可能です。
例:
• スワップ領域の有効化: sudo swapon /swapfile
• スワップ領域の無効化: sudo swapoff /swapfile
• /etc/fstabへの追加:
スワップファイルを再起動後も自動的に有効化するには、/etc/fstab にスワップファイルのエントリを追加します。
例: /swapfile none swap sw 0 0
スワップ領域の監視と最適化
• vmstat コマンドの使用:
vmstat コマンドは、システムのメモリ使用状況をリアルタイムで監視するために使用します。
スワップイン/スワップアウトの動きを確認し、スワップ領域の使用状況を把握します。
例: vmstat 1
これにより、1秒ごとのメモリ使用状況が表示されます。
• free コマンドの使用:
free コマンドは、メモリとスワップ領域の使用状況を簡単に確認できるツールです。
スワップ領域がどれだけ使用されているか、システムのメモリがどの程度圧迫されているかを確認します。
例: free -h
人間が読みやすい形式でメモリとスワップの使用状況が表示されます。
• スワップの最適化:
スワップの使用が頻繁な場合は、物理メモリの増設やスワップ領域のサイズ調整が必要です。
また、vm.swappiness パラメータを調整して、スワップの使用を抑えることも可能です。
例: sudo sysctl vm.swappiness=10
この設定は、物理メモリが10%以下になった場合にのみスワップ領域を積極的に使用するように調整します。
まとめ
本カリキュラムでは、Linuxシステム管理の高度な技術を体系的に学び、実践的なスキルを磨いてきました。
ユーザーとグループの管理、プロセス管理、ファイルシステムやディスクの管理など、各セクションで取り扱った内容は、Linuxシステムを安全かつ効率的に運用するために不可欠な要素です。
これらの技術を習得することで、複雑なシステム環境においても柔軟に対応できる管理者としての自信を持つことができるでしょう。
習得したスキルは、実際の業務において大いに役立つこと間違いありません。皆さんが今後も継続的に知識を深め、より一層の成長を遂げることを期待しています。