Ubuntu22.04をドメイン参加してxrdpで接続する

前提条件

※ドメインコントローラーのIPは192.168.1.11
※クライアントのFQDNはclient.ad.example.jp

・ Ubuntu: 22.04.4
・ realmd: 0.17.0

DNSをドメインコントローラーにする。

# nmcli connection modify [接続名] ipv4.dns 192.168.1.11

ホスト名をFQDNにしておく。

# hostnamectl set-hostname client.ad.example.jp

ドメインに参加するためのパッケージをインストールする。

# apt install realmd

参加するドメインを確認する。

# realm discover AD.EXAMPLE.JP

ドメインに参加する。

# realm join AD.EXAMPLE.JP

xrdpをインストール、有効化して起動する。

# apt install xrdp
# systemctl enable --now xrdp

このままでもGUIログインやsshでのログインは問題ないが、xrdpにドメインユーザーで認証することができなかったので設定ファイルを2箇所変更した。

…
# ドメイン名を省略してログイン
# xrdpはデフォルトでドメイン名を解釈してくれない
#use_fully_qualified_names = True
use_fully_qualified_names = False
…
# xrdpセッションマネージャーのサービス名を指定
ad_gpo_map_remote_interactive = +xrdp-sesman

sssdを再起動する。

# systemctl restart sssd

Ubuntu22.04でdhcpとbindを連携させ家庭内DDNS

DNS(ddns.example.jp)サーバーもDHCPサーバーも1台で兼任させる。ActiveDirectory(ad.example.jp)に関するクエリはドメインコントローラーにフォワードさせる。

・ Ubuntu: 22.04.4
・ bind: 9.13.6
・ isc-dhcp-server: 4.4.1

DNSサーバーの設定

bindから設定、パッケージをインストールする。

# apt install bind9

オプション設定ファイルを変更または追記する。

options {
    directory "/var/cache/bind";
    …
    // 自分で名前解決できないときの丸投げ先
    forwarders {
        192.168.1.254;
        8.8.8.8;
    };
    …
    // DNSSECを自動に設定してDCへのフォワードは除外
    dnssec-validation auto;
    validate-except {
        "ad.example.jp";
    };
    …
    // IPv6を無効化
    listen-on-v6 { none; };
    …
    // LAN内からの問い合わせを許可
    allow-query {
        localhost;
        192.168.1.0/24;
    };
};

ローカル設定ファイルに追記する。

zone "ddns.example.jp." {
    type master;
    file "ddns.example.jp.zone";
    // 自身からの変更を許可
    allow-update {
        localhost;
    };
};
zone "ad.example.jp." {
    type forward;
    forward only;
    forwarders {
        192.168.1.12;
    };
};

さっき指定したzoneファイルを作成する。
※”admin.ddns.example.jp.”は”admin@ddns.example.jp”という管理者のE-mailという意味らしい

$TTL 86400
@    IN    SOA    sv.ddns.example.jp.    admin.ddns.example.jp. (
           2024071501
           10800
           36400
           604800
           86400
)

        IN    NS   sv.ddns.example.jp.
sv      IN    A    192.168.1.11

作成したらファイルの所有者をbindに変更する。

# chown bind:bind /var/cache/bind/ddns.example.jp.zone

サービスを有効にして起動。

# systemctl enable --now named

DHCPサーバーの設定

パッケージをインストールする。

# apt install isc-dhcp-server

設定ファイルで下記の箇所を変更する。

…
# DNSサーバーに更新要求を送信する設定
ddns-update-style interim;
…
# 普通のDHCPの設定
subnet 192.168.1.0 netmask 255.255.255.0 {
    range 192.168.1.101 192.168.1.120;
    option routers 192.168.1.254;
    option domain-name "ddns.example.jp";
    option domain-name-servers 192.168.1.11;
    # 更新を通知するDNSサーバーを指定
    zone ddns.example.jp. {
        primary localhost;
    }
}

サービスを有効にして起動。

# systemctl enable --now isc-dhcp-server

補足

現在のDNSレコードの確認

rndcでdumpして現在のDNSレコードを確認する。

# rndc dumpdb -zones
# less /var/cache/bind/named_dump.db
DNSレコードの更新テスト

nsupdateを使用してDNSサーバーを更新をテストするにはbind-utilsをインストールし、nsupdateコマンドを実行する。実行したら対話型コンソールになるので下記のような感じで入力する。何もエラーが出なければOK。

