20240409145451 USB HDDをRAID5にする

serverraid

gdiskでパーティーションを作成。 USBなので起動するときに最初設定した場合と /dev/sda などの表示が異なることもありえるので、 後でGUIDを使って指定する。最初はとりあえず1つずつ挿してgdiskをすればよい。

中古だからかもしれないが、 MBRが書きこまれていたので削除する作業が必要だった。

# gdisk /dev/sda
GPT fdisk (gdisk) version 1.0.9

Partition table scan:
  MBR: MBR only
  BSD: not present
  APM: not present
  GPT: not present


***************************************************************
Found invalid GPT and valid MBR; converting MBR to GPT format
in memory. THIS OPERATION IS POTENTIALLY DESTRUCTIVE! Exit by
typing 'q' if you don't want to convert your MBR partitions
to GPT format!
***************************************************************


Command (? for help): o
This option deletes all partitions and creates a new protective MBR.
Proceed? (Y/N): Y
Command (? for help): w

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): Y
OK; writing new GUID partition table (GPT) to /dev/sdc.
Warning: The kernel is still using the old partition table.
The new table will be used at the next reboot or after you
run partprobe(8) or kpartx(8)
The operation has completed successfully.

上記終了後にpartition情報を書いた。

# gdisk /dev/sda 
GPT fdisk (gdisk) version 1.0.9

Partition table scan:
  MBR: not present
  BSD: not present
  APM: not present
  GPT: not present

Creating new GPT entries in memory.

Command (? for help): p
Disk /dev/sda: 11721045168 sectors, 5.5 TiB
Model: EZAZ-00ZGHB0    
Sector size (logical/physical): 512/4096 bytes
Disk identifier (GUID): 0578B29F-51A1-49C0-BE65-6956FBA95417
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 11721045134
Partitions will be aligned on 2048-sector boundaries
Total free space is 11721045101 sectors (5.5 TiB)

Number  Start (sector)    End (sector)  Size       Code  Name

Command (? for help): n
Partition number (1-128, default 1): [ENTER]
First sector (34-11721045134, default = 2048) or {+-}size{KMGTP}: [ENTER]
Last sector (2048-11721045134, default = 11721043967) or {+-}size{KMGTP}: [ENTER]
Current type is 8300 (Linux filesystem)
Hex code or GUID (L to show codes, Enter = 8300): fd00 <- linux raidを指定
Changed type of partition to 'Linux RAID'

Command (? for help): w

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): Y
OK; writing new GUID partition table (GPT) to /dev/sda.
The operation has completed successfully.

以上を3回くりかえす。

↓こんな感じになればOK。

# tree /dev/disk
...
├── by-partuuid
│   ├── 3fa55707-567f-4fcb-b391-1ad9ffbffab8 -> ../../sda1
│   ├── 6963ee24-45c4-410d-945a-32b611006e50 -> ../../sdb1
│   ├── 8649367f-4390-49e1-b389-a09c9033fdcb -> ../../nvme0n1p1
│   ├── bacd35fa-dfe7-43d1-8906-09069ae7b3e0 -> ../../sdc1
│   ├── e3d4c4c2-2e9d-49ad-859e-5824909a40fc -> ../../nvme0n1p2
│   └── f79f3a27-e396-4820-bc02-fd51e7e54bff -> ../../nvme0n1p3
...

この時点でうまくいかなくて再起動しようとしたら、インストール直後でUEFIの起動オーダーがUSBデバイスからになっていたため起動しなくなるという問題が発生。UEFIの設定を bootをnvmeにした。

# apt install mdadm
# mdadm --create /dev/md1 --level=5 --raid-devices=3 /dev/disk/by-partuuid/3fa55707-567f-4fcb-b391-1ad9ffbffab8 /dev/disk/by-partuuid/6963ee24-45c4-410d-945a-32b611006e50 /dev/disk/by-partuuid/bacd35fa-dfe7-43d1-8906-09069ae7b3e0 
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md1 started.
# mdadm --detail /dev/md1
/dev/md1:
           Version : 1.2
     Creation Time : Tue Apr  9 13:34:16 2024
        Raid Level : raid5
        Array Size : 11720777728 (10.92 TiB 12.00 TB)
     Used Dev Size : 5860388864 (5.46 TiB 6.00 TB)
      Raid Devices : 3
     Total Devices : 3
       Persistence : Superblock is persistent

     Intent Bitmap : Internal

       Update Time : Tue Apr  9 13:35:03 2024
             State : clean, degraded, recovering 
    Active Devices : 2
   Working Devices : 3
    Failed Devices : 0
     Spare Devices : 1

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : bitmap

    Rebuild Status : 0% complete

              Name : kinorr:1  (local to host kinorr)
              UUID : 40475448:83c77036:4a8b1907:85cab891
            Events : 10

    Number   Major   Minor   RaidDevice State
       0       8        1        0      active sync   /dev/sda1
       1       8       17        1      active sync   /dev/sdb1
       3       8       33        2      spare rebuilding   /dev/sdc1

できたっぽい。 この後、再起動しないと、mkfs.ext4device or resource busyをなってしまったので再起動した。

# mkfs.ext4 -L kinoraid5 /dev/md1 
mke2fs 1.47.0 (5-Feb-2023)
Creating filesystem with 2930194432 4k blocks and 366276608 inodes
Filesystem UUID: fcf8ecc4-59bc-4510-b0c0-adfde0cda386
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, 1934917632, 
        2560000000

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (262144 blocks): done
Writing superblocks and filesystem accounting information: done       

マウントは自動ではされないみたい。

# mkdir /mnt/raid-disk
# mount /dev/md1 /mnt/raid-disk

で、使えることを確認。 fstabに追加・・・はうまくいかなかった(外付けだから?理由は不明) systemdでマウントすることにした。

ファイル名とマウントポイントを一致させる必要があるなどややこしい。 (/mnt/hoge にマウントしたい場合は mnt-hoge.mount というファイル名にする必要があるらしい。) WantedBy= の所をギリギリまで遅くしている。

# cat /etc/systemd/system/raid.mount 
[Unit]
Description=Mout Raid USB HDD(delayed)

[Mount]
What=/dev/disk/by-uuid/fcf8ecc4-59bc-4510-b0c0-adfde0cda386
Where=/raid
Type=ext4
Options=defaults

[Install]
WantedBy=multi-user.target

cf. systemd で外付けディスクをマウントする話 - げっとシステムログ

Refs.