GentooサーバをSSD化する

前置き

自宅サーバの内蔵HDDが2度目のクラッシュを起こしました。HDDのクラッシュは避けられませんが、その度に内蔵HDDを交換するのは面倒なので、内蔵ドライブをSSD化することにしました。

SSD化するだけなら、単にバックアップしてあるイメージをSSDへリストアするだけです。バックアップ&リストアに関しては、別記事「Gentooのバックアップ」に書いてあります。

SSD化に伴い、書き込み頻度の高いディレクトリを外付けHDDへ出すことにしました。本記事では、その辺の手順をメモっておきます。

構成

genpon tmp # df
Filesystem           1K-ブロック    使用   使用可 使用% マウント位置
/dev/sda3             57099644   5716028  48483084  11% /
udev                     10240       256      9984   3% /dev
/dev/sda1                69972     31341     35018  48% /boot
/dev/sdb1            139336680  78975440  53283352  60% /var
/dev/sdb2             14500612    786372  12977636   6% /home

こんな感じで、/varと/homeを/dev/sdbへ出しました。同様に、/tmpも出す予定です。

fstab

ブート時に自動マウントされるよう、/etc/fstabを修正する必要がありますが、その前にまず、blkidコマンドでパーティションのUUIDを調べておきます。

パーティションのUUIDを調べる
genpon tmp # blkid
/dev/sda1: UUID="d0e0691b-467d-4b94-86ff-f9788c9b0912" TYPE="ext2"
/dev/sda3: UUID="786ceadc-ae48-45c3-ab3b-8a478393896c" TYPE="ext3" SEC_TYPE="ext2"
/dev/sda2: UUID="690eed44-fa91-432c-8fe6-264758365dbf" TYPE="swap"
/dev/sdb1: UUID="0db82d7d-11c5-4923-ba05-09431db5c126" TYPE="ext3"
/dev/sdb2: UUID="7e69653a-cd3b-485a-ab0a-778c7c17a0ea" TYPE="ext3"

続いて、/etc/fstabを修正します。

/etc/fstab
/dev/sda1               /boot           ext2            defaults,noatime        1 2
/dev/sda2               none            swap            sw                      0 0
/dev/sda3               /               ext3            noatime                 0 1

# External 2.5inch HDD.
UUID=0db82d7d-11c5-4923-ba05-09431db5c126  /var         ext3  defaults,noatime  0 2
UUID=7e69653a-cd3b-485a-ab0a-778c7c17a0ea  /home        ext3  defaults,noatime  0 2

自動マウントのタイミング

ブート時に自動マウントを行うのは、/etc/init.d/localmountの仕事ですが、これはブートスクリプトの中でも、比較的早いタイミングで実行されます。そのため、私の環境では、外付けUSBドライブの準備が間に合わず、マウントに失敗します。

そこで、ちょっとダサいですが、自動マウントする前にsleepを入れることにしました。

/etc/init.d/localmount
depend() {
        need checkfs
}

start() {
        # waiting for external drives to be ready.
        sleep 10

        # Mount local filesystems in /etc/fstab.
        ebegin "Mounting local filesystems"
...以下、省略

10秒の待ちを入れることで、外付けHDDのマウントにも成功するようになりました。

追記(2013-09-10)

localmountは成功しますが、その前に走るcheckfsスクリプトは失敗してました。そこで、checkfsにもsleepを入れました。もうlocalmountのsleepは要らないはずですが、念のため残してます。

あと、/tmpを外付けHDDに出す場合、上記の方法には問題がありそうです。postgresが動きませんでした。見てみると、外に出した場合、/tmpに作られるはずのpostgresのファイルがありません。postgresを起動するのは、localmountの後なので問題ないはずなんですが…。釈然としませんが、/tmpにRAMディスクを割り当てることで回避できました。

/etc/fstab(/tmpの部分のみ)
tmpfs  /tmp  tmpfs  defaults,noatime,mode=1777,nosuid,size=256M  0  0
Last modified:2013/09/07 11:10:02
Keyword(s):
References:[サーバ管理・Linux関連]
This page is frozen.