5. スワップ領域(4GB)作成・永続化

2025/10/26

元記事

AlmaLinux スワップ領域作成コマンド解説

VPSの契約メモリ4GBに対して、メールサーバー構築を見据えて4GBのスワップ領域を作成・永続化する手順の詳細です。

コマンド実行手順

1. スワップファイルの領域確保
sudo fallocate -l 4G /swapfile
  • fallocate: ファイルシステム上に指定サイズの領域を高速に確保するコマンド
  • -l 4G: ファイルサイズを4GB(ギガバイト)に指定
  • /swapfile: ルートディレクトリ直下に「swapfile」という名前でファイルを作成

このコマンドは、実際にゼロで埋めることなく、ファイルシステムレベルで4GBの連続した領域を即座に確保します。ddコマンドよりも高速です。

2. スワップファイルの権限設定
sudo chmod 600 /swapfile
  • chmod 600: ファイルのアクセス権限を設定
    • 6: 所有者(root)に読み取り(4) + 書き込み(2) = 6の権限
    • 0: グループメンバーには権限なし
    • 0: その他のユーザーには権限なし

セキュリティ上、スワップファイルには機密情報(メモリの内容)が含まれる可能性があるため、root以外はアクセスできないように制限します。

3. スワップ領域として初期化
sudo mkswap /swapfile
  • mkswap: ファイルやパーティションをスワップ領域として使用可能な形式にフォーマット
  • スワップヘッダー情報の書き込み
  • UUID(一意識別子)の生成

このコマンド実行後、ファイルがLinuxのスワップ形式として認識されるようになります。

4. スワップ領域の有効化
sudo swapon /swapfile
  • swapon: 指定したスワップ領域を即座に有効化
  • システムがメモリ不足時にこの領域を仮想メモリとして使用開始

この時点から、システムは物理メモリ4GB + スワップ4GB = 合計8GBのメモリ空間を利用可能になります。

5. スワップ設定の永続化(再起動後も有効にする)
grep -q "/swapfile" /etc/fstab || echo "/swapfile none swap sw 0 0" | sudo tee -a /etc/fstab

この行は条件付きでfstabにエントリを追加する処理です:

fstabとは

コマンドの構成要素

前半部分:既存設定の確認

  • grep -q "/swapfile" /etc/fstab
    • /etc/fstab内に/swapfileという文字列が既に存在するか確認
    • -q: quiet(結果を表示しない、終了コードのみ返す)

中間部分:条件分岐

  • ||: 論理OR演算子
    • 左側のコマンド(grep)が失敗した場合(文字列が見つからない = 終了コード1)のみ右側を実行

後半部分:設定の追記

  • echo "/swapfile none swap sw 0 0"

    • fstabエントリの内容を出力
    • 各フィールドの意味:
    • /swapfile: マウント対象のファイルパス
    • none: マウントポイント(スワップなので「none」)
    • swap: ファイルシステムタイプ
    • sw: マウントオプション(スワップ用)
    • 0: dump設定(バックアップ不要)
    • 0: fsck順序(チェック不要)
  • sudo tee -a /etc/fstab
    • tee -a: 標準入力を画面表示しつつファイルに追記
    • /etc/fstab: システム起動時に自動マウントする設定ファイル

この実装の利点

  • 重複防止: 既にfstabに設定がある場合は重複追加を防ぐ
  • 安全性: 設定がない場合のみ追記する安全な実装
  • 冪等性: 何度実行しても同じ結果が得られる

メールサーバーでのスワップの重要性

メールサーバーは多くのプロセスが動作し、以下の処理でメモリを消費します:

  • スパムフィルタリング
  • ウイルススキャン
  • メールキューの処理
  • データベース操作

このスワップ領域は、一時的なメモリ使用量の増加に対する重要な保険となります。

確認コマンド

設定後の確認には以下のコマンドを使用できます:

# スワップ状態の確認
free -h

# スワップ詳細情報
swapon --show

# fstab設定の確認
cat /etc/fstab | grep swap

sed-backup

2025/10/25
元記事

