はじめに
少し前にTerastationを手に入れて自宅のNASとして使っています。
中古品のためいつ壊れてもおかしくありません。
もし壊れた場合のデータ取り出し方法をまとめておきます。
主に想定しているのはTeraStationの基盤が壊れてデータにアクセスできなくなったパターンです。
また、ありがちなHDDも一緒に壊れた時の取り出し方も併せて書いています。
TeraStationはLinux(Debian?)ベースのOSが使われているようであり、データサルベージ作業にはUbuntu Server 24.04.2 LTSを使用します。
今回記事にするのは4つのパターンです
・RAID6で基盤のみ故障の場合
・RAID6で基盤+HDD故障の場合
・RAID10で基盤のみ故障の場合
・RAID10で基盤+HDD故障の場合
検証機器:TS-XH8.0L/R6
前提知識
TeraStationのXシリーズはHDD内を6つのパーティションに分けて使います。
パーティション1がboot領域
パーティション2がOS領域
パーティション3は不明
パーティション4も不明
パーティション5はswap領域
パーティション6がデータ領域
そのためデータサルベージに必要なものはパーティション6、つまりsda6
、sdb6
、sdc6
、sdd6
です。
詳細は別の記事の「おまけ」部分に書いたので気になる人は見てください。
今回は記事にあたりtest_dir
という共有ディレクトリを作り、その中にtest.txt
というファイルを置いています。このテキストファイルが見えればサルベージOKとします。
RAID6で基盤のみ故障の場合
1. TeraStationからHDDを摘出してPCに接続
TeraStationではSATA HDDが4台使われていると思いますので4台ともSATA接続します。
SATA-USB変換ケーブル等があればUSB経由でも行けると思います。
2. Ubuntu Serverの起動
適当なディスクにUbuntu Serverをインストールして起動させてください。
3. rootでRAIDの状態確認
root@ubu24:~# cat /proc/mdstat
Personalities : [raid1] [raid6] [raid5] [raid4] [raid0] [raid10]
md124 : active (auto-read-only) raid6 sdd6[3] sdc6[2] sda6[1] sdb6[0]
946934784 blocks super 1.2 level 6, 512k chunk, algorithm 2 [4/4] [UUUU]
bitmap: 0/4 pages [0KB], 65536KB chunk
md125 : active (auto-read-only) raid1 sdd2[3] sda2[6] sdc2[5] sdb2[4]
4999156 blocks super 1.2 [4/4] [UUUU]
bitmap: 0/1 pages [0KB], 65536KB chunk
md126 : active (auto-read-only) raid1 sdd5[3] sda5[6] sdc5[5] sdb5[4]
1000436 blocks super 1.2 [4/4] [UUUU]
bitmap: 0/1 pages [0KB], 65536KB chunk
md127 : active (auto-read-only) raid1 sdd1[3] sda1[1] sdc1[2] sdb1[0]
1000384 blocks [4/4] [UUUU]
unused devices: <none>
root@ubu24:~#
今回はmd124
でRAID6が問題なく組めているようなので、これをそのまま使います。
4. マウント
md124
を/mnt
にマウントします。公式曰くXFSなようなのでエラーが出る時は
-t xfs
をつけても良いと思います。
root@ubu24:~# mount /dev/md124 /mnt
これで問題なく/mnt
でデータが見えると思います。
root@ubu24:~# cat /mnt/test_dir/test.txt
this is a test file
root@ubu24:~#
RAID6で基盤+HDD故障の場合
次は基盤と一緒にHDDが壊れたパターンです。
今回は記事のためにHDDを1本抜き、PCに3本接続した状態で試しています。
1. TeraStationからHDDを摘出してPCに接続
2. Ubuntu Serverの起動
ここまでは特に上と変わりません。
3. rootでRAIDの状態確認
root@ubu24:~# cat /proc/mdstat
Personalities : [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md124 : inactive sdb6[0](S) sda6[1](S) sdc6[2](S)
1420403178 blocks super 1.2
md125 : inactive sdb2[4](S) sda2[6](S) sdc2[5](S)
14997504 blocks super 1.2
md126 : inactive sdb5[4](S) sdc5[5](S) sda5[6](S)
3001308 blocks super 1.2
md127 : inactive sdb1[0](S) sda1[1](S) sdc1[2](S)
3001152 blocks
unused devices: <none>
root@ubu24:~#
md124
でRAID6がうまく組めなくなっていることが分かります。
4. アクティブアレイの停止
mdadm
コマンドによりアレイの停止を行います。
root@ubu24:~# mdadm --stop --scan
--scan
をつけることでアレイのリストを/proc/mdstat
から得るようです。
(詳細はman mdadm
を参照)
5. RAID6を編成
問題のないsda6
、sdb6
、sdc6
を使ってRAID6を再構成します。
これにはassemble
オプションを使用します。
man
で見ると分かりますが、「以前に作成されたアレイの構成情報を元に1つのアクティブアレイを編成する」オプションです。
root@ubu24:~# mdadm --assemble --run /dev/md100 /dev/sda6 /dev/sdb6 /dev/sdc6
mdadm: /dev/md100 has been started with 3 drives (out of 4).
root@ubu24:~#
このHDD1本無しの状態でmd100
が問題なく作成できているかと思います。
md100
という名前は適当です。
root@ubu24:~# cat /proc/mdstat
Personalities : [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md100 : active raid6 sdb6[0] sdc6[2] sda6[1]
946934784 blocks super 1.2 level 6, 512k chunk, algorithm 2 [4/3] [UUU_]
bitmap: 0/4 pages [0KB], 65536KB chunk
unused devices: <none>
root@ubu24:~#
なおRAID6はHDDの故障に2台まで耐えられます。そのためsdc6
も壊れてHDDが2台ダメになった時もほぼ同様のコマンドでいけます。
mdadm --assemble --run /dev/md100 /dev/sda6 /dev/sdb6
6. マウント
作成したmd100
を/mnt
にマウントします。公式曰くXFSなようなのでエラーが出る時は
-t xfs
をつけても良いと思います。
root@ubu24:~# mount /dev/md100 /mnt
これで問題なく/mnt
でデータが見えると思います。
root@ubu24:~# cat /mnt/test_dir/test.txt
this is a test file
root@ubu24:~#
HDDの数が足りない状態で無理やりRAIDを再構築をしたHDDをTeraStationに戻すと「HDD broken」というハードウェア異常のアラームが出ます。
その場合はmdadm --add /dev/md100 /dev/sdd6
のように足りないディスクを追加してあげると再構築の手間が省けます。
RAID10で基盤のみ故障の場合
ここからはRAID10で組んでいた時の手順になります。
基本的にはRAID6と同じですが、RAIDの組み方が少し異なります。
1. TeraStationからHDDを摘出してPCに接続
2. Ubuntu Serverの起動
ここまでは特に上と変わりません。
3. rootでRAIDの状態確認
root@ubu24:~# cat /proc/mdstat
Personalities : [raid1] [raid0] [raid6] [raid5] [raid4] [raid10]
md122 : active raid0 md123[0] md124[1]
946932736 blocks super 1.2 512k chunks
md123 : active (auto-read-only) raid1 sdb6[1] sda6[0]
473467590 blocks super 1.2 [2/2] [UU]
bitmap: 0/4 pages [0KB], 65536KB chunk
md124 : active (auto-read-only) raid1 sdc6[0] sdd6[1]
473467590 blocks super 1.2 [2/2] [UU]
bitmap: 0/4 pages [0KB], 65536KB chunk
md125 : active (auto-read-only) raid1 sda5[4] sdb5[6] sdc5[5] sdd5[3]
1000436 blocks super 1.2 [4/4] [UUUU]
bitmap: 0/1 pages [0KB], 65536KB chunk
md126 : active (auto-read-only) raid1 sda2[4] sdc2[5] sdd2[3] sdb2[6]
4999156 blocks super 1.2 [4/4] [UUUU]
bitmap: 0/1 pages [0KB], 65536KB chunk
md127 : active (auto-read-only) raid1 sdc1[2] sdd1[3] sda1[0] sdb1[1]
1000384 blocks [4/4] [UUUU]
unused devices: <none>
root@ubu24:~#
TeraStationのXシリーズではRAID10を組んでいる場合
・md122
=md123
とmd124
のRAID0
・md123
=sda6
とsdb6
のRAID1
・md124
=sdc6
とsdd6
のRAID1
の構成で組まれていることが分かります。
HDDに問題がなければ、このパターンはmd122
をマウントするだけです。
4. マウント
md122
を/mnt
にマウントします。公式曰くXFSなようなのでエラーが出る時は
-t xfs
をつけても良いと思います。
root@ubu24:~# mount /dev/md122 /mnt
これで問題なく/mnt
でデータが見えると思います。
root@ubu24:~# cat /mnt/test_dir/test.txt
this is a test file
root@ubu24:~#
RAID10で基盤+HDD故障の場合
1. TeraStationから4台のHDDを摘出してPCに接続
2. Ubuntu Serverの起動
ここまでは特に上と変わりません。
3. rootでRAIDの状態確認
root@ubu24:~# cat /proc/mdstat
Personalities : [raid1] [raid0] [raid6] [raid5] [raid4] [raid10]
md122 : inactive md123[0](S)
473466566 blocks super 1.2
md123 : active (auto-read-only) raid1 sdb6[1] sda6[0]
473467590 blocks super 1.2 [2/2] [UU]
bitmap: 0/4 pages [0KB], 65536KB chunk
md124 : inactive sdc6[0](S)
473467726 blocks super 1.2
md125 : inactive sdc5[5](S) sdb5[6](S) sda5[4](S)
3001308 blocks super 1.2
md126 : inactive sdb2[6](S) sda2[4](S) sdc2[5](S)
14997504 blocks super 1.2
md127 : inactive sda1[0](S) sdb1[1](S) sdc1[2](S)
3001152 blocks
unused devices: <none>
root@ubu24:~#
md123
はRAID1が問題なく組めている(sda6
とsdb6
)ようですが
md124
がsdb6
のみでRAID1が組めていないようです。
それに伴ってmd122
(md123
とmd124
のRAID0)も組めなくなっています。
4. アクティブアレイの停止
mdadm
コマンドによりアレイの停止を行います。
root@ubu24:~# mdadm --stop --scan
先ほどと同じなので解説は省略します。
5. RAID1を再編成
まずは先ほど問題のなかったsda6
とsdb6
でRAID1を構成します。
先ほどと同じくassemble
オプションを使用します。
名前は適当にmd3
としています。
root@ubu24:~# mdadm --assemble --run /dev/md3 /dev/sda6 /dev/sdb6
mdadm: /dev/md3 has been started with 2 drives.
root@ubu24:~#
root@ubu24:~# cat /proc/mdstat
Personalities : [raid1] [raid0] [raid6] [raid5] [raid4] [raid10]
md127 : inactive md3[0](S)
473466566 blocks super 1.2
md3 : active raid1 sda6[0] sdb6[1]
473467590 blocks super 1.2 [2/2] [UU]
bitmap: 0/4 pages [0KB], 65536KB chunk
unused devices: <none>
root@ubu24:~#
md3
は正常にActiveになっています。
md127
が見えていますが、これがうまく組めていないデータ領域のRAID0です。
次にsdc6
だけでRAID1を構成します。
名前は適当にmd4
としています。
root@ubu24:~# mdadm --assemble --run /dev/md4 /dev/sdc6
mdadm: /dev/md4 has been started with 1 drive (out of 2).
root@ubu24:~#
この状態でmd127
も問題なく復旧しているかと思います。
もしダメな場合はmdadm --assemble --run /dev/md127 /dev/md3 /dev/md4
でRAID10が組めるはずです。
root@ubu24:~# cat /proc/mdstat
Personalities : [raid1] [raid0] [raid6] [raid5] [raid4] [raid10]
md4 : active raid1 sdc6[0]
473467590 blocks super 1.2 [2/1] [U_]
bitmap: 0/4 pages [0KB], 65536KB chunk
md127 : active raid0 md4[1] md3[0]
946932736 blocks super 1.2 512k chunks
md3 : active raid1 sda6[0] sdb6[1]
473467590 blocks super 1.2 [2/2] [UU]
bitmap: 0/4 pages [0KB], 65536KB chunk
unused devices: <none>
root@ubu24:~#
なおsdb6
も壊れてHDDが2台ダメになった時も同様の手順でいけるかと思います。
(md3
の作成のコマンドがmdadm --assemble --run /dev/md3 /dev/sda6
になるだけです)
6. マウント
md127
を/mnt
にマウントします。公式曰くXFSなようなのでエラーが出る時は
-t xfs
をつけても良いと思います。
root@ubu24:~# mount /dev/md127 /mnt
これで問題なく/mnt
でデータが見えると思います。
root@ubu24:~# cat /mnt/test_dir/test.txt
this is a test file
root@ubu24:~#
終わりに
一応問題なく稼働しているTeraStationから引き抜いて実験したので問題ないとは思いますがコマンドの実行は自己責任でお願いします。
当たり前ですが改めて記載します。
RAIDはバックアップではありません。
参考サイト:
https://boc.geninformatics.com/?p=515
https://nananeko.ti-da.net/e7460552.html
https://www.ioss.jp/sohodiy/mdadm8-1_5.php