XSERVER総ファイル数が赤文字の時の対処法。
2024年07月21日
XSERVERの管理画面に入ると、左側に「アカウントデータ」パネルがあります。サーバ容量は最小でも300GBあるので余裕ですが「総ファイル数」が赤くなっていませんか?
これは「契約サーバアカウントで許容されるファイル総数を超過しているよ」という案内で、具体的に警告があったり利用制限されることはマレですが、不具合が生じる場合があります。
具体的には
- FTPでファイルをアブロード、ダウンロード時にエラーになりやすい。
- サイトの動作が微妙に遅い。
といった具合です。
このまま放置してはまずいので、解決します。そのための準備のお話をします。
XSEVERでは「総ファイル数制限」について具体的な数字は非公表としていますが、X10契約で100万ファイルが目処なのは明らかです。
なぜファイル数が100万にもなるのか?
WordPressで構築したサイトの場合を対象とします。
まず、サイトごとのディレクトリより上位にシステムやメールで使用するディレクトリとそのファイルがあります。
サイトごとのディレクトリにもシステムで使用するディレクトリとそのファイルがあります。
mailディレクトリにはメールアカウントごと(info@d7r.com、office@d7r.com…)にディレクトリが作られ、それぞれにnew、cur、tmp、.Sent、.Junkといったサブディレクトリが存在します。newディレクトリには受信以前のメールが1通1ファイルで保存されています。つまり1万通のメールをサーバに残してあると1万ファイル消費されるわけです。POP3受信であればサーバから適宜消去されますが、IMAPの場合は延々と残り続けます。怖いですね。
さて、サイトを公開しているpublic_htmlディレクトリ以下では
- WordPress6.6の場合、3,316ファイルで構成されています。
- 画像はwp-content/uploads/2024/07(例)ディレクトリに格納されています。
- 画像はWordPressの「設定-メディア」で設定したサムネイル・中サイズ・大サイズ・フルサイズが作成されています。最低でも4ファイルできます。
- 長辺2500ピクセルを超える画像をアップした場合、-scaledと名称追加されたファイルも作成されて、オリジナル画像とは別にフルサイズ画像として扱われます。
- simple-image-sizesのように画像サイズを追加できるプラグインもあり、ますます画像ファイルは増えます。
- 特に古くからWordPressを使用しているサイトでは、転送時間短縮のために最適サイズの画像を多数生成することが当たり前でした。1画像について10ファイルを生成するように設定されたサイトも珍しくはありません。
- 古いキャッシュ系のプラグインではキャッシュファイルが更新されず、延々と残り続けてしまう不具合があるものもありました。
- バックアップ系プラグインの設定によっては、システムを丸ごと複数世代(5〜15程度)残してしまい、それだけで数十万ファイルになることもありえます。そもそもバックアップはXSERVERのサービスで●サイト全体●データベースとも1週間取ってくれるため、不要です。
- ログファイルが多数たまっている場合があります。
- テストに使ったディレクトリが放置されている場合がありえます。
と、大した容量を食わずとも大量のファイルが蓄積されていきます。
長くWordPressを使っていると1000記事くらいにはなるかと思います。1記事に2点程度写真を入れると1画像あたり5ファイル生成されていれば10ファイル。1000記事で1万ファイル。システム、プラグインで5000ファイル。計1万5000ファイル。
↑これを基準に自分のサイトで「何がファイル数を喰っているか?」を調べてみましょう。
ファイル数を減らすには?
縮小画像の自動生成を止め、古い縮小ファイルを一括削除し、テンプレートで縮小画像をあまり使わないように設定し、必要な縮小画像を再生成し、データベースの縮小画像部分を書き換えてサイトを再構築します。
すっごく複雑で手間がかかり、縮小画像(一般にサムネイルと呼ばれますが、WordPress設定のThumbnailとかぶるためこう呼びます)が表示されなくなることが頻発する可能性があります。
なるべく一括処理をして手作業は減らしたいのですが、そもそも画像のアップロードサイズがサイトによって異なるため、決め手がありません。
古いキャッシュについては削除すれば済みます。バックアップについても同様です。
ここで問題が発生します。
ある程度まとまった数のファイルをFTPソフト(Filezilla、Transmit、FFFTP等)で削除すると、途中で止まってしまうのです!!!これはサーバ側のファイル管理能力を超えたところで作業しているから…としか言いようがありません。
画像の削除も、目視で縮小画像のみをチマチマと削除していくのは現実的ではありませんので、FTPでバックアップしてローカルで一括削除したいのですが、そもそもバックアップFTPが途中で止まります。
XSERVERのサービスに「Backup」がありますが、こちらもほぼ失敗します。サイトを丸ごとZIP圧縮して1ファイルで落としてくるのですが、ファイル数が多すぎて圧縮失敗したり、容量が大きすぎてダウンロード失敗するのです。
困った。
完全に不要なディレクトリ、ファイルはSSHで一発削除!
みんな大好きLinuxコマンドを使えば、どんなに大きなファイルもファイル数もまとめて一発で削除できます。WindowsやMacと違って確認ダイアログも出ずに「あ!あぁぁぁ…」という間に消してくれて回復の手段はありません。怖くて楽しいですね!
rm -Rf ./test
とやれば、現ディレクトリ下にあるtestディレクトリ以下のファイルをディレクトリごと消してくれます。間違ってもrm -Rf /とやらないように。全部消えます。
手順は
- XSERVERでSSHを使えるように設定する。
- XSERVERで認証鍵を生成してダウンロードし、所定のフォルダに移動する。
- Macの場合、ターミナルでSSHコマンドを入力してXSERVERに接続する。
- 削除コマンドを入力する。
- サーバから切断する。
XSSERVERでSSHを使えるようにする設定
XSERVERのサーバパネルにログインします。
SSH設定を選択します。
ON(国内からのアクセスのみ許可)を選び設定します。
SSHが必要な作業が終わったら、設定はOFFに戻しておきましょう。
XSERVERで認証鍵を生成してダウンロードし、所定のフォルダに移動する
公開認証用鍵ペアの作成を選び、パスフレーズを入力します。パスフレーズは英数で、何でもかまいません。
このパスフレーズは重要ですので「SSH接続設定.txt」を作って保存しておきます。以下、各種設定やコマンドはこのファイルに追記していきます。
確認画面へ進みます。
「生成する」を選択すると、公開認証がファイルがダウンロードされます。名称は「サーバID.key(例:d7r.key)」です。
MacのターミナルでSSHコマンドを入力してXSERVERに接続する
公開認証がファイル「サーバID.key(【サーバID】は自分のサーバIDを入力)」をユーザーディレクトに移動しておきます。
ターミナル.app(アプリケーション-ユーティリティフォルダにあります)を起動します。
公開認証鍵を通例の位置に移動し、パーミッションエラーを避けるために設定しておきます。
mv サーバID.key ./.ssh
chmod 600 ./.ssh/サーバID.key
次に、XSERVERに接続するために以下のコマンドを入力します。
ssh サーバID@サーバID.xsrv.jp -p 10022 -i ~/.ssh/サーバID.key
この後パスフレーズを求められますので、先ほど記録しておいたパスフレーズを入力します。
これでXSERVER上でLinuxコマンドを駆使して好き放題やれる下地が整いました!いらないディレクトリやファイルを一発で消したり、ダウンロードできなかったファイルに対処することができるようになります。
高度な話では「正規表現」を使ったファイルの一括処理もできたりします。
この先は完全に自己責任です。全ファイルを失ったりサイトが動作不良になる等、あらゆる不具合が起きる可能性があります。
削除コマンドを入力する
最もかんたんで最も恐ろしいコマンドの説明をします。
前提としてpublic_html直下にtestディレクトリを作成し、テストサイトを公開しているものとします。ここにWordPressをインストールして動作確認している方も多いのではないでしょうか?これだけでけっこうなファイル数を喰っています。テストサイトにも画像が必要なので、そこそこのファイル数があると思います。
ls -lコマンドで現在地を確認します。lsはファイル一覧コマンド、-lオプションは詳細表示です。
公開しているサイトのドメイン名がディレクトリとして並んでいるので、該当ディレクトに移動します。cdはChange Directoryコマンドです。
cd ドメイン名
もちろん【ドメイン名】には操作したいドメイン名を入力します。
移動先にはpublic_htmlがあり、これがサイトを公開しているディレクトリです。
cd public_html
ここで再度ls -lコマンドを入力し、testディレクトリがあることを確認します。
testディレクトリは、本当に不要ですね?消しますよ?復活できませんよ?誰も責任をとってくれませんよ?必要ならバックアップしてありますね?
rm -Rf ./test
rmはディレクトリを消すコマンドです。本来は空のディレクトリしか消せないのですが、-Rオプションで「再帰的消去」します。中にあるディレクトリとファイルを全て消してくれます。fオプションはForce(強制的に)です。
その後の「./test」のドット・スラッシュについてはくれぐれも注意してください。/の後ろにtestと打つ前にエンターしてしまうと…恐ろしいことが起きます。/(ルート=最上位ディレクトリ)から全て消えます!実際には下位ディレクトリからこのコマンドを正常に実行することはできないのですがw自分の居場所が無くなってしまいますからね。
XSERVERのサーバパネルで、記事最初の「アカウントデータ」を確認してみましょう。総ファイル数が減って…ないですね?
総ファイル数の更新には半日〜1日かかるようです。しばらくしてから再確認しましょう。
uploadsディレクトリをバックアップする
uploadsディレクトリには記事で投稿した画像が格納されています。基本的にはさらに年/月別のディレクトリが作成されその中に画像やPDF等のファイルが入っています。
総ファイル数が多すぎたり、容量が大きすぎるとuploadsディレクトリのFTPバックアップに失敗します。そもそもダウンロードできなかったり、エラーが頻発してファイルを取りこぼしたりします。
そんな時にもSSHでLinuxコマンドです。
- uploadsディレクトリを1つのファイルにして圧縮してしまう。
- 馬鹿でかいファイルができて、やはりダウンロードできなくなるので、1GB程度に分割する。
- 分割したファイルを1ファイルずつダウンロードする。
- ダウンロードした分割ファイルを結合し、解凍する。
手数はかかりますが、確実にダウンロードできます!
uploadsディレクトリを1つのファイルにして圧縮してしまう
public_html/wp-contentディレクトリに移動します。
cd public_html/wp-content
以下のコマンドでuploadsディレクトリを丸ごと1つのファイルに圧縮します。
tar zcvf uploads.tar.gz uploads
これが1GB以下ならそのままダウンロードできると思います。
馬鹿でかいファイルができて、やはりダウンロードできなくなるので、1GB程度に分割する
いくら1ファイルにまとめても4GB、10GBといった大きなファイルはダウンロードできません。そこで以下のコマンドで分割します。
split -b 1000M uploads.tar.gz
上記は1GBごとにバイナリ形式でuploads.tar.gzを分割するコマンドです。
xaa、xab、xac…といったファイルが生成されます。これを1ファイルずつFTPソフトでダウンロードします。
ダウンロードした分割ファイルを結合し、解凍する
ターミナルでSSH接続を切断します。
exit
ローカル環境に戻ってくるので、xaa、xab、xac…をダウンロードしたフォルダに移動します。
ターミナルで「cd 」と入力し、ダウンロードしたフォルダをターミナルにドラッグ&ドロップ、エンターキーを押すと移動します。
ls -lコマンドでファイルがあることを確認して、以下のコマンドを入力します。
cat xaa xab xac xad xae xaf > uploads.tar.gz
xaa〜xafは、必要な数だけ入力します。順番を間違えないようにしましょう。
catコマンドはファイルの中身を画面出力するコマンドです。それをリダイレクトで画面の代わりにuploads.tar.gzに出力(生成)します。
できあがったuploads.tar.gzをダブルクリックして解凍すれば、uploadsフォルダができて中には画像ファイルが入っています。
uploadsフォルダの中を減らしたい!
ファイル削除という高リスクな作業を行うため、バックアップをとりました。
他にも
- 使用しているテーマ
- データベース
をそれぞれバックアップしておきましょう。
さらにuploadsフォルダとデータベースは複製を作り、作業完了後しばらくは保管しておきます。
この次はいよいよ本題の「画像ファイルを減らす」ですが、この後の手数が非常に多いのと状況によって対処が異なるため別記事で紹介します。お待ちください。
この記事は2024/07/21に公開され、99 views読まれました。