sed コマンドでのバックアップ指定方法

`sed -i.bak` でのバックアップファイル名

バックアップファイル名
sed -i.bak 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
このコマンドを実行すると、バックアップファイルは:
/etc/selinux/config.bak`
になります。

動作の詳細

`-i.bak` の仕組み:
  • `-i` の後に続く文字列(この場合`.bak`)が、元のファイル名の**末尾に追加**されます
  • 元ファイル:`/etc/selinux/config`
  • バックアップ:`/etc/selinux/config.bak`

様々なバックアップ指定例

# 1. 単純な拡張子追加
sed -i.bak 's/pattern/replace/' /etc/selinux/config
# → /etc/selinux/config.bak

# 2. 日付付きバックアップ
sed -i.$(date +%Y%m%d) 's/pattern/replace/' /etc/selinux/config
# → /etc/selinux/config.20251027

# 3. より詳細なタイムスタンプ
sed -i.bak-$(date +%Y%m%d_%H%M%S) 's/pattern/replace/' /etc/selinux/config
# → /etc/selinux/config.bak-20251027_143045

# 4. チルダ(~)を使う慣例
sed -i~ 's/pattern/replace/' /etc/selinux/config
# → /etc/selinux/config~

# 5. .origを使う(オリジナルの意味)
sed -i.orig 's/pattern/replace/' /etc/selinux/config
# → /etc/selinux/config.orig

実際の動作確認

# 実行前
$ ls -la /etc/selinux/
config

# コマンド実行
$ sudo sed -i.bak 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

# 実行後
$ ls -la /etc/selinux/
config # 変更されたファイル
config.bak # 元の内容を保持したバックアップ

# 内容の違いを確認
$ diff /etc/selinux/config.bak /etc/selinux/config
3c3
< SELINUX=enforcing
> SELINUX=disabled

注意点とTips

1. **既存バックアップの上書き**
# 注意:既に config.bak が存在する場合、上書きされます!
# より安全な方法(タイムスタンプ付き)
sed -i.bak-$(date +%Y%m%d_%H%M%S) 's/pattern/replace/' file
2. **バックアップを作りたくない場合**
# GNU sed(Linux)
sed -i '' 's/pattern/replace/' file    # エラーになる
sed -i 's/pattern/replace/' file       # バックアップなし
# BSD sed(macOS)
sed -i '' 's/pattern/replace/' file    # バックアップなし
3. **複数ファイルの処理**
# 複数ファイルを処理する場合
sed -i.bak 's/pattern/replace/' *.conf
# 結果
file1.conf → file1.conf.bak(バックアップ)
file2.conf → file2.conf.bak(バックアップ)

より実践的な使い方

# 1. バックアップディレクトリを分ける方法
cp /etc/selinux/config /tmp/config.bak-$(date +%Y%m%d)
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

# 2. バックアップの世代管理
backup_with_rotation() {
local file=$1
local max_backups=5

# 古いバックアップを削除
ls -t $file.bak* 2>/dev/null | tail -n +$*1 | xargs rm -f

# 新しいバックアップを作成
sed -i.bak-$(date +%Y%m%d_%H%M%S) 's/^SELINUX=.*/SELINUX=disabled/' "$file"
}

# 3. 変更前後の確認を含む安全な方法
safe_sed_with_backup() {
local file="/etc/selinux/config"
local backup="$file.bak-$(date +%Y%m%d_%H%M%S)"

# 明示的にバックアップ作成
cp -a "$file" "$backup"
echo "バックアップ作成: $backup"

# sed実行(-iでバックアップなし、既に作成済みなので)
sed -i 's/^SELINUX=.*/SELINUX=disabled/' "$file"

# 差分表示
diff -u "$backup" "$file"
}

まとめ
  • `sed -i.bak` は簡潔で便利。シンプルで覚えやすい。自動的にバックアップ作成
  • でも、既存の`.bak`ファイルを上書き。タイムスタンプがないので、いつのバックアップか不明

推奨される書き方:**

# タイムスタンプ付きが安全
sed -i.bak-$(date +%Y%m%d_%H%M%S) 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
これで、複数回実行してもバックアップが上書きされず、変更履歴を追跡できます。

*1 : max_backups+1

2&3 ロケール、時刻設定

2025/10/25
元記事

2. ロケール設定(ja_JP.UTF-8)の解説

sudo dnf install -y glibc-langpack-ja

日本語ロケールパッケージをインストールします

※ロケール=地域と言葉、文字コードの設定

glibc-langpack-jaは、システムで日本語を扱うために必要な言語パックです
-yオプションで、確認プロンプトに自動的に「yes」と答えます(対話的な確認をスキップ)
これにより、日本語の日付表記、通貨記号、文字コードなどが利用可能になります

インストール前に内容を確認したい場合
sudo dnf info glibc-langpack-ja    # パッケージ情報を表示
sudo dnf install glibc-langpack-ja  # -yなしで実行(確認あり)
他の言語パックを見たい場合
dnf search glibc-langpack           # 利用可能な言語パック一覧
sudo localectl set-locale LANG=ja_JP.UTF-8
システム全体のロケール(地域設定)を日本語UTF-8に設定
LANG=ja_JP.UTF-8の意味:
ja = 日本語(Japanese)
JP = 日本(Japan)
UTF-8 = 文字エンコーディング

UTF-8が主流になる世の中になって欲しいです(Windows系はいまだs-jis)

この設定で、エラーメッセージやシステムメッセージが日本語になります

現在の設定を確認
localectl status              # 現在のロケール設定を表示
利用可能なロケール一覧
localectl list-locales        # インストール済みのロケール一覧
locale -a                     # 同様の情報を別コマンドで
個別の環境変数を設定
export LANG=ja_JP.UTF-8      # 現在のセッションのみ変更

cat /etc/locale.conf

ロケール設定ファイルの内容を確認
設定が正しく保存されたか確認できます
期待される出力:LANG=ja_JP.UTF-8

補足情報:

ロケールの詳細を確認
locale                        # 現在適用されているロケール情報
locale -k LC_TIME            # 時刻表記の詳細設定を確認

3. タイムゾーンと時刻同期設定の解説

sudo timedatectl set-timezone Asia/Tokyo

タイムゾーンを東京(日本標準時)に設定
サーバーの時刻が日本時間(JST: UTC+9)で表示されるようになります
ログファイルのタイムスタンプなども日本時間になります

利用可能なタイムゾーン一覧
timedatectl list-timezones              # 全タイムゾーン表示
timedatectl list-timezones | grep Asia  # アジア地域のみ表示
現在の設定確認
timedatectl show                        # 詳細情報表示
date                                     # 現在時刻を確認
sudo systemctl enable --now chronyd
chronydはNTP(Network Time Protocol)クライアントであり、正確な時刻を発信しています。
インターネット上の時刻サーバーと同期して、正確な時刻を維持します
enableでシステム起動時の自動起動を有効化
--nowオプションで、有効化と同時にサービスを起動

詳細説明:

このコマンドは以下の2つを同時実行
sudo systemctl enable chronyd   # 自動起動を有効化
sudo systemctl start chronyd    # サービスを起動
他のオプション
sudo systemctl status chronyd   # サービスの状態確認
sudo systemctl restart chronyd  # サービスを再起動
chronyc sources                 # 同期先サーバーの確認
chronyc tracking               # 同期状態の詳細確認

timedatectl status

- 現在の時刻設定の詳細を表示
- 以下の情報が確認できます:
- Local time(ローカル時刻)
- Universal time(UTC時刻)
- RTC time(ハードウェア時刻)
- Time zone(タイムゾーン)
- NTP synchronized(時刻同期の状態)

表示例の解説:
Local time: 月 2025-10-27 14:30:45 JST # 日本時間
Universal time: 月 2025-10-27 05:30:45 UTC # 協定世界時
RTC time: 月 2025-10-27 05:30:45 # ハードウェア時計
Time zone: Asia/Tokyo (JST, +0900) # タイムゾーン
NTP synchronized: yes # NTP同期:有効

なぜこれらの設定が重要か:

ロケール設定

日本語でエラーメッセージが表示され、トラブルシューティングが容易になります。
日本語ファイル名が文字化けしない
日付や数値の表示が日本の形式になる

時刻設定

ログファイルの時刻が日本時間になり、問題発生時刻が分かりやすい
cronジョブ(定期実行タスク)が期待した時刻に実行される
SSL証明書の有効期限など、時刻に依存する機能が正しく動作

確認コマンド:
設定後の動作確認
echo $LANG              # 環境変数の確認
date                    # 日本時間で表示されるか
ls -l                   # 日時が日本語表記か確認
これらの設定はサーバー運用の基本となる重要な設定です。特に時刻同期は、ログ分析等で非常に重要になります。

1. システム初期確認

2025/10/25
元記事-Almalinux再構築手順

1. システム初期確認

目的:インストール直後のシステム情報を確認。
sudo cat /etc/almalinux-release
uname -r
ip -brief address
lsblk
df -hT
sudo dnf repolist

システム情報確認コマンドの解説

1. sudo cat /etc/almalinux-release

AlmaLinuxのバージョン情報を表示します
/etc/almalinux-releaseファイルには、OSのバージョンが記載されています
sudoは管理者権限で実行(この場合は不要ですが、習慣として使用)
catはファイルの内容を表示するコマンド

他のオプション:
bash# 同様の情報を得る別の方法
cat /etc/os-release # より詳細なOS情報
hostnamectl # システム全般の情報

2. uname -r

現在動作しているLinuxカーネルのバージョンを表示
カーネルは、OSの中核部分でハードウェアを制御します
-rは「release」の略で、リリース番号を表示

他のオプション:
bashuname -a # すべてのシステム情報を表示
uname -n # ホスト名のみ表示
uname -m # マシンのアーキテクチャ(x86_64など)を表示

3. ip -brief address

ネットワークインターフェースとIPアドレスを簡潔に表示
サーバーのネットワーク接続状況を確認できます
-briefで必要最小限の情報のみ表示

他のオプション:
baship a # 詳細なネットワーク情報(省略形)
ip addr show # 同上(正式な書き方)
ifconfig # 従来のコマンド(現在は非推奨)
hostname -I # IPアドレスのみを表示

4. lsblk

ブロックデバイス(ストレージデバイス)をツリー形式で表示
ディスクのパーティション構成が一目で分かります
マウント状況も確認可能

他のオプション:
bashlsblk -f # ファイルシステムの種類も表示
lsblk -d # パーティションを除外し、ディスクのみ表示
lsblk -o NAME,SIZE,TYPE,MOUNTPOINT # 表示する列を指定
fdisk -l # より詳細なディスク情報(要sudo)

5. df -hT

ディスクの使用状況を表示
-hは「human-readable」で、人間が読みやすい単位(GB、MBなど)で表示
-Tはファイルシステムのタイプ(ext4、xfsなど)も表示

他のオプション:
bashdf -h # ファイルシステムタイプなしで表示
df -i # iノード(ファイル数)の使用状況を表示
du -sh /path # 特定ディレクトリのサイズを確認
df --total # 合計行を追加表示

6. sudo dnf repolist

有効なソフトウェアリポジトリ(パッケージの取得元)一覧を表示
dnfはAlmaLinuxのパッケージ管理ツール
どこからソフトウェアをインストールできるか確認できます

他のオプション:
bashdnf repolist all # 無効なリポジトリも含めて表示
dnf repoinfo # リポジトリの詳細情報
dnf list available # インストール可能なパッケージ一覧
dnf check-update # アップデート可能なパッケージを確認
💡 初心者向けアドバイス
これらのコマンドはシステムの現状を把握するための基本的なコマンドです。サーバー設定の最初に実行することで:

OSが正しくインストールされたか
ネットワークが適切に設定されているか
ディスク容量は十分か
パッケージの取得元は正しいか

を確認できます。これらは読み取り専用のコマンドなので、システムに変更を加えることはありません。安心して実行してください。