LinkStationのOS領域を手動で修復する方法【RAID1】

LinkStation LinkStation

LinkStation LS-QL/1D という過去の名機を今も使っていますが数年使っているとHDDの寿命が来て、あちこち壊れます。

ヤバいのはHDDの中にはLinkStationのOS領域もあって、そこが経年劣化で壊れるパターンです。
これが起きるとEMモードにもならず、素人だと詰んでしまいます・・。

しかし、データがRAIDで残っているのであれば、Disk1に新品のHDDを入れて、状態の良いHDDをDisk2~Disk4に入れることで、データ領域をデグレードモードで復活させることが出来ます。

本記事では、Disk1をファームアップデータで新しく作り直してから、Disk1のOS領域をDisk2~Disk4にコピーさせ、Disk2~Disk4のデータ領域をDisk1にも反映させる・・という事を行っています。

現在の状況は、

Disk1: 新OS | 新データ領域

こうなっています。これを、以下のようにします。

Disk1: 新OS | 新データ領域
Disk2: 新OS | 旧RAID5領域
Disk3: 新OS | 旧RAID5領域
Disk4: 新OS | 旧RAID5領域

RAID5はDiskが3本あれば復旧できるので

Disk1: 新OS | 旧RAID5領域
Disk2: 新OS | 旧RAID5領域
Disk3: 新OS | 旧RAID5領域
Disk4: 新OS | 旧RAID5領域

最後は↑ここまで元に戻せるはずです。

本記事では各DiskのbootパーティションつまりOS部分に着目して、OSの完全復旧を行います。

LinkStationやTeraStationのOS領域がどうなっているか?については、以下の記事が私は参考になりました。

TeraStationのしくみ - NAS-RESCUE

ファームアップデータによる復旧方法

LinkStation全体のOS領域の復旧を行う前に、Disk1に新品のHDDを入れて、そこに工場出荷状態に近いLinkStationのHDDイメージを作っておく必要があります。

それを行うのが「ファームアップデータ」というツールです。
バッファローの公式ホームページに掲載されています。

このファームアップデータを使ったDisk1の復旧方法を以下の記事に詳しく書いてありますので、まずはSTEP1としてお読み下さい。

LinkStation/TeraStationをtftpブートするには?【E06エラーからの復旧】

LinkStationによる自動Rebuild

前回の試行でLinkStationの物理的な故障も疑われたため、故障個所の特定のためにも、1つ1つ確認しながらLinkStationに搭載するDiskの本数を増やしていきます。

LinkStationにはRAIDの自動追加機能があるので、1本→2本→3本と搭載本数を増やしていけば、自動で直る可能性があります。

まず、ファーム復旧済のハードディスク×1本だけで立ち上げてみる。
⇒ 無事立ち上がった

Disk2の場所が壊れているのではと思い、同じハードディスクをDisk2に入れて立ち上げてみる。
⇒ 無事立ち上がった

データコピーして新しく導入したDisk2のハードディスクが嫌われているのではないかと思い、正規の位置に、Disk1とDisk3の2本を入れて立ち上げてみる。
⇒ 少し時間がかかったが「ディスクマウントエラー」のLEDパターンが出て、無事立ち上がった。

次にDisk1とDisk4の2本でも立ち上げてみる。
⇒ 無事立ち上がった

今の所はどのハードも壊れていないようですね。

そして、これまでに搭載した Disk3・Disk4 には状態に変化が見られるはずです。(LinkStationの自動Rebuild機能による)

RAID状態の確認

Disk1とDisk4が入った状態で、まだtelnetでログイン出来たので、状態をチェック。

# mdadm --detail /dev/md1
/dev/md1:
        Version : 00.90.03
  Creation Time : Thu Nov  1 00:01:39 2007
     Raid Level : raid1
     Array Size : 5004160 (4.77 GiB 5.12 GB)
    Device Size : 5004160 (4.77 GiB 5.12 GB)
   Raid Devices : 4
  Total Devices : 2
Preferred Minor : 1
    Persistence : Superblock is persistent

    Update Time : Sat Jan  9 17:48:49 2016
          State : clean, degraded
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

           UUID : 88682f1f:28b5e648:656dcf9a:e175b210
         Events : 0.102262

    Number   Major   Minor   RaidDevice State
       0       8        2        0      active sync   /dev/sda2
       1       0        0        1      removed
       2       0        0        2      removed
       3       8       18        3      active sync   /dev/sdb2