>server 127.0.0.1
>update add test.ddns.example.jp. 3600 A 192.168.1.222
>send
>server 127.0.0.1
>update delete test.ddns.example.jp.
>send

Ubuntu22.04でActiveDirectoryを構築してファイル共有もする

前提条件

※プライマリ(192.168.1.11)とセカンダリ(192.168.1.12)の2台を設定
※ddnsは別のbindサーバーが担うので設定しない
※ntpサーバーは外部のものを使うので設定しない
※プライマリのみをファイルサーバーにする

・ Ubuntu: 22.04.4
・ samba: 4.15.13

プライマリとセカンダリ共通の設定手順

ホスト名をFQDNにする。

# hostnamectl set-hostname [ホスト名].ad.example.jp

公式によると下記のパッケージが必要らしいのでインストール。

# apt install acl attr samba winbind libpam-winbind libnss-winbind krb5-config krb5-user dnsutils python3-setproctitle

samba-ad-dcサービスのマスクを解除する。

# systemctl unmask samba-ad-dc

まぎらわしいサービスを無効化する。

# systemctl disable --now smbd nmbd winbind
# systemctl mask smbd nmbd winbind

設定ファイルのバックアップを取る。

# mv /etc/samba/smb.conf /etc/samba/smb.conf.backup
# mv /etc/krb5.conf /etc/krb5.conf.backup

プライマリドメインコントローラーの設定手順

ドメインのプロビジョニングを実行する。
–-use-rfc2307 (UNIX系を認証する場合は必須)
--interactive (セットアップを対話式で行う)

# samba-tool domain provision --use-rfc2307 --interactive
----------------------------------------
Realm:  AD.EXAMPLE.JP
Domain [AD]:  EXAMPLE
Server Role (dc, member, standalone) [dc]:
DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]:
DNS forwarder IP address (write 'none' to disable forwarding) [127.0.0.53]:  8.8.8.8
Administrator password:
Retype password:
…

もし実行中に下記メッセージで停止してしまう場合は、sambaをpurgeして、/var/lib/samba/を削除して、sambaを再インストールしてからやり直す。

Repacking database from v1 to v2 format (first record CN=FileLinks,CN=System,DC=ad,DC=example,DC=jp)

できあがったkrb5.confをコピーする。

# cp /var/lib/samba/private/krb5.conf /etc/krb5.conf

samba-ad-dcサービスを有効化する。

# systemctl enable --now samba-ad-dc

systemd-resolvedがDNSサーバーの邪魔をするので無効化する。

# systemctl disable --now systemd-resolved
# rm /etc/resolv.conf

/etc/resolv.confをNetworkManagerに作らせるためmainセクションに追記する。

[main]
dns=default
…

DNSを自分自身に変更して再起動する。

# nmcli connection modify [コネクションID] ipv4.dns 127.0.0.1
# shutdown -r now

セカンダリドメインコントローラーの設定手順

参照するDNSをプライマリに変更する。

# nmcli connection modify [コネクションID] ipv4.dns 192.168.1.11
# nmcli connection up [コネクションID]

ドメインコントローラーとしてjoinする。

# samba-tool domain join ad.example.jp DC -U administrator@example

smb.confのglobalセクションに下記を追記する。

…
dns forwarder = [プライマリと同じforwarder]
idmap_ldb:use rfc2307 = yes
…

GPOが同期されないので、セカンダリ側からプライマリのGPOをコピーするスクリプトを適当に書いた。GPOの変更はプライマリに対して行う運用にして、変更後はセカンダリで下記スクリプトをrootで実行するようにする。スクリプトにはパスワード書いておくのでパーミッションは700にする。

#!/bin/bash
if [ ${EUID:-${UID}} != 0 ]; then
    echo "Please run with Root."
    exit 1
fi
mount.cifs -V 1>/dev/null 2>/dev/null
if [ ! $? -eq 0 ]; then
    echo "cifs-utils is not installed."
    exit 1;
fi
temporary="/tmp/sysvol"
dc="pdc.ad.example.jp"
domain="example";
user="administrator";
pass="password";
mkdir -p $temporary
mount.cifs -o username=$user@$domain,password=$pass,file_mode=0400,dir_mode=0500 //$dc/sysvol $temporary
if [ ! $? -eq 0 ]; then
    exit 1;
