3TB HDDは混沌の隷也 ~ 死んだ3TBのHDDのバッドセクターを修復して復活 ~

4 min read

こんにちは、無能です。
一つ前の記事で絶望に浸っていた私ですが、かんたんに諦める男ではありません。
夏は終わりません。宿題が終わるまで______

事の経緯

なんか昨日、急にSSH接続が止まってGNU/Linuxがスタックしたような雰囲気になり、再起動したあとにsyslogをとりあえず確認しました。

Aug 27 04:03:55 localhost kernel: [2768521.366336] EXT4-fs (sdc1): error count since last fsck: 52
Aug 27 21:19:27 haturatu kernel: [   28.915465] EXT4-fs (sdc1): warning: mounting fs with errors, running e2fsck is recommended
Aug 27 21:24:30 haturatu kernel: [  332.803482] EXT4-fs (sdc1): error count since last fsck: 53
Aug 27 22:28:45 haturatu kernel: [    5.694598] EXT4-fs (sdc1): warning: mounting fs with errors, running e2fsck is recommended
Aug 27 22:33:55 haturatu kernel: [  316.412146] EXT4-fs (sdc1): error count since last fsck: 53
Aug 28 08:19:17 haturatu kernel: [    5.710007] EXT4-fs (sdc1): warning: mounting fs with errors, running e2fsck is recommended
Aug 28 08:24:39 haturatu kernel: [  316.427213] EXT4-fs (sdc1): error count since last fsck: 53

えっ

あれ

ん?

HDD 、盆に帰らず

fsckを試みる

とりあえずUSB-HDDで接続。

$ sudo fsck -f -y /dev/sdb

lsblkでディスクを確認したあとにとりあえず実行

727810) +(77856769--77859749) +(77987841--77990269) +(78118913--78121629) +(78249985--78252434) +(78381057--78383008) +(78512129--78515588) +(78643201--78644782) +(78774273--78776000) +(78905345--78907598) +(79036417--79038955) +(79167489--79169769) +(79298561--79300360) +(79429633--79431425) +(79560705--79562857) +(79691777--79695179) +(79822849--79857556) +(79953921--79960927) +(80084993--80113787) +140247041
Fix? yes

Padding at end of inode bitmap is not set. Fix? yes

Error reading block 32768 (入力/出力エラーです).  Ignore error? yes

Force rewrite? yes

Error writing block 32768 (入力/出力エラーです).  Ignore error? yes

Error reading block 98304 (入力/出力エラーです).  Ignore error? yes

ですよねーー!!!!!
はい過去に見たことある絶望のI/Oエラーです。

dmesgで見てみる

ちょっと割愛しますが、grep で該当ドライブの項目を確認します。

$ sudo dmesg | grep ' I/O error,' | grep "sdb"
[227123.296980] I/O error, dev sdb, sector 62916608 op 0x0:(READ) flags 0x83700 phys_seg 1 prio class 0
[227175.622027] I/O error, dev sdb, sector 78880 op 0x0:(READ) flags 0x80700 phys_seg 1 prio class 0
[227175.622087] I/O error, dev sdb, sector 62916624 op 0x0:(READ) flags 0x83700 phys_seg 14 prio class 0
[227459.286465] I/O error, dev sdb, sector 373295104 op 0x0:(READ) flags 0x80700 phys_seg 5 prio class 0
[227490.240900] I/O error, dev sdb, sector 377489408 op 0x0:(READ) flags 0x80700 phys_seg 4 prio class 0

あああ
心が壊れそうだよ、パトラッシュ。

ググる

過去の技術者様たちにあやかります。

LinuxのHDDに不良セクタが発生したので修復してみた

なんとなく読んで仕組みは理解しました。

こういう時は、このセクターに書き込みを行うと、HDDのファームウェアが代替だいたいセクターに置き換えてくれるはず。

らしい。 とりあえず焦りながらもdmesgの出力で出てきたセクターをひたすらに入れていきます。

$ cat secter.sh 
#!/bin/bash
sudo dd if=/dev/zero of=/dev/sdc bs=4k seek=$((62916608 / 8)) count=1
sudo dd if=/dev/zero of=/dev/sdc bs=4k seek=$((62916624 / 8)) count=1
sudo dd if=/dev/zero of=/dev/sdc bs=4k seek=$((373295104 / 8)) count=1
sudo dd if=/dev/zero of=/dev/sdc bs=4k seek=$((406849536 / 8)) count=1
sudo dd if=/dev/zero of=/dev/sdc bs=4k seek=$((411043840 / 8)) count=1
sudo dd if=/dev/zero of=/dev/sdc bs=4k seek=$((415238144 / 8)) count=1
sudo dd if=/dev/zero of=/dev/sdc bs=4k seek=$((419432448 / 8)) count=1
sudo dd if=/dev/zero of=/dev/sdc bs=4k seek=$((423626752 / 8)) count=1

ここも割愛してますが、fsck試してはI/Oエラーで抜き差ししてるのでsdb→sdc→sddとちょこちょこ変わってるのですがご了承ください。
とりあえずdmesgを流れめ出てきたセクターに対しスクリプト化したコマンドを一気に走らせた。
もっと短くやれるんでしょうが、こういうときに効率なんて考えてられません。泥臭い戦い方でもミスってドライブデータまるごとふっ飛ばすくらいだったらもはや泥水飲む勢いでやります。

そして、fsckへ・・・

なんか何度か同じセクターで実行しながら
Bad sectors playing hide and seek on my hard drive ここでsmartctlでもバッドセクターのチェックをしてくれるとのことで最初の方にやったんですが通らなく。
しかし何度か前述の通りの泥臭い戦いをちょっと行っていたら通るようになったので sudo smartctl -a /dev/sda, sudo smartctl -t short /dev/sdaを行ってうまく行き、また泥臭くを繰り返し・・・

$ sudo fsck -f -y /dev/sdd1
fsck from util-linux 2.40.2
e2fsck 1.47.1 (20-May-2024)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
Block bitmap differences:  +(7864320--7872543) +(7929856--7946227) +(7946240--7962599) +(46661632--46669855) +(50855936--50864159) +(51380224--51388447) +(51388796--51404769) +(51404800--51412989) +(51904512--51928992) +(51929026--51929058) +(51929088--51937274) +(52428800--52453339) +(52453376--52461542) +(52953088--52962248) +(52964143--52977649) +(52977664--52985847)
Fix? yes

うああああああああああああああああ!!!!!

復活!!!!

Image
まだどのファイルが壊れているか確認しきれていないですが1TB分のデータ大半戻ってきました。

と、先人の知恵というものは偉大だなと痛感した日でした。
さすがに朝にHDDが死んだことがわかって、当日に復旧させるとは思いもよらなかった一日です。
それでは。
またよろしくお願いします。