# 

RAID1が構築されているようです。
面白いですね。ソフトRAIDってパーティション毎に異なるRAID方式を設定出来るんですね。

私の好きな以下のページにも書かれています。LinkStationのOS領域=bootパーティションは、全てのハードディスクにRAID1でミラーリングされているそうです。
LinkStationのしくみ - LinkStation のデータ復旧サービス。24時間預かりで3.24万円から

Disk×3本の場合

続いて、正規の位置に、Disk1、Disk3、Disk4の3本を入れて立ち上げてみる。
⇒ 少し時間がかかったが「ディスクマウントエラー」のLEDパターンが出て、無事立ち上がった。

状態確認すると、3本入れたのにRAID1に2本しか組み込まれていませんでした。
そこで、以下のように追加します。

# mdadm --manage /dev/md0 --add /dev/sdc1
mdadm: re-added /dev/sdc1
# 
# mdadm --detail /dev/md0
/dev/md0:
        Version : 00.90.03
  Creation Time : Thu Nov  1 00:01:38 2007
     Raid Level : raid1
     Array Size : 1003904 (980.54 MiB 1028.00 MB)
    Device Size : 1003904 (980.54 MiB 1028.00 MB)
   Raid Devices : 4
  Total Devices : 3
Preferred Minor : 0
    Persistence : Superblock is persistent

    Update Time : Sat Jan  9 18:01:23 2016
          State : clean, degraded, recovering
 Active Devices : 2
Working Devices : 3
 Failed Devices : 0
  Spare Devices : 1

 Rebuild Status : 84% complete

           UUID : cf7a0362:4016643e:d481448c:f62e2cbd
         Events : 0.1290

    Number   Major   Minor   RaidDevice State
       0       8        1        0      active sync   /dev/sda1
       4       8       33        1      spare rebuilding   /dev/sdc1
       2       0        0        2      removed
       3       8       17        3      active sync   /dev/sdb1
# 

このやり方で、/dev/md0 も /dev/md1 も3本デグレードモードにします。
これで /boot と / (ルート) のパーティションが3本で同期された状態です。

/boot と /ルート が別々のRAIDになっているなんて、想像以上に複雑ですね。

Disk×4本の場合

で、最後に、正規の位置に4本全てを入れて立ち上げてみる。これで最後です。
⇒ ところが、なんと! EMモードで立ち上がってしまった! だめぢゃん!

4本だと立ち上がらないという、謎はまだ続きます・・・。

めげそうですが、EMモードになったらファームアップするしかありません。
4本入れたまま、ファームアップをかけます。

ファームアップはすんなり始まりました。
強制モードでは無いので、フォーマットするなどという脅しも無し(笑)。

何回か再起動を経て、無事立ち上がった。
しかし、システム領域が修復されてしまったために、telnetが出来なくなってしまいました

LinkStationのRAID1を書き換えてみる

ハードディスクのアクセスランプを見る限り、システム領域は4本RAID1で同期されているようです。
(つまり / (ルート) のtelnetd起動の修正は4本とも消えているはずです)

それにしても、あっちがうまく行けばこっちがうまく行かず・・・結構大変です。

試しに今度は、Disk1とDisk2をパソコンにRAID1を組まずにxfsとして無理矢理マウントした後、telnetd の起動を書き込んで、またLinkStationに2本だけ戻して起動してみました。
⇒ この目論見は失敗です。
RAID1のチェックサムが働いたのか、無理矢理書き換えた事がバレて、再び「EMモード」になってしまいました。
RAIDのシステムに無理矢理は通用しないのか・・・トホホ。

ここで、ちょっと落ち着いて、まとめると、RAID1のハードディスクはRAID1としてマウントしてから、中身を書き換えないと、変更が有効にならないということです。

UbuntuでRAID1

仕方ないので、重い腰を上げて、4本のハードディスクを再びパソコンに全て繋いで立ち上げます。
DVDブートの軽いUbuntuなので、mdadmもsshも全て入れ直しです。

そして、ファームが入っている md0(=/boot) も、LinuxのOSが入っている md1 (=/ (root) )も、4本全てrebuildしてから、中身を書き換えました。
主な手順は以下の通り。

# apt-get install mdadm

