woff 發表於 2018-11-13 14:52:23

Linux Soft RAID 硬碟偵測、移除、更換硬碟動作

Linux 使用軟體陣列做 RAID ,之前都是硬碟直接掛掉,而這次是硬碟半殘,速度慢到炸掉,應該是快掛了,只是還沒掛,這種時候最麻煩...所以把遇到的情況、檢測方式形容一下,以防下次再次遇到~Linux Soft RAID1硬碟半殘的偵測確認、移除、更換硬碟動作一直都是正常的,但是突然間發現到編輯檔案的速度非常緩慢,但是其它操作又沒什麼感覺,大致如下:
[*]Vim 編輯檔案、貼上內容的速度慢到爆炸,砍檔案的速度極慢
[*]不過平常 cd 切換,cat / less 速度沒有影響
[*]主要是遇到有任何寫入行為,ex: apt install / remove.. 等等,都會爆慢
[*]同台機器,到其它顆硬碟的區域,一樣 Vim 編輯、貼上,都很快速 (註:這個當下沒有測試,是在最後測試完速度,在其它硬碟做驗證,就很明顯知道問題點)
猜想是硬碟問題,先做點測試 (下述用 RAID 1:md0 是對照此兩顆硬碟 /dev/sda, /dev/sdb)確認 RAID 1 兩顆硬碟的情況cat /proc/mdstat
Personalities :
md0 : active raid5 sdb1 sde1 sdc1 sdd1
      1464758784 blocks super 1.2 level 5, 512k chunk, algorithm 2
      [>....................]recovery =0.0% (182140/488252928) finish=759.2min speed=10714K/sec
      bitmap: 4/4 pages , 65536KB chunk

硬碟檢測
[*]$ sudo smartctl -a /dev/sda | less
[*]$ sudo smartctl -a /dev/sdb | less
[*]$ sudo badblocks -v /dev/sda # 這個會跑很久,當最後備案
測試看看硬碟速度
[*]$ sudo hdparm -Tt /dev/sda # or hdparm -t /dev/sda
/dev/sda:
Timing cached reads: 22328 MB in 1.99 seconds = 11195.77 MB/sec
Timing buffered disk reads: 380 MB in 3.01 seconds = 126.45 MB/sec
[*]$ sudo hdparm -Tt /dev/sdb
/dev/sdb:
Timing cached reads: 2 MB in 41.75 seconds = 49.05 kB/sec
Timing buffered disk reads: 2 MB in 6.81 seconds = 300.65 kB/sec/dev/sdb:
Timing cached reads: 2 MB in 8.71 seconds = 235.18 kB/sec
Timing buffered disk reads: 2 MB in 24.67 seconds = 83.03 kB/sec
確認 /dev/sdb 不是眼花或者系統偶爾太忙,所以多跑一次,確認真的很慢 (sda 是 MB/sec,sdb 是 kB/sec)到此幾乎已經確認是硬碟有問題查看硬碟規格(準備採購硬碟)
[*]$ sudo smartctl -a /dev/sdb | grep 'SATA'
SATA Version is: SATA 3.1, 6.0 Gb/s (current: 6.0 Gb/s)
[*]$ sudo hdparm -i /dev/sdb
[*]$ sudo hdparm /dev/sdb
從 RAID 1移除硬碟下述可以參考此篇:Debian Linux Software RAID還原實作
[*]cat /proc/mdstat # 查看 RAID 狀態,看起來都是正常,所以得要強制將有問題的硬碟下掉
[*]mdadm /dev/md0 --fail /dev/sdb1 # 因為硬碟還沒實際掛掉,所以需要先跟他說掛了
註:做完這個動作,速度馬上就快起來
[*]mdadm /dev/md0 --fail /dev/sdb1
mdadm: set /dev/sdb1 faulty in /dev/md0
[*]mdadm /dev/md0 --remove /dev/sdb1
mdadm: hot removed /dev/sdb1 from /dev/md0
[*]wipefs -a /dev/sdb1 # 避免系統重新自動掛載
/dev/sdb1: 4 bytes were erased at offset 0x00001000 (linux_raid_member): fc 4e 2b a9
[*]dmesg 會看到下述訊息:
md/raid1:md0: Disk failure on sdb1, disabling device.
md/raid1:md0: Operation continuing on 1 devices.
RAID1 conf printout:
--- wd:1 rd:2
disk 0, wo:0, o:1, dev:sda1
disk 1, wo:1, o:0, dev:sdb1
RAID1 conf printout:
--- wd:1 rd:2
disk 0, wo:0, o:1, dev:sda1
md: unbind<sdb1>
md: export_rdev(sdb1)
[*]vim /etc/fstab # 若有 swap 單獨磁區,要先註解掉
RAID 加入新硬碟
[*]將 sda 磁區複製到 sdb

[*]sudo sfdisk -d /dev/sda | sudo sfdisk /dev/sdb

[*]註:若硬碟不同款,這樣子切完後,可以再 fdisk /dev/sdb 修改容量
[*]sudo fdisk -l /dev/sda
[*]sudo fdisk -l /dev/sdb # 檢查看看有沒有一樣
[*]sudo mdadm --add /dev/md0 /dev/sdb1 # 就會開始 sync 了
[*]cat /proc/mdstat # 可以看 sync 進度

[*]剩餘空間給 swap # 這個可以隨興使用,因為兩顆硬碟大小可能不一樣(Soft RAID1)

[*]sudo mkswap /dev/sdb2 # 建立 swap 空間
[*]sudo swapon /dev/sdb2
[*]ls -lh /dev/disk/by-uuid
[*]vim /etc/fstab # 修改原本損毀的磁區, 改成新的
[*]註:通常軟體陣列,我會習慣在後面增加 swap 區域(依靠 swap 區域來做容量調節),避免硬碟大小不同時,會無法做 1:1 的 Raid 1。



頁: [1]
查看完整版本: Linux Soft RAID 硬碟偵測、移除、更換硬碟動作