遠隔地にある Raspberry Pi 3B+ の4つ全てのUSBポートに128GBのUSBストレージ、Sandisk Cruzer Ultra Flair (SDCZ73-128G-G46)を挿して構成している RAID10 に障害が発生したので、復旧を試みました。
RAID10システム構成
前回webminを入れたことで見付かったRAID10障害、RAID10の2本降格は崖っぷちを意味します。障害発生時のディスク交換を鑑み、USBストレージ4本共同じ機種なので障害発生時に正しく個体識別出来るよう、予めシリアルナンバの下3桁をラベリングしています。
Raspberry Pi 3B+に入っているOSは次の通り、セットアップ当時のRaspbian Jessieのままです。
1 2 3 4 5 6 7 8 |
$ lsb_release -a No LSB modules are available. Distributor ID: Raspbian Description: Raspbian GNU/Linux 8.0 (jessie) Release: 8.0 Codename: jessie $ uname -a Linux homepi2 4.9.35-v7+ #1014 SMP Fri Jun 30 14:47:43 BST 2017 armv7l GNU/Linux |
障害の症状確認
早速ソフトウェアRAIDの現状を確認してみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
$ sudo mdadm --detail /dev/md0 /dev/md0: Version : 1.2 Creation Time : Wed Jul 12 10:46:43 2017 Raid Level : raid10 Array Size : 242483200 (231.25 GiB 248.30 GB) Used Dev Size : 121241600 (115.63 GiB 124.15 GB) Raid Devices : 4 Total Devices : 2 Persistence : Superblock is persistent Intent Bitmap : Internal Update Time : Sun Aug 9 14:40:12 2020 State : clean, degraded Active Devices : 2 Working Devices : 2 Failed Devices : 0 Spare Devices : 0 Layout : near=2 Chunk Size : 128K Name : homepi2:0 (local to host homepi2) UUID : fa7c5a8a:eafc7c8f:54c8ae68:86cff222 Events : 1220963 Number Major Minor RaidDevice State 0 0 0 0 removed 1 8 0 1 active sync set-B /dev/sda 4 0 0 4 removed 3 8 32 3 active sync set-B /dev/sdc $ cat /proc/mdstat Personalities : [raid10] md0 : active raid10 sda[1] sdc[3] 242483200 blocks super 1.2 128K chunks 2 near-copies [4/2] [_U_U] bitmap: 2/2 pages [8KB], 65536KB chunk unused devices: <none> |
抜けてしまっているのは、 /dev/sdb と /dev/sdd の2本であることは判りました。ダメ元で単に再追加させてみますが、ちょっと妙な理由で何度試行しても失敗します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
$ sudo mdadm /dev/md0 --add /dev/sdd1 mdadm: /dev/sdd1 not large enough to join array $ sudo mdadm /dev/md0 --add /dev/sdb1 mdadm: /dev/sdb1 not large enough to join array $ sudo mdadm /dev/md0 --add /dev/sdb1 /dev/sdd1 mdadm: /dev/sdb1 not large enough to join array $ sudo mdadm --stop /dev/md0 mdadm: stopped /dev/md0 $ sudo mdadm --assemble --verbose /dev/md0 mdadm: looking for devices for /dev/md0 mdadm: no RAID superblock on /dev/sdd1 mdadm: no RAID superblock on /dev/sdc1 mdadm: no RAID superblock on /dev/sdb1 mdadm: no RAID superblock on /dev/sda1 mdadm: no RAID superblock on /dev/mmcblk0p2 mdadm: no RAID superblock on /dev/mmcblk0p1 mdadm: no RAID superblock on /dev/mmcblk0 mdadm: /dev/sdd is identified as a member of /dev/md0, slot 0. mdadm: /dev/sdc is identified as a member of /dev/md0, slot 3. mdadm: /dev/sdb is identified as a member of /dev/md0, slot 2. mdadm: /dev/sda is identified as a member of /dev/md0, slot 1. mdadm: added /dev/sdd to /dev/md0 as 0 (possibly out of date) mdadm: added /dev/sdb to /dev/md0 as 2 (possibly out of date) mdadm: added /dev/sdc to /dev/md0 as 3 mdadm: added /dev/sda to /dev/md0 as 1 mdadm: /dev/md0 has been started with 2 drives (out of 4). |
ここでUSBストレージの損傷であれば、I/Oエラーっぽいのが頻発するのですが、ログを確認しても類似するログエントリは無いので、抜けてしまったUSBストレージの再利用に望みはありそう。
結果的に再追加出来ない敗因は、このRAIDを組んだ際、各ディスク同じ機種だからとパーティショニングをせず、サイズいっぱいに自動設定としてしまったこと。将来の障害発生時の代替品調達を考えると、サイズ少し小さめの無難な容量でパーティションを切り、そのRAID構成とするのが、HDDであってもちょっとしたセオリーのはずでした。
もうRAID構成を単純に戻せないことと、幸い再利用可能と思われるディスクが2本あることから、次のようなシナリオで障害復旧を目指すことにします。
- はぐれディスク2本でRAID6アレイを2本足りない状態で新設する(RAID6には最低ディスク4本要)。
- RAID10アレイからRAID6アレイへrynscデータコピー。
- RAID10アレイを破壊、構成していたディスク2本を初期化してRAID6アレイへ合流。
- RAID6アレイはリビルド後、RAID6に必要な最低ディスク数確保につき、正常状態へ復帰。
- 今後の再発防止。
0.USBディスクのシリアル番号とドライブレターの照合
一応万が一に備え、現在抜けてしまっているディスクのシリアル番号を調べておきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
$ sudo blkid /dev/mmcblk0p1: SEC_TYPE="msdos" LABEL="boot" UUID="70F7-FA1D" TYPE="vfat" PARTUUID="5e7f1329-01" /dev/mmcblk0p2: UUID="3598ef8e-09be-47ef-9d01-f24cf61dff1d" TYPE="ext4" PARTUUID="5e7f1329-02" /dev/md0: UUID="5aa0cb3c-c728-45da-b08d-ed4c9689403d" TYPE="ext4" /dev/mmcblk0: PTUUID="5e7f1329" PTTYPE="dos" /dev/sda: PTUUID="6edb98f7-2c72-464e-a69c-25218b009b18" PTTYPE="gpt" /dev/sdb: PTUUID="395fb330-e4e3-4c87-965f-9120ed6d0ac8" PTTYPE="gpt" /dev/sdc: PTUUID="f7ffbeb2-e5a2-47c3-a8f7-4bb0cca72062" PTTYPE="gpt" $ lsusb Bus 001 Device 007: ID 0781:5591 SanDisk Corp. Bus 001 Device 006: ID 0781:5591 SanDisk Corp. Bus 001 Device 005: ID 0781:5591 SanDisk Corp. Bus 001 Device 004: ID 0781:5591 SanDisk Corp. Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub $ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sdd 8:48 1 115.7G 0 disk sdb 8:16 1 115.7G 0 disk sdc 8:32 1 115.7G 0 disk └─md0 9:0 0 231.3G 0 raid0 /mnt/md0 sda 8:0 1 115.7G 0 disk └─md0 9:0 0 231.3G 0 raid0 /mnt/md0 mmcblk0 179:0 0 14.9G 0 disk ├─mmcblk0p2 179:2 0 14.8G 0 part / └─mmcblk0p1 179:1 0 63M 0 part /boot $ usb-devices T: Bus=01 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=480 MxCh= 1 D: Ver= 2.00 Cls=09(hub ) Sub=00 Prot=01 MxPS=64 #Cfgs= 1 P: Vendor=1d6b ProdID=0002 Rev=04.09 S: Manufacturer=Linux 4.9.35-v7+ dwc_otg_hcd S: Product=DWC OTG Controller S: SerialNumber=3f980000.usb C: #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=0mA I: If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub T: Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 2 Spd=480 MxCh= 5 D: Ver= 2.00 Cls=09(hub ) Sub=00 Prot=02 MxPS=64 #Cfgs= 1 P: Vendor=0424 ProdID=9514 Rev=02.00 C: #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=2mAI: If#= 0 Alt= 1 #EPs= 1 Cls=09(hub ) Sub=00 Prot=02 Driver=hub T: Bus=01 Lev=02 Prnt=02 Port=00 Cnt=01 Dev#= 3 Spd=480 MxCh= 0 D: Ver= 2.00 Cls=ff(vend.) Sub=00 Prot=01 MxPS=64 #Cfgs= 1 P: Vendor=0424 ProdID=ec00 Rev=02.00 C: #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=2mA I: If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=ff Driver=smsc95xx T: Bus=01 Lev=02 Prnt=02 Port=01 Cnt=02 Dev#= 4 Spd=480 MxCh= 0 D: Ver= 2.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1 P: Vendor=0781 ProdID=5591 Rev=01.00 S: Manufacturer=SanDisk S: Product=Ultra USB 3.0 S: SerialNumber=4C530001160511110024 C: #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=224mA I: If#= 0 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage T: Bus=01 Lev=02 Prnt=02 Port=02 Cnt=03 Dev#= 5 Spd=480 MxCh= 0 D: Ver= 2.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1 P: Vendor=0781 ProdID=5591 Rev=01.00 S: Manufacturer=SanDisk S: Product=Ultra USB 3.0 S: SerialNumber=4C530001040511109482 C: #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=224mA I: If#= 0 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage T: Bus=01 Lev=02 Prnt=02 Port=03 Cnt=04 Dev#= 6 Spd=480 MxCh= 0 D: Ver= 2.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1 P: Vendor=0781 ProdID=5591 Rev=01.00 S: Manufacturer=SanDisk S: Product=Ultra USB 3.0 S: SerialNumber=4C531001600406117233 C: #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=224mA I: If#= 0 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage T: Bus=01 Lev=02 Prnt=02 Port=04 Cnt=05 Dev#= 7 Spd=480 MxCh= 0 D: Ver= 2.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1 P: Vendor=0781 ProdID=5591 Rev=01.00 S: Manufacturer=SanDisk S: Product=Ultra USB 3.0 S: SerialNumber=4C530001060406120064 C: #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=224mA I: If#= 0 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage |
と色々思いつくままにコマンド試しますが、ドライブレターとシリアルナンバが紐付けられた状態を確認出来るものはありません( usb-devices は、シリアルナンバとUSBポート番号の紐付けまで)。次の lshw でようやく確認することが出来ましたが、デフォルトでは入っていないのでインストールが必要でした。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
$ sudo lshw -class disk *-disk description: SCSI Disk product: Ultra USB 3.0 vendor: SanDisk physical id: 0.0.0 bus info: scsi@0:0.0.0 logical name: /dev/sda version: 1.00 serial: 4C530001160511110024 size: 115GiB (124GB) capabilities: removable configuration: ansiversion=6 logicalsectorsize=512 sectorsize=512 *-medium physical id: 0 logical name: /dev/sda size: 115GiB (124GB) capabilities: gpt-1.00 partitioned partitioned:gpt configuration: guid=6edb98f7-2c72-464e-a69c-25218b009b18 *-disk description: SCSI Disk product: Ultra USB 3.0 vendor: SanDisk physical id: 0.0.0 bus info: scsi@1:0.0.0 logical name: /dev/sdb version: 1.00 serial: 4C530001040511109482 size: 115GiB (124GB) capabilities: removable configuration: ansiversion=6 logicalsectorsize=512 sectorsize=512 *-medium physical id: 0 logical name: /dev/sdb size: 115GiB (124GB) capabilities: gpt-1.00 partitioned partitioned:gpt configuration: guid=395fb330-e4e3-4c87-965f-9120ed6d0ac8 *-disk description: SCSI Disk product: Ultra USB 3.0 vendor: SanDisk physical id: 0.0.0 bus info: scsi@2:0.0.0 logical name: /dev/sdc version: 1.00 serial: 4C531001600406117233 size: 115GiB (124GB) capabilities: removable configuration: ansiversion=6 logicalsectorsize=512 sectorsize=512 *-medium physical id: 0 logical name: /dev/sdc size: 115GiB (124GB) capabilities: gpt-1.00 partitioned partitioned:gpt configuration: guid=f7ffbeb2-e5a2-47c3-a8f7-4bb0cca72062 *-disk description: SCSI Disk product: Ultra USB 3.0 vendor: SanDisk physical id: 0.0.0 bus info: scsi@3:0.0.0 logical name: /dev/sdd version: 1.00 serial: 4C530001060406120064 size: 115GiB (124GB) capabilities: removable configuration: ansiversion=6 logicalsectorsize=512 sectorsize=512 *-medium physical id: 0 logical name: /dev/sdd size: 115GiB (124GB) |
以上より個体は次のように特定されました。恒久的なダメージを受けている場合は、シリアル下3桁をラベリングしたストレージを現地作業員に交換してもらいます。
- /dev/sda 4C530001160511110024 md0 member
- /dev/sdb 4C530001040511109482 removed
- /dev/sdc 4C531001600406117233 md0 member
- /dev/sdd 4C530001060406120064 removed
1.ディスク2本でRAID6新設
まず、はぐれた2本のディスクを初期化、念の為 superblock も消去します。
1 2 3 4 5 6 7 8 9 10 11 12 |
$ sudo sgdisk -Z /dev/sdb GPT data structures destroyed! You may now partition the disk using fdisk or other utilities. $ sudo sgdisk -Z /dev/sdd Creating new GPT entries. GPT data structures destroyed! You may now partition the disk using fdisk or other utilities. $ sudo mdadm --zero-superblock /dev/sdb mdadm: ARRAY line /dev/md0 has no identity information. mdadm: Unrecognised md component device - /dev/sdb $ sudo mdadm --zero-superblock /dev/sdd mdadm: ARRAY line /dev/md0 has no identity information. mdadm: Unrecognised md component device - /dev/sdd |
次に parted を使い、 sdb をディスクサイズ小さめでパーティショニングします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
$ sudo parted /dev/sdb GNU Parted 3.2 Using /dev/sdb Welcome to GNU Parted! Type 'help' to view a list of commands. (parted) mklabel New disk label type? gpt (parted) p Model: SanDisk Ultra USB 3.0 (scsi) Disk /dev/sdb: 124GB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags (parted) mkpart Partition name? []? cruzer File system type? [ext2]? ext4 Start? 0% End? 97% (parted) p Model: SanDisk Ultra USB 3.0 (scsi) Disk /dev/sdb: 124GB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 1049kB 120GB 120GB ext4 cruzer (parted) q Information: You may need to update /etc/fstab. |
こうして作成した sdb のパーティション情報をそっくりそのまま sdd へ複製します(デバイス表記順に注意。 sgdisk -R [先] [元] )。この時UUIDもコピーされてしまうので、別途再生成を忘れずに( sgdisk -G )。
1 2 3 4 5 6 7 8 9 10 11 12 |
$ sudo sgdisk -R /dev/sdd /dev/sdb The operation has completed successfully. $ sudo parted /dev/sdd print Model: SanDisk Ultra USB 3.0 (scsi) Disk /dev/sdd: 124GB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 1049kB 120GB 120GB cruzer $ sudo sgdisk -G /dev/sdd The operation has completed successfully. |
いよいよRAID6の作成です。ここで4本中、まだ参加しない2本( /dev/sda1 と /dev/sdd1 )は missing にしておきます。
1 2 3 4 5 6 7 8 |
$ sudo mdadm --verbose --create /dev/md6 --level=raid6 --raid-devices=4 missing /dev/sdb1 missing /dev/sdd1 mdadm: layout defaults to left-symmetric mdadm: layout defaults to left-symmetric mdadm: chunk size defaults to 512K mdadm: size set to 117601280K mdadm: automatically enabling write-intent bitmap on large array mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md6 started. |
コマンド自体は特にエラーなく成功したので、ステータスを確認。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
$ sudo mdadm --detail /dev/md6 mdadm: ARRAY line /dev/md0 has no identity information. /dev/md6: Version : 1.2 Creation Time : Mon Aug 10 11:48:32 2020 Raid Level : raid6 Array Size : 235202560 (224.31 GiB 240.85 GB) Used Dev Size : 117601280 (112.15 GiB 120.42 GB) Raid Devices : 4 Total Devices : 2 Persistence : Superblock is persistent Intent Bitmap : Internal Update Time : Mon Aug 10 11:48:32 2020 State : clean, degraded Active Devices : 2 Working Devices : 2 Failed Devices : 0 Spare Devices : 0 Layout : left-symmetric Chunk Size : 512K Name : homepi2:6 (local to host homepi2) UUID : b9bcbbba:264d89dd:d5723e3b:d5ff1e44 Events : 0 Number Major Minor RaidDevice State 0 0 0 0 removed 1 8 17 1 active sync /dev/sdb1 4 0 0 4 removed 3 8 49 3 active sync /dev/sdd1 $ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sdd 8:48 1 115.7G 0 disk └─sdd1 8:49 1 112.2G 0 part └─md6 9:6 0 224.3G 0 raid6 sdb 8:16 1 115.7G 0 disk └─sdb1 8:17 1 112.2G 0 part └─md6 9:6 0 224.3G 0 raid6 sdc 8:32 1 115.7G 0 disk └─md0 9:0 0 231.3G 0 raid0 /mnt/md0 sda 8:0 1 115.7G 0 disk └─md0 9:0 0 231.3G 0 raid0 /mnt/md0 mmcblk0 179:0 0 14.9G 0 disk ├─mmcblk0p2 179:2 0 14.8G 0 part / └─mmcblk0p1 179:1 0 63M 0 part /boot $ cat /proc/mdstat Personalities : [raid10] [raid0] [raid6] [raid5] [raid4] md6 : active raid6 sdd1[3] sdb1[1] 235202560 blocks super 1.2 level 6, 512k chunk, algorithm 2 [4/2] [_U_U] bitmap: 0/1 pages [0KB], 65536KB chunk md0 : active raid0 sda[1] sdc[3] 242483200 blocks super 1.2 128k chunks unused devices: <none> |
2.古いRAID10アレイから新しいRAID6アレイへデータコピー
出来上がった /dev/md6 にファイルシステムを作成し、一時的にマウントします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
$ sudo mkfs -t ext4 /dev/md6 mke2fs 1.43.3 (04-Sep-2016) Creating filesystem with 58800640 4k blocks and 14704640 inodes Filesystem UUID: 2cd10f04-06e0-497b-b150-3e7f2de9179f Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000, 7962624, 11239424, 20480000, 23887872 Allocating group tables: done Writing inode tables: done Creating journal (262144 blocks): done Writing superblocks and filesystem accounting information: done $ cd /mnt $ sudo mkdir md6 $ sudo mount /dev/md6 /mnt/md6 $ sudo chown pi:pi md6 $ sudo chmod 775 md6 $ df -h Filesystem Size Used Avail Use% Mounted on /dev/md0 228G 81G 136G 38% /mnt/md0 /dev/md6 220G 61M 209G 1% /mnt/md6 $ sudo chown pi:pi md6 $ sudo chmod 775 md6 $ ls -la drwxrwxr-x 38 pi pi 4096 Sep 29 2019 md0 drwxrwxr-x 2 pi pi 4096 Aug 10 12:00 md6 |
rsync でサクっとコピーします。計測し忘れましたが、USB接続な割にはさほど時間が掛からなかった印象です。
1 2 3 4 5 6 7 8 9 10 |
$ rsync -av --delete --exclude lost+found /mnt/md0/ /mnt/md6/ sending incremental file list .. .. sent 86,790,444,897 bytes received 461,784 bytes 7,304,094.82 bytes/sec total size is 86,767,603,758 speedup is 1.00 $ df -h Filesystem Size Used Avail Use% Mounted on /dev/md0 228G 81G 136G 38% /mnt/md0 /dev/md6 220G 81G 128G 39% /mnt/md6 |
3.古いRAIDアレイを破壊し構成ディスクを新RAIDアレイへ合流
新しいRAIDアレイの中身に問題ないことが確認されたので、古いRAID10アレイを止めます。
1 2 3 4 5 6 7 8 |
$ sudo mdadm --stop /dev/md0 mdadm: stopped /dev/md0 $ cat /proc/mdstat Personalities : [raid10] [raid0] [raid6] [raid5] [raid4] md6 : active raid6 sdd1[3] sdb1[1] 235202560 blocks super 1.2 level 6, 512k chunk, algorithm 2 [4/2] [_U_U] bitmap: 1/1 pages [4KB], 65536KB chunk unused devices: <none> |
同様に構成ディスクを初期化します。
1 2 3 4 5 6 7 |
$ sudo mdadm --zero-superblock /dev/sda /dev/sdc mdadm: Unrecognised md component device - /dev/sda mdadm: Unrecognised md component device - /dev/sdc $ sudo sgdisk -Z /dev/sda GPT data structures destroyed! You may now partition the disk using fdisk or other utilities. $ sudo sgdisk -Z /dev/sdc GPT data structures destroyed! You may now partition the disk using fdisk or other utilities. |
既にRAID6を構成している sdb からパーティション情報を複製し、UUIDを再生成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
$ sudo sgdisk -R /dev/sda /dev/sdb The operation has completed successfully. $ sudo sgdisk -R /dev/sdc /dev/sdb The operation has completed successfully. $ sudo sgdisk -G /dev/sda The operation has completed successfully. $ sudo sgdisk -G /dev/sdc The operation has completed successfully. $ sudo parted /dev/sda print Model: SanDisk Ultra USB 3.0 (scsi) Disk /dev/sda: 124GB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 1049kB 120GB 120GB cruzer $ sudo parted /dev/sdc print Model: SanDisk Ultra USB 3.0 (scsi) Disk /dev/sdc: 124GB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 1049kB 120GB 120GB cruzer $ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sdd 8:48 1 115.7G 0 disk └─sdd1 8:49 1 112.2G 0 part └─md6 9:6 0 224.3G 0 raid6 /mnt/md6 sdb 8:16 1 115.7G 0 disk └─sdb1 8:17 1 112.2G 0 part └─md6 9:6 0 224.3G 0 raid6 /mnt/md6 sdc 8:32 1 115.7G 0 disk └─sdc1 8:33 1 112.2G 0 part sda 8:0 1 115.7G 0 disk └─sda1 8:1 1 112.2G 0 part $ sudo blkid /dev/sdb1: UUID="b9bcbbba-264d-89dd-d572-3e3bd5ff1e44" UUID_SUB="3c90447f-ec10-e4eb-6c88-0fb2784d3675" LABEL="homepi2:6" TYPE="linux_raid_member" PARTLABEL="cruzer" PARTUUID="30b0bf53-9c74-4b8c-b223-3ad6a47ab425" /dev/sdd1: UUID="b9bcbbba-264d-89dd-d572-3e3bd5ff1e44" UUID_SUB="0b5339c4-71d3-7b2e-f5ed-f95ddf722e43" LABEL="homepi2:6" TYPE="linux_raid_member" PARTLABEL="cruzer" PARTUUID="76a5b43e-83f8-4c55-b0d8-08e124748d35" /dev/md6: UUID="2cd10f04-06e0-497b-b150-3e7f2de9179f" TYPE="ext4" /dev/sda1: PARTLABEL="cruzer" PARTUUID="649b226a-163b-4ff6-82a5-003b62d098d3" /dev/sdc1: PARTLABEL="cruzer" PARTUUID="2ed4b054-a592-4f0d-b8f6-bf43539dc1fe" |
いよいよRAID6アレイへ合流させます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
$ sudo mdadm --verbose --add /dev/md6 /dev/sda1 /dev/sdc1 mdadm: added /dev/sda1 mdadm: added /dev/sdc1 $ sudo mdadm --detail /dev/md6 /dev/md6: Version : 1.2 Creation Time : Mon Aug 10 11:48:32 2020 Raid Level : raid6 Array Size : 235202560 (224.31 GiB 240.85 GB) Used Dev Size : 117601280 (112.15 GiB 120.42 GB) Raid Devices : 4 Total Devices : 4 Persistence : Superblock is persistent Intent Bitmap : Internal Update Time : Mon Aug 10 16:36:57 2020 State : clean, degraded, recovering Active Devices : 2 Working Devices : 4 Failed Devices : 0 Spare Devices : 2 Layout : left-symmetric Chunk Size : 512K Rebuild Status : 0% complete Name : homepi2:6 (local to host homepi2) UUID : b9bcbbba:264d89dd:d5723e3b:d5ff1e44 Events : 1247 Number Major Minor RaidDevice State 5 8 33 0 spare rebuilding /dev/sdc1 1 8 17 1 active sync /dev/sdb1 4 8 1 2 spare rebuilding /dev/sda1 3 8 49 3 active sync /dev/sdd1 |
4.RAIDリビルドを経て正常復帰
上記で add されたことで即リビルドが開始されます。おおよそ10分で1%進捗するペースでしたので、
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
$ sudo mdadm --detail /dev/md6 /dev/md6: Version : 1.2 Creation Time : Mon Aug 10 11:48:32 2020 Raid Level : raid6 Array Size : 235202560 (224.31 GiB 240.85 GB) Used Dev Size : 117601280 (112.15 GiB 120.42 GB) Raid Devices : 4 Total Devices : 4 Persistence : Superblock is persistent Intent Bitmap : Internal Update Time : Tue Aug 18 12:45:02 2020 State : clean Active Devices : 4 Working Devices : 4 Failed Devices : 0 Spare Devices : 0 Layout : left-symmetric Chunk Size : 512K Name : homepi2:6 (local to host homepi2) UUID : b9bcbbba:264d89dd:d5723e3b:d5ff1e44 Events : 7439 Number Major Minor RaidDevice State 5 8 33 0 active sync /dev/sdc1 1 8 17 1 active sync /dev/sdb1 4 8 1 2 active sync /dev/sda1 3 8 49 3 active sync /dev/sdd1 $ cat /proc/mdstat Personalities : [raid6] [raid5] [raid4] md6 : active raid6 sdc1[5] sdd1[3] sda1[4] sdb1[1] 235202560 blocks super 1.2 level 6, 512k chunk, algorithm 2 [4/4] [UUUU] bitmap: 1/1 pages [4KB], 65536KB chunk unused devices: <none> $ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sdd 8:48 1 115.7G 0 disk └─sdd1 8:49 1 112.2G 0 part └─md6 9:6 0 224.3G 0 raid6 /mnt/md6 sdb 8:16 1 115.7G 0 disk └─sdb1 8:17 1 112.2G 0 part └─md6 9:6 0 224.3G 0 raid6 /mnt/md6 sdc 8:32 1 115.7G 0 disk └─sdc1 8:33 1 112.2G 0 part └─md6 9:6 0 224.3G 0 raid6 /mnt/md6 sda 8:0 1 115.7G 0 disk └─sda1 8:1 1 112.2G 0 part └─md6 9:6 0 224.3G 0 raid6 /mnt/md6 $ sudo blkid /dev/sda1: UUID="b9bcbbba-264d-89dd-d572-3e3bd5ff1e44" UUID_SUB="37b9b580-4907-2600-d33a-53a05d7002f7" LABEL="homepi2:6" TYPE="linux_raid_member" PARTLABEL="cruzer" PARTUUID="649b226a-163b-4ff6-82a5-003b62d098d3" /dev/sdb1: UUID="b9bcbbba-264d-89dd-d572-3e3bd5ff1e44" UUID_SUB="3c90447f-ec10-e4eb-6c88-0fb2784d3675" LABEL="homepi2:6" TYPE="linux_raid_member" PARTLABEL="cruzer" PARTUUID="30b0bf53-9c74-4b8c-b223-3ad6a47ab425" /dev/sdc1: UUID="b9bcbbba-264d-89dd-d572-3e3bd5ff1e44" UUID_SUB="b6c47c23-dcc8-3553-9e79-19dfb434723a" LABEL="homepi2:6" TYPE="linux_raid_member" PARTLABEL="cruzer" PARTUUID="2ed4b054-a592-4f0d-b8f6-bf43539dc1fe" /dev/sdd1: UUID="b9bcbbba-264d-89dd-d572-3e3bd5ff1e44" UUID_SUB="0b5339c4-71d3-7b2e-f5ed-f95ddf722e43" LABEL="homepi2:6" TYPE="linux_raid_member" PARTLABEL="cruzer" PARTUUID="76a5b43e-83f8-4c55-b0d8-08e124748d35" /dev/md6: UUID="2cd10f04-06e0-497b-b150-3e7f2de9179f" TYPE="ext4" |
翌日忘れずに mdadm.conf と /etc/fstab の設定を済ませ、再起動しても新しいアレイがマウントされ、共有フォルダとして機能することを確認しました。
1 2 3 4 5 6 7 8 9 |
$ sudo bash # mdadm --detail --scan >> /etc/mdadm/mdadm.conf # exit $ cat /etc/mdadm/mdadm.conf # This configuration was auto-generated on Fri, 07 Jul 2017 15:57:54 +0800 by mkconf ARRAY /dev/md6 metadata=1.2 name=homepi2:6 UUID=b9bcbbba:264d89dd:d5723e3b:d5ff1e44 $ cat /etc/fstab /dev/md6 /mnt/md6 ext4 defaults,nofail,noatime 0 3 |
5.今後の再発防止
今後RAIDアレイに異常が見付かった場合は、速やかにメールでお知らせしてくれるよう設定します。まずはRaspberry Piからメールを送信出来るよう、先人さまによるこちらの記事を参考にsSMTPを導入します(鳴謝!!)。
1 2 3 4 5 6 7 8 |
$ sudo apt-get install -y ssmtp The following packages will be REMOVED: exim4-base exim4-config exim4-daemon-light The following NEW packages will be installed: ssmtp 0 upgraded, 1 newly installed, 3 to remove and 0 not upgraded. $ ls -al /usr/sbin/sendmail lrwxrwxrwx 1 root root 5 Jul 20 2014 /usr/sbin/sendmail -> ssmtp |
設定ファイル /etc/ssmtp/ssmtp.conf では、メール送信元に個人用のGmailを用い、次のように設定しました。
1 2 3 4 5 6 |
root=EMAIL_ADDRESS mailhub=smtp.gmail.com:587 AuthUser=EMAIL_ADDRESS AuthPass=PASSWORD UseSTARTTLS=YES hostname=homepi2.local |
続いて mdadm.conf の設定です。こちらを参考にさせて頂きました。
mdadm が既にモニタモードで動いていることを確認し、 mdadm.conf に宛先メールアドレスを設定します。
1 2 3 4 5 6 7 8 |
$ ps -ax | grep mdadm 333 ? Ss 0:00 /sbin/mdadm --monitor --scan $ sudo nano /etc/mdadm/mdadm.conf # instruct the monitoring daemon where to send mail alerts MAILADDR ##DST_EMAIL_ADDRES## $ sudo /etc/init.d/mdadm restart |
テストメールを送信してみます。
1 |
$ sudo mdadm --monitor --scan --test -1 |
ほどなくして次のようなメールを受け取ることが出来ました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
TestMessage event on /dev/md6:homepi2 This is an automatically generated mail message from mdadm running on homepi2 A TestMessage event had been detected on md device /dev/md6. Faithfully yours, etc. P.S. The /proc/mdstat file currently contains the following: Personalities : [raid6] [raid5] [raid4] md6 : active raid6 sdc1[5] sdd1[3] sda1[4] sdb1[1] 235202560 blocks super 1.2 level 6, 512k chunk, algorithm 2 [4/4] [UUUU] bitmap: 0/1 pages [0KB], 65536KB chunk unused devices: <none> |
今回、RAID障害顛末を記録を目的として、敢えて丁寧にまとめておいた次第です。