セカンダリDNSサービス

お名前.comでセカンダリ DNS の無料サービスがあったなんて知りませんでした 😮

DNS関連サービス

当然ですが、お名前.comで登録したドメインしか指定できませんが 😎

さっそく利用開始しました :mrgreen:

DNS サーバに bind を利用している事がバレますが。。。

named.conf で以下のように zone 転送を許可します。
※210.172.129.81 はセカンダリネームサーバの IP Address

zone "yonageya.com" IN {
        type master;
        file "yonageya.com.zone";
        allow-update {none;};
        allow-transfer {
                210.172.129.81;
        };
};

zone ファイルにセカンダリネームサーバを追加して、serial を上げます。

$TTL    3600
@       IN      SOA     ns1.yonageya.com. webmaster.yonageya.com. (
                                2011103101; Serial
                                1800; Refresh
                                900; Retry
                                86400; Expire
                                900); Minimum
;
        IN      NS      ns1.yonageya.com.
        IN      NS      2nd.dnsv.jp.
以下省略

IP フィルタなどで通信を制限している場合には、セカンダリ DNS サーバから tcp の 53 番ポートへのアクセスを許可します。
ウチの環境ではルータで IP フィルタの設定と NAT の設定を追加しました。

そして、named を再起動します。
OS が CentOS なので、以下のように実行します。

root# service named restart

以下のようなログが記録されていれば OK です :mrgreen:

※一部ログを省略しています

Oct 31 12:37:44 ns1 named: named startup succeeded
Oct 31 12:37:44 ns1 named[29132]: running
Oct 31 12:37:44 ns1 named[29132]: zone yonageya.com/IN: sending notifies (serial
 2011103101)
Oct 31 12:41:17 ns1 named[29132]: client 210.172.129.81#49506: transfer of 'yonageya.com/IN': AXFR started

vsftpd ファイルサイズ制限

vsftpd でファイルサイズに制限をかける方法です。

元々 vsftpd にはファイルサイズに制限をかける機能はありませんので、
無理矢理制限をかける方法です。

自己責任でお願いいたします。

方法は簡単で、vsftpd を起動するシェルスクリプトで ulimit するだけです :mrgreen:

CentOS など linux の場合、/etc/rc.d/init.d/vsftpd がシェルスクリプトになりますので、
先頭の方で ulimit -f 制限するサイズ(キロバイト単位) を追加します。

