LoginSignup
15
17

More than 5 years have passed since last update.

ターミナル接続できない仮想マシンでシングルユーザーモード作業するには

Posted at

クラウドだVPSだということで、実は増えているんじゃないかと思うのが シングルユーザーモードで作業できないサーバー なんですよ。

シングルユーザーモードって「ランレベル1」のこと。rootさんがひとりログインしてるだけで、ほかには誰も入ってないし、よけいなプロセスも当然動いてない状態。ネットワークも落としてる感じ。したがって、サーバー実体のターミナル画面で操作する状態です。

でも、一部のVPSを除くとターミナル画面なんて提供されていません。すべての作業はリモートからsshでおこなうのがふつうですね。でもsshdはマルチユーザーモード(ランレベル3以上)で動作している。困ったな…。

なにがしたいかというと、某金髪クラウドのインスタンスで、ハードディスクが足りなくなって…。

# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1        29G   24G  3.9G  86% /

ヒィ…。
/var 以下が膨らみすぎやねん…。
これを解決するには、

  1. 新たなディスクを追加する(これは各業者の指示どおりで)
  2. 新たなディスクを一時マウントする
  3. /var から新たなディスクに内容をコピーする
  4. 新たなディスクを /var として fstab を書き直してリブート(かなんか)

とするしかない!

問題は3番。
シングルユーザーモードじゃないと、/var 以下はヘンなデーモンのファイルやあれこれがうごめいているので、 コピーしても不完全になってしまうかもしれない。 でもシングルユーザーモードにはできない…。

実は解決方法はかんたん。
CentOS 6.xの場合だけれど、networksshdサービスをランレベル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 1on にしてみましょう。

# 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 を消しておきましょう。
では、また。あでゅー。

15
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
17