USBメモリsdc1に保存しているファイルをLibreOfficeで編集している際、保存できなかった。それ以降USBメモリをマウントできない。
対処testdiskを実行したが、効果なし。
# fsck -y /dev/sdc1
fsck from util-linux 2.31.1
e2fsck 1.44.1 (24-Mar-2018)
/dev/sdc1: recovering journal
Superblock needs_recovery flag is clear, but journal has data.
Run journal anyway? yes
fsck.ext4: Unknown code ____ 251 while recovering journal of /dev/sdc1
fsck.ext4: unable to set superblock flags on /dev/sdc1
/dev/sdc1: ********** WARNING: Filesystem still has errors **********
これで止まった。usbメモリを抜き差ししてマウントしてもできない。データを吸出しておく。SDDの余っている領域をusbメモリ以上の大きさにしてファイルシステムを作成。bsはバッファサイズ。usbメモリに問題があることは分かっているので、エラーになっても止まらないようにnoerror。syncはエラー箇所を0で埋める。
# dd if=/dev/sdc1 of=/dev/sda3 bs=4096 conv=sync,noerror
進捗確認
# ps -e | grep dd
2 ? 00:00:00 kthreadd
32605 pts/0 00:00:51 dd
# kill -USR1 32605
以降最後のコマンドで進捗を表示できる。
しばらく放置したらコマンドが終了した。データを吸い出した先をマウントしたらデータにアクセスできた。とりあえずデータが無くならずに済んだ。
編集していたファイルを開いたらロックファイルが壊れているとのことで、一旦読み取り専用で開き、それを閉じたらロックファイルが削除され、次から元通り使えた。
再度testdiskでdev/sdc1へアクセスしadvancedを選択。
Disk /dev/sdc - 31 GB / 29 GiB - CHS 30000 64 32
Partition Start End Size in sectors
Linux 1 0 1 29999 63 32 61437952
superblock 0, blocksize=4096 []
superblock 32768, blocksize=4096 []
superblock 98304, blocksize=4096 []
superblock 163840, blocksize=4096 []
superblock 229376, blocksize=4096 []
superblock 294912, blocksize=4096 []
superblock 819200, blocksize=4096 []
superblock 884736, blocksize=4096 []
superblock 1605632, blocksize=4096 []
superblock 2654208, blocksize=4096 []
To repair the filesystem using alternate superblock, run
fsck.ext4 -p -b superblock -B blocksize device
と表示されたので、
# fsck.ext4 -p -b 32768 -B 4096 /dev/sdc1
/dev/sdc1: Superblock needs_recovery flag is clear, but journal has data.
/dev/sdc1: Recovery flag not set in backup superblock, so running journal anyway.
/dev/sdc1: recovering journal
^Cfsck.ext4: Unknown code ____ 251 while recovering journal of /dev/sdc1
/dev/sdc1: ***** FILE SYSTEM WAS MODIFIED *****
usbメモリを抜き差ししたらsdf1に変わってた。クリックしてもマウントできない。
Silicon PowerとToshibaのUSBメモリは安定して動作している。名のあるメーカー品と安いのの違いか。
参考文献