calendar

S M T W T F S
   1234
567891011
12131415161718
19202122232425
2627282930  
<< April 2020 >>

categories

archives

楽天

amazon

Linuxサーバーで home を拡張(交換)する方法

0
    JUGEMテーマ:パソコン
     
     さて、覚え書きです。

     LinuxでFTPサーバーを立てているとします。
     私の場合は、CentOSでFTPサーバーを立てています。

     そのパソコンのHDD容量が非常に少ないとします。たとえば、160GBとか。

     そうして、FTPサーバーでデータのやり取りを繰り返しているうちに、home ディレクトリの容量が足りなくなったりします。

     そもそもFTPサーバー自体はデータのやり取り用なので、データのやり取りが終わったら速やかにファイルを消去するのが本来の使い方です。
     とはいえ、データをすぐに消せない場合や、すぐに消せないデータがどんどんたまったりします。
     そうすると、当初は、アカウント毎にまぁ50GBくらいあればいいや、と思っていても、意外とあっさりと貯まってきて、「あれ?FTPサーバーにデータあげられないな」なんて事が起こってきます。

     LinuxなどのUnix系のファイルシステムは、HDDのパーティションを、ディレクトリにマウントする機能が備わっています。
     備わっているというか、そもそも最初からそれが普通の使い方だったりします。

     ですので、 /home/ のディレクトリを別のパーティションに移すことが簡単に出来る仕様になっています。
     それでは、どうやってやっていけばいいのでしょうか?

     その手順を覚え書きとして残しておこうかな、と思います。

     基本的な手順は以下の通り。
    1.追加HDDをLinuxに取り付ける。
    2.追加HDDをext3でフォーマットし、適当な名前でマウントする。
    3./home/ のデータを丸ごとコピーする。
    4.シングルユーザーモードに移行する。
    5.本来の /home のディレクトリをリネームする。
    6.新規に /home ディレクトリを作成する(中身は当然空です)。
    7.先ほど /home データをコピーした追加HDDを今作った /home ディレクトリにマウントする。
    8./etc/fstab を編集して起動時に、追加HDDを /home にマウントするように設定する。
    9.Linuxをリブートして終了。

     細かい手順を記載するとすることが多いように見えますが、実際の作業はすぐ終わります。

     注意するべきポイントとしては、マウントしたHDDを正確に確認することです。
     2.のフォーマットするときに少々どきどきしますが、マウントしたHDDがどこにあるかを正確に把握しておけば、間違うことはありません。
     上記手順では念のため、元の /home のディレクトリをそのまま残してあります。

     さて、この手順は以下のサイトを参考にさせていただきました。

    パーティションの活用: /home の移動編

     一応大まかな流れは上記サイトの操作で正しいんですが、ちょっと違う点もありましたので、<続き>で詳しく書きたいと思います。

     
    ■実際に作業してみる

     上記のIBMの技術文書サイトにあるパーティションの活用: /home の移動編の手順は非常に分かりやすく書かれていますので、分かる人が見ればほとんど全て事足ります。
     しかし、ちょっとしたつまずきもあるので、見ていきましょう。

     上記のパーティションの活用: /home の移動編を一緒に見ていくといいと思います。

     パーティションの活用: /home の移動編に書かれている手順と比較していきます。
     (分かりやすくなるよう、上記の記事番号をIBM-nとしていきます。)

     GUIで起動している人は、「アプリケーション→アクセサリ→GNOME 端末」でコンソールを出して作業をしていきましょう。


    <IBM-1>1. 新しい区画の作成(必要な場合)
    <IBM-2>2. 新しい区画でのファイル・システムの作成

     さて、新しい区画の作成での注意点は、先ほど述べた追加HDDの正常認識チェックです。
     「ダブル・チェックしてください!」などと書かれていますが、どうするの?と思う人も少なからずいますよね。

     それには、df コマンドを使います。と、いろんなサイトに書かれています。
     しかし、私の記憶が確かなら、df コマンドってマウントしたHDDが表示されるはずで、新しく取り付けたHDDは出てこなかったような気がします(うろ覚え)。
     つまり、df を実行しても、取り付けたHDDが出てこない場合を想定してみます。
     そうすると「なにが『ダブル・チェックしてください!』だ!見えねぇじゃねぇかよ!」となります。困りましたね。
     そこで、ダブル・チェックするには、dmesg コマンドを使います。

    ITmedia エンタープライズ : Linux Tips「ハードディスクを増設したい」
    ■HDDを増設する方法

     dmesg を実行し、注意深く見ていきます。
     上記の記事は些か古いですが、十分参考になります。
     dmesg を実行し、PageUp キーでログを見ていきます。
     もちろん、grep や、more を使って閲覧してもいいですよ。
     とにかく、起動時のログを確認していくと、新たに追加したHDDが見つかるはずです。
     見つからなかったら、HDDにつなげているケーブルと電源を確認してみてください。
     私の場合は、追加HDDは /dev/sdb でした。
     S-ATA接続のHDDの場合、S-ATA過渡期のパソコンだと、S-ATA接続のHDDを互換機能を重視してBIOS上で、SCSIハードディスクとして認識している場合も多いと思います。
     /dev/hdb などの、hdn になっていなくてもパニックを起こさないでくださいね。

     そんなわけで、ようやく追加HDDの名称が分かりました。

     続けて、追加HDDをフォーマットして行きます。
    (※今回の場合、追加HDDを丸ごと home ディレクトリと入れ替えますので、sdb1 のように数字が付きません。追加HDDのパーティション分けをしたい場合、申し訳ないのですが、Googleなどで別の記事を探してみてください。)

     記載されている手順は以下のコマンドです。
    (※ここからは、私の環境である /dev/sdb の sdb で記載していきます。適宜読み替えてくださいね。)

     # mkfs.ext2 /dev/sdb

     意気揚々とこのコマンドを実行して・・・いく?

     ここであれ?っと思う人がいればそれは正しいです。
     CentOSのファイルシステムは、ext3 です。
     最近の Linux は、ほとんど全て ext3 だと思います。
     つまり、上記の記述は、ちょっと古いわけです。
     そのままやってしまうと、当然追加HDDは ext2 でフォーマットされてしまいます。
     ですので、正しいコマンドは、

     # mkfs.ext3 /dev/sdb

     になるわけです。

     私は・・・実は、ext2 でフォーマットしてしまいました。
     でもご安心下さい。
     以下のコマンドで、ext2 のHDDを ext3 に変換できます。

     # tune2fs -j /dev/sdb

     最初の ext2 でのフォーマットには、そこそこ時間がかかりました。
     そして、 ext2 から ext3 への変換も時間がかかるのかな?と思いましたが、ほとんど一瞬で終了しました。
     接続したばかりのHDDで、 ext2 から ext3 への変換にかかる時間が記載されているホームページは見つかりませんでしたが、ひとついえることは「取り付けたばかりのHDDで、 ext2 から ext3 への tune2fs を使った変換は一瞬」と覚えておいて間違いはありません。
     「ext3 ジャーナルをファイルシステムに追加する」だけなので時間がかからないのかな?


    <IBM-3>3. /mnt での新規ファイル・システムのマウント

     さて、マウントしていきましょう。
     ここでもちょっとだけ不親切ですね。
     「/mnt/newpart という名前のディレクトリーを作成してから、そこに以下の新しい区画をマウントします。」と書かれているだけです。

     まず、ディレクトリを作りましょう。

    # mkdir /mnt/newpart

     そして、マウントします。

    # mount /dev/sdb /mnt/newpart

     この「newpart」というディレクトリ名はもちろん何でもいいんですが、どちらにしてもあとで一切関係なくなるので、IBMの技術情報どおりで行きましょう。



    <IBM-4>4. 単一ユーザー・モードへのドロップ

     ここでシングルユーザーモードに移行します。
     この辺の細かい手順記載はさすがです。分かりやすい!
     まぁ、シングルユーザーモード、を「単一ユーザー・モード」と記載してあるのは気にしないことです。同じ意味です。私は「単一ユーザー・モード」って始めて聞きましたけど。

     # init 1

     を実行します。
     GUI上で「GNOME端末」から作業をしていた人は画面がいきなり変わってびっくりしたかもしれません。
     これがシングル・ユーザーモードです。
     いきなり画面が真っ黒になって、文字が出てますが、作業を進めていきます。


    <IBM-5>5. /home へのディレクトリーの変更およびファイルのコピー

     上記の手順では、以下のように記載されています。

     # cd /home
     # cp -ax * /mnt/newpart

     ふむふむ、これで全部コピーできるのかぁ、と思いつつ念のため、cp コマンドを調べてみます。
     しかし、コピーコマンドの cp には、-x オプションが存在しません!
     CentOSだけかもしれませんが、それでもネットで調べた限りでは、他のLinuxにも、cp コマンドに -x オプションは無いようです。
     ちょっと困りました。
     ちゃんと、/home フォルダの中身が、パーミッションも含めて丸ごとコピーされないと面倒なことになります。
     いろいろ調べてみると、-a オプションだけでよさそうです。
     ちなみに、コピー状態を表示したい場合は、-v オプションをつけます。

     ですので、私の場合は以下のようにしました。

     # cd /home
     # cp -av * /mnt/newpart

     これで、ザーっとコピーされるファイルが表示されつつ流れていきます。
     どんどんどんどん流れていきます。
     このコピー作業は当然ながらファイルの量が多ければ多いほど時間がかかります。
     じっくり待ちましょう。


    <IBM-6>6b. 新しい区画の使用 (古い /home が区画でない場合)

     作業は 6b に飛びます。
     6aと6bに記載されている「(古い /home が区画である場合)と (古い /home が区画でない場合)」っていうのが分かりにくいですよね?
     なぜわざわざ「区画」っていう日本語を強引に割り当てているのか分かりませんが、普通に「区画」は「パーティション」と読み替えましょう。
     つまり、
     古い /home が区画である場合
     →もともとの /home ディレクトリが別パーティションだった場合
     古い /home が区画でない場合
     →もともとの /home ディレクトリが別パーティションではない場合
     と読み替えて考えると分かりやすいですよね。

     普通にサーバーを構築している場合は、/home ディレクトリはそのまま作っています。
     当初から /home ディレクトリを別パーティションに分けているような人は、この記事を見ないのでは?と思わなくもありません。

     というわけで、6a は飛ばして、6b に行きます。

     # mv /home /home.old
     # mkdir /home     
     # mount /dev/sdb /home

     まずは、元々の /home ディレクトリをリネームしてしまいます。ここでは、home.old にしています。後で困らないようとりあえずデータを残しておくというわけです。
     これで、/home フォルダは存在しなくなったので、また新たに空の home フォルダを作成します。
     これらの作業は、現在シングル・ユーザーモードにいるので、まったく問題ありません。
     そして、最初のコマンドで、/home ディレクトリの中身をパーミッションそのままにコピーした追加HDDを /home にマウントします。

     あれ? [ newpart ] ディレクトリはどこへ行った?!
     と思わなくもありませんが、思わなくていいんです。

     ポイントは、HDDやパーティションをあるディレクトリに対してマウントしたとしても、Linuxをリブートすれば、マウントが自動的に解除されるからなんです。
     つまり、今この直後では /dev/sdb は、[ /home ] と [ newpart ] の双方にマウントされた状態ですが、リブートすれば、双方ともマウントが解除されてしまうのです。

     それでは、/home ディレクトリが正しく動作しないので、おまじないをします。
     とりあえず、Ctrl+D を押して、シングル・ユーザーモードを出ます。
     この段階でも、 /dev/sdb は、[ /home ] と [ newpart ] の双方にマウントされた状態です。
     /home ディレクトリは、/dev/sdb にマウントされ、データは元々の /home ディレクトリの内容の完全コピーなので問題ありませんね。
     リブートしてもちゃんと動作するように設定を施します。

     そのおまじないは、/etc/fstab の編集です。
     fstab という設定データが記載されたファイルがあるので、その中に以下の項目を追加します。

     /dev/sdb    /home    ext3    defaults    1    2

     <IBM-6>の記述では、ext2 になっていますが、今回は ext3 でフォーマットしたわけですから、ちゃんと ext3 の記載にすることを忘れないようにして下さいね。

     上記一行を追加したら、Linux (CentOS) をリブートします。

     まぁここで「えー? fstab の編集方法なんて忘れたよぉ」っていう人が続出すると思うんですが、そんなこと・・・ないですか?

     まぁ、vi エディタを使うんですが、これ使い慣れないとすぐ忘れちゃうんですよね。
     私は、昔仕事で使っていたので大体覚えているんですが、それでもやっぱりいろいろ忘れます。

     vi エディタの基本的なポイントは、
     追加書込みは、[ i ] コマンド(insert)、
     保存終了は [ ZZ ] コマンド、
     まぁとにかく [ ESC ] キーを押せばなんとかなる、
     と思ってマス。

     なので、

     # vi /etc/fstab

     を実行したら、追加したい行に移動して [ i ] を押す。
     先ほどの一行を追加する。
     [ ESC ] を押して、すかさず [ ZZ ] !
     確認のため、

     # cat /etc/fstab

     問題なく行が追加されていればもう安心!ですね。

     これで再起動して動作を確認します。


     <IBM-6>7. 完了

     さて、これで終了なわけですが、
    「 [ newpart ] はどこにいったの? [ newpart ] はどこにいったの?」
     と2度叫びたくなる人がいるかもしれません。

     そんなあなたにはやさしくこう言うしかありません。
     「 [ newart ] はひっそりと /mnt の中に残っていますよ。中身は空ですけど。」と。

     今回、[ home.old ] という形で、元々の /home フォルダの中身がごっそりと残っているので、動作が確認されたら適宜消しましょう。消さずに残したまま数年経っても別に困りませんが。
     そして、/mnt に存在する [ newpart ] ディレクトリも気持ち悪いなぁと思えば消しましょう。こちらはほとんど全くHDD容量を消費していませんので、消しても消さなくても問題はありません。

     というわけで、途中の様々な疑問を詳しく追記していった解説ですが、この記事って誰かの参考になるのかしらん?と、文章を書く時間が意外とかかってしまって少し後悔する真夏の暑い一日でした。

     どなたかの参考になれば幸いです。
     それでは失礼します。


    コメント
    コメントする








       
    この記事のトラックバックURL
    トラックバック