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 : [raid6] [raid5] [raid4]
- md0 : active raid5 sdb1[5] sde1[4] sdc1[1] sdd1[2]
- 1464758784 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/3] [_UUU]
- [>....................] recovery = 0.0% (182140/488252928) finish=759.2min speed=10714K/sec
- bitmap: 4/4 pages [16KB], 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移除硬碟- 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。
|