RAID再構築
今回も無事RMAで新しいUSBメモリに交換してもらえた
故障したUSBメモリはRMAで交換を申し込んでおいたのだが、先日Transcendから新しいUSBメモリが届いたので、今週末はRAIDの再構築に取り掛かった。
と言っても、以前のRAIDは崩壊してしまったので、新たに構築する場合と手順は殆ど変わらない。基本的には以下の作業メモどおりに行っていくだけだ(作業メモを残しておくことや、バックアップを取っておくことは大切だね)。
- USBメモリでRAID 5を構築(1)
- USBメモリでRAID 5を構築(2)
- USBメモリでRAID 5を構築(3)
- USBメモリでRAID 5を構築(4)
- USBメモリでRAID 5を構築・スクラビング
- USBメモリでRAID 5を構築・RAIDから起動(ブート)できるようにする
ただし、最初に構築したときにはUSBメモリ3本だったところ、今回は1本増設した後なので、USBメモリ4本で構築するのが異なる。
1. 交換したUSBメモリの特定
MicroSDを、RAIDから起動(ブート)できるようにする前のバックアップに戻し、Raspberry PiをMicroSDだけで起動させた。新しいUSBメモリは既にUSBハブに挿してある。
# ls -l /dev/sd*
brw-rw---- 1 root disk 8, 0 7月 1 11:41 /dev/sda
brw-rw---- 1 root disk 8, 1 7月 1 11:41 /dev/sda1
brw-rw---- 1 root disk 8, 16 7月 1 11:41 /dev/sdb
brw-rw---- 1 root disk 8, 17 7月 1 11:41 /dev/sdb1
brw-rw---- 1 root disk 8, 32 7月 1 11:41 /dev/sdc
brw-rw---- 1 root disk 8, 33 7月 1 11:41 /dev/sdc1
brw-rw---- 1 root disk 8, 48 7月 1 11:41 /dev/sdd
brw-rw---- 1 root disk 8, 49 7月 1 11:41 /dev/sdd1
|
故障したUSBメモリを交換したばかりの状態が上記。すべてのデバイスに/dev/sd*1があり、どれが交換したUSBメモリか判別がつかない。先ずはどれが交換した新しいUSBメモリか特定しなければならない。
# fdisk -l /dev/sda
Disk /dev/sda: 58.9 GiB, 63199772672 bytes, 123437056 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x00000000
Device Boot Start End Sectors Size Id Type
/dev/sda1 2048 123437055 123435008 58.9G fd Linux raid autodetect
|
これはパーティションタイプから、RAIDを構成していたUSBメモリであると判る。
# fdisk -l /dev/sdb
Disk /dev/sdb: 57.6 GiB, 61848158208 bytes, 120797184 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x00000000
Device Boot Start End Sectors Size Id Type
/dev/sdb1 448 120797183 120796736 57.6G c W95 FAT32 (LBA)
|
このデバイスsdbはパーティションタイプがFAT32なので、これが交換したUSBメモリだと判る。これをRAID用のパーティションに設定しなおす。
2. パーティション再設定
FAT32にフォーマットされているパーティションを削除して、RAID用のパーティションに再設定する。これはUSBメモリでRAID 5を構築(1)で行っているのと全く同じ。
# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.25.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): d
Selected partition 1
Partition 1 has been deleted.
Command (m for help): n
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p):
Using default response p.
Partition number (1-4, default 1): 1
First sector (2048-120797183, default 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-120797183, default 120797183):
Created a new partition 1 of type 'Linux' and of size 57.6 GiB.★以前より1.3GiBもサイズが小さいが、何故だろう・・・
Command (m for help): l
0 Empty 24 NEC DOS 81 Minix / old Lin bf Solaris
1 FAT12 27 Hidden NTFS Win 82 Linux swap / So c1 DRDOS/sec (FAT-
2 XENIX root 39 Plan 9 83 Linux c4 DRDOS/sec (FAT-
3 XENIX usr 3c PartitionMagic 84 OS/2 hidden C: c6 DRDOS/sec (FAT-
4 FAT16 <32M 40 Venix 80286 85 Linux extended c7 Syrinx
5 Extended 41 PPC PReP Boot 86 NTFS volume set da Non-FS data
6 FAT16 42 SFS 87 NTFS volume set db CP/M / CTOS / .
7 HPFS/NTFS/exFAT 4d QNX4.x 88 Linux plaintext de Dell Utility
8 AIX 4e QNX4.x 2nd part 8e Linux LVM df BootIt
9 AIX bootable 4f QNX4.x 3rd part 93 Amoeba e1 DOS access
a OS/2 Boot Manag 50 OnTrack DM 94 Amoeba BBT e3 DOS R/O
b W95 FAT32 51 OnTrack DM6 Aux 9f BSD/OS e4 SpeedStor
c W95 FAT32 (LBA) 52 CP/M a0 IBM Thinkpad hi eb BeOS fs
e W95 FAT16 (LBA) 53 OnTrack DM6 Aux a5 FreeBSD ee GPT
f W95 Ext'd (LBA) 54 OnTrackDM6 a6 OpenBSD ef EFI (FAT-12/16/
10 OPUS 55 EZ-Drive a7 NeXTSTEP f0 Linux/PA-RISC b
11 Hidden FAT12 56 Golden Bow a8 Darwin UFS f1 SpeedStor
12 Compaq diagnost 5c Priam Edisk a9 NetBSD f4 SpeedStor
14 Hidden FAT16 <3 61 SpeedStor ab Darwin boot f2 DOS secondary
16 Hidden FAT16 63 GNU HURD or Sys af HFS / HFS+ fb VMware VMFS
17 Hidden HPFS/NTF 64 Novell Netware b7 BSDI fs fc VMware VMKCORE
18 AST SmartSleep 65 Novell Netware b8 BSDI swap fd Linux raid auto
1b Hidden W95 FAT3 70 DiskSecure Mult bb Boot Wizard hid fe LANstep
1c Hidden W95 FAT3 75 PC/IX be Solaris boot ff BBT
1e Hidden W95 FAT1 80 Old Minix
Command (m for help): t
Selected partition 1
Hex code (type L to list all codes): fd
Changed type of partition 'Linux' to 'Linux raid autodetect'.
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Re-reading the partition table failed.: デバイスもしくはリソースがビジー状態です
The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8).
|
何だか「デバイスもしくはリソースがビジー状態です」と警告され、カーネルが古いテーブルを使用していると言われたが、確認してみると、
# fdisk -l /dev/sdb
Disk /dev/sdb: 57.6 GiB, 61848158208 bytes, 120797184 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x00000000
Device Boot Start End Sectors Size Id Type
/dev/sdb1 2048 120797183 120795136 57.6G fd Linux raid autodetect
|
無事にRAID用パーティションが作られていたので良しとしよう。(もしかしたら、以前のRAID設定の残骸が残っていたのが悪いのかも。今となっては手遅れだが・・・サイズが以前のものより小さいのも気になるが、これはこれで良い(*1)。)
3. デバイス名の固定
udevルールファイルに記述するため、serial情報を抽出。念のため、/dev/sdb以外のserialも抽出しておく。
# udevadm info -a -n /dev/sda | grep serial
ATTRS{serial}=="35X1O77QDI8K8UZ7"
ATTRS{serial}=="3f980000.usb"
# udevadm info -a -n /dev/sdb | grep serial
ATTRS{serial}=="882RUYHTOHWTZALM" ★今回交換したUSBメモリはコレ
ATTRS{serial}=="3f980000.usb"
# udevadm info -a -n /dev/sdc | grep serial
ATTRS{serial}=="55F61HE3NQYMG17D"
ATTRS{serial}=="3f980000.usb"
# udevadm info -a -n /dev/sdd | grep serial
ATTRS{serial}=="55WWWN4CFK04UUMU"
ATTRS{serial}=="3f980000.usb"
|
udebルールファイルを更新する。
# cd /etc/udev/rules.d/
# ls -l
-rw-r--r-- 1 root root 114 3月 18 2016 40-scratch.rules
-rw-r--r-- 1 root root 983 3月 21 2016 99-com.rules
-rw-r--r-- 1 root root 352 8月 13 2016 99-usbmem.rules
|
更新するのは上記の"99-usbmem.rules" ファイル。交換するのは/dev/usbmc なので、そのserialを/dev/sdbのものに変更する。
# vi 99-usbmem.rules
KERNEL=="sd*", SUBSYSTEMS=="usb", ATTRS{serial}=="55WWWN4CFK04UUMU", SYMLINK+="usbma%n"
KERNEL=="sd*", SUBSYSTEMS=="usb", ATTRS{serial}=="55F61HE3NQYMG17D", SYMLINK+="usbmb%n"
KERNEL=="sd*", SUBSYSTEMS=="usb", ATTRS{serial}=="882RUYHTOHWTZALM", SYMLINK+="usbmc%n"
KERNEL=="sd*", SUBSYSTEMS=="usb", ATTRS{serial}=="35X1O77QDI8K8UZ7", SYMLINK+="usbmd%n"
|
一旦再起動してから/dev/usbmcを見てみる。
# ls -l /dev/usbm*
lrwxrwxrwx 1 root root 3 7月 6 20:37 /dev/usbma -> sdd
lrwxrwxrwx 1 root root 4 7月 6 20:37 /dev/usbma1 -> sdd1
lrwxrwxrwx 1 root root 3 7月 6 20:37 /dev/usbmb -> sdc
lrwxrwxrwx 1 root root 4 7月 6 20:37 /dev/usbmb1 -> sdc1
lrwxrwxrwx 1 root root 3 7月 6 20:37 /dev/usbmc -> sdb
lrwxrwxrwx 1 root root 4 7月 6 20:37 /dev/usbmc1 -> sdb1
lrwxrwxrwx 1 root root 3 7月 6 20:37 /dev/usbmd -> sda
lrwxrwxrwx 1 root root 4 7月 6 20:37 /dev/usbmd1 -> sda1
# udevadm info -a -n /dev/usbmc | grep serial
ATTRS{serial}=="882RUYHTOHWTZALM"
ATTRS{serial}=="3f980000.usb"
|
大丈夫そうだ。
4. 過去にRAIDアレイに使用していたUSBメモリの中身を完全に消去する
# mdadm --zero-superblock /dev/sda1
# mdadm --zero-superblock /dev/sdc1
# mdadm --zero-superblock /dev/sdd1
|
5. RAID構成情報ファイルを無効化して再起動
# mv /etc/mdadm/mdadm.conf /etc/mdadm/mdadm.conf.bak
# shutdown -r now
|
6. RAID 5を構成する
# mdadm --create /dev/md0 --chunk=128 --level=5 --raid-devices=4 /dev/usbma1 /dev/usbmb1 /dev/usbmc1 /dev/usbmd1
mdadm: largest drive (/dev/usbma1) exceeds size (60364800K) by more than 1%
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
|
チャンクサイズはOSをRAIDに移すことを想定して、最初から小さめの128KiBに設定した。何故か/dev/usbma1(/dev/sdd1)だけ少しばかりサイズが大きいような事を言われた(今回のUSBメモリのサイズが少し小さいのが原因か?)が、構わずRAIDアレイを構築。
進行状況を見るには、
# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sda1[4] sdb1[2] sdc1[1] sdd1[0]
181094400 blocks super 1.2 level 5, 128k chunk, algorithm 2 [4/3] [UUU_]
[>....................] recovery = 3.2% (1933716/60364800) finish=110.0min speed=8850K/sec
unused devices: <none>
|
完了まで110分かかると言っているので、制限速度を上げてみる。
# echo 400000 >/proc/sys/dev/raid/speed_limit_min
# echo 400000 >/proc/sys/dev/raid/speed_limit_max
# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sda1[4] sdb1[2] sdc1[1] sdd1[0]
181094400 blocks super 1.2 level 5, 128k chunk, algorithm 2 [4/3] [UUU_]
[=>...................] recovery = 5.8% (3550260/60364800) finish=106.3min speed=8901K/sec
unused devices: <none>
|
あんまり変わらないね。気長に待つしかないか。今夜はこのまま放置して就寝し、翌朝になって見たところ、
# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sda1[4] sdb1[2] sdc1[1] sdd1[0]
181094400 blocks super 1.2 level 5, 128k chunk, algorithm 2 [4/4] [UUUU]
unused devices: <none>
|
正常に終了していた。
7. RAID構成情報を記録
先ず「5. RAID構成情報ファイルを無効化して再起動」で無効化した"/etc/mdstat/mdadm.conf" をバックアップから戻し、最終行にあるARRAY行を削除する(以下ではsedで削除している)。
# cd /etc/mdstat
# cp -p mdadm.conf.bak mdadm.conf
# sed -e '/^ARRAY/d' <mdadm.conf >mdadm.conf.tmp
|
その後、構成情報を追加して"/etc/mdstat/mdadm.conf" を置き換える。
# mdadm --detail --scan >> mdadm.conf.tmp
# mv mdadm.conf.tmp mdadm.conf
# cat mdadm.conf
# mdadm.conf
#
# Please refer to mdadm.conf(5) for information about this file.
#
# by default (built-in), scan all partitions (/proc/partitions) and all
# containers for MD superblocks. alternatively, specify devices to scan, using
# wildcards if desired.
#DEVICE partitions containers
# auto-create devices with Debian standard permissions
CREATE owner=root group=disk mode=0660 auto=yes
# automatically tag new arrays as belonging to the local system
HOMEHOST
# instruct the monitoring daemon where to send mail alerts
MAILADDR root
# definitions of existing MD arrays
# This configuration was auto-generated on Sat, 30 Jul 2016 11:12:07 +0900 by mkconf
ARRAY /dev/md0 metadata=1.2 name=RaspberryPi3:0 UUID=17985ef6:bcf33e3e:c7dfb8a2:63c6255e
|
8. ファイルシステムの作成
# mkfs -t ext4 /dev/md0
mke2fs 1.43.3 (04-Sep-2016)
Creating filesystem with 45273600 4k blocks and 11321344 inodes
Filesystem UUID: 575d45de-b045-4114-a642-3761d8a27f76
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
|
9. マウントしてみる
# mount /dev/md0 /media
# df -k
ファイルシス 1K-ブロック 使用 使用可 使用% マウント位置
/dev/md0 177203052 61468 168070480 1% /media
|
10. "/etc/fstab"編集
UUIDを調べ、"/etc/fstab"でマウントするように記述。マウントポイントは"/media"。
# tune2fs -l /dev/md0 | grep UUID
Filesystem UUID: 575d45de-b045-4114-a642-3761d8a27f76
# vi /etc/fstab
UUID=575d45de-b045-4114-a642-3761d8a27f76 /media ext4 defaults,noatime,nofail 0 2
|
11. 再起動してマウントされるか確認
# shutdown -r now
# df -k
/dev/md0 177203052 61468 168070480 1% /media
|
大丈夫な様子。これでRAIDの再構築は完了したので、後はUSBメモリでRAID 5を構築・スクラビング、USBメモリでRAID 5を構築・RAIDから起動(ブート)できるようにするを行って作業完了。
(*1):USBメモリにはフラッシュメモリが使われているのだが、このフラッシュメモリには寿命(書き変え回数の上限)がある。そのため、寿命が尽きそうなメモリセルがあると、それを自動的に予備のメモリセルに代替することで、USBメモリとしての寿命を延ばすような仕組みが組み込まれている。この予備のメモリセルにどの程度のサイズを割り当てておくかは、メーカー、製品や製品世代によっても様々らしい。そのため今回の新しいUSBメモリは、以前より予備のメモリセルの容量を増やしたのではないかと想像される。
また、RAIDの故障したデバイスを置き換える際、新しいデバイスの容量は故障したデバイスのサイズと全く同じか、それ以上でなくてはならない。RAIDを構成する際は最もサイズの小さいデバイスに合わせて構成されるはずなので、今回はサイズが1.3GiB小さくなった新しいUSBメモリに合わせて構成されたはずである。今後、またUSBメモリの故障が発生した際の事を考えると、1.3GiB程度の余裕を持たせておくのは良い考えとも言えよう。
|