絖綛 N@i.jp  昨日:00019694
 今日:00005494
 総計:00043544
keywords
管理者専用
  Post   Add link   Control Panel 































新しいトピック
最新:10/01 12:07


新しいコメント
最新:07/28 16:47






管理人へMAIL

プライバシーポリシー

RAID再構築

今回も無事RMAで新しいUSBメモリに交換してもらえた


 故障したUSBメモリはRMAで交換を申し込んでおいたのだが、先日Transcendから新しいUSBメモリが届いたので、今週末はRAIDの再構築に取り掛かった。
 と言っても、以前のRAIDは崩壊してしまったので、新たに構築する場合と手順は殆ど変わらない。基本的には以下の作業メモどおりに行っていくだけだ(作業メモを残しておくことや、バックアップを取っておくことは大切だね)。

  1. USBメモリでRAID 5を構築(1)
  2. USBメモリでRAID 5を構築(2)
  3. USBメモリでRAID 5を構築(3)
  4. USBメモリでRAID 5を構築(4)
  5. USBメモリでRAID 5を構築・スクラビング
  6. 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程度の余裕を持たせておくのは良い考えとも言えよう。


< 過去の記事 [ 7月の Raspberry Pi リスト ] 新しい記事 >

2018 calendar
7月
1234567
891011121314
15161718192021
22232425262728
293031


掲示板
最新:08/15 17:19


GsBlog was developed by GUSTAV, Copyright(C) 2003, Web Application Factory All Rights Reserved.