目的
シングルHDDで稼働中のUbuntuシステムがある。ここにHDDを一台追加してRAID1を構築したい。
環境
- システム: Ubuntu 18.04.4 LTS
- 稼働中の HDD
$ sudo fdisk -l
Device Start End Sectors Size Type
/dev/sda1 2048 1050623 1048576 512M EFI System
/dev/sda2 1050624 3871100927 3870050304 1.8T Linux filesystem
/dev/sda3 3871100928 3904292863 33191936 15.8G Linux swap
- RAID1 用に追加する HDD (パーティションは既に稼働中の HDD と同じように区切られている)
Device Start End Sectors Size Type
/dev/sdb1 2048 1050623 1048576 512M EFI System
/dev/sdb2 1050624 3871100927 3870050304 1.8T Linux filesystem
/dev/sdb3 3871100928 3904292863 33191936 15.8G Linux swap
- マウント情報
$ mount
/dev/sda1 on /boot/efi type vfat (rw,relatime,fmask=0077,dmask=0077,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro)
/dev/sda2 on / type ext4 (rw,relatime,errors=remount-ro,data=ordered)
全体の流れ
やる前に必ず、稼働中の HDD のバックアップを取っておく。
何が起きても責任は取れません!!
今回は、ブート領域の sda1 とシステム(/)の sda2 をそれぞれ RAID1 構成にしたい。
まず、新しく追加した HDD(/dev/sdb1, /dev/sdb2)のみで RAID デバイスを作成する。
次に、作成した RAID デバイスにファイルシステムを作成し、稼働中の/dev/sda からデータをコピーする。
RAID デバイスから起動できるように、/etc/fstab, GRUB の設定を行う。
最後に、現在稼働中の HDD(/dev/sda1, /dev/sda2)を RAID に組み込む。
※結果的にブート領域の sda1 を RAID にした場合、どうやってもシステムが立ち上がらなくなってしまったため、途中で RAID を解除し、システム(/)の sda2 のみ RAID1 構成としました。ですが記録のため、やったことはすべて残しておきます。
実際の作業
RAID デバイスの作成
$ sudo mdadm --create /dev/md0 --level=1 --raid-devices=2 missing /dev/sdb1
$ sudo mdadm --create /dev/md1 --level=1 --raid-devices=2 missing /dev/sdb2
# 確認
$ cat /proc/mdstat
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 sdb1[1]
523264 blocks super 1.2 [2/1] [_U]
md1 : active raid1 sdb2[1]
1934893056 blocks super 1.2 [2/1] [_U]
bitmap: 15/15 pages [60KB], 65536KB chunk
unused devices: <none>
ファイルシステムの作成
$ mkfs.vfat /dev/md0
$ mkfs.ext4 -L RAID-ROOT /dev/md1
稼働中の HDD から RAID デバイスにデータをコピー
- /boot/efi
$ sudo mkdir -p /mnt/new-raid/boot/efi
$ sudo mount /dev/md0 /mnt/new-raid/boot/efi
$ sudo rsync -avxHAXS --delete --progress /boot/efi/ /mnt/new-raid/boot/efi
- /(root)
$ sudo mount /dev/md1 /mnt/new-raid
$ sudo rsync -avxHAXS --delete --progress / /mnt/new-raid/
MD RAID のマッピング先を固定
$ sudo mdadm --detail --scan
ARRAY /dev/md/hoge:1 metadata=1.2 name=hoge:1 UUID=06c434d3:be2cc863:fd13e1fa:84059071
ARRAY /dev/md/hoge:0 metadata=1.2 name=hoge:0 UUID=446f6e87:d0864059:df0776c2:39103420
上記を/etc/mdadm/mdadm.conf に追記。ここでの UUID は追加した HDD(/dev/sdb)のものとなっている。
fstab の編集
/dev/md0, /dev/md1 というデバイス名はシステムを再起動すると/dev/md126, /dev/md127 などに変わってしまう。そのため、それぞれの UUID を確認する。
$ sudo blkid
/dev/md0: SEC_TYPE="msdos" UUID="4731-2EAE" TYPE="vfat"
/dev/md1: LABEL="RAID-ROOT" UUID="c600bc95-84a6-42f4-9259-f05654ba5945" TYPE="ext4"
$ sudo vim /mnt/new-raid/etc/fstab
#以下を記述
UUID=4731-2EAE /boot/efi vfat umask=0077 0 1
UUID=c600bc95-84a6-42f4-9259-f05654ba5945 / ext4 errors=remount-ro 0 1
GRUB(GNU GRand Unified Bootloader)の設定
$ cd /mnt/new-raid
$ sudo mount -t proc proc proc/
$ sudo mount -t sysfs sys sys/
$ sudo mount -o bind /dev dev/
$ sudo mount -t devpts pts dev/pts/
$ sudo chroot /mnt/new-raid
$ vim etc/default/grub
# 以下の行を追加 (UUIDに/dev/md1を設定)
GRUB_CMDLINE_LINUX="root=UUID=c600bc95-84a6-42f4-9259-f05654ba5945 raid=auto"
変更を反映させる。
$ sudo update-grub
ここまで来たら、稼働中の HDD(/dev/sda)を抜いて、RAID デバイス(/dev/sdb)単体で動作するか確認する。
RAID デバイスから起動
起動せず BIOS の画面に入ってしまう・・・orz
GRUB の再インストールとか色々試したが、どうあがいても解決しないので、正常に動作する HDD(/dev/sda)で立ち上げ直し、結局ブート領域の RAID を解除した...orz
$ sudo mdadm --stop /dev/md0
sda1 の内容を sdb1 にコピー
$ sudo dd if=/dev/sda1 of=/dev/sdb1 bs=512
また、RAID-ROOT 内の fstab を編集し、boot の部分を以下のように書き変えた。
/dev/sda1 /boot/efi vfat umask=0077 0 1
再び sda を抜いて、sdb 単体で起動する。すると、 GRUB コンソールに入った。
正常に動いていた時の/boot/efi/EFI/ubuntu/grub.cfg の内容を参考に、以下を指定した。
grub> set root=(md/1)
grub> linux /boot/vmlinuz-4.15.0-197-generic root=UUID=c600bc95-84a6-42f4-9259-f05654ba5945
grub> initrd /boot/initrd.img-4.15.0-197-generic
grub> boot
システムが立ち上がった。
$ mount
/dev/sda1 on /boot/efi type vfat (rw,relatime,fmask=0077,dmask=0077,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro)
/dev/md1 on / type ext4 (rw,relatime,errors=remount-ro,data=ordered)
再起動したときに再び GRUB コンソールに入らないように修復する。
$ sudo grub-mkconfig -o /boot/efi/EFI/ubuntu/grub.cfg
これでとりあえず RAID デバイス単体で起動することができるようになった。(boot 領域は RAID 解除してしまったが...)
元々稼働していた HDD を RAID に組み込む
この先は後戻りできません! バックアップ漏れがないか最終確認!!
$ sudo mdadm /dev/md1 --add /dev/sda2
同期の進捗確認
$ sudo cat /proc/mdstat
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
md1 : active raid1 sda2[2] sdb2[1]
1934893056 blocks super 1.2 [2/1] [_U]
[>....................] recovery = 0.6% (11754752/1934893056) finish=173.4min speed=184807K/sec
bitmap: 15/15 pages [60KB], 65536KB chunk
unused devices: <none>
同期が完了したら sda, sdb が共に active sync になっているか確認
$ sudo mdadm --detail /dev/md1
/dev/md1:
Version : 1.2
Creation Time : Fri Feb 10 09:34:04 2023
Raid Level : raid1
Array Size : 1934893056 (1845.26 GiB 1981.33 GB)
Used Dev Size : 1934893056 (1845.26 GiB 1981.33 GB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent
Intent Bitmap : Internal
Update Time : Fri Feb 17 15:09:30 2023
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
Consistency Policy : bitmap
Name : hoge:1 (local to host hoge)
UUID : 06c434d3:be2cc863:fd13e1fa:84059071
Events : 219762
Number Major Minor RaidDevice State
2 8 2 0 active sync /dev/sda2
1 8 18 1 active sync /dev/sdb2
参考 URL
おまけ ChatGPTの活用
私自身は今回行ったようなLinuxやらRAIDやらインフラ周りのことは全然詳しくないので、かなり苦労しました。つまずいたり、ググっても中々目的の情報が得られなかったときChatGPT君が相談相手になってくれました。
以下、やりとりを一部抜粋。
まあ、バシッと正しい答えを教えてくれることもあれば、なんかトンチンカンなことを言ってくることもありましたが、困ったときになにか取っ掛かりを示してくれるありがたい存在でした。
これからもよろしく、ChatGPT先輩!