TeraStationのデータサルベージ

## はじめに

少し前にTeraStationを手に入れて自宅のNASとして使っています。
中古品のためいつ壊れてもおかしくありません。
もし壊れた場合のデータ取り出し方法をまとめておきます。

主に想定しているのは**TeraStationの基盤が壊れてデータにアクセスできなくなった**パターンです。
また、ありがちな**HDDも一緒に壊れた**時の取り出し方も併せて書いています。

TeraStationはLinux（Debian？）ベースのOSが使われているようであり、データサルベージ作業には[Ubuntu Server 24.04.2 LTS](https://ubuntu.com/download/server)を使用します。

今回記事にするのは4つのパターンです
・RAID6で基盤のみ故障の場合
・RAID6で基盤＋HDD故障の場合
・RAID10で基盤のみ故障の場合
・RAID10で基盤＋HDD故障の場合


検証機器：[TS-XH8.0L/R6](https://www.buffalo.jp/product/detail/ts-xh8.0tl_r6.html)

## 前提知識

TeraStationのXシリーズはHDD内を6つのパーティションに分けて使います。

パーティション1がboot領域
パーティション2がOS領域
パーティション3は不明
パーティション4も不明
パーティション5はswap領域
パーティション6がデータ領域

そのためデータサルベージに必要なものは**パーティション6**、つまり`sda6`、`sdb6`、`sdc6`、`sdd6`です。

詳細は[別の記事の「おまけ」部分](https://qiita.com/minnsou/items/2f3bd921d4839cfaa8f3#%E3%81%8A%E3%81%BE%E3%81%91)に書いたので気になる人は見てください。

今回は記事にあたり`test_dir`という共有ディレクトリを作り、その中に`test.txt`というファイルを置いています。このテキストファイルが見えればサルベージOKとします。

![スクリーンショット 2025-03-03 22.01.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/395943/37178b97-e70d-409d-aaff-19f78e57241a.png)


## RAID6で基盤のみ故障の場合

### 1. TeraStationからHDDを摘出してPCに接続

TeraStationではSATA HDDが４台使われていると思いますので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](https://www.buffalo.jp/support/faq/detail/1886.html)なようなのでエラーが出る時は
`-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](https://www.buffalo.jp/support/faq/detail/1886.html)なようなのでエラーが出る時は
`-t xfs`をつけても良いと思います。

```
root@ubu24:~# mount /dev/md100 /mnt
```

これで問題なく`/mnt`でデータが見えると思います。

```
root@ubu24:~# cat /mnt/test_dir/test.txt 
this is a test file
root@ubu24:~# 
```

:::note info
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](https://www.buffalo.jp/support/faq/detail/1886.html)なようなのでエラーが出る時は
`-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から４台の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](https://www.buffalo.jp/support/faq/detail/1886.html)なようなのでエラーが出る時は
`-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