ファイルサーバーのように大容量ストレージを使う場合は、HDD突然死の対策としてRAIDを組みます。
今回、Ubuntu22.04LTS上のHDD2基をRAID1で構築する機会がありましたので、備忘録として手順を記載しておきます。
参考:産業用SSDのように書き込み寿命が予測できるデバイスを採用する場合は、RAIDを組みません。民生SSDを採用する場合は、品質にばらつきがあるため、RAIDを組むことはあるようですが、HDDにくらべてコスパが高く付くため、あまり採用はされません。
前提
システム環境などは以下の前提で解説します。
- ZFS(RAID1)で構築されたProxmox8 VE上にゲストOSとしてUbuntu22.04を構築
- Ubuntu22.04LTS直下に同一仕様のHDDを2基設置(Proxmox8VEはパススルー)
- Ubuntu上のHDDはすべてデータドライブとして利用(ブートはしない)
RAID1構築手順
UbuntuにHDDを増設し、システム起動します。→HDD増設の仕方はこちらの記事も参照
aptでRAIDモジュールであるmdadmをインストールします。
$ sudo apt install mdadm
lsblkコマンドでストレージシステム状態の確認を行います。
root:/mnt# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sda 8:0 0 100G 0 disk tqsda1 8:1 0 1M 0 part tqsda2 8:2 0 513M 0 part /boot/efi mqsda3 8:3 0 99.5G 0 part / sdb 8:16 0 3.6T 0 disk /mnt/share sdc 8:32 0 3.6T 0 disk sdd 8:48 0 3.6T 0 disk sr0 11:0 1 3.2G 0 rom /media/kspn/Ubuntu 22.04 ja amd64
このシステムの場合、sdcとsddが新規増設した3.6TBの空ディスクとなります。
mdadmコマンドを用いて、sdcとsddでRAID1を構築します。
root:/mnt# mdadm --create /dev/md0 --level=raid1 --raid-devices=2 /dev/sdc /dev/sdd mdadm: /dev/sdc appears to contain an ext2fs file system size=3907018584K mtime=Wed Jul 24 12:05:40 2024 mdadm: Note: this array has metadata at the start and may not be suitable as a boot device. If you plan to store '/boot' on this device please ensure that your boot-loader understands md/v1.x metadata, or use --metadata=0.90 mdadm: /dev/sdd appears to contain an ext2fs file system size=3907018584K mtime=Wed Jul 24 12:06:13 2024 Continue creating array? y mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md0 started.
最後で/dev/md0 startedとなっていれば構築完了です。
cat /proc/mdstatでRAID状態を確認します。
[UU]となっていればRAIDは正常です。HDD異常時は[_U]や[U_]となります。
root:/mnt# cat /proc/mdstat Personalities : [raid1] md0 : active raid1 sdd[1] sdc[0] 3906886464 blocks super 1.2 [2/2] [UU] [>....................] resync = 0.1% (5513792/3906886464) finish=318.4min speed=204214K/sec bitmap: 30/30 pages [120KB], 65536KB chunk unused devices: <none>
構築したRAID1ドライブ(/dev/md0)をext4でフォーマットします。
root:/mnt# mkfs.ext4 /dev/md0 mke2fs 1.46.5 (30-Dec-2021) Discarding device blocks: done Creating filesystem with 976721616 4k blocks and 244187136 inodes Filesystem UUID: dc539a0a-0fbf-427d-964f-c863e32dbcc8 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
/mnt/share2にマウントし、通常のファイルシステムとして使えるようにします。
root:/mnt# mkdir share2 root:/mnt# mount /dev/md0 /mnt/share2 root:/mnt# chmod -R 777 share2 root:/mnt# ls share share2
dfでファイルシステム状態を確認します。
roo:/mnt# df -hT Filesystem Type Size Used Avail Use% Mounted on tmpfs tmpfs 391M 3.1M 388M 1% /run /dev/sda3 ext4 98G 9.1G 84G 10% / tmpfs tmpfs 2.0G 0 2.0G 0% /dev/shm tmpfs tmpfs 5.0M 0 5.0M 0% /run/lock /dev/sda2 vfat 512M 6.1M 506M 2% /boot/efi tmpfs tmpfs 391M 4.7M 387M 2% /run/user/1000 /dev/sr0 iso9660 3.2G 3.2G 0 100% /media/kspn/Ubuntu 22.04 ja amd64 /dev/sdb ext4 3.6T 149G 3.3T 5% /mnt/share /dev/md0 ext4 3.6T 28K 3.4T 1% /mnt/share2
恒久マウントの手順
blkidでRAID1のUUIDを調べます。(/dev/loop*は省略しています)
root:/home/kspn# blkid /dev/sda3: UUID="2d9f0fb3-8f8e-40ab-b000-6a27052d7170" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="a4db0316-d145-4f2f-bae1-3c1405b84953" /dev/sdd: UUID="b113ac8d-3a66-24ad-0521-ad7aeadcfb8f" UUID_SUB="1d3b524a-7b16-8810-76e6-3283d8fb0e93" LABEL="sws1200-samba:0" TYPE="linux_raid_member" /dev/md0: UUID="dc539a0a-0fbf-427d-964f-c863e32dbcc8" BLOCK_SIZE="4096" TYPE="ext4" /dev/sdb: LABEL="hdd1" UUID="9bba4181-8672-40ea-8832-d5790752df06" BLOCK_SIZE="4096" TYPE="ext4" /dev/sr0: BLOCK_SIZE="2048" UUID="2022-05-02-03-06-06-00" LABEL="Ubuntu 22.04 ja amd64" TYPE="iso9660" PTTYPE="PMBR" /dev/sdc: UUID="b113ac8d-3a66-24ad-0521-ad7aeadcfb8f" UUID_SUB="41171d57-5315-cf35-78be-75666316c3d6" LABEL="sws1200-samba:0" TYPE="linux_raid_member" /dev/sda2: UUID="CD9A-5A88" BLOCK_SIZE="512" TYPE="vfat" PARTLABEL="EFI System Partition" PARTUUID="2f97605f-5862-46a7-91a9-3b4807dd22b8" /dev/sda1: PARTUUID="eac2c0a3-5c88-4480-a227-a46c6b342fd9"
/dev/md0の「UUID="dc539a0a-0fbf-427d-964f-c863e32dbcc8"」を/etc/fstabに記載します。
root:/home/kspn# cat /etc/fstab # /etc/fstab: static file system information. # # Use 'blkid' to print the universally unique identifier for a # device; this may be used with UUID= as a more robust way to name devices # that works even if disks are added and removed. See fstab(5). # # <file system> <mount point> <type> <options> <dump> <pass> # / was on /dev/sda3 during installation UUID=2d9f0fb3-8f8e-40ab-b000-6a27052d7170 / ext4 errors=remount-ro 0 1 # /boot/efi was on /dev/sda2 during installation UUID=CD9A-5A88 /boot/efi vfat umask=0077 0 1 /swapfile none swap sw 0 0 #/dev/sdb 20240724 mounted UUID=9bba4181-8672-40ea-8832-d5790752df06 /mnt/share ext4 defaults #/dev/md0 20240724 mounted UUID=dc539a0a-0fbf-427d-964f-c863e32dbcc8 /mnt/share2 ext4 defaults
再起動してストレージとしてマウントされていることを確認します。
root:/home/kspn# df Filesystem 1K-blocks Used Available Use% Mounted on tmpfs 400096 14140 385956 4% /run /dev/sda3 102106072 10912660 85960568 12% / tmpfs 2000468 0 2000468 0% /dev/shm tmpfs 5120 0 5120 0% /run/lock /dev/sdb 3844551496 1914448620 1734735564 53% /mnt/share /dev/sda2 524252 6220 518032 2% /boot/efi /dev/md127 3844421432 334353464 3314707264 10% /mnt/share2 /dev/sr0 3347464 3347464 0 100% /media/kspn/Ubuntu 22.04 ja amd64 tmpfs 400092 2424 397668 1% /run/user/1000
ubuntuの仕様で再起動後は/dev/md0 -> /dev/md127に再付番されます。
以上でRAID1の構築は完了です。
HDD障害時の復旧方法については後日記載します。