X

Linux Soft RAID1 硬碟半殘的偵測確認、移除、更換硬碟動作

Linux 使用軟體陣列做 RAID 1,之前都是硬碟直接掛掉,而這次是硬碟半殘,速度慢到炸掉,應該是快掛了,只是還沒掛,這種時候最麻煩...

所以把遇到的情況、檢測方式形容一下,以防下次再次遇到~

Linux Soft RAID1 硬碟半殘的偵測確認、移除、更換硬碟動作

一直都是正常的,但是突然間發現到編輯檔案的速度非常緩慢,但是其它操作又沒什麼感覺,大致如下:

  1. Vim 編輯檔案、貼上內容的速度慢到爆炸,砍檔案的速度極慢
  2. 不過平常 cd 切換,cat / less 速度沒有影響
  3. 主要是遇到有任何寫入行為,ex: apt install / remove.. 等等,都會爆慢
  4. 同台機器,到其它顆硬碟的區域,一樣 Vim 編輯、貼上,都很快速 (註:這個當下沒有測試,是在最後測試完速度,在其它硬碟做驗證,就很明顯知道問題點)

猜想是硬碟問題,先做點測試 (下述用 RAID 1:md0 是對照此兩顆硬碟 /dev/sda, /dev/sdb)

確認 RAID 1 兩顆硬碟的情況

  • $ cat /proc/mdstat # 看起來都是正常,所以得要強制將有問題的硬碟下掉
    Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4]
    [raid10]
    md0 : active raid1 sdb1[3] sda1[2]
          1913930560 blocks super 1.2 [2/2] [UU]
    unused devices: <none>

硬碟檢測

  1. $ sudo smartctl -a /dev/sda | less
  2. $ sudo smartctl -a /dev/sdb | less
  3. $ sudo badblocks -v /dev/sda # 這個會跑很久,當最後備案

測試看看硬碟速度

  1. $ 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
  2. $ 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
  3. 註:另外遇到的情況,速度一樣快,但是出現下述訊息:
    Timing cached reads: 20672 MB in 2.00 seconds = 10345.24 MB/sec
    Timing buffered disk reads: read(2097152) returned 1196032 bytes
    此時記得 dmesg 看看有沒有更明顯的硬體錯誤訊息

確認 /dev/sdb 不是眼花或者系統偶爾太忙,所以多跑一次,確認真的很慢 (sda 是 MB/sec,sdb 是 kB/sec)

到此幾乎已經確認是硬碟有問題

查看硬碟規格(準備採購硬碟)

  1. $ sudo smartctl -a /dev/sdb | grep 'SATA'
    SATA Version is: SATA 3.1, 6.0 Gb/s (current: 6.0 Gb/s)
  2. $ sudo hdparm -i /dev/sdb
  3. $ sudo hdparm -I /dev/sdb
  4. $ sudo hdparm /dev/sdb

從 RAID 1 移除硬碟

下述可以參考此篇:Debian Linux Software RAID 1 還原實作

  1. cat /proc/mdstat # 查看 RAID 狀態,看起來都是正常,所以得要強制將有問題的硬碟下掉
  2. mdadm /dev/md0 --fail /dev/sdb1 # 因為硬碟還沒實際掛掉,所以需要先跟他說掛了
    註:做完這個動作,速度馬上就快起來
  3. mdadm /dev/md0 --fail /dev/sdb1
    mdadm: set /dev/sdb1 faulty in /dev/md0
  4. mdadm /dev/md0 --remove /dev/sdb1
    mdadm: hot removed /dev/sdb1 from /dev/md0
  5. wipefs -a /dev/sdb1 # 避免系統重新自動掛載
    /dev/sdb1: 4 bytes were erased at offset 0x00001000 (linux_raid_member): fc 4e 2b a9
  6. 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)
  7. vim /etc/fstab # 若有 swap 單獨磁區,要先註解掉

RAID 1 加入新硬碟

  1. 將 sda 磁區複製到 sdb
    1. sudo sfdisk -d /dev/sda | sudo sfdisk /dev/sdb
      • 註:若硬碟不同款,這樣子切完後,可以再 fdisk /dev/sdb 修改容量
    2. sudo fdisk -l /dev/sda
    3. sudo fdisk -l /dev/sdb # 檢查看看有沒有一樣
    4. sudo mdadm --add /dev/md0 /dev/sdb1 # 就會開始 sync 了
    5. cat /proc/mdstat # 可以看 sync 進度
  2. 剩餘空間給 swap # 這個可以隨興使用,因為兩顆硬碟大小可能不一樣(Soft RAID1)
    1. sudo mkswap /dev/sdb2 # 建立 swap 空間
    2. sudo swapon /dev/sdb2
    3. ls -lh /dev/disk/by-uuid
    4. vim /etc/fstab # 修改原本損毀的磁區, 改成新的
    5. 註:通常軟體陣列,我會習慣在後面增加 swap 區域(依靠 swap 區域來做容量調節),避免硬碟大小不同時,會無法做 1:1 的 Raid 1。

相關網頁

Tsung: 對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.
Related Post