# mknod /dev/md0 b 9 0
# ls -l /dev/md0
brw-r--r-- 1 root root 9, 0 Jan 9 10:40 /dev/md0
# mknod /dev/md1 b 9 1
# mknod /dev/md2 b 9 2
# chmod 775 /dev/md*

# mdadm -A /dev/md0 /dev/sd[cd]1 --force --run
mdadm: /dev/md0 has been started with 2 drives (out of 4).
# mdadm -A /dev/md1 /dev/sd[cd]2 --force --run
mdadm: /dev/md1 has been started with 2 drives (out of 4).
# mkdir /mnt/md0
# mkdir /mnt/md1
# mount /dev/md0 /mnt/md0
# mount /dev/md1 /mnt/md1

# cd /mnt/md1/etc/init.d
# vi rcS

/usr/sbin/telnetd & を最終行に追加します。

# cd /mnt/md1/etc/
# vi shadow

root のパスワード領域を以下のように潰しておきます。

root::16809:0:99999:7:::

(ここでやっておかないと後でまた面倒なことになります)

# mdadm --manage /dev/md0 --add /dev/sda1
mdadm: re-added /dev/sda1
# mdadm --manage /dev/md0 --add /dev/sdb1
mdadm: added /dev/sdb1
# mdadm --manage /dev/md1 --add /dev/sda2
mdadm: added /dev/sda2
# mdadm --manage /dev/md1 --add /dev/sdb2
mdadm: added /dev/sdb2
#

どんどんRAID1に追加していきます。

# cat /proc/mdstat 
Personalities : [raid1] 
md1 : active raid1 sdb2[4](S) sda2[5] sdd2[2] sdc2[3]
      5004160 blocks [4/2] [__UU]
      [=============>.......]  recovery = 66.6% (3336704/5004160) finish=0.3min speed=84302K/sec
      
md0 : active raid1 sdb1[1] sda1[0] sdd1[2] sdc1[3]
      1003904 blocks [4/4] [UUUU]
      
unused devices:
# 

進行状況が表示されています。すぐ終わりそうですね。

次に、md0 には今までの残骸が残っていたので、fsck.ext3 を実行していらないファイルは消しました。

# umount /mnt/md0
# fsck.ext3 /dev/md0
e2fsck 1.42.9 (4-Feb-2014)
/dev/md0 contains a file system with errors, check forced.
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Entry 'u-boot.buffalo.fujimori' in / (2) has deleted/unused inode 11.  Clear&lty&gt? yes
Entry 'conf_save.tgz.fujimori' in / (2) has deleted/unused inode 16.  Clear&lty&gt? yes
Pass 3: Checking directory connectivity
/lost+found not found.  Create&lty&gt? yes
Pass 4: Checking reference counts
Pass 5: Checking group summary information
Block bitmap differences:  -(4419--4480) -(16384--16390)
Fix&lty&gt? yes
Free blocks count wrong for group #0 (15661, counted=15730).
Fix&lty&gt? yes
Free blocks count wrong (205706, counted=205775).
Fix&lty&gt? yes
Inode bitmap differences:  -16
Fix&lty&gt? yes
Free inodes count wrong for group #0 (7852, counted=7854).
Fix&lty&gt? yes
Free inodes count wrong (62956, counted=62958).
Fix&lty&gt? yes

/dev/md0: ***** FILE SYSTEM WAS MODIFIED *****
/dev/md0: 18/62976 files (0.0% non-contiguous), 45201/250976 blocks
# sync
# mount /dev/md0 /mnt/md0
# ls -l /mnt/md0
total 155192
-rw-r--r-- 1 root root     26867 Jan  9 09:37 conf_save.tgz
-rw-r--r-- 1 root root 149001686 Jun 18  2009 hddrootfs.buffalo.updated.done
-rw-r--r-- 1 root root   7073595 Jun 18  2009 initrd.buffalo
-rw-r--r-- 1 root root      7432 Jan  9 09:37 log.tgz
drwx------ 2 root root      4096 Jan  9 11:03 lost+found
-rw-r--r-- 1 root root    245776 Jan  9 09:18 u-boot.buffalo
-rw-r--r-- 1 root root    245776 Oct 31  2007 u-boot.buffalo.org
-rw-r--r-- 1 root root   2120040 Jan  9 09:18 uImage.buffalo
# 