~省略~
ulimit -f 20 #← 20 キロバイトに制限
start() {
         # Start daemons.
 
~省略~

そして vsftpd を再起動します。

root# service vsftpd restart

実際に制限を超えたサイズのファイルをアップロードしてみたところ
以下のエラーとなりました。

500 OOPS: child died

たとえば 10KB の制限をかけて、1MB のファイルをアップロードすると、
10KB の壊れたファイルが作成されます :mrgreen:

あまり良い方法ではありませんが、どうしても他に手段が無い 😥
という場合には使える手かもしれません 😎

MySQL-5.5.13 ビルド

MySQL-5.5.13 をソースからビルドしたのでメモ。

OS は FreeBSD 7.1-RELEASE-p4 です。

MySQL-5.5.X は configure ではなく cmake を使うようになったようです。

> cmake
cmake: Command not found.

cmake が無いので、まずは cmake をインストールします。
ports からインストールします。

> whereis cmake
cmake: /usr/ports/devel/cmake
> su -
# cd /usr/ports/devel/cmake
# make configure
# make
# make install
# pkg_info | grep cmake
cmake-2.8.4_1       A cross-platform Makefile generator
# which cmake
/usr/local/bin/cmake
# make clean

次に MySQL-5.5.13 用にユーザを追加しました。

# pw groupadd mysql55
# pw useradd mysql55 -d /nonexistent -s /sbin/nologin
> id mysql55
uid=1001(mysql55) gid=1001(mysql55) groups=1001(mysql55)

いよいよ MySQL のビルドです。
MySQL も ports でインストールしようかと思ったのですが、イマイチ Makefile で指定した cmake のオプションがどのように影響するのか分からなかったのでソースからビルドする事にしました。 :mrgreen:

オプションは大体見れば分かると思いますが、 😎
既に MySQL-4.X が稼働しているサーバだったので、PREFIX 、ポート番号、socketのパスを変更しています。

> tar xfz mysql-5.5.13-freebsd7.0-i386.tar.gz
> cd mysql-5.5.13
> cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql55 
-DMYSQL_DATADIR=/usr/local/mysql55/data 
-DDEFAULT_CHARSET=utf8 
-DDEFAULT_COLLATION=utf8_general_ci 
-DWITH_INNOBASE_STORAGE_ENGINE=1 
-DWITH_ARCHIVE_STORAGE_ENGINE=1 
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 
-DMYSQL_TCP_PORT=3307 
-DMYSQL_UNIX_ADDR=/tmp/mysql55.sock 
-DWITH_READLINE=1
> make
> su -
# make install

これで MySQL-5.5.13 が /usr/local/mysql55/ にインストールされました。

次は MySQL-5.5.13 の起動です。

データディレクトリを作成します。

# mkdir -p /home/mysql55/db
# chown mysql55:mysql55 /home/mysql55/db

my.cnf コピー

# cp /usr/local/mysql55/support-files/my-medium.cnf /home/mysql55/db/my.cnf
# chown mysql55:mysql55 /home/mysql55/db/my.cnf

my.cnf の変更点。
user = mysql55 を追加。
skip-networking のコメントを外して有効化。コメントアウトって言うの? 🙂

# diff /usr/local/mysql55/support-files/my-medium.cnf /home/mysql55/db/my.cnf
26a27
> user          = mysql55
45c46
< #skip-networking
---
> skip-networking

MySQL データ初期化を行います。(mysql_install_db の実行)

# /usr/local/mysql55/scripts/mysql_install_db --basedir=/usr/local/mysql55 --datadir=/home/mysql55/db --user=mysql55
Installing MySQL system tables...
OK
Filling help tables...
OK
 
To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system
 
PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:
 
/usr/local/mysql55/bin/mysqladmin -u root password 'new-password'
/usr/local/mysql55/bin/mysqladmin -u root -h server.example.com password 'new-password'
 
Alternatively you can run:
/usr/local/mysql55/bin/mysql_secure_installation
 
which will also give you the option of removing the test
databases and anonymous user created by default.  This is
strongly recommended for production servers.
 
See the manual for more instructions.
 
You can start the MySQL daemon with:
cd /usr/local/mysql55 ; /usr/local/mysql55/bin/mysqld_safe &
 
You can test the MySQL daemon with mysql-test-run.pl
cd /usr/local/mysql55/mysql-test ; perl mysql-test-run.pl
 
Please report any problems with the /usr/local/mysql55/scripts/mysqlbug script!
 
# ls -l /home/mysql55/db
total 12
-rw-r--r--  1 mysql55  mysql55  4699 Jun  7 08:52 my.cnf
drwx------  2 mysql55  mysql55  2048 Jun  7 09:02 mysql
drwx------  2 mysql55  mysql55  1024 Jun  7 09:02 performance_schema
drwx------  2 mysql55  mysql55   512 Jun  7 09:02 test

スタートアップスクリプトを作成します。

ソースと一緒に入っているスクリプトをコピーします。

# cp /usr/local/mysql55/support-files/mysql.server /usr/local/etc/rc.d/mysql55-server

スタートアップスクリプト修正。
元々 linux 用のスクリプトみたいですが、FreeBSD でも大丈夫みたいです。

# vi /usr/local/etc/rc.d/mysql55-server

以下変更点です。

diff /usr/local/mysql55/support-files/mysql.server /usr/local/etc/rc.d/mysql55-server
27c27,29
<
---
>
> name="mysql55"
>
57,58c59,60
< lockdir='/var/lock/subsys'
< lock_file_path="$lockdir/mysql"
---
> lockdir='/var/run'
> lock_file_path="$lockdir/mysql55"
70c72
<     datadir=/usr/local/mysql55/data
---
>     datadir=/home/mysql55/db
283c285
<       $bindir/mysqld_safe --datadir="$datadir" --pid-file="$mysqld_pid_file_path" $other_args >/dev/null 2>&1 &
---
>       $bindir/mysqld_safe --defaults-file="$datadir/my.cnf" --datadir="$datadir" --pid-file="$mysqld_pid_file_path" --user=mysql55 $other_args >/dev/null 2>&1 &

それと、FreeBSD では rc.conf に OS 起動時にスタートさせるスクリプトを指定するようです。

# vi /etc/rc.conf
mysql55_enable="YES" を追加しました。

mysqld を起動します。

# /usr/local/etc/rc.d/mysql55-server start
Starting MySQL.. SUCCESS!
# ps awwux | grep mysql で mysql55 が起動した事を確認しました。

停止も確認しておきますか。

# /usr/local/etc/rc.d/mysql55-server stop
Shutting down MySQL. SUCCESS!
# ps awwux | grep mysql で mysql55 が停止した事を確認しました。

root のパスワードを設定します。

# /usr/local/mysql55/bin/mysqladmin -u root password 'hogehoge'
# /usr/local/mysql55/bin/mysql -uroot
 
Welcome to the MySQL monitor.  Commands end with ; or g.
Your MySQL connection id is 4
Server version: 5.5.13-log Source distribution
 
Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
 
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
 
Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
 
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

MySQL4.X も問題なく稼働しているようなので、セットアップはここまででひとまず完了です。 :mrgreen:

Software RAID DegradedArray event

サーバが固まってしまった ❗

PostgreSQL でテーブルを join している最中だったので、
ちょっとムチャし過ぎ?なんて思ったのですが、復帰する事がなく 😥

久しぶりに電源スイッチ長押ししました 😎

無事再起動後ログインしてみると mdadm monitoring さんからメールがきました。
(サーバ名は変更してあります)

Subject: DegradedArray event on /dev/md1:server.example.com
From: mdadm monitoring <root@server.example.com>
To: root@server.example.com
Date: Thu, 19 May 2011 14:00:43 +0900 (JST)
 
This is an automatically generated mail message from mdadm
running on server.example.com
 
A DegradedArray event had been detected on md device /dev/md1.
 
Faithfully yours, etc.

またですか 😐

さっそく状態を確認してみました。

$ cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 hda2[1]
      2096384 blocks [2/1] [_U]
 
md2 : active raid1 hdc3[0] hda3[1]
      75762432 blocks [2/2] [UU]
 
md0 : active raid1 hdc1[0] hda1[1]
      264960 blocks [2/2] [UU]
 
unused devices: <none>

ちなみに md1 は swap で利用しているパーティションです。

NI-Lab.さんのDebian GNU/Linux etch で RAID 1 ミラーリングの障害復旧してみるを参考にして同じ事を行ってみました。

mdadm –detail すると /dev/hdc2 が remove されています。

# mdadm --detail /dev/md1
/dev/md1:
        Version : 00.90.01
  Creation Time : Mon Feb 26 20:28:14 2007
     Raid Level : raid1
     Array Size : 2096384 (2047.59 MiB 2146.70 MB)
    Device Size : 2096384 (2047.59 MiB 2146.70 MB)
   Raid Devices : 2
  Total Devices : 1
Preferred Minor : 1
    Persistence : Superblock is persistent
 
    Update Time : Thu May 19 13:57:13 2011
          State : clean, degraded
 Active Devices : 1
Working Devices : 1
 Failed Devices : 0
  Spare Devices : 0
 
           UUID : e0e42dda:9a0f1b0d:4eb33107:12dbb51d
         Events : 0.205033
 
    Number   Major   Minor   RaidDevice State
       0       0        0        -      removed
       1       3        2        1      active sync   /dev/hda2

badblock を非破壊リードライトモードで調査します。

結構時間がかかります。。。

# badblocks -nsv -o /tmp/hdc2.bad /dev/hdc2
Checking for bad blocks in non-destructive read-write mode
From block 0 to 2096482
Checking for bad blocks (non-destructive read-write test)
Testing with random pattern: done
Pass completed, 0 bad blocks found.

”Pass completed, 0 bad blocks found.” でした 🙂

➡ それでは md1 に /dev/hdc2 を戻します。

# mdadm --manage /dev/md1 --add /dev/hdc2

resync しているか確認します。

# cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 hdc2[2] hda2[1]
      2096384 blocks [2/1] [_U]
      [==>..................]  recovery = 11.6% (243904/2096384) finish=1.1min s
peed=27100K/sec
md2 : active raid1 hdc3[0] hda3[1]
      75762432 blocks [2/2] [UU]
 
md0 : active raid1 hdc1[0] hda1[1]
      264960 blocks [2/2] [UU]
 
unused devices: <none>

➡ なんだか良さそうです 🙂

少し時間をおいてもう一度確認。

# cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 hdc2[0] hda2[1]
      2096384 blocks [2/2] [UU]
 
md2 : active raid1 hdc3[0] hda3[1]
      75762432 blocks [2/2] [UU]
 
md0 : active raid1 hdc1[0] hda1[1]
      264960 blocks [2/2] [UU]
 
unused devices: <none>

➡ 復活しました :mrgreen:

NI-Lab.さんありがとうございます。

Xen domainU の複製

Xen の domainU を複製する方法です。

既にある domainU vps1 から新たに domainU vps5 を作成します。

1. イメージファイルをコピーします。

vps1 の複製 vps5 を作成します。

vps1 を停止。

# xm shutdown vps1

イメージファイルをコピー。

# cp /var/lib/xen/images/vps1.img /var/lib/xen/images/vps5.img

2. vps5.img をマウント

2-1. イメージファイルを loop デバイスに接続します。

# losetup -a
# losetup -f
/dev/loop0
# losetup /dev/loop0 /var/lib/xen/images/vps5.img
# losetup -a
/dev/loop0: [0304]:197083 (/var/lib/xen/images/vps5.img)

2-2. パーティションを確認します。

# fdisk -l /dev/loop0
 
Disk /dev/loop0: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
 
      Device Boot      Start         End      Blocks   Id  System
/dev/loop0p1   *           1          13      104391   83  Linux
/dev/loop0p2              14         652     5132767+  8e  Linux LVM
# kpartx -l /dev/loop0
     loop0p1 : 0 208782 /dev/loop0 63
     loop0p2 : 0 10265535 /dev/loop0 208845

2-3. LVM パーティションをマッピング

# kpartx -av /dev/loop0
add map loop0p1 : 0 208782 linear /dev/loop0 63
add map loop0p2 : 0 10265535 linear /dev/loop0 208845
# ls /dev/mapper/
control  loop0p1  loop0p2

2-4. 論理ヴォリューム活性化

# pvscan
  PV /dev/mapper/loop0p2   VG VolGroup00   lvm2 [4.88 GB / 0    free]
  Total: 1 [4.88 GB] / in use: 1 [4.88 GB] / in no VG: 0 [0   ]
# vgscan
  Reading all physical volumes.  This may take a while...
  Found volume group "VolGroup00" using metadata type lvm2
# lvscan
  inactive          '/dev/VolGroup00/LogVol00' [4.34 GB] inherit
  inactive          '/dev/VolGroup00/LogVol01' [544.00 MB] inherit
# vgchange -a y
  2 logical volume(s) in volume group "VolGroup00" now active
# lvscan
  ACTIVE            '/dev/VolGroup00/LogVol00' [4.34 GB] inherit
  ACTIVE            '/dev/VolGroup00/LogVol01' [544.00 MB] inherit

2-5. イメージファイルの root パーティションを mount

# mount /dev/VolGroup00/LogVol00 /mnt

3. イメージファイルの設定を変更

ホスト名、IP Address、macアドレス(HWADDR)を変更します。

# vi /mnt/etc/hosts
# vi /mnt/etc/sysconfig/network
# vi /mnt/etc/sysconfig/network-scripts/ifcfg-eth0

4. イメージファイルの umount

# umount /mnt
# vgchange -a n
   0 logical volume(s) in volume group "VolGroup00" now active
# lvscan
   inactive          '/dev/VolGroup00/LogVol00' [4.34 GB] inherit
   inactive          '/dev/VolGroup00/LogVol01' [544.00 MB] inherit
# kpartx -d /dev/loop0
# ls /dev/mapper/
control
# losetup -d /dev/loop0
# losetup -a
#

5. domainU vps5 設定ファイル作成

vps1 の設定ファイルをコピーして vps5 用の設定に変更します。

uuid を生成。

# uuidgen
2843d9ea-51c5-49a6-9258-fa273e682dea

vps5 を作成して、変更します。

# cp /etc/xen/vps1 /etc/xen/vps5
# vi /etc/xen/vps5
(name, uuid, disk, vif を変更)

6. vps5 起動

# xm create vps5

※vps5 を起動できるのですが、何故か vps5 の eth0 が
UP になりませんでした。
ifcfg-eth0 が ifcfg-eth0.bak にリネームされていたので、
元にもどして ifup eth0 したところ ok でした。

参考にさせていただいたサイト: http://sokohakato.wordpress.com/linux/centos/xenimgmount/

Xen ルーティングモード

Xen のルーティングモードで仮想ネットワークを構築しました。

192.168.1.111 のサーバ上に 192.168.2.0/24 の仮想ネットワークを
作成して、その仮想ネットワークに仮想サーバ vps1, vps2…を作成
しました。

イメージはこんな感じです。

Xen構成図

イロイロと試行錯誤をしたので、もう一度最初からやってみないと
どうやれば良いのか実は分かっていませんが 😎 記憶と
現状の結果を元に行った事をメモとして残します。

最初にまず、通常のブリッジモードで仮想サーバ vps1 を追加しました。
デフォルトの状態ですね。

# virt-install --name vps1 --nographics --prompt

次に仮想スイッチを作成しました。
以下のような定義ファイル yngsw1_def.xml を作成します。

<network>
  <name>yngsw1</name>
  <forward mode="route" dev="eth0" />
  <bridge name="yngsw1" />
  <ip address="192.168.2.1" netmask="255.255.255.0">
  </ip>
</network>

このファイルから仮想スイッチを作成します。

# virsh net-define yngsw1_def.xml
Network yngsw1 defined from yngsw1_def.xml

作成した yngsw1 をスタートさせます。

# virsh net-start yngsw1
Network yngsw1 started

そしてついでに、デフォルトの仮想ブリッジを削除しておきます。

# virsh net-destroy default
# rm /etc/libvirt/qemu/networks/autostart/default.xml

すると、以下のルーティングが追加されます 🙂

# netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
192.168.2.0     0.0.0.0         255.255.255.0   U         0 0          0 yngsw1
192.168.1.0     0.0.0.0         255.255.255.0   U         0 0          0 eth0
0.0.0.0         192.168.1.254     0.0.0.0         UG        0 0          0 eth0

yngsw1 を自動的にスタートするようにします。

# virsh net-autostart yngsw1
Network yngsw1 marked as autostarted

そして、デフォルトのブリッジモードではなく、ルーティングモードで
起動するように /etc/xen/xend-config.sxp を変更します。

(network-script network-bridge)
↓コメントアウト
#(network-script network-bridge)
 
(vif-script vif-bridge)
↓コメントアウト
#(vif-script vif-bridge)
 
 
#(network-script network-route)
#(vif-script     vif-route)
↓コメントを外す
(network-script network-route)
(vif-script     vif-route)

vps1 を yngsw1 に接続します。
/etc/xen/vps1 の vif の bridge を変更します。

vif = [ "mac=00:16:36:02:e0:5d,bridge=xenbr0,script=vif-bridge" ]
↓変更
vif = [ "mac=00:16:36:02:e0:5d,bridge=yngsw1,script=vif-bridge" ]

vps1 の IP Address を yngsw1 上の IP Address に変更します。

vps1# vi /etc/sysconfig/network
vps1# /etc/sysconfig/network-scripts/ifcfg-eth0

ここまでやったらサーバを再起動すれば完成です。
もっとちゃんとした手順があると思うのですが見つける事が
できませんでした。。。 :mrgreen:

※外部のサーバから yngsw1 上の vps1 と通信する為には、
外部のサーバや、ルータなどで vps1 へのルーティングを
192.168.1.111 に向けないと通信できません。

※2 台目の仮想サーバ vps2 を追加する場合、
virt-install がエラーになってしまいます。
どうやら virbr0 や xenbr0 が無いとダメみたいです。
仕方がないので /etc/xen/scripts/network-bridge を起動して
から virt-install しました。

nkf でバッファリングしない方法

nkf で文字コード変換しながらログをモニタリングするときに

いつも困っていましたが考えてみれば

nkf でバッファリングしないようにできれば良いのではないか?

という事に気がつきました 💡

さっそく Google で検索したところ一瞬で解決 🙂

うまい棒blogさんのnkfで出力をバッファいリングしない

こんな風に -u オプションを付ければバッファリングしないんですね ❗

$ tail -f hogehoge.log | nkf -uw

MySQL Cluster DataMemory, IndexMemory の増やし方

MySQL Cluster 7.1.3 でこんなエラーが発生 🙁

#1114 - The table '○○○' is full

色々調べたところ DataMemory 使用率が 96% に達している事が判明しました。

$ ndb_mgm
-- NDB Cluster -- Management Client --
ndb_mgm> all report memoryusage
Connected to Management Server at: localhost:1186
Node 11: Data usage is 96%(12800 32K pages of total 12288)
Node 11: Index usage is 60%(6826 8K pages of total 4096)
Node 12: Data usage is 96%(12800 32K pages of total 12288)
Node 12: Index usage is 60%(6826 8K pages of total 4096)
(※実際の数値とは違います)

DataMemory は config.ini で指定しますので、config.ini を変更して

DataMemory, IndexMemory を増やしました。

root# vi /var/lib/mysql-cluster/config.ini
[NDBD DEFAULT]
NoOfReplicas=2
DataDir=/var/lib/mysql-cluster
# ServerPort = 63132
# MaxNoOfConcurrentOperations=10000
DataMemory=1024M
IndexMemory=128M
# TimeBetweenWatchDogCheck=30000
# MaxNoOfOrderedIndexes=512

この変更を反映させます。

  1. ndb_mgmd を再起動をします。
  2. この時、起動オプションに –reload を追加します。
    (この –reload が分かるまで何度も試行錯誤してしまいました 🙂 )

    root# kill {ndb_mgmd の PID}
    root# kill {ndb_mgmd の PID}(もういっちょ!)
    -bash: kill: ({ndb_mgmd の PID}) - No such process(停止したね!!)
    root# /usr/sbin/ndb_mgmd --config-dir=/var/lib/mysql-cluster --config-file=/var/lib/mysql-cluster/config.ini --reload
  3. データノードを順番に再起動
  4. (Node 11 を再起動します。)
    ndb_mgm> 11 restart(しばらく待ちます)
    Node 11: Node shutdown initiated
    Node 11: Node shutdown completed, restarting, no start.
    Node 11 is being restarted
     
    Node 11: Start initiated (version 7.1.3)
    ndb_mgm> Node 11: Started (version 7.1.3)(再起動完了)
     
    (Node 12 を再起動します。)
    ndb_mgm> 12 restart(しばらく待ちます)
    Node 12: Node shutdown initiated
    Node 12: Node shutdown completed, restarting, no start.
    Node 12 is being restarted
     
    Node 12: Start initiated (version 7.1.3)
    ndb_mgm> Node 12: Started (version 7.1.3)(再起動完了)
  5. メモリ使用率を確認
  6. ndb_mgm> ALL REPORT MemoryUsage
    Connected to Management Server at: localhost:1186
    Node 11: Data usage is 35%(11636 32K pages of total 32768)
    Node 11: Index usage is 10%(1652 8K pages of total 16416)
    Node 12: Data usage is 35%(11636 32K pages of total 32768)
    Node 12: Index usage is 10%(1651 8K pages of total 16416)

    DataMemory, IndexMemory が増えて使用率が減りました 🙂

    今後も使用量は増え続けるのでこの作業は繰り返し行う必要がありそうです :mrgreen:

SoftwareRAID 障害復旧 #2

またディスク障害が発生しました 😥

前回障害が発生してからまだ2ヶ月しか経っていません…。

前回交換したディスクとは別のディスクが壊れました。

[root@ns1 ~]# cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 hdc2[1] hda2[0]
      2096384 blocks [2/2] [UU]
 
md2 : active raid1 hdc3[1] hda3[2](F)
      75762432 blocks [2/1] [_U]
 
md0 : active raid1 hdc1[1] hda1[0]
      264960 blocks [2/2] [UU]
 
unused devices: <none>

壊れたディスクは /dev/hda、つまり1番目のディスクです。

復旧作業は基本的に前回と同じですが、違うところはディスクの物理的な接続を入れ替えるところです。

入れ替えと言っているのは、壊れたディスクは1番目のディスクですが、新しく交換するディスクはセカンダリの IDE に接続して、元々セカンダリ IDE に接続していたディスクをプライマリ IDE に接続します。

入れ替えをしなければならない理由は、1番目のディスクが壊れてしまったからです。
入れ替えをしないで OS を起動しようとすると、MBR が 1 本目のディスクの stage1 を読み込もうとしますが、交換したまっさらなディスクなので stage1 が存在しないので OS の起動に失敗してしまいます。

OS が起動できなければ復旧作業ができません :mrgreen:

ディスクを入れ替えてしまえば後は前回と同じ復旧作業をするだけです。 🙂

前回の記事を見ながら無事復旧できました 🙂

もう壊れないでほしいけど、この暑さじゃまた壊れてしまうかも 🙁