2021年3月13日 星期六

用 badblocks 在 Linux 檢查磁碟壞軌

因為放在 google 教育帳號的影片要逃難了,

累積錄了好幾年的公視節目有好幾TB,

趁外接硬碟特價買了 Seagate 的 12TB。

如果複製到一半才發現有壞軌就麻煩了,

還沒放資料前所以先整顆做壞軌掃瞄。

找了好多篇,

原來 ArchLinux 的 wiki 內的 badblocks 就有詳細的說明,

這裡就記下我的流程。


1.確認硬碟路徑

是sdc 這顆,所以位置在 /dev/sdc

#lsblk

NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT

sda      8:0    0 447.1G  0 disk
├─sda1   8:1    0 282.4M  0 part /boot
├─sda2   8:2    0   200G  0 part
├─sda3   8:3    0 509.9M  0 part
└─sda4   8:4    0 246.4G  0 part /

sdc      8:32   0 149.1G  0 disk


2.先查詢硬碟 block 大小

以前是 512bytes ,

但是新的後來都是 4k,

看 I/O size 這行

#fdisk -x /dev/sdc

Disk /dev/sdc: 149.05 GiB, 160041885696 bytes, 312581808 sectors
Disk model: ST9160314AS     
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


4k 硬碟會是

Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes


3.測試硬碟讀寫速度

用來設定一次要幾個 block,加快測試速度

結果 56.77MB/s

#hdparm -t /dev/sdc

dev/sdc:                                                                                                            Timing buffered disk reads: 172 MB in  3.03 seconds =  56.77 MB/sec


4.計算block 數

用比56.77MB小一點的 50MB/s 算,

512bytes 是 0.5k

50*1024/0.5 = 102400


5.執行指令

date:顯示目前時間,用來確認開始的時間

time:計算執行多久

badblocks:掃描程式

-w:破壞性寫入測試,比非破壞性快,反正硬碟裡面沒資料

-s:顯示進度

-v:詳細顯示所有訊息,偵測到壞軌時顯示到螢幕上

-b: 設定 block 大小,步驟2查到是512

-c:一次處理的 block 數量,步驟4計算出102400

-p:檢查幾才沒發現錯誤才停止,預設0表示首次檢查完就停止

-o:將壞軌資料寫入到檔案 ~/Desktop/badblock-list

/dev/sdc:檢查 /dev/sdc

#date;time sudo badblocks -wsv -b 512 -c 102400 -p 0  /dev/scd -o ~/Desktop/badblock-list;date


沒有留言:

張貼留言