ニフクラ ブログ

ニフクラやクラウドの技術について、エンジニアが語るブログです。

【Linux】システムディスク枯渇時の対処方法

こんにちは、ニフクラテクニカルアカウントチームです。

ニフクラは、システムディスク(ローカルディスク)の容量を途中で増やすことができない仕様であり、長期間使用しているとデータが増えてシステム領域が枯渇する場合があります。
本記事では、その対処方法としてシステム領域の一部を、増設ディスクに移動する手順についてご紹介します。

前提条件

本ブログは、以下の前提知識がある方を想定しています。

  • ニフクラの基本的なコントロールパネルの操作、サービスを利用する知識。(サーバー作成、ネットワーク構築など)
  • 基本的なサーバーOSを構築する知識

検証概要

以下の構成で検証を実施しています。 f:id:TechnicalAccountEngineer:20181122111403p:plain

利用リソース

今回の検証を実施するにあたり、利用したニフクラのリソース情報に関して以下に記載します。
※各リソースのアクセス制限に関しては、ニフクラのファイアウォール等を用いて適切に設定の上実施しています。

リソース 数量
仮想サーバー(サーバーOS:CentOS7.4) 1
ファイアウォール 1
増設ディスク 1
ISOイメージ 1

検証内容

CentOSのインストールメディア(ISO)を使用して、インストーラレスキューモードで起動し、システム領域を増設ディスクに移動/マウント設定、設定後の確認までの検証内容を記載します。
OS起動時にシステム領域を移動させると、不具合が起こる可能性があるため、今回の検証ではインストーラレスキューモードで実施しています。
また、今回はログファイル等で肥大化しやすい「/var」を対象に移動させています。

① 増設ディスクの設定

クラウドユーザーガイド(追加したディスクの設定方法(マウント手順):Linux系OSの場合)
※本検証では増設ディスクのパーティションを「/dev/sdb1」としています。
※ここでは自動マウント「/etc/fstab」の設定は行いません。

② ISOイメージアップロード

下記アーカイブURLを「ISOイメージ取得先URL」に直接入力して、アップロードします。
http://archive.kernel.org/centos-vault/7.4.1708/isos/x86_64/CentOS-7-x86_64-NetInstall-1708.iso
※上記URLは使用できなくなる恐れがあります。
※ISOイメージ機能には制限事項があります。詳細はISOイメージの仕様・機能を参照して下さい。 f:id:TechnicalAccountEngineer:20181126174758p:plain

f:id:TechnicalAccountEngineer:20181121201225p:plain

③ ISOイメージの設定

ISOイメージをサーバーに設定します。
クラウドヘルプ(サーバー:ISOイメージ設定)

④ BIOSの起動順序の変更

「コンソール起動」ボタンをクリックします。
f:id:TechnicalAccountEngineer:20181126175602p:plain

ダイアログが表示され「ブラウザから接続する」をクリックするとコンソールが起動されます。
f:id:TechnicalAccountEngineer:20181121194527p:plain

「サーバー再起動」ボタンをクリックします。
f:id:TechnicalAccountEngineer:20181126175315p:plain

起動オプションの「BIOS画面で停止する」にチェックを入れて「OK」をクリックします。
f:id:TechnicalAccountEngineer:20181121193419p:plain

BIOSの起動画面が表示されるので「Boot」タブに移動し「CD-ROM Drive」を一番上に移動します。
f:id:TechnicalAccountEngineer:20181121201918p:plain

「Exit」タブに移動し「Exit Saving Changes」を選択し「Yes」をクリックします。 f:id:TechnicalAccountEngineer:20181121202028p:plain

f:id:TechnicalAccountEngineer:20181121202602p:plain

⑤ インストーラレスキューモードの起動

ISOインストールメディアが起動したら、「Troubleshooting」→「Rescue a CentOS system」を選択後、「1」を入力し「Please press <return> to get a shell.」で止まるのでEnterキーを押下します。 f:id:TechnicalAccountEngineer:20181121203153p:plain

f:id:TechnicalAccountEngineer:20181121203208p:plain

f:id:TechnicalAccountEngineer:20181203142613p:plain

⑥ システム領域(/var)を増設ディスクに移動

インストーラレスキューモード環境のルートパーティションを、ファイルシステムのルートパーティションに変更します。

sh-4.2# chroot /mnt/sysimage/

システム領域(/var)の移動前に、dfコマンドで現在のディスク使用量を確認します。

bash-4.2# df -h
Filesystem      Size  Used Avail  Use%  Mounted on
/dev/sda3        28G   22G  6.3G   78%  /
devtmpfs        471M     0  471M    0%  /dev
tmpfs           495M     0  495M    0%  /dev/shm
tmpfs           495M   13M  482M    3%  /run
/dev/sda1       509M  118M  391M   24%  /boot

増設ディスク(/dev/sdb1)を、/mntにマウントします。