綺麗になりました。

RAID5の状態確認

ついでに、md2 のRAID5のデータ領域が、/dev/sd[bcd]6 のデグレードモードで無事であることも確認しました。
(ちなみに/dev/sda6 はフォーマットがかかってしまっており、独立している状態です)

# mdadm -A /dev/md2 /dev/sd[bcd]6
mdadm: /dev/md2 has been started with 3 drives (out of 4).
# mdadm --detail /dev/md2
/dev/md2:
        Version : 0.90
  Creation Time : Sun Jun 21 17:07:49 2009
     Raid Level : raid5
     Array Size : 2906278656 (2771.64 GiB 2976.03 GB)
  Used Dev Size : 968759552 (923.88 GiB 992.01 GB)
   Raid Devices : 4
  Total Devices : 3
Preferred Minor : 2
    Persistence : Superblock is persistent

    Update Time : Sat Jan  9 09:35:02 2016
          State : clean, degraded 
 Active Devices : 3
Working Devices : 3
 Failed Devices : 0
  Spare Devices : 0

         Layout : left-symmetric
     Chunk Size : 64K

           UUID : 82ca5ba8:77319326:bd54f990:2edf8a42
         Events : 0.276

    Number   Major   Minor   RaidDevice State
       0       0        0        0      removed
       1       8       22        1      active sync   /dev/sdb6
       2       8       38        2      active sync   /dev/sdc6
       3       8       54        3      active sync   /dev/sdd6
# mkdir /mnt/md2
# mount /dev/md2 /mnt/md2
# cd /mnt/md2
# ls
lpd  share

フォルダが無事見えました。
これだけ完璧に構築しておけば、LinkStationに4本とも戻した時に、EMモードになることはありません。

RAID5の復活

パソコンをシャットダウンして、LinkStationに4本全て接続して、起動します。

無事、立ち上がりました!
もちろんディスクマウントエラーは出たままです。

状態を確認します。

・telnetからのログインは出来る
・RAID1は管理Webと同期が取れている
・RAID5は管理Webと同期が取れていない

では、最終形に向けてメンテナンスしましょう。

rootのパスワード設定

さすがにパスワード無しは危険すぎますので、rootのパスワードを設定しました。

本当は一般ユーザでログインして su または sudo で使いたいのですが、どうやっても無理でした。

新しいパッケージをインストールするのも、この独自OSでは無理でした。

/dev/sda6 のファイル共有・解除

Disk1(/dev/sda6)はRAID5のメンバにしなくてはならないので、管理Webの設定を開き、ファイル共有の対象から解除させておきます。

更にマウントも解除します。

# umount /mnt/disk1

/dev/sda6 をRAID5メンバに追加

Disk1(/dev/sda6)をRAID5のメンバに追加する手順は以下の通りです。

もう覚えましたよね。何度もやってるし。

# mdadm -A /dev/md2 /dev/sd[bcd]6
# mdadm --detail /dev/md2
# mdadm --manage /dev/md2 --add /dev/sda6
# mdadm --detail /dev/md2
# cat /proc/mdstat
# mount /dev/md2 /mnt/array2

RAID5フォルダをsambaで共有

出来上がったRAID5のフォルダをsambaで共有します。

これには、元々入っていた設定を参考にしました。

# cd /etc/samba/
# vi smb.conf

以下の行を追加しました。

[share]
    comment = Share
    path = /mnt/array2/share
    browsable = yes
    printable = no
    writable = yes
    guest ok = yes
    force create mode = 666
    force directory mode = 777
    csc policy = manual
    vfs objects = recycle, audit
    recycle:repository = trashbox
    recycle:keeptree = 1
    recycle:versions = 1
    recycle:directory_mode = 777
    audit:facility = LOCAL6
    audit:priority = INFO
###share###

あとは smbd と nmbd を刺激すれば完成です。

# ps | grep smb
# kill -1 967
# ps | grep nmb
# kill -1 979

これでパソコンから読めるようになります。

まずは復活! おめでとう!

Windows10にアップグレードしたら、LinkStationのHDDが壊れて立ち上がらなくなり、パソコンからLinuxの機能を駆使して完全復旧させた私の体験の一部始終を読みたい方は、以下の記事から進んで下さい。

故障したLinkStationから自力でデータ復旧した方法

コメント

タイトルとURLをコピーしました