この記事ではUbuntuで過去に使っていたファイル用のHDDやSSDなどををRAID化する方法です。
今回はOpenMediaVault(OMV)を使ってNASを構築していたRaspberry PiのSDカードがぶっ壊れたのでその再構築をかねています。(NAS化編は次回)
0. Raspberry PiにUbuntuをインストールする
ここは本題と関係ないので関係ない方は飛ばしてください。
Raspberry Pi imagerを使ってother-general-purpose OS > Ubuntu > Ubuntu Serverを選択します。
この時WiFiの自動設定をoffにした方良いかもです。僕はそこでバグってネットにつながりませんでした。
有線でやりましょう。
1. 既存のHDDからRAIDを構成する
-
今回の登場人物
HDD-A : 既存のデータが入っているHDD
HDD-B : 新規のRAID用HDD -
今回の手順
- HDD-Aを最初にマウントしデータを読み取れるようにする
- HDD-BのみでRAIDを組む
- HDD-AからRAIDにデータをコピーする
- RAIDにHDD-Aを追加する
- 終わるのを見届ける
1-1. HDDをマウントする
まず最初にHDD-Aをマウントしデータをコピーできるようにします。
対象のHDDをPCまたはSBCに挿します。
以下のコマンドで対象のHDDを探します。
これからHDD-Aはsda1というパスになりますが、各自対象のパスに置き換えてください。
$ sudo fdisk -l
Device Start End Sectors Size Type
/dev/sda1 2048 7814037134 7814035087 3.6T Linux filesystem
こんな感じで /dev/sdaというのが確認できたらOKです。
マウント用のディレクトリを作成し、マウントします。
$ sudo mkdir -p /drive/sda1
$ sudo mount /dev/sda1 /drive/sda1
1-2. RAIDを組む
次にHDD-Bを対象としてRAIDを組みます。
1-1と同じようにHDD-BをPCまたはSBCに挿します。
$ sudo fdisk -l
Device Start End Sectors Size Type
/dev/sdb1 2048 7814037134 7814035087 3.6T Linux filesystem
同じように場所がわかったら、パーティションがあるか確認しなければ作成します。
(今回は過去に一度OMVに刺してたので両方パーティションが存在していました。多分新規の場合はパーティションがないはずなので以下の手順に沿って作成してください。また、最後のRAIDのコマンドは作成されててもされてなくても実行してください。)
$ sudo parted -l
Model: XXXXXX
Disk /dev/sdb: 4001GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt #(←パーティションがなければここが何もないはず...)
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 4001GB 4001GB ext4
# パーティションが作成されていない場合
$ parted --script /dev/sdb1 "mklabel gpt"
$ parted --script /dev/sdb "mkpart primary 0% 100%"
# パーティションが作成されている場合もされていない場合もすること
$ parted --script /dev/sdb "set 1 raid on"
次にRAIDを組む際に必要なものをinstallします。
$ sudo apt install mdadm
そして、HDD-BのみでRAIDを組みます。(今回はRAID1で組みます)
$ sudo mdadm --create /dev/md0 --level=1 --raid-device=2 missing /dev/sdb1
これでHDD-BだけでRAIDを組むことができました。
正常に組めたら、任意の形式でフォーマットして、マウントしておきます。
$ sudo mkfs.ext4 /dev/md0
mke2fs 1.47.0 (5-Feb-2023)
Creating filesystem with 976721360 4k blocks and 244187136 inodes
Filesystem UUID: XXXX-XXX-XXX
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
102400000, 214990848, 512000000, 550731776, 644972544
Allocating group tables: done
Writing inode tables: done
Creating journal (262144 blocks): done
Writing superblocks and filesystem accounting information: done
$ sudo mkdir /dev/md0 /device/md0
$ sudo mount /dev/md0 /device/md0
正常にマウントできたか確認しておきます。
$ df
/dev/md0 3844420408 28 3649059724 1% /drive/md0
OKですね。
1-3. HDD-AからRAIDにデータをコピーする
すでにマウントされているHDD-Aから先ほどマウントしたRAID(md0)にデータをコピーします。
今回はrsyncを使って同期します。
$ sudo rsync -avr /drive/sda1/ /drive/md0
これで同期が始まります。終わるまでコーヒーでも飲んで待ちましょう。
進行状況やlsで軽くファイルがちゃんと転送されているか確認して次のステップへ移動してください。
最悪データが飛びます。
1-4. RAIDにHDD-Aを追加する
とりあえず、マウントしているHDD-Aをアンマウントします。
$ sudo umount /dev/sda1
そして、RAIDに組み入れます。
$ parted --script /dev/sdb "set 1 raid on"
$ sudo mdadm /dev/md0 -a /dev/sda1
これでRAIDにHDD-Aを組み入れることができました。
組み入れ後RAIDの同期が始まるので、以下のコマンドで確認します。
$ cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 sda1[2] sdb1[1]
3906885440 blocks super 1.2 [2/1] [_U]
[>....................] recovery = 0.2% (8716160/3906885440) finish=511.2min speed=127088K/sec
bitmap: 30/30 pages [120KB], 65536KB chunk
このようにrecoveryのようになってる場合は同期中です。
待ちましょう。
2. 完成
上記の同期が終われば完了です。
お疲れ様でした。