クラウドだVPSだということで、実は増えているんじゃないかと思うのが シングルユーザーモードで作業できないサーバー なんですよ。
シングルユーザーモードって「ランレベル1」のこと。root
さんがひとりログインしてるだけで、ほかには誰も入ってないし、よけいなプロセスも当然動いてない状態。ネットワークも落としてる感じ。したがって、サーバー実体のターミナル画面で操作する状態です。
でも、一部のVPSを除くとターミナル画面なんて提供されていません。すべての作業はリモートからssh
でおこなうのがふつうですね。でもsshd
はマルチユーザーモード(ランレベル3以上)で動作している。困ったな…。
なにがしたいかというと、某金髪クラウドのインスタンスで、ハードディスクが足りなくなって…。
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 29G 24G 3.9G 86% /
ヒィ…。
/var
以下が膨らみすぎやねん…。
これを解決するには、
- 新たなディスクを追加する(これは各業者の指示どおりで)
- 新たなディスクを一時マウントする
-
/var
から新たなディスクに内容をコピーする - 新たなディスクを
/var
としてfstab
を書き直してリブート(かなんか)
とするしかない!
問題は3番。
シングルユーザーモードじゃないと、/var
以下はヘンなデーモンのファイルやあれこれがうごめいているので、 コピーしても不完全になってしまうかもしれない。 でもシングルユーザーモードにはできない…。
実は解決方法はかんたん。
CentOS 6.xの場合だけれど、network
と sshd
サービスをランレベル1でも動作させる だけ!
たとえば、ふつうは…
# for i in network sshd; do chkconfig --list $i; done
network 0:off 1:off 2:on 3:on 4:on 5:on 6:off
sshd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
こんなんだけど、とりあえず --level 1
で on
にしてみましょう。
# for i in network sshd; do chkconfig --level 1 $i on; done
# for i in network sshd; do chkconfig --list $i; done
network 0:off 1:on 2:on 3:on 4:on 5:on 6:off
sshd 0:off 1:on 2:on 3:on 4:on 5:on 6:off
それではシングルユーザーモードに落ちてみます。その前に3点:
- むりに
sudo
使わないでroot
で作業しましょう(たぶん) -
screen
などを使っている人は閉じたほうがいいと思います -
Docker
使ってる人は以下のように、自前で先にコンテナをすべて消してください。なぜかランレベルを変えてもコンテナは落ちてくれません…
# docker stop $(docker ps -a -q) && docker rm $(docker ps -a -q)
ということで、ここまで来たらランレベル1の世界へGo!
# telinit 1
ps
して、あんまり重要そうなプロセスが残ってなければ成功でしょう。
# ps auxww | grep '[^]]$'
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.1 0.0 19356 1636 ? Ss 20:04 0:00 /sbin/init
root 396 0.0 0.0 10868 972 ? S<s 20:04 0:00 /sbin/udevd -d
:
ということで心置きなく /var
以下のコピーを開始!
# mkdir -p /mnt/tmp-var
# mount /dev/sdc1 /mnt/tmp-var
# cd /var
# find . -print | cpio -pdmua /mnt/tmp-var
…時間かかるなあ。
終わったら、念のため、
# mv /var /var.old
してから、/etc/fstab
に以下を追記して、
/dev/sdc1 /var ext4 defaults 0 0
リブートしてやればいいかな?
そうそう。後始末で、
# for i in network sshd; do chkconfig --level 1 $i off; done
# for i in network sshd; do chkconfig --list $i; done
network 0:off 1:off 2:on 3:on 4:on 5:on 6:off
sshd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
しておくのと、気がすんだら /var.old
を消しておきましょう。
では、また。あでゅー。