bash-4.2# mount /dev/sdb1 /mnt

/varの中身を、隠しファイルも含めて/mntへコピーします。
※コピー元ファイルの部分に"/var/*(アスタリスク)"で入力しても、".(ドット)"で始まる隠しファイルはコピーされません。

bash-4.2# cp -rpa /var/. /mnt

コピー元(/var)とコピー先(/mnt)で、ディレクト内の使用サイズとファイル数を確認し、差分がないことを確認します。

bash-4.2# du -sb /var /mnt
21550710039             /var
21550710039             /mnt
bash-4.2# find /var -type f | wc -l
5763
bash-4.2# find /mnt -type f | wc -l
5763

念のため、移動対象のディレクトリ(/var)をリネームしておきます。
また、新たにマウント用のディレクトリを作成し、パーミッションと所有者が同じであることを確認します。
※違う場合は適切に設定してください。

bash-4.2# mv /var /var_org
bash-4.2# mkdir /var
bash-4.2# ls -ld /var*
drwxr-xr-x.  2 root root    6 Dec  6 10:09 /var
drwxr-xr-x. 20 root root 4096 Dec  6 09:50 /var_org

⑦ マウント設定

増設ディスク(/dev/sdb1)が/varにマウントされるよう、/etc/fstabを編集します。

bash-4.2# vi /etc/fstab
※最終行に下記を追記
/dev/sdb1             /var      xfs  defaults  0 0

「exit」と入力し、インストーラーレスキューモードを終了します。
インストーラーレスキューモード終了後、システムの再起動が開始されます。

bash-4.2# exit
sh-4.2# exit

「Troubleshooting」→「Boot from local drive」を選択し、システムディスク(ローカルディスク)から起動させます。 f:id:TechnicalAccountEngineer:20181203101517p:plain

f:id:TechnicalAccountEngineer:20181203101826p:plain

※再びインストーラーレスキューモードが起動されないよう、ISOイメージをサーバーから解除してください。
※BIOSの起動順序の戻す作業はここでは割愛させていただきます。

⑧ 設定後の確認

OS起動後にloggerコマンドで、/var/log/messagesにログが出力されることを確認します。

# logger test
# tail /var/log/messages
<中略>
Nov 21 17:11:27 <ホスト名> root: test

特に問題がなければ、リネームしていたディレクトリ(/var_org)を削除します。

# ls -ld /var*
drwxr-xr-x. 20 root root 4096 Dec  6  09:50 /var
drwxr-xr-x. 20 root root 4096 Dec  6  09:50 /var_org
# rm -rf /var_org
# ls -ld /var*
drwxr-xr-x. 20 root root 4096 Dec  6  09:50 /var

dfコマンドで、システム領域の使用量を確認します。
ここでは、/varを増設ディスクに移動する前後のdfコマンドを比較しています。
<移動前>

bash-4.2# df -h
Filesystem      Size  Used Avail  Use%  Mounted on
/dev/sda3        28G   22G  6.3G ★78%  /   
devtmpfs        471M     0  471M    0%  /dev
tmpfs           495M     0  495M    0%  /dev/shm
tmpfs           495M   13M  482M    3%  /run
/dev/sda1       509M  118M  391M   24%  /boot

<移動後>
/の使用量が減っている事がわかります。

# df -h
Filesystem      Size  Used Avail  Use%  Mounted on
/dev/sda3        28G  1.1G   27G  ★5%  /  
devtmpfs        471M     0  471M    0%  /dev
tmpfs           495M     0  495M    0%  /dev/shm
tmpfs           495M   13M  482M    3%  /run
/dev/sda1       509M  118M  391M   24%  /boot
/dev/sdb1       100G   21G   80G   21%  /var   

これで、本検証は終了となります。

注意事項について

  • 増設ディスクの故障やディスクのデタッチでシステムが止まる恐れがあります。
  • 100GB以上の増設ディスクの場合は、カスタマイズイメージによるバックアップが不可になります。
  • 移動した領域の性能(読み書き)に関しては、増設ディスクのタイプによって変わります。
  • 設定ファイル(/etc/fstab)は正しく記載して下さい。誤って記載してしまうとサーバーが起動しない恐れがあります。
  • 本手順については検証結果の1つであり、利用される際は事前にそれぞれの環境で十分に検証を行ってください。

まとめ

本検証では、OSを停止した状態(インストーラレスキューモード)で実施しましたが、「/home」のようなデータ領域では、シングルユーザーモードで実施することも出来そうです。
インストーラレスキューモードで実施するには少し手間となりますが、作業の流れ自体はわかりやすく、増設ディスクは100GB~1TBまで選べるため、システムディスクの枯渇問題の解決に有用だと感じました。
これからサーバーを作成する際、将来的にシステムディスク使用量の増加が予想される場合や、現在システム領域が枯渇している場合の解決策の一つとしていかがでしょうか。