この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
ファイルを閉じる時にClose error on swapと出るパターンもあります。Linuxサーバーの運用中に突然遭遇すると焦りますが、原因はほぼ1つに絞れます。
この記事では、viエディタでWrite error in Swap Fileと表示された場合の対処法を、エラーが出る仕組み・原因の切り分け手順・ディスク容量の確保方法・viのスワップファイルの仕組みまで含めて解説します。
この記事のポイント
・原因の多くはディスク容量不足(df -h で確認)
・du -m / | sort -nr | head で大容量ディレクトリを特定
・inode枯渇でも同じエラーが出るので df -i も確認
・スワップファイル(.swp)の保存先は :set directory で変更できる
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
Write error in Swap Fileが表示される仕組み
viエディタ(およびvim)は、ファイルを開いた瞬間に「スワップファイル」と呼ばれる作業用ファイルを生成します。編集中の変更内容を一時保存し、クラッシュ時の復旧に使う仕組みです。スワップファイルは、編集対象ファイルと同じディレクトリに「.ファイル名.swp」という名前で作成されます。たとえば /etc/hosts を編集すれば /etc/.hosts.swp が生成されます。
このスワップファイルへの書き込みが失敗すると「Write error in Swap File」というエラーが表示されます。ファイルを閉じる時に出る「Close error on swap」も同じ系統のエラーで、スワップファイルへの最終フラッシュに失敗したことを意味します。
書き込み失敗の原因は次のいずれかに該当します。
・ディスク容量不足:もっとも多い。dfで100%に近い
・inode枯渇:ファイル数が上限到達。df -iで100%
・パーティションがread-only:ファイルシステムエラー後の自動remount
・権限不足:スワップファイル保存先に書き込み権限がない
ディスク容量を確認する(df -h)
最も多い原因はディスク容量不足です。まずは df -h で全マウントポイントの使用率を確認します。# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda1 20G 20G 0 100% / tmpfs 1.9G 0 1.9G 0% /dev/shm /dev/sda2 100G 78G 22G 78% /var
使用量の多いディレクトリを特定する(du -m)
df で容量逼迫を確認したら、次に du でどのディレクトリが容量を食っているかを特定します。元記事と同じく、/ ルートからスキャンして上位10件を表示するコマンドが定番です。# du -m / | sort -nr | head -10 ※使用量の多い上位10ディレクトリを表示します。
ただし du / は他のファイルシステム(/proc、/sys、ネットワークマウント等)まで走査するため時間がかかります。同じファイルシステム内に限定するには -x オプションを付けると速くなります。
# du -mx / | sort -nr | head -20 # または GB単位で見たい場合 # du -hx / | sort -h | tail -20
容量を食う代表的なディレクトリと削除候補
Linuxサーバーで容量逼迫を起こしやすいディレクトリと、安全に削除できるファイルの候補を整理します。・/var/log:ログファイル肥大化(journal・nginx・mysql等)
・/var/cache/yumまたは/var/cache/dnf:パッケージキャッシュ
・/tmp:再起動で消えるが大容量ファイル放置がある場合は確認
・/var/lib/docker:未使用コンテナ・イメージ・ボリューム
・/root/.cacheまたは/home/*/.cache:ユーザーキャッシュ
代表的な掃除コマンドを以下に示します。
# 古いログ削除(systemd journal) # journalctl --vacuum-size=200M # パッケージキャッシュ削除 # dnf clean all # または # yum clean all # Dockerの不要リソース削除 # docker system prune -a # 30日以上前の/tmp配下ファイル削除 # find /tmp -type f -mtime +30 -delete
inode枯渇でも同じエラーが出る
ディスク容量に余裕があるのに Write error in Swap File が出る場合、inode(i番号)の枯渇が疑われます。ファイル数の上限に達した状態です。inodeの使用状況は df -i で確認できます。
# df -i Filesystem Inodes IUsed IFree IUse% Mounted on /dev/sda1 1310720 1310720 0 100% /
# ディレクトリ単位でファイル数を集計 # find / -xdev -type f | cut -d/ -f2-4 | sort | uniq -c | sort -rn | head -20
大容量ファイルだけを狙い撃ちで探す
ディレクトリ単位の集計ではなく「単体で大容量のファイル」を直接探したい場合は、findコマンドが便利です。容量上位を一気に並べられます。# 100MB以上のファイルを一覧 # find / -xdev -type f -size +100M -exec ls -lh {} \; 2>/dev/null # 同じことをサイズ降順で並べる # find / -xdev -type f -size +100M -printf "%s %p\n" 2>/dev/null | sort -rn | head -20
削除済みなのにディスクが解放されない状態(プロセスがファイルを開いたままrmされた)もLinuxサーバーでは頻発します。次のコマンドで該当プロセスを特定できます。
# 削除済みなのにオープン中のファイルを検出 # lsof +L1 | head -20
その他の原因と対処(read-only・権限・スワップ無効化)
パーティションがread-onlyになっている
ファイルシステムエラー後にカーネルが自動でread-only remountすることがあります。dmesg で確認します。# mount | grep " / " /dev/sda1 on / type ext4 (ro,...) # dmesg | tail -50 EXT4-fs error: ... remounting filesystem read-only
スワップファイルの保存先を変更する
編集対象ファイルのディレクトリが書き込み禁止の場合、:set directory で別の場所にスワップファイルを置けます。viコマンド実行中、コマンドモードで次のように入力します。:set directory=/tmp
echo 'set directory=/tmp' >> ~/.vimrc
スワップファイルを無効化する(緊急時のみ)
どうしてもスワップファイルを生成させたくない場合は、起動時に -n オプションを付けます。ただしクラッシュ時の復旧ができなくなるため、緊急避難用です。# vi -n /etc/hosts
復旧後に残る .swp ファイルの取り扱い
ディスク容量を確保してvi編集を再開しようとすると、今度は「E325: ATTENTION Found a swap file by the name ".hosts.swp"」という警告が表示されることがあります。前回の編集セッションでスワップファイルが残ったままになっているケースです。中断時に未保存の変更があれば :recover で復元できます。一方、前回の編集を破棄して問題ない場合は、残った .swp ファイルを削除してから再度viを起動してください。
# 残っている.swpファイルを確認 # ls -la /etc/.hosts.swp # 不要なら削除 # rm /etc/.hosts.swp # 復元したい場合 # vi -r /etc/hosts
本記事のまとめ
Write error in Swap Fileのトラブルシュート手順を一覧にまとめます。| 確認・対処内容 | コマンド |
|---|---|
| ディスク容量の確認 | df -h |
| 容量を食うディレクトリを特定 | du -m / | sort -nr | head -10 |
| 同一FS内に限定して高速集計 | du -mx / | sort -nr | head -20 |
| inode使用状況の確認 | df -i |
| パッケージキャッシュ削除 | dnf clean all |
| systemdログ削減 | journalctl --vacuum-size=200M |
| Docker不要リソース削除 | docker system prune -a |
| read-onlyかを確認 | mount | grep " / " |
| スワップ保存先を変更 | :set directory=/tmp |
| スワップ無効でvi起動 | vi -n ファイル名 |
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。
登録無料・いつでも解除できます