fi
cp -rf $temporary/* /var/lib/samba/sysvol/
samba-tool ntacl sysvolreset
umount $temporary

ここからプライマリと同じ手順。

# cp /var/lib/samba/private/krb5.conf /etc/krb5.conf
# systemctl enable --now samba-ad-dc
# systemctl disable --now systemd-resolved
# rm /etc/resolv.conf
# sed -i "s/\[main\]/\[main\]\ndns=default/g" /etc/NetworkManager/NetworkManager.conf
# nmcli connection modify [コネクションID] ipv4.dns 127.0.0.1
# shutdown -r now

ファイルサーバーの設定手順

共有するディレクトリを作成する。
※root以外がアクセスできないようにする

# mkdir -p /data/samba/share
# chmod 770 /data/samba/share

sambaの設定ファイルを編集して最下行に追記する。
※Linuxへの共有が目的なので「Windows ACL」はいらない
※”force user”にrootを指定してファイル操作をrootで実行させる

…
[share]
path = /data/samba/share
nt acl support = no
create mask = 0660
directory mask = 0770
force user = root
writable = yes
valid users = "example\user1" @"example\Domain Admins"

samba-ad-dcサービスを再起動する。

# systemctl restart samba-ad-dc

使いそうなコマンド

DNSレコードに登録されているLDAPとKerberosのサービスを確認できる。この手順で構築した環境で実行すると2行のレコードが表示される。

# host -t SRV _ldap._tcp.ad.example.jp.
# host -t SRV _kerberos._udp.ad.example.jp.

DNSの更新状況を確認できる。
No DNS updates needed ならOKらしい。

# samba_dnsupdate --verbose

パスワードに関するポリシーの確認と変更ができる。

# samba-tool domain passwordsettings show
# samba-tool domain passwordsettings set --complexity=off
# samba-tool domain passwordsettings set --min-pwd-length=5
# samba-tool domain passwordsettings set --min-pwd-age=30
# samba-tool domain passwordsettings set --max-pwd-age=0
# samba-tool domain passwordsettings set --account-lockout-duration=60
# samba-tool domain passwordsettings set --account-lockout-threshold=3
# samba-tool domain passwordsettings set --reset-account-lockout-after=60
# samba-tool domain passwordsettings set --history-length=5

ユーザーの新規作成、初回ログイン時にパスワードを変更させる。

# samba-tool user add user1 --must-change-at-next-login

ユーザーのロック状態を解除する。

# samba-tool user unlock user1

ユーザーのパスワードを変更して、次回ログイン時にパスワードを変更させる。

# samba-tool user setpassword user1 --must-change-at-next-login

ユーザーをグループに追加する。

# samba-tool group addmembers "Domain Admins" user1

ドメインコントローラーの降格。

# samba-tool domain demote --remove-other-dead-server=[ホスト名]

FSMOを確認できる。

# samba-tool fsmo show

FSMOの移行。転送先サーバーで下記コマンドを実行する。

# samba-tool fsmo transfer --role all

Ubuntu22.04で画像を一括編集する

ファイルを検索した結果を一括トリミングする。
※画像は編集後に上書き保存される
※幅:1000px/高さ:700px/水平方向(X)開始位置:100px/垂直方向(Y)開始位置:50pxで切り抜く場合

$ find ./TestGallery/ -name "*.jpg" -print0 | xargs -0 mogrify -crop 1000x700+100+50

ファイルを検索した結果を一括リサイズする。
※画像は編集後に上書き保存される
※50%の大きさにリサイズする場合

$ find ./TestGallery/ -name "*.jpg" -print0 | xargs -0 mogrify -resize 50%

Ubuntu22.04で肥大化したqcow2を小さくする

virt-sparsifyを使用するためパッケージをインストール。

# apt install libguestfs-tools

下記のコマンドで小さくできる。シンプロビジョニングには/tmp/を使用するので空き容量に注意。

# virt-sparsify /path/to/vm/image.qcow2 /path/to/vm/image2.qcow2

Ubuntu22.04でのOpenVPNサーバーの設定

前提条件

※tun(ルーティング)方式で設定する
※自宅用なのでセキュリティリスク(CAの秘密鍵へのアクセス)を承知した上でOpenVPNサーバーとCAを同じマシンにインストールする

・ Ubuntu: 22.04.1
・ openvpn: 2.5.5
・ easy-rsa: 3.0.8
・ openssl: 3.0.2

サーバー設定手順

openvpnとeasy-rsaをインストールする。

# apt install openvpn easy-rsa

ルート証明書の有効期間(日数)を変更したい場合、事前に下記を参考に環境変数を変更する。

# export EASYRSA_CA_EXPIRE=7300

公開鍵基盤(PKI)を初期化して認証局(CA)を設置する。CA作成時に秘密鍵のパスフレーズを聞いてくる。このパスフレーズは新しい証明書発行時に必要になる。

# cd /usr/share/easy-rsa/
# ./easyrsa init-pki
# ./easyrsa build-ca

認証局(CA)が発行する証明書の有効期間(日数)を変更したい場合、事前に下記を参考に環境変数を変更する。

# export EASYRSA_CERT_EXPIRE=3650

VPNサーバー用の証明書を作成する。
※パスフレーズは不要なのでnopassを指定

# ./easyrsa build-server-full vpn.example.com nopass

Diffie-Hellmanパラメーターファイルを作成する。

# ./easyrsa gen-dh

TLS-AuthのHMACに使用する共通鍵を作成する。

# openvpn --genkey secret /etc/openvpn/server/ta.key

OpenVPNサーバーの設定ファイルをサンプルからコピーする。

# cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf /etc/openvpn/

設定ファイルを下記のように変更する。
※重要そうな箇所のみ記載
※serverにはクライアントに割り当てられるipアドレスを定義
※push(route)にはクライアントにアクセスを許可するサーバーのプライベートネットワークを指定
※push(redirect-gateway)でクライアントのIPトラフィックがVPNを通過するよう設定
※push(dhcp-option DNS)でクライアントが使用するDNSサーバーを指定
※client-to-clientでクライアント同士の通信を許可
※duplicate-cnで同じ証明書を使用した複数のクライアント接続を許可(非推奨)

port 7716
proto udp
dev tun
ca /usr/share/easy-rsa/pki/ca.crt
cert /usr/share/easy-rsa/pki/issued/vpn.example.com.crt
key /usr/share/easy-rsa/pki/private/vpn.example.com.key
dh /usr/share/easy-rsa/pki/dh.pem
server 172.16.1.0 255.255.255.0
push "route 192.168.1.0 255.255.255.0"
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 192.168.1.11"
push "dhcp-option DNS 8.8.8.8"
client-to-client
duplicate-cn
tls-auth server/ta.key 0

IPフォワードを有効にして、異なるネットワーク(NIC)間でパケットが転送されるように設定変更する。

# sed -i "s/#net.ipv4.ip_forward/net.ipv4.ip_forward/g" /etc/sysctl.conf
# sysctl -p

iptablesでIPマスカレードを有効に設定する。

# apt install iptables-persistent
# iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -o [デバイス名] -j MASQUERADE
# netfilter-persistent save

サービスを有効化して起動する。

# systemctl enable --now openvpn@server

クライアント証明書の発行

クライアントに配る*.ovpnを作成するのが面倒なのでスクリプトを作成した。地味にハマったポイントはTLS-Authの「key-direction 1」サーバーの設定が0なら1にする必要がある。

#!/bin/bash
easyrsa_location=/usr/share/easy-rsa
sample_config_location=/usr/share/doc/openvpn/examples/sample-config-files
takey_location=/etc/openvpn/server/ta.key
server=vpn.example.com
port=7716
echo "作成するユーザーIDを入力してください。"
read -p "ユーザーID:" id
if [ -z "$id" ]; then
    exit 0
fi
fullname=$id.$server
echo
echo "クライアント接続設定ファイル「$id.ovpn」を作成します。"
read -p "Enterキーで続行します。" result
if [ ! -z "$result" ]; then
    exit 0
fi
echo
default_location=$(pwd)
cd $easyrsa_location
./easyrsa build-client-full $fullname nopass
if [ ! $? -eq 0 ]; then
    exit 0;
fi
cd $default_location
cp $sample_config_location/client.conf $id.ovpn
sed -i "s/my-server-1 1194/$server $port/g" $id.ovpn
sed -i "s/ca ca.crt/#ca ca.crt/g" $id.ovpn
sed -i "s/cert client.crt/#cert client.crt/g" $id.ovpn
sed -i "s/key client.key/#key client.key/g" $id.ovpn
sed -i "s/tls-auth ta.key 1/#tls-auth ta.key 1\nkey-direction 1/g" $id.ovpn
echo "" >>$id.ovpn
# CA
echo "<ca>" >>$id.ovpn
grep -A 100 'BEGIN CERTIFICATE' $easyrsa_location/pki/ca.crt >>$id.ovpn
echo "</ca>" >>$id.ovpn
echo "" >>$id.ovpn
# Key
echo "<key>" >>$id.ovpn
grep -A 100 'BEGIN PRIVATE KEY' $easyrsa_location/pki/private/$fullname.key >>$id.ovpn
echo "</key>" >>$id.ovpn
echo "" >>$id.ovpn
# Cert
echo "<cert>" >>$id.ovpn
grep -A 100 'BEGIN CERTIFICATE' $easyrsa_location/pki/issued/$fullname.crt >>$id.ovpn
echo "</cert>" >>$id.ovpn
echo "" >>$id.ovpn
# TLS-auth
echo "<tls-auth>" >>$id.ovpn
cat $takey_location >>$id.ovpn
echo "</tls-auth>" >>$id.ovpn
echo "" >>$id.ovpn
echo "作成が完了しました。"

実行可能にしてスクリプトを実行すれば対話型でクライアント用の*.ovpnを作成できる。作成された*.ovpnのパーミッションには気をつけが方が良い。

# chmod +x build-client-ovpn.sh
# ./build-client-ovpn.sh

クライアント証明書の更新

更新が可能になる期間を変更したい場合、事前に下記を参考に環境変数を変更する。

# export EASYRSA_CERT_RENEW=365

これも面倒なので更新用のスクリプトを作成した。

#!/bin/bash
easyrsa_location=/usr/share/easy-rsa
sample_config_location=/usr/share/doc/openvpn/examples/sample-config-files
takey_location=/etc/openvpn/server/ta.key
server=vpn.example.com
port=7716
echo "更新するユーザーIDを入力してください。"
read -p "ユーザーID:" id
if [ -z "$id" ]; then
    exit 0
fi
fullname=$id.$server
echo
if [ ! -f "$easyrsa_location/pki/issued/$fullname.crt" ]; then
    echo "既存の証明書が見つかりませんでした。"
    exit 1
fi
echo "クライアント接続設定ファイル「$id.ovpn」を再作成します。"
read -p "Enterキーで続行します。" result
if [ ! -z "$result" ]; then
    exit 0
fi
echo
default_location=$(pwd)
cd $easyrsa_location
./easyrsa renew $fullname nopass
if [ ! $? -eq 0 ]; then
    exit 0;
fi
cd $default_location
cp $sample_config_location/client.conf $id.ovpn
sed -i "s/my-server-1 1194/$server $port/g" $id.ovpn
sed -i "s/ca ca.crt/#ca ca.crt/g" $id.ovpn
sed -i "s/cert client.crt/#cert client.crt/g" $id.ovpn
sed -i "s/key client.key/#key client.key/g" $id.ovpn
sed -i "s/tls-auth ta.key 1/#tls-auth ta.key 1\nkey-direction 1/g" $id.ovpn
echo "" >>$id.ovpn
# CA
echo "<ca>" >>$id.ovpn
grep -A 100 'BEGIN CERTIFICATE' $easyrsa_location/pki/ca.crt >>$id.ovpn
echo "</ca>" >>$id.ovpn
echo "" >>$id.ovpn
# Key
echo "<key>" >>$id.ovpn
grep -A 100 'BEGIN PRIVATE KEY' $easyrsa_location/pki/private/$fullname.key >>$id.ovpn
echo "</key>" >>$id.ovpn
echo "" >>$id.ovpn
# Cert
echo "<cert>" >>$id.ovpn
grep -A 100 'BEGIN CERTIFICATE' $easyrsa_location/pki/issued/$fullname.crt >>$id.ovpn
echo "</cert>" >>$id.ovpn
echo "" >>$id.ovpn
# TLS-auth
echo "<tls-auth>" >>$id.ovpn
cat $takey_location >>$id.ovpn
echo "</tls-auth>" >>$id.ovpn
echo "" >>$id.ovpn
echo "作成が完了しました。"

実行可能にすれば対話型で更新ができる。作成された*.ovpnのパーミッションには気をつけが方が良い。

# chmod +x renew-client-ovpn.sh
# ./renew-client-ovpn.sh

Ubuntuを使ってWindows11のHDD(500GB)からSSD(256GB)のクローンを作成する

500GBのHDDから256GBのSSDに換装するのが目的。

BitLockerが有効な場合な無効化する
HDD全体のイメージバックアップを取る
HDDの使用領域を250GB程度に収める

gpartedをインストールして起動し、必要なパーティションの終了セクタが500,000,000(256GB÷512)程度以下なるように調整して、それ以降のセクタを削除する。

# apt install gparted

事前にlsblkなどでデバイスパスを把握し、ddコマンドでコピーする。
※countの値は256GB÷1024k

# dd if=/dev/[コピー元] of=/dev/[コピー先] bs=1024k count=256k status=progress

コピーが終了したらgdiskでパーティションテーブルを修正する。

# gdisk /dev/[コピー先]
GPT fdisk (gdisk) version 1.0.8

Warning! Disk size is smaller than the main header indicates! Loading
secondary header from the last sector of the disk! You should use 'v' to
verify disk integrity, and perhaps options on the experts' menu to repair
the disk.
Caution: invalid backup GPT header, but valid main header; regenerating
backup header from main header.

Warning! One or more CRCs don't match. You should repair the disk!
Main header: OK
Backup header: ERROR
Main partition table: OK
Backup partition table: ERROR

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: damaged

****************************************************************************
Caution: Found protective or hybrid MBR and corrupt GPT. Using GPT, but disk
verification and recovery are STRONGLY recommended.
****************************************************************************

Command (? for help): x

Expert command (? for help): v

Caution: The CRC for the backup partition table is invalid. This table may
be corrupt. This program will automatically create a new backup partition
table when you save your partitions.

Problem: The secondary header's self-pointer indicates that it doesn't reside
at the end of the disk. If you've added a disk to a RAID array, use the 'e'
option on the experts' menu to adjust the secondary header's and partition
table's locations.

Problem: Disk is too small to hold all the data!
(Disk size is 488397168 sectors, needs to be 1953525168 sectors.)
The 'e' option on the experts' menu may fix this problem.

Problem: GPT claims the disk is larger than it is! (Claimed last usable
sector is 1953525134, but backup header is at
1953525167 and disk size is 488397168 sectors.
The 'e' option on the experts' menu will probably fix this problem

Partition(s) in the protective MBR are too big for the disk! Creating a
fresh protective or hybrid MBR is recommended.

Identified 5 problems!

Expert command (? for help): e
Relocating backup data structures to the end of the disk

Expert command (? for help): w

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/[コピー先].
The operation has completed successfully.

Windowsのパーティションが見えるようになったら、最後にgpartedで右端に余っている空き領域を利用できるよう設定する。

Ubuntu22.04のgrubでfsckのメッセージだけが表示される問題

plymouthが開始される前に数秒だけ「/dev/nvme0n1p2: clean, 219170/31227904 files, 4614538/124895488 blocks」というメッセージが表示される。ディスクチェックが正常に終了したというfsckからのメッセージらしいけど、格好悪いので非表示にしたい。

Ubuntu 22.04.1

下記の内容でファイルを作成する。

FRAMEBUFFER=y

下記のコマンドを実行する。

# update-initramfs -u

LinuxMint21でスワップ領域を追加する

Linux Mint 21 Vanessa

既存のスワップファイルの容量を変更する場合

※一度スワップ領域がなくなるので物理メモリに余裕がない場合は危険

スワップを一度offにする。

# swapoff --all

新しいスワップファイルを作成する。

# dd if=/dev/zero of=/swapfile bs=1M count=8192
# chmod 600 /swapfile

新しいスワップファイルをスワップ領域としてマークする。

# mkswap /swapfile

スワップを有効化する。

# swapon /swapfile

既存のスワップファイルとは別のスワップファイルを追加する場合

※既存のスワップ領域を活かしたまま追加できるため物理メモリに余裕がない場合に有効

新しいスワップファイルを作成する。

# dd if=/dev/zero of=/swapfile2 bs=1M count=4096
# chmod 600 /swapfile2

新しいスワップファイルをスワップ領域としてマークする。

# mkswap /swapfile2

スワップを有効化する。

# swapon /swapfile2

fstabに下記の行を追記して再起動時にスワップが自動的に有効化されるように設定する。

/swapfile2    none    swap    sw    0    0