HDDが死にかかってたので交換した話

なんとなくNASとして使っているCentOS7のPCにログインしたら、怪しげなログが出ていた。

 user@computer$ less messages-20200614 | grep “Jun 7 04:32:54”
Jun 7 04:32:54 nas kernel: ata2.00: exception Emask 0x0 SAct 0x78200000 SErr 0x0 action 0x0
Jun 7 04:32:54 nas kernel: ata2.00: irq_stat 0x40000008
Jun 7 04:32:54 nas kernel: ata2.00: failed command: READ FPDMA QUEUED
Jun 7 04:32:54 nas kernel: ata2.00: cmd 60/00:d8:80:f7:89/04:00:dc:00:00/40 tag 27 ncq 524288 in#012 res 41/40:00:d0:f9:89/00:04:dc:00:00/00 Emask 0x409 (media error)
Jun 7 04:32:54 nas kernel: ata2.00: status: { DRDY ERR }
Jun 7 04:32:54 nas kernel: ata2.00: error: { UNC }
Jun 7 04:32:54 nas kernel: ata2.00: configured for UDMA/133
Jun 7 04:32:54 nas kernel: sd 1:0:0:0: [sdb] FAILED Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
Jun 7 04:32:54 nas kernel: sd 1:0:0:0: [sdb] Sense Key : Medium Error [current] [descriptor]
Jun 7 04:32:54 nas kernel: sd 1:0:0:0: [sdb] Add. Sense: Unrecovered read error – auto reallocate failed
Jun 7 04:32:54 nas kernel: sd 1:0:0:0: [sdb] CDB: Read(10) 28 00 dc 89 f7 80 00 04 00 00
Jun 7 04:32:54 nas kernel: blk_update_request: I/O error, dev sdb, sector 3700029904
Jun 7 04:32:54 nas kernel: ata2: EH complete

たぶん死にかかってるな、ということで交換することにした。
部屋をごそごそしていたらWD Greenが発掘されたので、これに入れ替えることにした。

うちのsdbはこんな構造になっている。

 user@computer$ lsblk /dev/sdb
NAME            MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sdb               8:16   0   1.8T  0 disk
├─sdb1            8:17   0   190M  0 part
│ └─md0           9:0    0   190M  0 raid1 /boot
├─sdb2            8:18   0   1.9G  0 part
└─sdb3            8:19   0   1.8T  0 part
  └─md1           9:1    0   1.8T  0 raid1
    ├─vg0-lv0   253:0    0   100G  0 lvm   /
    ├─vg0-lv1   253:3    0   500G  0 lvm   /home
    ├─vg0-lv2   253:4    0   500G  0 lvm   /var/shared
    └─vg0-lv3   253:5    0 760.9G  0 lvm   /var

上記表示には出ていないがsdaも同じ構造をしていて、mdraidでRAID1を組んでいる。RAID1は宗教なので仕方がない。
md0が/bootで、md1がそれ以外である。ちなみにファイルサーバなので、ファイルサーバ用のディスクはこれとは別にsdcとsddもある。
sdbの構造に戻ると、sdb1はmd0として定義した後そのままext4でフォーマットして使っているものの、sdb3はmd1として定義したうえで今後どうとでもなるようにLVMで均してあり、その中で/homeと/var、/var/sharedなんかがある。
sdb2は余りの領域で、ここはswapにしている。

というわけでmdからsdbを切り離す。慈悲はない。


user@computer$ sudo mdadm –manage /dev/md0 –fail /dev/sdb1
mdadm: set /dev/sdb1 faulty in /dev/md0

user@computer$ sudo mdadm –manage /dev/md1 –fail /dev/sdb3
mdadm: set /dev/sdb3 faulty in /dev/md1

user@computer$ cat /proc/mdstat
Personalities : [raid1]
md2 : active raid1 sdd1[3] sdc1[2]
7813894471 blocks super 1.2 [2/2] [UU]
bitmap: 0/15 pages [0KB], 262144KB chunk

md0 : active raid1 sdb1[1](F) sda1[0]
194496 blocks super 1.0 [2/1] [U_]

md1 : active raid1 sdb3[2](F) sda3[0]
1951235072 blocks super 1.2 [2/1] [U_]
bitmap: 7/15 pages [28KB], 65536KB chunk

unused devices: <none>

swap以外のサイズをきっかり合わせられるように、shutdownの前にパーティション情報を取っておく。ただしきっかり合わせなくとも同期元のサイズより大きくしておけばRAID1は組めるので、大きめのディスクに意図的に交換したいときはあえて大きいサイズにする場合もある。


user@computer$ fdisk -l /dev/sdb

Disk /dev/sdb: 2000.4 GB, 2000398934016 bytes, 3907029168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O サイズ (最小 / 推奨): 4096 バイト / 4096 バイト
Disk label type: dos
ディスク識別子: 0x0008f4f3

デバイス ブート      始点        終点     ブロック   Id  システム
/dev/sdb1   *        2048      391167      194560   fd  Linux raid autodetect
/dev/sdb2      3903123456  3907028991     1952768   82  Linux swap / Solaris
/dev/sdb3          391168  3903123455  1951366144   fd  Linux raid autodetect

また、交換するディスクを間違わないようにシリアルナンバーを見ておく。


user@computer$ sudo hdparm -I /dev/sdb | head -n 8

/dev/sdb:

ATA device, with non-removable media
	Model Number:       WDC WD20EARS-00S8B1
	Serial Number:      WD-WC*********0
	Firmware Revision:  80.00A80
	Transport:          Serial, SATA 1.0a, SATA II Extensions, SATA Rev 2.5, SATA Rev 2.6

ここでshutdownしてディスク交換。

NASのくせにGreenかよ、と言われるかもしれないが壊れたらより大きいのに付け替えるので許して、と言おうと思ったもののNASの筐体はMicroserver N40Lでありブートディスクは2TBまでとか何かで見たのでダメかもしれない。USBブートにすればよいのですかね…

交換後、fdiskでsdbのサイズをきっかり合わせる。先頭領域の始点がfdiskの数値指定範囲だと揃えられなかったため、全体的にちょっとずつ後ろにずらす感じにしたというかせざるを得なかった。

最後にmdadmで新ディスクのパーティションをmd0とmd1に加えて終わり。

 user@computer$ sudo mdadm –add /dev/md0 /dev/sdb1
 user@computer$ sudo mdadm –add /dev/md1 /dev/sdb2

このあとそれぞれ自動的にrebuild動作が始まり、やがれsyncする。進捗はcat /proc/mdstat で確認。

おわり。

コメント

タイトルとURLをコピーしました